메모리 할당 방식에 대하여 구체적으로 살펴보기 앞서 메모리 관리 용어를 살펴본다.
동적 적재(Dynamic Loading)
초기 컴퓨터 시스템에서는 메모리의 크기가 프로세스의 크기를 제한하였다. 따라서 바인딩을 최대한 늦게 수행하여 실행 직전에 주소를 확정하면 메모리를 효율적으로 운영할 수 있는 동적 적재 방법이 제안되었다.
- 동적 적재는 모든 루틴을 메모리에 적재하지 않고 재배치 가능한 형태로 디스크에 저장
- 메인 프로그램만 먼저 메모리에 적재하여 수행
- 메인 프로그램이 다른 루틴을 호출할 때 메모리에 적재되어 있는지 조사
- 적재되어 있지 않다면 해당 루틴을 메모리에 적재하고 프로그램의 주소 테이블 갱신
동적 적재는 사용하지 않는 프로그램(=루틴)을 메모리에 적재하지 않으므로 메모리를 효율적으로 사용할 수 있으며 전체 프로그램 양이 많을 때 유용하다.
중첩(Overlay)
실행하려는 프로그램이 메모리에 할당해야하는 공간보다 클 때 사용한다. 당장 필요하지 않은 프로그램의 일부를 중첩으로 설정한다. 운영체제 영역과 메모리의 일부 영역에는 프로그램 실행에 꼭 필요한 명령어와 데이터만 저장하고, 나머지 중첩 영역에는 필요할 때 호출하여 적재하는 방법이다. 보통 실행할 프로그램을 초기, 처리, 출력 모듈로 나누고 중첩 영역에 초기 모듈을 먼저 적재하여 실행한 후 처리 모듈, 출력 모듈 순으로 실행하는 구조이다.

만약, 절대 동시에 실행(메모리에 적재)되지 않는 프로그램이 있을 때 중첩으로 설정하여 유용하게 활용할 수 있다. 프로그램이 특정 구역에 필요한 메모리를 요구하지 않을 때, 시스템은 해당 구역의 일부나 전체를 필요한 구역의 메모리와 교체할 수 있다. 중첩은 메인 메모리를 '확장'할 수 있게 해주지만 중첩은 구현 난이도가 어렵다. 따라서, 가상 메모리 시스템을 활용하면 프로그래머가 중첩을 제어해야 하는 부담을 줄여줄 수 있다.
스와핑(Swapping)
다중 프로그래밍 환경에서 프로세스는 사용자 프로그램이 끝날 때까지 메모리에 저장되는 원칙을 지켜왔다. 그러나 프로세스를 빈번하게 교환(순환 할당 알고리즘)하거나 우선순위에 바탕을 둔 알고리즘에는 적합하지 않다.
- 스왑 아웃(Swap Out) : 프로세서 할당이 끝나고 수행이 완료된 프로세스는 보조 기억 장치로 이동
- 스왑 인(Swap In) : 새롭게 시작하는 프로세스는 메모리에 적재

즉, 일시적으로 디스크로 이동했다가 필요할 때 메모리에 다시 적재하여 수행한다. 프로그램이 실행 중에 스와핑 대상이 되면 대기 상태로 바뀌고, 다시 실행 조건을 만족하면 준비 큐나 디스크로 이동(스왑 아웃)한다. 스왑 대기 상태의 프로세스는 실행 조건을 만족하면 스왑 준비 상태로 바뀐다. 이때 우선 순위가 더 높은 프로세스가 도착하면 MMU가 다시 스왑 준비 상태의 프로세스를 우선 순위가 더 높은 프로세스로 스와핑한다. 이후, 우선 순위가 높은 프로세스가 실행을 중지하면 우선 순위가 낮은 프로세스를 다시 스왑 인하여 실행한다.
스와핑 방법은 바인딩 방식에 따라 다르다. Compile-time 바인딩과 Load-time 바인딩에서는 프로세스를 다른 위치로 이동할 수 없지만 Run-time 바인딩에서는 스와핑이 가능하다. 스와핑은 초기 시분할 시스템에서 채택하였다가 뒤에서 다룰 메모리 할당 방식인 페이징(Paging) 형태로 발전하였다.
Reference
- Harvey M. Deitel, Paul J. Deitel, and David R. Choffnes, Operating Systems, 3rd ed., Pearson, 2003.
- Hyun-Hoe Koo, Operating System: Principles and Structure Illustrated, 1st ed., Hanbit Academy, 2016. (7th printing, 2022).
'Computer_science > Memory' 카테고리의 다른 글
| [메모리] 단일 프로그래밍 연속 메모리 할당 (0) | 2024.12.26 |
|---|---|
| [메모리] 메모리 할당(적재) 개요 (0) | 2024.12.09 |
| [메모리] 바인딩과 바인딩 분류 (0) | 2024.12.09 |
| [메모리] 논리적 주소와 물리적 주소의 매핑 (0) | 2024.12.08 |
| [메모리] 메모리 관리 전략 (0) | 2024.12.08 |