본문 바로가기
CS/운영체제

7) 물리 메모리 관리

by 에드박 2020. 9. 16.

1. 메모리 관리의 복잡성

과거의 일괄 처리 시스템에서는 한 번에 한 가지 작업만 처리했기 때문에 메모리 관리가 어렵지 않았습니다.

하지만 오늘날의 시분할 시스템에서는 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되기 때문에

메모리 관리가 복잡합니다.

 

메모리 관리의 이중성

프로세스 입장에서 작업의 편리함과 관리자 입장에서 관리의 편리함이 충돌을 일으키는 것을 말합니다.
현대의 메모리 관리 시스템은 프로세스와 메모리 관리자의 상충되는 요구 사항을 완벽하게 처리합니다. 

 

2. 컴파일러

컴파일러는 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행할 수 있도록 해주는 언어 번역 프로그램입니다.

오류를 발견하고 코드를 최적화하기 위해 컴파일러를 사용합니다.
사용자가 소스코드를 작성하면 컴파일러는 컴파일 -> 목적 코드와 라이브러리 연결 -> 동적 라이브러리를 포함하여 최종 실행의 순서로 작동합니다.

 

컴파일러의 목적

  • 오류 발견
  • 코드 최적화
컴파일러와 인터프리터

저급언어 : 기계어와 어셈블리어와 같이 컴퓨터의 동작을 가장 직접적으로 표현한 언어입니다.
고급언어 : 저급언어와 반대되는 개념인 사용자가 이해하기 쉽게 프로그래밍 할 수 있는 언어로 C 언어와 자바가 대표적입니다.

컴파일러 : 소스 코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행합니다. C언어와 자바 등이 이 방식으로 프로그램을 실행합니다.
인터프리터 : 소스코드를 한 행씩 번역하여 실행합니다. 자바스크립트, 베이직 등이 이 방식으로 프로그램을 실행합니다.

 

3. 메모리 관리자의 정책

  • 가져오기 정책 : 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책입니다.
  • 배치 정책 : 가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책입니다.
  • 재배치 정책 : 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책입니다.

 

4. 절대 주소와 상대 주소

  • 절대 주소 : 실제 물리 주소를 가리키며 메모리 관리자 입장에서 바라본 주소입니다.
  • 사용자 영역이 시작되는 주소를 0번지로 변경하여 사용하는 주소입니다.

5. 메모리 오버레이

프로세스의 크기가 실제 메모리(물리 메모리)보다 클 때  전체 프로세스를 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법입니다.

 

6. 스왑 

메모리가 모자라서 쫒겨난 프로세스를 저장장치의 특별한 공간, 즉 스왑 영역에 모아두는 기법입니다.  스왑 영역에서 메모리로 데이터를 가져오는 작업은 스왑인(Swap-in), 메모리에서 스왑 영역으로 데이터를 내보내는 작업은 스왑아웃(Swap-out)이라고 합니다.

 

7. 메모리 분할 방식

  • 가변 분할 방식 : 프로세스의 크기에 따라 메모리를 나누는 것입니다.
  • 고정 분할 방식 : 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것입니다.
  • 버디 시스템 : 가변 분할 방식의 단점인 외부 단편화를 완화하는 방법입니다. 가변 분할 방식이지만 고정 분할 방식과 유사한 점이 있습니다.
버디 시스템의 작동 방식

버디 시스템의 특징은 가변 분할 방식과 고정 분할 방식의 중간 구조 라는 것입니다.
버디 시스템의 작동 방식은 다음과 같습니다.
1. 프로세스의 크기에 맞게 메모리를 1/2로 자르고 프로세스를 메모리에 배치합니다.
2. 나뉜 메모리의 각 구역에는 프로세스가 1개만 들어갑니다.
3. 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만듭니다.

가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉘며, 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없습니다.
메모리의 한 구역 내부에 조각이 생겨 내부 단편화가 발생합니다. 하지만 비슷한 크기의 덩어리가 서로 모여있어 통합하기가 쉽습니다.

 

8. 외부 단편화와 내부 단편화

  • 외부 단편화 : 할당할 프로세스의 크기보다 메모리에 남아 있는 조각이 작아서 할당이 불가능한 현상입니다.
  • 내부 단편화 : 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상을 합니다.

9. 가변 분할 방식의 메모리 배치 방식 

  • 최초 배치 : 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법입니다.
  • 최적 배치 : 메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법입니다.
  • 최악 배치 : 최적 배치와 정반대로, 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방법입니다.

 

10. 조각 모음

가변 분할 방식에서 작은 프로세스가 작업을 마치고 메모리에서 나가면 그 공작이 조각으로 남아 쓸모없어질 가능성이 큽니다.

이렇게 단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만드는 것을 조각 모음이라고 합니다.

 

조각 모음은 다음과 같은 순서로 진행됩니다.

  1. 조각 모음을 하기 위해 이동할 프로세스의 동작을 멈춥니다.
  2. 프로세스를 적당한 위치로 이동합니다. 프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주고삾을 바꿉니다.
  3. 이러한 작업을 다 마친 후 프로세스를 다시 시작합니다.
조각 모음을 하려면 프로세스를 중지시키고, 이동하고, 주소를 바꾸고, 다시 시작하는 작업을 해야하기 때문에 많은 시간이 걸립니다. 이처럼 가변 분할 방식은 외부 단편화로 인해 조각 모음 같은 부가적인 작업이 필요하여 메모리 관리가 복잡합니다.

 

 

 

 

'CS > 운영체제' 카테고리의 다른 글

9)가상 메모리 관리  (0) 2020.09.22
8)가상 메로리의 기초  (0) 2020.09.19
6) 교착 상태  (0) 2020.09.14
5) 프로세스 동기화  (0) 2020.09.10
4) CPU 스케줄링  (0) 2020.09.06

댓글