VM과 공유 페이지
<aside>
💡
실제의 OS는 각 프로세스마다 별도의 페이지 테이블과 별도의 가상 주소 공간을 제공
</aside>

VM이 프로세스에 별도의 주소공간을 제공하는 방법 (CSAPP Fig. 9.9)
- Figure 9.9에서,
- 프로세스 i : VP 1 → PP 2, VP 2 → PP 7
- 프로세스 j : VP 1 → PP 7, VP 2 → PP 10
- 여러 가상 페이지가 동일한 물리 페이지를 공유할 수도 있음
VM의 메모리 할당 단순화
- 링킹 단순화 (Simplifying Linking)
- 각 프로세스는 물리적 배치와 무관하게 동일한 메모리 이미지 형식을 사용 가능
- e.g., 리눅스 64비트 프로세스는 항상 코드 세그먼트를
0x400000
에서 시작
- 이런 통일성 덕분에 링커는 실행 파일을 물리 메모리 배치와 독립적으로 생성 가능
- 로딩 단순화 (Simplifying Loading)
- 실행 파일과 공유 목적 파일의
.text
, .data
섹션을 메모리에 로드할 때
- 로더는 가상 페이지 할당 후
invalid
(캐시되지 않은 상태) 로 표시, PTE를 파일 내 위치에 매핑
- 실제 데이터 복사 없음 → CPU가 처음 접근 시, demand paging에 의해 자동으로 디스크에서 적재
- 이러한 방식은 메모리 매핑(memory mapping)이라고 하며, 리눅스는
mmap
시스템 호출을 통해 응용 수준에서도 지원
- 공유 단순화 (Simplifying Sharing)
- 일반적으로 각 프로세스는 코드, 데이터, 힙, 스택을 독립적으로 가짐 (공유되지 않는)
- 그러나 공통 코드 / 데이터(e.g., OS 커널, 표준 C 라이브러리)는 여러 프로세스가 동일한 물리 페이지를 공유하도록 매핑 가능
- 이를 통해 중복 제거와 메모리 절약 실현
- 메모리 할당 단순화 (Simplifying Memory Allocation)
- 프로그램이 추가 힙 공간 요청(
malloc
) 시
- OS는 k개의 연속된 가상 페이지를 할당 → k개의 임의의 물리 페이지에 매핑
- 물리 메모리는 연속적일 필요 없음, 산재된 페이지를 매핑하면 충분
- 따라서 유연하고 간단한 메모리 관리가 가능
Previous Chapter
3. 캐싱 도구로서의 VM
Next Chapter
5. 메모리 보호를 위한 도구로서의 VM