설명 흐름: 가상 메모리가 필요한 이유 → 가상/물리 주소 → 독립적인 주소 공간 → 페이지 캐싱 → 메모리 관리 → 메모리 보호
한 문장 요약: 가상 메모리는 프로세스마다 독립적인 주소 공간을 제공하고, 필요한 페이지만 물리 메모리에 유지하며, MMU와 페이지 테이블을 통해 주소 변환과 접근 권한 검사를 지원합니다.
가상 메모리는 각 프로세스가 자신만의 가상 주소 공간을 사용하도록 하고, 가상 주소를 물리 주소로 변환해 실제 메모리에 접근하게 하는 시스템입니다.
주요 목적은 세 가지입니다.

| 구성 요소 | 주요 역할 |
|---|---|
| 운영체제 | 페이지 테이블 등 주소 매핑 정보를 생성하고 관리합니다. |
| MMU | 그 정보를 이용해 가상 주소를 물리 주소로 변환하고 접근 권한을 검사합니다. |
핵심: 운영체제가 매핑을 관리하고, 하드웨어가 주소를 변환합니다. 단, 페이지 폴트 등 예외 상황에서는 운영체제가 개입합니다.
주소 공간(Address Space)은 특정 주소 체계에서 표현할 수 있는 주소들의 집합입니다.
주소가 n비트라면 2ⁿ개의 서로 다른 주소를 표현할 수 있습니다. 바이트 주소 지정 시스템이라면 해당 주소 공간의 크기는 2ⁿ바이트입니다.
예를 들어 4비트 주소는 0000부터 1111까지 16개의 주소를 나타냅니다.
프로세스 A와 B가 모두 가상 주소 0x1000을 사용한다고 가정합니다.

핵심: 가상 주소는 프로세스의 주소 공간에 속합니다.
핵심 질문: 모든 가상 페이지가 DRAM에 올라와 있어야 할까요? → 아닙니다. 필요한 페이지만 유지할 수 있습니다.
가상 메모리와 물리 메모리는 일정한 크기의 페이지 단위로 관리됩니다.

| 페이지 상태 | 의미 |
|---|---|
| Unallocated | 아직 할당되지 않은 가상 페이지 |
| Cached | 물리 메모리(DRAM)에 적재된 페이지 |
| Uncached | 할당되었지만 현재 DRAM에 적재되지 않은 페이지 |
그림에서 연결되지 않은 VP 3은 할당되어 있지만 DRAM에 없으며, VP 0은 미할당 상태입니다. PP 3은 비어 있다고 가정합니다.
페이지 테이블은 가상 페이지가 어느 물리 페이지에 연결되는지 등의 정보를 보관하는 자료구조입니다. 각 항목을 PTE(Page Table Entry) 라고 합니다.

CS:APP의 단순화된 모델에서:
실제 시스템의 PTE 비트 표현과 페이지 상태 관리는 아키텍처와 운영체제에 따라 달라질 수 있습니다.
CPU가 접근하려는 페이지가 이미 DRAM에 존재하는 경우입니다.
예시: VP 1을 읽을 때
핵심: 페이지 폴트를 처리하기 위한 운영체제 개입 없이 정상적으로 접근할 수 있습니다.
CPU가 접근한 가상 페이지가 현재 DRAM에 없어서 예외가 발생하는 경우입니다. 미할당 페이지에 대한 최초 접근이나 잘못된 접근에서도 페이지 폴트가 발생할 수 있습니다.
예시: VP 3이 디스크에 있을 때

주의: 페이지 폴트가 반드시 디스크 접근을 뜻하지는 않습니다. 예를 들어 최초 접근에 대응해 새 물리 페이지를 할당하는 경우에도 발생할 수 있습니다.
이 절에서는 DRAM을 더 큰 가상 메모리 공간의 활성 페이지를 보관하는 캐시로 봅니다. 전통적인 디스크 기반 페이지 캐싱 모델에서 생각하면 다음과 같습니다.
| 관계 | 상대적으로 빠른 저장 공간 | 상대적으로 느린 저장 공간 |
|---|---|---|
| CPU 캐시 | SRAM 캐시 | DRAM |
| 가상 메모리의 페이지 캐싱 | DRAM | 디스크 |
디스크 접근은 DRAM 접근보다 느리므로 페이지 폴트의 비용이 큽니다. 이에 따라 다음 특징이 중요합니다.
핵심 질문: 가상 메모리를 사용하면 운영체제가 메모리를 어떻게 더 쉽게 관리할 수 있을까요?
각 프로세스는 자신만의 가상 주소 공간을 사용합니다. 서로 다른 프로세스에서 같은 가상 주소가 각각 다른 물리 주소를 가리킬 수 있습니다.
서로 다른 프로세스의 가상 페이지가 같은 물리 페이지를 가리킬 수도 있습니다.

예를 들어 여러 프로세스가 같은 공유 라이브러리의 코드를 사용할 때 물리 메모리를 공유할 수 있습니다. 공유 여부와 쓰기 권한은 운영체제의 매핑 설정에 따라 달라집니다.
프로그램에 연속적인 가상 주소 구간을 제공하더라도 이에 대응하는 물리 페이지가 연속할 필요는 없습니다.
| 가상 페이지 | 물리 페이지 |
|---|---|
| VP 1 | PP 7 |
| VP 2 | PP 2 |
| VP 3 | PP 9 |
프로그램에는 VP 1~VP 3이 연속된 메모리처럼 보이지만 실제 물리 위치는 흩어져 있어도 됩니다.
핵심: 가상 주소와 물리 주소의 배치를 분리함으로써 메모리 할당과 공유를 단순화합니다.
핵심 질문: 한 프로세스가 다른 프로세스나 커널의 메모리를 마음대로 읽거나 수정할 수 있을까요?
페이지 테이블 엔트리에는 주소 변환 정보 외에 접근 권한 정보도 들어갈 수 있습니다.
| 권한 또는 속성 | 의미 |
|---|---|
| 읽기(Read) | 페이지를 읽을 수 있는가? |
| 쓰기(Write) | 페이지를 수정할 수 있는가? |
| 실행(Execute) | 페이지의 코드를 실행할 수 있는가? |
| 사용자/커널 접근 | 사용자 모드에서 접근할 수 있는가? |
실제 비트 구성은 CPU 아키텍처마다 다릅니다. 아래는 개념적인 설명입니다.
예시: 읽기 전용 페이지에 쓰기를 시도할 때
핵심: MMU는 주소를 변환할 뿐 아니라 운영체제가 설정한 권한을 검사하여 메모리를 보호합니다.
| 절 | 핵심 개념 | 한 문장 정리 |
|---|---|---|
| 9.1 | VA, PA, MMU | CPU가 생성한 가상 주소를 물리 주소로 변환합니다. |
| 9.2 | Address Space | 프로세스마다 독립적인 주소 공간을 제공합니다. |
| 9.3 | VP, PP, PTE, Page Fault | 필요한 페이지만 DRAM에 유지합니다. |
| 9.4 | Memory Management | 물리 메모리 공유와 할당을 단순화합니다. |
| 9.5 | Memory Protection | 페이지 단위 접근 권한으로 메모리를 보호합니다. |
정답 및 해설
운영체제가 가상 페이지와 물리 페이지의 연결 정보를 관리한다는 것은 알겠습니다. 그렇다면 MMU는 이 정보를 어디에서 찾고, 실제로 가상 주소를 물리 주소로 어떻게 변환할까요?
이 질문을 통해 9.6의 주소 변환(Address Translation), VPN/VPO/PPN/PPO, TLB로 넘어갈 수 있습니다.