프로세서가 프로세스를 실행시키기 위해서는 해당 프로세스의 논리적 주소에 대응하는 물리적 주소를 알아야 한다. 논리적 주소를 물리적 주소로 연결(대응)하는 것을 매핑(Mapping)이라하며 두 주소의 연결 그 자체를 의미한다.
두 주소를 매핑하는 작업을 바인딩(Binding)이라고 부른다.
바인딩은 논리적 주소를 물리적 주소로 변환하는 시점에 따라 컴파일 시간(Compile-time Binding), 적재 시간(Load-time Binding), 실행 시간(Run-time Binding)으로 구분할 수 있다.

컴파일 시간(Compile-time Binding)
프로세스가 메모리에 적재될 위치를 컴파일 과정에서 알 수 있다면 컴파일러는 물리적 주소를 생성할 수 있다.
- 프로그램이 컴파일될 때 논리적 주소가 고정된 물리적 주소로 바인딩된다.
- 실행 파일이 생성되는 낮은 단계에서 물리적 주소가 고정(결정)되며 프로그램 실행 중 변하지 않는다.
- 따라서 프로그램이 최초에 바인딩된 특정 메모리 위치에서만 실행된다.
; 변수를 물리적 주소 1000번지에 고정
MOV AX, [1000H] ; 1000번지의 데이터를 AX 레지스터로 이동
ADD AX, 10 ; 데이터를 10만큼 증가
MOV [1000H], AX ; 결과를 다시 1000번지에 저장
적재 시간(Load-time Binding)
프로세스를 적재할 메모리 위치를 컴파일 과정에서 알지 못한다면 컴파일러는 대체할 수 있는 상대적 주소를 생성한다. 상대 주소는 프로그램의 시작 주소가 0으로 생성되기에 최종 바인딩을 적재 시간까지 연기한다. 만약, 시작 주소가 변화하게 되면 변화된 값을 반영하기 위해 처음부터 사용자 코드를 재적재한다(정적 대치).
- 프로그램이 메모리에 적재되는 시점에 논리적 주소가 물리적 주소로 바인딩된다.
- 실행 파일은 재배치 가능한 형태(Relocatable)로 작성된다.
- 로더(Loader)가 적재 시 물리적 주소를 할당한다.
- 바인딩이 한번 이루어지면 주소가 실행 중에 변화하지 않지만 적재 시간에 메모리 위치가 할당되기에 컴파일 시간 바인딩에 비해 메모리 활용이 유연해진다.
; 프로그램이 적재된 기준 주소(BASE)를 사용하여 계산
MOV AX, [BASE + 100H] ; BASE는 적재 시 결정됨
ADD AX, 10 ; 데이터를 10만큼 증가
MOV [BASE + 100H], AX ; 결과를 다시 저장
실행 시간(Run-time Binding)
프로그램(프로세스)이 동일한 장소에서 작동한다면 적재 시간에 바인딩할 수 있다. 그러나 프로세스를 실행하는 도중에 메모리의 한 세그먼트에서 다른 세그먼트로 이동한다면 바인딩은 실행 시간까지 지연될 수 있다. 현재 범용 운영체제에서 사용하는 바인딩 방식이다.
- 프로그램이 실행되는 동안 논리적 주소가 물리적 주소에 바인딩된다.
- CPU가 명령어를 실행할 때마다 MMU가 논리적 주소를 물리적 주소로 변환한다.
- 프로그램이 실행 중에도 메모리 위치를 동적으로 변화시킬 수 있다.
; 논리적 주소를 사용하며, MMU가 실행 중 변환
MOV AX, [VIRTUAL_ADDR] ; 논리적 주소 VIRTUAL_ADDR 사용
ADD AX, 10 ; 데이터를 10만큼 증가
MOV [VIRTUAL_ADDR], AX ; 결과를 다시 저장
컴파일러가 코드를 컴파일하여 오브젝트 파일을 생성하면 링커가 오브젝트 파일들과 라이브러리 파일을 결합한다. 이후에 로더가 지정된 위치부터 메모리에 프로그램을 배치한다. 구체적인 과정은 "디버깅 심볼을 활용한 소스코드의 기계어 변환 과정"에서 다룬적이 있다.
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.09 |
|---|---|
| [메모리] 메모리 관리 (0) | 2024.12.09 |
| [메모리] 논리적 주소와 물리적 주소의 매핑 (0) | 2024.12.08 |
| [메모리] 메모리 관리 전략 (0) | 2024.12.08 |
| [메모리] 메모리의 계층적 구조 (0) | 2024.12.08 |