Quick Flow
process virtual address
-> page-table translation
-> physical page or mapped backing storage
-> read / write / execute permission checkPointer에 들어 있는 값은 일반적으로 그 process의 가상 주소입니다. 같은 숫자 주소가 다른 process에서 보이더라도 같은 물리 메모리를 가리킨다고 볼 수 없습니다.
주소 번역
운영체제와 CPU의 memory management unit은 가상 page를 물리 page에 연결합니다. 이 간접 계층 덕분에 프로세스마다 독립된 주소 공간을 제공하고, 연속된 가상 범위를 물리적으로는 여러 위치에 배치할 수 있습니다.
가상 주소 범위를 reserve한 것과 실제 접근 가능한 storage를 commit한 것은 운영체제 API에서 구분될 수 있습니다. 주소가 범위 안에 보인다는 사실만으로 읽고 쓸 수 있는 memory가 준비되었다고 가정하지 않습니다.
접근 권한
Page는 read, write, execute 같은 보호 속성을 가집니다. 실행 코드를 임의로 쓰지 못하게 하고 데이터 page를 실행하지 못하게 하는 정책은 오류와 공격 범위를 줄입니다. 허용되지 않은 주소나 권한으로 접근하면 access violation 또는 segmentation fault 계열 오류가 발생할 수 있습니다.
shared memory는 격리를 없애는 마법이 아니라 같은 backing storage를 여러 process의 주소 공간에 명시적으로 map하는 IPC 방식입니다. 동시 접근 규칙은 별도로 설계해야 합니다.
자주 틀리는 점
- 가상 메모리를 paging file 하나와 같은 말로 축소하지 않습니다.
- 64-bit 주소형을 사용한다고 그 모든 주소를 실제로 allocation할 수 있는 것은 아닙니다.
- null이 아닌 pointer도 unmapped, freed, 권한 없는 주소일 수 있습니다.
- address space 크기와 현재 resident physical memory인 working set을 구분합니다.
참고 링크
2 sources