본문으로 바로가기

[OS] 6. 메모리 관리 (Memory Management)

category CS/Operating System 2019. 4. 22. 17:40

6. 메모리 관리

  1. 메모리 관리 (Memory Management)
  2. 연속 할당 방식 (Contiguous Allocation)
  3. 비연속 할당 방식 (Noncontiguous Allocation)

 

1. 메모리 관리 (Memory Management)

1.1. 메모리 관리

물리적 주소 (Physical Address)

  • 물리 메모리에 실제 올라기는 위치

논리적 주소 (Logical Address)

  • 프로그램이 메모리에 적재되면 생기는 해당 프로세스를 위한 독자적인 주소 공간
  • CPU 가 보는 주소는 Logical Address

주소 바인딩 (Address Binding)

  • 프로세스의 논리적 주소를 물리적 메모리 주소로 연결시켜 주는 작업

 

1.2. MMU

논리적 주소를 물리적 주소로 매핑해 주는 하드웨어 장치로서, 재배치 레지스터(Relocation Register)한계 레지스터(Limit Register) 를 사용하여 매핑한다. 매핑하는 과정은 아래와 같다.

  1. CPU가 논리적 주소 123 번지에 있는 내용을 요청

  2. 재배치 레지스터에 저장된 23000 이라는 값에 논리적 주소를 더함

    • 논리적 주소 123 번지는 물리적 메모리의 시작 위치인 재배치 레지스터 값으로부터 요청된 위치가 얼마나 떨어져있는지를 나타내는 오프셋(offset)
  3. 한계 레지스터는 해당 프로세스의 크기를 저장

    • 만약 요청한 논리적 주소가 이 값을 벗어나면 트랩을 이용해 프로세스 강제 종료
  4. 23123 번지의 물리적 메모리에는 CPU가 요청한 정보가 들어있음

 

 

1.3. 관련 용어

동적 로딩 (Dynamic Loading)

  • 물리 메모리에 프로세스 전체를 올려놓는 것이 아닌, 필요한 루틴 을 그 때마다 적재하는 방식
  • 다중 프로그래밍 환경에서 효율성을 높이기 위함

동적 연결 (Dynamic Linking)

  • Linking(Object File과 Library File을 묶어 실행 파일 생성) 을 실행 시점에서 하는 것

중첩 (Overlay)

  • 프로세스의 크기가 물리 메모리보다 클 때 유용한 방법
  • 프로세스에서 당장 필요한 부분을 메모리에 적재하는 방식
  • 동적 로딩 과 유사하지만 그 목적이 다름

스와핑 (Swapping)

  • 프로세스를 일시적으로 Swap Area 로 쫓아내는 것
  • 다중 프로그래밍 환경에서 프로그램 수를 조절하여 성능 이슈를 해결하기 위함

 

 

2. 연속 할당 방식 (Contiguous Allocation)

각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 방식

2.1. 고정 분할 방식 (Fixed Partition Allocation)

  • 물리적 메모리를 주어진 개수만큼의 영구적인 분할(Partition) 으로 미리 나누어 각 분할에 하나의 프로세스를 적재하여 실행하도록 하는 방식

  • 융통성이 매우 떨어지는 방식

  • 외부 단편화내부 단편화가 발생할 수 있음

    • 외부 단편화 : 빈 파티션이지만 프로세스보다 크기가 작아 이용될 수 없음
    • 내부 단편화 : 파티션에 프로세스를 적재했을 때, 공간이 남아 메모리 낭비 발생

 

2.2. 가변 분할 방식 (Variable Partition Allocation)

  • 프로그램의 크기를 고려하여 파티션의 크기 및 개수를 동적으로 바꾸는 방식
  • 어떤 프로그램이 종료되었을 때, 그 빈 파티션에서 외부 단편화가 발생할 수 있음

 

가변 분할 방식에서 크기가 n인 프로세스를 적재할 파티션을 찾는 방법

First Fit

  • 크기가 n 이상인 것 중, 최초로 찾은 파티션에 적재

Best Fit

  • 크기가 n 이상인 것 중, 가장 크기가 작은 파티션에 적재

Worst Fit

  • 크기가 가장 큰 파티션에 적재

 

 

3. 비연속 할당 방식 (Noncontiguous Allocation)

하나의 프로세스가 메모리의 여러 영역에 분산되어 올라가는 방식

3.1. 페이징 (Paging)

프로세스의 가상 메모리를 동일한 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 저장하는 방식

  • 물리 메모리와 가상 메모리를 동일한 크기의 Frame 으로 나눔
  • 모든 프로세스가 각각의 주소 변환을 위한 페이지 테이블 을 가지며, 이 테이블은 프로세스가 가질 수 있는 페이지의 개수만큼 주소 변환 엔트리를 갖음
  • 특정 프로세스의 몇 번째 페이지가 물리적 메모리의 몇 번째 프레임에 들어 있다는 페이지별 주소 변환 정보를 유지하고 있어야함
  • 외부 단편화 X , 내부 단편화 O

 

3.2. 세그먼테이션 (Segmentation)

프로세스의 가상 메모리를 의미 단위인 세그먼트로 나누어 물리 메모리에 적재하는 방식

  • 일반적으로 code, data, stack 부분이 하나씩의 세그먼트로 정의
  • 논리적인 단위인 세그먼트로 나누었기 때문에 그 크기가 균일하지 않음
  • 페이징 기법과는 달리, 프로그램을 의미 단위로 나누었기 때문에 부가적인 메모리 관리 오버헤드가 뒤따름
  • 세그먼트는 의미 단위이기 때문에 공유와 보안에 있어 페이징 기법보다 효과적
  • 세그먼트의 길이가 동일하지 않으므로 외부 단편화 발생

 

3.3. 페이지드 세그먼테이션 (Paged Segmentation)

페이징 기법과 세그먼테이션 기법의 장점만을 취하는 주소 변환 기법

  • 프로그램을 의미 단위인 세그먼트로 나누지만, 세그먼트가 임의의 길이를 가질 수 없고 반드시 동일한 크기의 페이지들의 집합 으로 구성
  • 물리 메모리에 적재하는 단위는 페이지 단위
  • 하나의 세그먼트 크기를 페이지 크기의 배수로 함으로써 외부 단편화 해결
  • 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호로 페이징 기법의 약점 보완