크래프톤 정글 (컴퓨터 시스템: CSAPP)/9장 가상 메모리

컴퓨터 시스템 : CSAPP 9장 정리 - 9.4 ~ 9.5

고웅 2025. 4. 20. 14:14

9.4 가상 메모리를 메모리 관리 도구로 활용하기

앞선 절에서는 가상 메모리가 DRAM을 디스크 기반 가상 주소 공간의 캐시로 활용하는 방식을 살펴봤다. 이번 절에서는 가상 메모리가 어떻게 메모리 관리를 단순화하고 개선하는지를 설명한다.

독립적인 주소 공간

  • 현대 운영체제는 각 프로세스마다 독립적인 페이지 테이블을 제공한다.
  • 즉, 각 프로세스는 자신만의 가상 주소 공간을 갖는다.
  • 예를 들어, 프로세스 i는 VP1을 PP2에, VP2를 PP7에 매핑할 수 있고, 프로세스 j는 VP1을 PP7에, VP2를 PP10에 매핑할 수 있다.
  • 같은 물리 페이지를 서로 다른 가상 페이지가 공유하는 것도 가능하다. 이는 코드 공유 등에 유용하다​.

장점

  1. 링킹 단순화
    • 각 프로세스가 고정된 형식의 메모리 이미지(코드, 데이터, 스택 위치)를 사용 가능하다.
    • 예를 들어 리눅스에서는 모든 프로세스의 코드 세그먼트가 0x400000부터 시작하는 등 일관된 레이아웃을 갖는다.
  2. 로딩 단순화
    • 실행 파일을 메모리에 적재할 때, .text나 .data 섹션을 위한 가상 페이지를 할당하고, 해당 PTE를 object file의 위치로 설정한다.
    • 이때 데이터를 메모리에 직접 복사하지 않고, 첫 참조 시에 요구 페이징(demand paging)을 통해 자동으로 로딩된다.

이처럼 가상 메모리는 프로세스 간의 메모리 충돌을 방지하고, 메모리 공간을 균일하게 유지하며, 코드 및 데이터 공유를 가능하게 만든다.


9.5 가상 메모리를 메모리 보호 도구로 활용하기

현대 컴퓨터 시스템은 운영체제가 메모리 접근을 제어할 수 있는 수단을 반드시 제공해야 한다. 사용자 프로세스는 다음과 같은 작업을 하면 안 된다:

  • 자신의 읽기 전용 코드를 수정하는 행위
  • 운영체제 커널의 코드나 데이터를 읽거나 수정하는 행위
  • 다른 프로세스의 사적 메모리를 읽거나 수정하는 행위
  • 명시적으로 허용되지 않은 공유 페이지를 수정하는 행위

접근 제어 구현 방식

기본적으로 각 프로세스에 분리된 가상 주소 공간을 제공하면, 프로세스 간 메모리 침범을 방지할 수 있다. 하지만 여기서 더 나아가, 페이지 단위의 접근 권한 제어도 가능하다.

주소 변환 하드웨어는 매번 주소를 생성할 때 PTE(Page Table Entry)를 참조하므로, PTE에 추가적인 접근 제어 비트(permission bits)를 추가하면 정교한 보호가 가능하다.

예시: 접근 제어 비트

PTE에 세 가지 비트를 추가한다고 가정한다:

  • SUP (Supervisor bit): 이 비트가 1이면 해당 페이지는 커널 모드에서만 접근 가능하다. 사용자 모드에서는 접근이 차단된다.
  • READ: 페이지에 대한 읽기 권한
  • WRITE: 페이지에 대한 쓰기 권한

예를 들어, 어떤 프로세스 i가 사용자 모드로 실행 중일 때, VP0는 읽기만 가능하고, VP1은 읽기 및 쓰기 모두 가능하지만, VP2는 접근 불가능한 식으로 동작할 수 있다​.