ADDRESS BINDING

주소 바인딩 시점

컴파일, 로드, 실행 시점 중 언제 주소를 확정하느냐에 따라 재배치 가능성, MMU 필요성, 프로세스 이동 비용이 달라진다.

01

소스/심볼

코드의 변수와 함수 이름은 아직 논리적 이름일 뿐 실제 메모리 위치가 아니다.

symbol
02

컴파일 바인딩

적재 위치를 미리 알면 컴파일러가 절대주소를 박을 수 있지만 이동성이 낮다.

fixed address
03

로드 바인딩

로더가 실제 적재 시작 주소를 보고 재배치 정보를 반영한다.

relocation
04

실행 바인딩

프로세스 실행 중에도 MMU가 논리주소를 물리주소로 변환한다.

paging/segmentation
compile time
위치가 바뀌면 다시 컴파일 임베디드처럼 고정 주소가 명확한 환경에서는 단순하지만 범용 OS에는 부적합하다.
absolute code
load time
로더가 재배치 후 실행 실행 시작 뒤 위치 변경은 어렵지만 컴파일 시점보다 유연하다.
relocatable code
execution time
실행 중 주소 변환 프로세스 swap, 가상 메모리, 보호를 위해 MMU와 페이지 테이블이 필요하다.
dynamic binding
검증 신호
주소 오류가 어느 단계에서 나는지 확인 링크 오류, 로드 실패, page fault는 서로 다른 바인딩 층의 문제다.
장애 위치 구분

헷갈리는 판단

논리 vs 물리 프로세스가 보는 주소와 RAM 실제 주소가 같다고 가정하지 않는다.
재배치 적재 위치가 달라도 실행되려면 상대주소와 relocation 정보가 필요하다.
보호 실행 시 바인딩은 주소 변환뿐 아니라 다른 프로세스 메모리 접근 차단도 맡는다.