메모리 관리(memory management)
다중 프로그래밍 컴퓨터에서 운영 체제는 메모리의 일부에 상주하고 나머지는 여러 프로세스에서 사용됩니다. 서로 다른 프로세스 간에 메모리를 세분화하는 작업을 메모리 관리라고 합니다.
메모리 관리는 운영 체제에서 프로세스 실행 중에 주 메모리와 디스크 간의 작업을 관리하는 방법입니다. 메모리 관리의 주요 목표는 메모리를 효율적으로 사용하는 것입니다.
메모리(Memory): 작업을 위해 사용되는 공간
메인 메모리, RAM을 뜻한다. 프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간.
메모리 관리가 필요한 이유
- 프로세스 실행 전후에 메모리를 할당 및 할당 해제합니다.
- 프로세스별로 사용된 메모리 공간을 추적합니다.
- 조각화 문제를 최소화합니다.
- 메인 메모리의 적절한 활용.
- 프로세스를 실행하는 동안 데이터 무결성을 유지합니다.
효과적인 메모리 사용
동적 적재(Dynamic Loading)
- 프로그램 실행에 반드시 필요한 루틴과 데이터만 적재하는 기법 입니다.
- 모든 루틴(ex. 오류처리)과 데이터(ex. 배열)는 항상 사용하지 않고, 실행 시 필요하다면 그때 해당 부분을 메모리에 적재합니다.
동적 연결(Dynamic Linking)
- 라이브러리 루틴연결을 컴파일 시점에 하는 것이 아닌 실행 시점까지 미루는 기법 입니다.
스와핑(Swapping)
- CPU에서 실행중이지 않는 프로세스는 저장장치의 Swap 영역으로 이동(Swap in/Swap out)해 메모리를 확보합니다.
- 문맥 교환으로 인한 오버헤드가 발생할 수 있고 속도가 느려지지만, 메모리 공간 확보에는 효율적 입니다.
메모리 관리 전략
연속 메모리 할당
프로세스를 메모리에 연속적으로 할당하는 기법으로 할당과 제거를 반복하다보면 Scattered Holes가 생겨나고 이로 인한 외부 단편화가 발생합니다.
연속 메모리 할당에서 외부 단편화를 줄이기 위한 할당 방식
- 최초 적합(First fit): 가장 처음 만나는 빈 메모리 공간에 프로세스를 할당하며 빠른 특징이 있습니다.
- 최적 적합(Best fit): 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 적은 곳에 프로세스를 할당합니다.
- 최악 적합(Worst fit): 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 큰 곳에 프로세스를 할당합니다.(이렇게 생긴 빈 메모리 공간에 또 다른 프로세스를 할당할 수 있을 거라는 가정에 기인)
페이징(Paging)
- 메모리 공간이 연속적으로 할당되어야 한다는 제약조건을 없애는 메모리 관리 전략 입니다.
- 논리 메모리는 고정크기의 페이지, 물리 메모리는 고정크기의 프레임 블록으로 나누어 관리합니다.
- 프로세스가 사용하는 공간을 논리 메모리에서 여러 개의 페이지로 나누어 관리하고, 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 매핑되어 저장합니다.
- MMU(Memory Management Unit)의 재배치 레지스터 방식을 활용해 CPU가 마치 프로세스가 연속된 메모리에 할당된 것처럼 인식하도록 합니다.
- 내부 단편화가 발생합니다.
세그멘테이션(Segmentation)
- 페이징 기법과 반대로 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트로 분할합니다.
- 외부 단편화가 발생합니다.
세그멘테이션 페이징 혼용 기법
- 페이징과 세그멘테이션도 각각 내부 단편화와 외부 단편화가 발생합니다.
- 페이징과 세그멘테이션을 혼용해 이러한 단편화를 최대한 줄이는 전략입니다.
- 프로세스를 세그먼트(논리적 기능 단위)로 나눈 다음 세그먼트를 다시 페이지 단위로 나누어 관리합니다.
- 매핑 테이블을 두 번 거쳐야하므로 속도가 느려집니다.
단편화(Fragmentation)
메모리 공간이 충분함에도 불구하고 프로세스가 메모리에 적재되지 못해 메모리가 낭비되는 현상입니다.
외부 단편화(External Fragmentation)
가변 분할 방식에서 메모리에 프로세스가 적재되고 제거되는 일이 반복되면서, 여유 공간이 충분함도 불구하고 이러한 여유 공간들이 조각으로 흩어져 있어(Scattered Holes) 메모리에 프로세스를 적재하지 못해 메모리가 낭비되는 현상입니다.
내부 단편화(Internal Fragmentation)
고정 분할 방식에서 프로세스가 실제 사용해야할 메모리보다 더 큰 메모리를 할당받아 메모리가 낭비되는 현상입니다.
압축(Compaction)
외부 단편화를 해소하기 위한 방법으로 Scattered Holes를 모으는 방법입니다. Scattered Holes를 합치는 과정에서 메모리에 적재된 프로세스를 정지시키고 한쪽으로 이동시키는 작업이 필요해 비효율적입니다.
또한, Scattered Holes를 어느 자유공간을 기준으로 모을지 결정하는 알고리즘도 모호합니다.
참고
Memory Management in Operating System
메모리 관리 전략(Memory Management Strategy)