CSAPP 9.1~9.5

김우진·2026년 10월 2일

크래프톤 정글

목록 보기
23/26

CS:APP 9장 - 가상 메모리 (9.1~9.5)

설명 흐름: 가상 메모리가 필요한 이유 → 가상/물리 주소 → 독립적인 주소 공간 → 페이지 캐싱 → 메모리 관리 → 메모리 보호

한 문장 요약: 가상 메모리는 프로세스마다 독립적인 주소 공간을 제공하고, 필요한 페이지만 물리 메모리에 유지하며, MMU와 페이지 테이블을 통해 주소 변환과 접근 권한 검사를 지원합니다.


1. 가상 메모리(Virtual Memory)란?

가상 메모리는 각 프로세스가 자신만의 가상 주소 공간을 사용하도록 하고, 가상 주소를 물리 주소로 변환해 실제 메모리에 접근하게 하는 시스템입니다.

주요 목적은 세 가지입니다.

  1. 효율성: 필요한 페이지만 물리 메모리에 유지합니다.
  2. 단순화: 프로세스마다 일관된 주소 공간을 제공합니다.
  3. 보호: 허용되지 않은 메모리 접근을 막습니다.

2. 9.1 Physical and Virtual Addressing

2.1 물리 주소와 가상 주소

  • 물리 주소(Physical Address, PA): 실제 물리 메모리의 위치를 지정하는 주소입니다.
  • 가상 주소(Virtual Address, VA): 프로그램이 사용하는 주소입니다.
  • MMU(Memory Management Unit): 가상 주소를 물리 주소로 변환하는 CPU 하드웨어입니다.

2.2 운영체제와 MMU의 역할

구성 요소주요 역할
운영체제페이지 테이블 등 주소 매핑 정보를 생성하고 관리합니다.
MMU그 정보를 이용해 가상 주소를 물리 주소로 변환하고 접근 권한을 검사합니다.

핵심: 운영체제가 매핑을 관리하고, 하드웨어가 주소를 변환합니다. 단, 페이지 폴트 등 예외 상황에서는 운영체제가 개입합니다.


3. 9.2 Address Spaces

3.1 주소 공간이란?

주소 공간(Address Space)은 특정 주소 체계에서 표현할 수 있는 주소들의 집합입니다.

주소가 n비트라면 2ⁿ개의 서로 다른 주소를 표현할 수 있습니다. 바이트 주소 지정 시스템이라면 해당 주소 공간의 크기는 2ⁿ바이트입니다.

예를 들어 4비트 주소는 0000부터 1111까지 16개의 주소를 나타냅니다.

3.2 프로세스마다 독립적인 가상 주소 공간

프로세스 A와 B가 모두 가상 주소 0x1000을 사용한다고 가정합니다.

  • 두 프로세스가 같은 가상 주소를 사용하더라도 다른 물리 주소를 가리킬 수 있습니다.
  • 따라서 각 프로세스는 서로의 메모리 배치를 직접 고려하지 않고 실행될 수 있습니다.
  • 반대로 서로 다른 가상 주소를 같은 물리 페이지에 매핑하여 메모리를 공유하도록 구성할 수도 있습니다(9.4).

핵심: 가상 주소는 프로세스의 주소 공간에 속합니다.


4. 9.3 VM as a Tool for Caching

핵심 질문: 모든 가상 페이지가 DRAM에 올라와 있어야 할까요? → 아닙니다. 필요한 페이지만 유지할 수 있습니다.

4.1 가상 페이지(VP)와 물리 페이지(PP)

가상 메모리와 물리 메모리는 일정한 크기의 페이지 단위로 관리됩니다.

  • VP(Virtual Page): 가상 메모리의 페이지
  • PP(Physical Page): 물리 메모리의 페이지
  • 페이지 크기는 두 공간에서 동일합니다. 예를 들어 페이지 크기가 4KB라면 VP와 PP가 모두 4KB 단위입니다.

페이지 상태의미
Unallocated아직 할당되지 않은 가상 페이지
Cached물리 메모리(DRAM)에 적재된 페이지
Uncached할당되었지만 현재 DRAM에 적재되지 않은 페이지

그림에서 연결되지 않은 VP 3은 할당되어 있지만 DRAM에 없으며, VP 0은 미할당 상태입니다. PP 3은 비어 있다고 가정합니다.

4.2 페이지 테이블(Page Table)과 PTE

페이지 테이블은 가상 페이지가 어느 물리 페이지에 연결되는지 등의 정보를 보관하는 자료구조입니다. 각 항목을 PTE(Page Table Entry) 라고 합니다.

CS:APP의 단순화된 모델에서:

  • Valid = 1: 해당 VP가 DRAM에 존재하며, PTE로 물리 페이지를 찾을 수 있습니다.
  • Valid = 0: 해당 VP가 DRAM에 없습니다. 디스크에 저장된 할당 페이지일 수도 있고, 미할당 페이지일 수도 있습니다.

실제 시스템의 PTE 비트 표현과 페이지 상태 관리는 아키텍처와 운영체제에 따라 달라질 수 있습니다.

4.3 Page Hit(페이지 적중)

CPU가 접근하려는 페이지가 이미 DRAM에 존재하는 경우입니다.

예시: VP 1을 읽을 때

  1. CPU가 VP 1에 속한 가상 주소를 만듭니다.
  2. MMU가 페이지 테이블의 PTE 1을 확인합니다.
  3. Valid Bit가 1이므로 PP 2가 매핑되어 있음을 알아냅니다.
  4. 생성된 물리 주소로 캐시/DRAM에 접근합니다.

핵심: 페이지 폴트를 처리하기 위한 운영체제 개입 없이 정상적으로 접근할 수 있습니다.

4.4 Page Fault(페이지 폴트)

CPU가 접근한 가상 페이지가 현재 DRAM에 없어서 예외가 발생하는 경우입니다. 미할당 페이지에 대한 최초 접근이나 잘못된 접근에서도 페이지 폴트가 발생할 수 있습니다.

예시: VP 3이 디스크에 있을 때

  1. CPU가 VP 3에 접근합니다.
  2. MMU가 PTE 3을 확인하고 Valid Bit가 0임을 발견합니다.
  3. 페이지 폴트 예외가 발생합니다.
  4. 운영체제가 디스크에서 VP 3을 DRAM으로 불러옵니다. 필요하면 기존 물리 페이지를 교체합니다.
  5. 페이지 테이블을 갱신하고 중단된 명령어의 실행을 재개합니다.

주의: 페이지 폴트가 반드시 디스크 접근을 뜻하지는 않습니다. 예를 들어 최초 접근에 대응해 새 물리 페이지를 할당하는 경우에도 발생할 수 있습니다.

4.5 DRAM이 '캐시'인 이유

이 절에서는 DRAM을 더 큰 가상 메모리 공간의 활성 페이지를 보관하는 캐시로 봅니다. 전통적인 디스크 기반 페이지 캐싱 모델에서 생각하면 다음과 같습니다.

관계상대적으로 빠른 저장 공간상대적으로 느린 저장 공간
CPU 캐시SRAM 캐시DRAM
가상 메모리의 페이지 캐싱DRAM디스크

디스크 접근은 DRAM 접근보다 느리므로 페이지 폴트의 비용이 큽니다. 이에 따라 다음 특징이 중요합니다.

  • 큰 페이지 크기: 보통 4KB 이상으로 관리합니다.
  • 완전 결합 배치: 가상 페이지가 임의의 물리 페이지에 들어갈 수 있습니다.
  • 페이지 교체 정책: 어느 페이지를 내보낼지 선택하는 비용이 큽니다.
  • Write-back: 수정된 페이지를 내보낼 때 필요한 변경 내용을 하위 저장장치에 기록합니다.

5. 9.4 VM as a Tool for Memory Management

핵심 질문: 가상 메모리를 사용하면 운영체제가 메모리를 어떻게 더 쉽게 관리할 수 있을까요?

5.1 독립적인 주소 공간

각 프로세스는 자신만의 가상 주소 공간을 사용합니다. 서로 다른 프로세스에서 같은 가상 주소가 각각 다른 물리 주소를 가리킬 수 있습니다.

5.2 물리 메모리 공유

서로 다른 프로세스의 가상 페이지가 같은 물리 페이지를 가리킬 수도 있습니다.

예를 들어 여러 프로세스가 같은 공유 라이브러리의 코드를 사용할 때 물리 메모리를 공유할 수 있습니다. 공유 여부와 쓰기 권한은 운영체제의 매핑 설정에 따라 달라집니다.

5.3 메모리 할당 단순화

프로그램에 연속적인 가상 주소 구간을 제공하더라도 이에 대응하는 물리 페이지가 연속할 필요는 없습니다.

가상 페이지물리 페이지
VP 1PP 7
VP 2PP 2
VP 3PP 9

프로그램에는 VP 1~VP 3이 연속된 메모리처럼 보이지만 실제 물리 위치는 흩어져 있어도 됩니다.

핵심: 가상 주소와 물리 주소의 배치를 분리함으로써 메모리 할당과 공유를 단순화합니다.


6. 9.5 VM as a Tool for Memory Protection

핵심 질문: 한 프로세스가 다른 프로세스나 커널의 메모리를 마음대로 읽거나 수정할 수 있을까요?

페이지 테이블 엔트리에는 주소 변환 정보 외에 접근 권한 정보도 들어갈 수 있습니다.

권한 또는 속성의미
읽기(Read)페이지를 읽을 수 있는가?
쓰기(Write)페이지를 수정할 수 있는가?
실행(Execute)페이지의 코드를 실행할 수 있는가?
사용자/커널 접근사용자 모드에서 접근할 수 있는가?

실제 비트 구성은 CPU 아키텍처마다 다릅니다. 아래는 개념적인 설명입니다.

예시: 읽기 전용 페이지에 쓰기를 시도할 때

  1. CPU가 가상 주소에 쓰기를 시도합니다.
  2. MMU가 해당 페이지의 접근 권한을 검사합니다.
  3. 쓰기 권한이 없으면 예외를 발생시킵니다.
  4. 운영체제가 예외를 처리합니다. 유효하지 않은 접근이면 해당 프로세스를 종료할 수도 있습니다.

핵심: MMU는 주소를 변환할 뿐 아니라 운영체제가 설정한 권한을 검사하여 메모리를 보호합니다.


7. 전체 요약

절핵심 개념한 문장 정리
9.1VA, PA, MMUCPU가 생성한 가상 주소를 물리 주소로 변환합니다.
9.2Address Space프로세스마다 독립적인 주소 공간을 제공합니다.
9.3VP, PP, PTE, Page Fault필요한 페이지만 DRAM에 유지합니다.
9.4Memory Management물리 메모리 공유와 할당을 단순화합니다.
9.5Memory Protection페이지 단위 접근 권한으로 메모리를 보호합니다.

이해도 확인 문제

  1. 프로세스 A와 B가 같은 가상 주소를 사용해도 충돌하지 않을 수 있는 이유는 무엇인가요?
  2. CS:APP의 단순화된 페이지 테이블 모델에서 Valid Bit가 0이면 해당 페이지가 반드시 디스크에 존재하나요?
  3. 서로 다른 두 가상 페이지가 같은 물리 페이지를 가리킬 수 있나요?

정답 및 해설

  1. 프로세스별로 서로 다른 페이지 테이블 매핑을 사용할 수 있기 때문입니다.
  2. 아닙니다. 할당되었지만 DRAM에 없는 페이지일 수도, 미할당 페이지일 수도 있습니다.
  3. 가능합니다. 공유 라이브러리 등의 메모리 공유에 활용할 수 있습니다.

다음 절(9.6)로 연결하는 질문

운영체제가 가상 페이지와 물리 페이지의 연결 정보를 관리한다는 것은 알겠습니다. 그렇다면 MMU는 이 정보를 어디에서 찾고, 실제로 가상 주소를 물리 주소로 어떻게 변환할까요?

이 질문을 통해 9.6의 주소 변환(Address Translation), VPN/VPO/PPN/PPO, TLB로 넘어갈 수 있습니다.

0개의 댓글