메모리 관리는 컴퓨터 시스템에서 메모리 자원을 효율적으로 관리하고 배분하는 과정이다. 이는 운영 체제의 핵심 기능 중 하나로, 프로그램이 효과적으로 실행될 수 있도록 메모리를 할당하고 해제하는 작업을 포함한다. 이 장에서는 메모리 할당과 관리에 대해 상세히 다루겠다.
고정 분할 할당 (Fixed Partition Allocation)
고정 분할 할당은 메모리를 여러 고정된 크기의 분할로 나누어 각 분할에 하나의 프로세스를 할당하는 기법이다.
- 장점:
- 간단하고 구현이 쉽다.
-
프로세서가 분할 내에서 데이터를 빠르게 접근할 수 있다.
-
단점:
- 내부 단편화(Internal fragmentation): 프로세스 크기가 분할 크기보다 작으면 남은 공간이 낭비된다.
- 분할의 크기를 미리 정의해야 하므로, 유연성이 부족한다.
가변 분할 할당 (Variable Partition Allocation)
가변 분할 할당은 메모리를 가변 크기의 블록으로 나누며, 프로세스 요청에 따라 동적으로 블록의 크기가 결정된다.
- 장점:
- 내부 단편화가 줄어든다.
-
메모리 공간을 보다 효율적으로 사용할 수 있다.
-
단점:
- 외부 단편화(External fragmentation): 크기가 다른 여러 블록들이 메모리에 흩어져 있을 수 있다.
- 메모리 위치를 찾는 오버헤드가 발생할 수 있다.
동적 할당 기법 (Dynamic Allocation Techniques)
프로세스의 메모리 요구사항이 동적으로 변화할 때 이를 반영하기 위한 다양한 동적 할당 기법들이 있다.
최초 적합 (First Fit)
처음 발견한 충분히 큰 블록에 프로세스를 할당하는 기법이다.
- 장점: 구현이 간단하고 빠름
- 단점: 메모리 영역 전체에 걸쳐 외부 단편화가 발생하기 쉬움
최적 적합 (Best Fit)
가장 작은 충분한 블록에 프로세스를 할당하는 기법이다.
- 장점: 남은 메모리 공간 최소화
- 단점: 작은 단편들을 많이 남길 수 있음, 할당 과정이 복잡하고 느릴 수 있음
최악 적합 (Worst Fit)
가장 큰 블록에 프로세스를 할당하는 기법이다.
- 장점: 큰 빈 공간을 나누어 작은 단편화를 줄임
- 단점: 처음에는 좋지만 시간이 지나면 큰 블록이 없어져 비효율적
메모리 압축 (Memory Compaction)
외부 단편화를 해결하기 위해 메모리 블록을 한쪽으로 몰아서 다시 큰 연속 공간을 만드는 방법이다.
\text{시간복잡도}가 높은 작업이므로 주기적으로 실행하거나 메모리가 특정 한계에 도달했을 때 실행한다.
가상 메모리 (Virtual Memory)
가상 메모리는 물리적 메모리 한계를 넘어서 프로세스가 실행될 수 있도록 하는 기술이다. 이는 주로 디스크 저장 장치와 결합하여 사용된다.
페이징 (Paging)
페이징은 메모리를 일정 크기인 페이지로 나누고, 가상 메모리와 물리 메모리 간에 페이지 단위로 데이터 전송을 하는 방식이다.
- 장점:
- 외부 단편화가 없음.
-
메모리 관리가 용이함.
-
단점:
- 페이지 테이블 관리로 인한 추가 오버헤드.
- 페이지 부재(Page Fault) 처리 시 성능 저하 가능성.
세그먼테이션 (Segmentation)
세그먼테이션은 논리적 단위인 세그먼트로 메모리를 나누는 방식이다. 각 세그먼트는 크기가 다를 수 있으며, 주로 코드, 데이터, 스택 등을 분리한다.
- 장점:
- 프로그래밍 및 설계가 직관적일 수 있음.
-
각 세그먼트가 다른 보호 모드를 가지므로 보안성 향상.
-
단점:
- 외부 단편화 발생 가능.
- 세그먼트 테이블 관리로 인한 추가 오버헤드.
페이지 교체 알고리즘 (Page Replacement Algorithms)
페이지 부재가 발생했을 때 어느 페이지를 교체할지를 결정하는 알고리즘이다.
FIFO (First In First Out)
가장 먼저 들어온 페이지를 가장 먼저 교체하는 방식이다.
- 장점:
-
간단하고 구현이 쉬움.
-
단점:
- Belady의 역설(Belady's Anomaly)이 발생할 수 있음.
LRU (Least Recently Used)
가장 오랫동안 사용되지 않은 페이지를 교체하는 방식이다.
- 장점:
-
실제로 자주 사용되는 페이지를 유지함.
-
단점:
- 구현이 복잡하고 오버헤드가 큼.
LFU (Least Frequently Used)
가장 적게 사용된 페이지를 교체하는 방식이다.
- 장점:
-
실제 사용 빈도를 반영함.
-
단점:
- 구현이 어렵고, 오래 사용되지 않은 페이지가 유지될 수 있음.