물리 메모리
운영체제의 임주 중 하나는 한정된 물리 메모리(RAM)라는 작업 공간을 여러 프로세스에게 효율적으로 나누어주는 것입니다. 폰 노이만 구조에 따라 모든 프로그램은 실행되기 위해 반드시 메모리에 적재되어야 하며, 공간을 관리하는 것이 시스템 전체 성능을 결정합니다.
운영체제가 물리 메모리를 관리하는 다양한 전략과 기법, 이 과정에서 발생하는 문제점과 해결책에 대하여 작성했습니다.
주소 변환 : 논리 주소에서 물리 주소
프로세스는 자신만의 독립적인 메모리 공간을 가진 것처럼 동작합니다. 이때 프로세스가 사용하는 주소를 논리 주소(Logical Address)라고 하며, 이는 항상 0번지부터 시작하는 상대적인 주소 체계입니다. 그러나, 실제 RAM에 부여된 고유한 주소를 물리 주소(Physical Address)라고 합니다.
운영체제는 메모리 관리 유닛(MMU)이라는 하드웨어의 도움을 받아 논리 주소를 물리 주소로 실시간 변환합니다. MMU는 재배치 레지스터(Relocation Register)에 저장된 프로세스의 실제 시작 주소(기준 주소)를 논리 주소에 더하여 물리 주소를 계산합니다.
물리 주소 = 논리 주소 + 재배치 레지스터 값
위와 같은 주소 변환 메커니즘으로 프로세스는 메모리의 어느 위치에 적재되더라도 문제없이 실행될 수 있습니다.
메모리 할당 기법 : 연속 할당과 분산 할당
운영체제가 프로세스를 메모리에 배치하는 방식은 두 가지로 나뉩니다.
연속 할당 방식
프로세스를 하나의 연속된 덩어리로 메모리에 할당하는 방식입니다. 초기 운영체제에서 사용되던 단순한 방법이며, 고정 분할과 가변 분할 방식으로 나뉩니다.
- 고정 분할 (Fixed Partitioning) : 메모리를 미리 정해진 고정된 크기의 여러 구획(파티션)으로 나누어 관리합니다. 구현은 간단하지만, 할당된 파티션보다 작은 프로세스가 들어올 경우 남는 공간이 낭비되는 내부 단편화(Internal Fragmentation)가 발생합니다.
- 가변 분할 (Variable Partitioning) : 프로세스의 크기에 맞춰 메모리를 동적으로 할당합니다. 내부 단편화는 없지만, 프로세스가 종료되고 떠난 자리가 작은 조각들로 남아 사용하기 어려운 외부 단편화(External Fragmentation)가 발생하는 문제가 있습니다.
분산 할당 방식 (불연속 할당)
프로세스를 여러 개의 작은 조각으로 나누어 메모리의 비어있는 공간에 분산하여 할당하는 현대적인 방식입니다. 페이징(Paging)과 세그멘테이션(Segmentation)이 대표적인 기법이며, '가상 메모리' 개념의 기초가 됩니다.
외부 단편화 문제와 해결책
가변 분할 방식의 고질적인 문제인 외부 단편화를 해결하기 위해 운영체제는 다음과 같은 전략을 사용합니다.
메모리 배치 전략 (Placement Strategy)
새로운 프로세스를 어느 빈 공간에 배치할지를 결정하는 알고리즘입니다.
- 최초 적합 (First-Fit) : 메모리를 처음부터 순서대로 탐색하여, 프로세스를 담을 수 있는 첫 번째 빈 공간에 할당합니다. 가장 빠르고 간단합니다.
- 최적 적합 (Best-Fit) : 모든 빈 공간을 탐색하여 프로세스 크기와 가장 잘 맞는(가장 작은) 공간에 할당합니다. 공간 효율은 좋지만 작은 크기의 단편화를 남길 수 있습니다.
- 최악 적합 (Worst-Fit) : 모든 빈 공간 중 가장 큰 공간에 할당합니다. 남은 공간이 커서 다른 프로세스가 사용하기 좋은 장점이 있습니다.
조각 모음 (Defragmentation) 또는 압축 (Compaction)
흩어져 있는 작은 빈 공간들을 하나로 합쳐 큰 가용 공간을 만드는 작업입니다. 이를 위해서 메모리에 있는 프로세스들을 재배치해야 하므로 시스템에 부하를 줄 수 있습니다.
메모리보다 큰 프로그램 실행 : 오버레이와 스와핑
메모리 오버레이 (Memory Overlay)
물리 메모리 크기보다 큰 프로그램을 실행하기 위한 초기 기법입니다. 프로그래머가 직접 프로그램을 여러 모듈로 분할하여, 실행에 꼭 필요한 부분만 메모리에 올려놓고 필요에 따라 교체하는 방식입니다.
스와핑 (Swapping)
메모리가 부족할 때, 현재 사용되지 않는 프로세스를 통째로 스왑 영역(Swap Area)이라는 디스크의 특정 공간으로 내보내고(Swap-out), 필요할 때 다시 메모리로 불러오는(Swap-in) 기법입니다. 운영체제에 의해 자동으로 관리되는 가상 메모리 시스템의 핵심 요소입니다.
정리
물리 메모리 관리는 한정된 자원을 최대한 효율적으로 사용하며 각 프로세스의 독립된 공간을 안전하게 보호하는 두 개의 목표 사이에서 균형을 잡는 작업입니다. 초기의 연속 할당 방식에서 발생하는 단편화 문제를 해결하기 위해 등장한 페이징과 세그멘테이션 같은 분산 할당 기법은 현대 운영체제의 근간을 이루고 있습니다.
'운영체제' 카테고리의 다른 글
| 교착 상태(Deadlock) (1) | 2025.10.13 |
|---|---|
| 프로세스 동기화와 임계 구역 문제 (0) | 2025.10.11 |
| CPU 스케줄링 (0) | 2025.10.02 |
| 컴퓨터 하드웨어와 성능의 이해 (0) | 2025.09.20 |
| 프로세스와 스레드 (0) | 2025.09.19 |