Logical address vs Physical address
논리적 주소 (Logical address = virtual address)
- 프로세스마다 독립적으로 가지는 주소 공간
- 각 프로세스마다 0번지부터 시작
- CPU가 보는 주소는 logical address이다.
물리적 주소 (Physical address)
주소 바인딩 (=주소 변환, Address Binding
- Symbolic (사용자) → Logical (프로그램) → Physical (하드웨어)
주소 변환 과정은 위와 같이 이루어진다.
우리가 살펴볼 내용은 Logical에서 Physical로 넘어가는 시점이다.
방법 :
Compile time binding
- 물리적 메모리 주소가 컴파일 시 결정된다.
- 메모리 위치가 변경되면 재컴파일을 해야한다.
- 컴파일러는 절대 코드를 생성한다.
⇒ 거의 사용하지 않는 방식
Load time binding
- 메모리 주소가 프로그램이 실행될 때 결정된다.
- Loader의 책임 하에 물리적 메모리 주소를 부여한다.
- 컴파일러가 재배치 가능한 코드를 생성한 경우 가능하다.
Run time binding
- 수행이 시작된 후에도 프로세스의 메모리 상 위치를 옮길 수 있음
- CPU가 주소를 참조 할 때마다 binding을 점검한다.
- 하드웨어적인 지원이 필요하다 (MMU)
MMU (Memory-Management Unit)
- 논리적 주소를 물리적 주소로 매핑해 주는 하드웨어
- MMU scheme
사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해서 base register(=relocation register)의 값을 더한다.
예시.

CPU가 논리적 주소값(346)을 요청한 상황이다.
- MMU는 limit register를 통해 주소값을 검사한다.
- CPU가 요청한 주소값을 relocation register 값과 더해서
물리적 주소 값을 만들어 낸다.
- 14000 + 346 = 14346
⇒ limit register 구조도

CPU가 논리 주소를 요청함 → limit register를 통해 주소 값을 검사함
YES ⇒ 기본 주소값과 더해서 물리적 주소 값을 찾아갈 수 있게 함
NO ⇒ trap에 걸려서 프로그램을 종료시키거나 할당해주지 않음
⇒ 이처럼 사용자 프로그램은 논리 주소만을 다룬다.
(실제 물리적 주소를 볼 수 없으며 알 필요가 없는 것이다.)
용어 정리
Dynamic loading
⇒ 프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 load 하는 것