base = 0x10000
limit = 0x5000
limit = 0x5000
논리 주소 0x3000은 0x10000을 기준으로 해석된다.
프로그램이 보는 포인터 값은 CPU가 만든 논리 주소다. 실행 시 바인딩을 쓰는 현대 OS에서는 MMU가 매 메모리 접근마다 한계 검사를 하고, 통과한 주소에 base를 더해 실제 RAM 주소로 보낸다.
논리 주소 0x3000은 0x10000을 기준으로 해석된다.
같은 0x0000도 A와 다른 물리 시작점으로 간다.
그래서 두 프로세스가 같은 논리 주소를 써도 서로의 물리 메모리를 직접 덮어쓰지 않는다.
`malloc` 결과, 전역 변수, 스택 변수 주소는 모두 프로그램 관점의 주소다.
`logical_addr >= limit`이면 프로세스가 허용 범위 밖을 건드린 것이므로 트랩이 발생한다.
정상 접근이면 `physical = base + logical`로 변환되어 메모리 버스에 실린다.