본문 바로가기
CS/Operating System

[운영체제]메모리 관리 전략(Memory Management Strategy)

by 테리는당근을좋아해 2020. 6. 20.

메모리 관리 전략

- 메모리 용량이 증가함에 따라 프로그램의 크기 또한 계속 증가하고 있기 떄문에 메모리는 언제나 부족

- 제한된 물리 메모리의 효율적인 사용과 메모리 참조 방식을 제공하기 위한 전략

 

 

효과적인 메모리 사용

1) 메모리 낭비 방지

(1) 동적 적재(Dynamic Loading)

- 프로그램 실행에 반드시 필요한 루틴과 데이터만 적재하는 기법

- 모든 루틴(ex. 오류처리)과 데이터(ex. 배열)는 항상 사용하지 않고, 실행 시 필요하다면 그때 해당 부분을 메모리에 적재

 

(2) 동적 연결(Dynamic Linking)

- 라이브러리 루틴연결을 컴파일 시점에 하는 것이 아닌 실행 시점까지 미루는 기법

 

(3) 스와핑(Swapping)

- CPU에서 실행중이지 않는 프로세스는 저장장치의 Swap 영역으로 이동(Swap in/Swap out)해 메모리를 확보

- 문맥 교환으로 인한 오버헤드가 발생할 수 있고 속도가 느려지지만, 메모리 공간 확보에는 효율적

 

 

메모리 관리 전략

1) 연속 메모리 할당

- 프로세스를 메모리에 연속적으로 할당하는 기법

- 할당과 제거를 반복하다보면 Scattered Holes가 생겨나고 이로 인한 외부 단편화가 발생

 

(1) 연속 메모리 할당에서 외부 단편화를 줄이기 위한 할당 방식

a. 최초 적합(First fit)

- 가장 처음 만나는 빈 메모리 공간에 프로세스를 할당

- 빠름

 

b. 최적 적합(Best fit)

- 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 적은 곳에 프로세스를 할당

 

c. 최악 적합(Worst fit)

- 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 큰 곳에 프로세스를 할당

- 이렇게 생긴 빈 메모리 공간에 또 다른 프로세스를 할당할 수 있을 거라는 가정에 기인

 

2) 페이징(Paging)

- 메모리 공간이 연속적으로 할당되어야 한다는 제약조건을 없애는 메모리 관리 전략

- 논리 메모리는 고정크기의 페이지, 물리메모리는 고정크기의 프레임 블록으로 나누어 관리

- 프로세스가 사용하는 공간을 논리 메모리에서 여러 개의 페이지로 나누어 관리하고, 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장

- MMU(Memory Management Unit)의 재배치 레지스터 방식을 활용해 CPU가 마치 프로세스가 연속된 메모리에 할당된 것처럼 인식하도록 함

- 내부 단편화 발생

 

3) 세그멘테이션(Segmentation)

- 페이징 기법과 반대로 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트로 분할

- 외부 단편화 발생

 

4) 세그멘테이션 페이징 혼용 기법

- 페이징과 세그멘테이션도 각각 내부 단편화와 외부 단편화가 발생

- 페이징과 세그멘테이션을 혼용해 이러한 단편화를 최대한 줄이는 전략

- 프로세스를 세그먼트(논리적 기능 단위)로 나눈 다음 세그먼트를 다시 페이지 단위로 나누어 관리

- 매핑 테이블을 두 번 거쳐야하므로 속도가 느려짐

 

 

단편화(Fragmentation)

- 메모리 공간이 충분함에도 불구하고 프로세스가 메모리에 적재되지 못해 메모리가 낭비되는 현상

 

1) 외부 단편화(External Fragmentation)

- 가변 분할 방식에서 메모리에 프로세스가 적재되고 제거되는 일이 반복되면서, 여유 공간이 충분함도 불구하고 이러한 여유 공간들이 조각으로 흩어져 있어(Scattered Holes) 메모리에 프로세스를 적재하지 못해 메모리가 낭비되는 현상

 

2) 내부 단편화(Internal Fragmentation)

- 고정 분할 방식에서 프로세스가 실제 사용해야할 메모리보다 더 큰 메모리를 할당받아 메모리가 낭비되는 현상

 

3) 압축(Compaction)

- 외부 단편화를 해소하기 위한 방법으로 Scattered Holes를 모으는 방법

- Scattered Holes를 합치는 과정에서 메모리에 적재된 프로세스를 정지시키고 한쪽으로 이동시키는 작업이 필요해 비효율적

- 또한, Scattered Holes를 어느 자유공간을 기준으로 모을지 결정하는 알고리즘도 모호

 

 

댓글