9.4-VM_as_a_Tool_for_Memory_Management

articles/chapter9/9.3-VM_as_a_Tool_for_Caching에서는 VM이 상대적으로 큰 Virtual Address space 에서 Page 를 DRAM 에 Caching 하는 과정을 살펴보았다.

지금까지는 단일의 Page Table 을 가정하고 진행했지만,
OS는 분리된 Page Table 을, 즉 분리된 Virtual Address Space 를 각각의 Process 마다 제공한다.
articles/chapter9/imgs/separate_address_space.png
위 그림은 그 예시를 나타내고 있다.
여러개의 Virtual Page 가 하나의 Physical Page 에 맵핑되기도 한다. (PP7)

Demand Paging 과 분리된 Virtual Address Space 는 메모리의 사용과 관리 측면에서 많은 영향을 끼쳤다. 특히 VM은 Linking 과 Loading, Code 와 Data 의 공유, 서비스에 메모리 할당 측면에서 유용하다.


  • 분리된 Address Space 는 각 Process 마다 통일된 규격을 사용하게 해준다.
    실제 Code 나 Data 가 Physical Memory 어디에 있든 간에.
    예를 들어, Code Segment 는 항상 0x400000 에서 시작하고,
    Data Segment 는 Code Segment 뒤에 따라온다.
    이런 식으로 통일된 시각으로 Process 를 보는 것이 가능하다.

    결과적으로 Linker 의 디자인과 구현을 단순화하고,
    Physical Memory 와 무관하게 Fully Linked Executable 을 만들 수 있게 해준다.


  • VM은 또한 Executable 과 Shared Object file 을 쉽게 Load 할 수 있게 해준다.
    새로 생성된 Process 에 Object File 의 .text 와 .data 부분을 load 하기 위해,
    Linux Loader 는 Code 와 Data Segment 를 위한 Virtual Page 를 할당한다.
    이 때, 이 Page 는 Invalid(Not Cached) 인 상태이다.
    그리고 그 Page의 PTE 를 적절한 Object 파일 내의 위치로 설정한다.

    Loader 는 실제 데이터를 Disk 에서 Memory 로 복사하지 않는다.
    실제 참조가 일어나는 순간 혹은 CPU가 해당 위치를 참조하는 명령어를 가져올 때 일어난다.

    연속된 Virtual Page 들을 File 에서 임의의 위치에 맵핑하는 것을 이라고 한다. Linux 는 mmap 이라는 System Call 을 통해 서비스가 직접 매핑할 수 있도록 해준다.


  • 분리된 Address Space 는
    사용자의 Process 와 OS 간의 공유를 관리하는 작업에 대해
    OS가 일관된 작동방식을 가지게 해준다.
    일반적으로 Process 는 자신만 사용하는 사적인 공간에 Code, Data, Heap 등을 사용한다.
    즉, OS 는 Page Table 에 각각의 Virtual Page 를 겹치지 않는 Physical Page 에 연결해 작성한다.

    그러나, 간혹 코드나 데이터를 공유해야하는 경우가 있다.
    예를 들어, 모든 Process 는 Kernel 코드를 이용해야하고, C 프로그램은 standard C Library 를 사용하곤 한다.
    이 경우에, OS 는 하나의 단일된 Physical Page 에 여러개의 Virtual Page 를 연결한다.articles/chapter9/imgs/sharing.png


  • VM 은 User Process 의 추가적인 메모리 할당 요청에 대해 간단한 메카니즘을 가지고 있다.
    실행중인 프로그램이 추가적인 Heap Space 를 요청할 때(malloc 등),
    OS 는 적당한 숫자 에 대해, 연속된 VM Page 개를 할당해준다.
    그리고 Page 는 개의 임의의 Physical Page 에 연결된다.
    Page Table 의 작동방식 덕분에, Physical Page 는 연속되지 않고, 파편적으로 다룰 수 있다.