메모리 관리: 주소 바인딩과 연속 메모리 할당
주소 바인딩 시점, 고정·가변 분할 방식과 단편화, 최초·최적·최악 적합 배치 전략과 통합·압축을 정리한다.
시리즈 · 운영체제14 / 18
- 운영체제의 유형
- System Call과 Dual Mode
- 인터럽트와 폴링
- 프로세스와 PCB, 프로세스의 상태 변화
- 프로세스 주소 공간과 Stack이 높은 주소부터 할당되는 이유
- 스레드: 사용자·커널 수준 스레드와 Thread Pool, Fork-Join
- Context Switching
- 프로세스 스케줄링: 단계와 알고리즘
- Thread Scheduling: 경합 범위 PCS와 SCS
- 경쟁 상태와 상호 배제: Thread Safe, 데커·피터슨 알고리즘
- 뮤텍스와 세마포, 모니터
- 교착 상태: 발생 조건과 해결 방법
- 메모리 계층 구조와 캐시 메모리
- 메모리 관리: 주소 바인딩과 연속 메모리 할당
- 가상 메모리: Paging과 Segmentation, TLB
- 요구 페이징과 페이지 교체 알고리즘, Thrashing
- File Descriptor와 File System, I-Node
- 동기/비동기와 블로킹/논블로킹, I/O Multiplexing
메모리 적재
프로세스가 실행되려면 프로그램이 메인 메모리에 올라가야 한다. 적재하는 방법은 두 가지다.
- 연속 메모리 적재: 프로세스 전체를 연속된 공간에 올린다.
- 비연속(분산) 메모리 적재: 필요한 부분만 비연속적으로 올려 사용한다. (가상 메모리에서 다룬다.)
적재와 관련된 정책으로는 프로세스를 메모리의 어느 위치에 둘지 정하는 배치 정책과, 메모리가 꽉 찼을 때 어떤 프로세스를 내보낼지 정하는 대치 정책이 있다.
주소 바인딩
주소 바인딩(Address Binding)은 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업이다. 바인딩 시점에 따라 구분한다.
Compile time binding
- 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우에 쓴다.
- 적재 위치가 변하지 않으며, 프로그램 전체가 메모리에 올라가야 한다.
Load time binding
적재 시점에 시작 주소를 반영하여 코드 상의 주소를 재설정한다.

위 예에서 프로그램이 실제 메모리의 400번지부터 적재되므로, Branch 360은 400을 더한 Branch 760이 된다.
Run time binding
- 주소 바인딩을 실행 시간까지 미룬다.
- 프로세스가 수행 도중 다른 메모리 위치로 이동할 수 있다.
- 하드웨어(MMU, Memory Management Unit)의 도움이 필요하다.
연속 메모리 할당
프로세스를 하나의 연속된 메모리 공간에 할당하는 정책이다. 메모리에 동시에 올라갈 수 있는 프로세스 수, 각 프로세스에 할당할 공간의 크기, 메모리 분할 방법을 정해야 한다.
단일 프로그래밍 환경에서는 프로세스 하나만 메모리에 존재한다. 가장 간단하지만 자원 낭비가 매우 심하다. 다중 프로그래밍 환경에서는 메모리를 나누어 쓰며, 분할 방식에 따라 고정 분할과 가변 분할로 나뉜다.
고정 분할
- 메모리 공간을 고정된 크기로 미리 분할하고, 각 프로세스를 하나의 partition에 적재한다.
- partition 수가 곧 다중 프로그래밍 정도(multiprogramming degree)다.

고정 분할에서는 내부 단편화(Internal Fragmentation) 가 발생한다. partition의 크기가 프로세스보다 크면 남는 부분이 낭비된다.
가변 분할
고정된 경계를 없애고 각 프로세스가 필요한 만큼만 메모리를 할당받는다.

가변 분할에서는 작업이 진행될수록 외부 단편화(External Fragmentation) 가 발생한다. 남은 메모리의 총합은 프로세스보다 크지만 연속된 공간이 아니어서 사용하지 못한다.
가변 분할의 배치 전략

| 전략 | 선택하는 partition | 장점 | 단점 |
|---|---|---|---|
| 최초 적합 (First fit) | 충분한 크기를 가진 첫 번째 partition | 단순하고 오버헤드가 낮다 | 공간 활용률이 떨어진다 |
| 최적 적합 (Best fit) | 들어갈 수 있는 partition 중 가장 작은 곳 | 큰 partition을 큰 상태로 유지할 수 있다 | 작은 partition이 많이 생기고 탐색 시간이 오래 걸린다 |
| 최악 적합 (Worst fit) | 들어갈 수 있는 partition 중 가장 큰 곳 | 작은 partition의 발생을 줄일 수 있다 | 큰 partition을 확보할 수 없고 탐색 시간이 오래 걸린다 |
위 그림에서는 최초 적합이 16KB, 최적 적합이 14KB, 최악 적합이 30KB를 선택한다.
성능은 일반적으로 최초 적합과 최적 적합이 최악 적합보다 낫고, 탐색이 필요 없는 최초 적합이 가장 빠르다.
가변 분할의 단편화 해결
통합 (Coalescing)
작업이 끝났을 때 인접한 빈 공간과 하나로 합친다.

압축 (Compaction)
메모리의 내용을 옮겨 흩어진 빈 공간을 큰 블록 하나로 만든다. 압축하는 동안 시스템은 모든 일을 중지해야 하므로 자원 소모가 크다.
주소 바인딩이 컴파일이나 적재 시점에 이루어진다면 압축을 수행할 수 없다. 실행 시간에 바인딩하는 경우에만 가능하다.
참고
- 운영체제: 그림으로 배우는 구조와 원리 (한빛아카데미)