
- OS는 프로세스 마다 page table과 virtual address를 제공하게 됨
- 이러한 방식은, 시스템에 의해 메모리가 사용되고 관리되는데 큰 영향을 주었고, 특히 VM 은 linking과 loading, sharing of code and data, and allocating memory to application을 매우 단순화 시켰음
Simplifying linking

- 개별적인 address space는 각각의 프로세스들이 동일한 메모리 이미지의 형태를 갖도록 해줌. 실제로 code와 data가 physical memory 상 어디에 존재하는지에 상관없이
- 이러한 통일성은 linker의 디자인과 구현을 매우 단순화 시켰음.
- fully linked excutable을 만들 때, code와 data의 실제 physical memory 위치는 전혀 상관이 없음
Simplifying loading
- Virtual memory는 excutable과 shared object file을 메모리 상에 로드하는 것도 쉽게 만들었음
- .text와 .data section을 새로 만들어진 프로세스에 로드하기 위해서
- Linux loader가 연속적인 virtual page의 chunk를 starting at address 0x0804800(32bit), 0x400000(64bit) 해당 주소에 할당
- valid bit를 not cached로
- PTE를 object file의 주소를 가리키게만 만들면 됨
- 여기에서의 흥미로운 점은 로더가 어떤 데이터도 복사하지 않았다는 점임. 주소값만 넣어주면 됨. 그럼 알아서 CPU 가 read 명령어 내릴 때 동작하게 됨
- 연속적인 virtual page의 집합을 임의의 파일의 임의의 위치로 매핑하는 개념 → memory mapping
Simplifying sharing
- 모든 프로세스는 운영체제의 kernel의 코드를 실행해야 하기 때문에 공유의 필요성이 존재
- 제일 위의 Fig 9.9에서 보듯이 공유는 상당히 쉬움. 동일한 physical address에 대해 다른 virtual address를 붙여주면 됨
Simplifying memory allocation
- Virtual memory는 유저의 프로세스에 추가적인 메모리를 할당하는 간단한 메커니즘을 제공함
- 유저 프로세스에서 돌고 있는 프로그램이 추가적인 heap 공간을 요청했을 시(as a result of calling malloc),
- OS는 연속적인 virtual memory page를 할당하고 걔네들을 physical memory 상에 있는 임의의 동일한 갯수의 physical page로 매핑함
- page table의 동작 방식으로 인해, OS는 physical memory를 추가적으로 할당할 필요가 없음
- physical memory상에서 page는 랜덤하게 분산될 수 있음