CSAPP/9장

[CSAPP] 9장 가상 메모리(Virtual Memory) - 9.1 ~ 9.2

넌뭐가그렇게중요해 2025. 4. 21. 19:26

왜 가상 메모리를 배워야 할까?

가상 메모리는 단순한 메모리 관리 기술이 아닙니다. 현대 운영체제, 컴파일러, 하드웨어의 핵심 연결고리이자, 다음과 같은 강력한 기능을 제공합니다.

  • (1) 효율적인 메모리 사용
    → 실제 메모리보다 큰 프로그램도 실행 가능하게 해줍니다. 디스크에 있는 데이터를 필요할 때만 메모리에 불러오는 캐시 구조로 동작합니다.
  • (2) 프로세스 간 메모리 보호
    → 각 프로세스는 자기만의 가상 주소 공간을 갖습니다. 다른 프로세스 메모리에 접근할 수 없어 안정성이 보장됩니다.
  • (3) 메모리 관리 단순화
    → 개발자는 '주소'를 직접 신경 쓰지 않고도 동적으로 메모리를 할당하고 해제할 수 있습니다.

9.1 물리 및 가상 주소 방식

물리 주소 (Physical Address)

  • 실제 DRAM(메인 메모리) 상의 주소입니다.
  • 0부터 시작해서 M - 1 바이트까지 쭉 이어진 실제 하드웨어 주소라고 생각하면 됩니다.

가상 주소 (Virtual Address)

  • CPU가 프로그램 실행 중 생성하는 주소는 **가상 주소(VA)**입니다.
  • 이 VA는 MMU(Memory Management Unit)를 통해 **물리 주소(PA)**로 변환되어 메모리에 접근합니다.

주소 변환이 필요한 이유

  • 하나의 CPU에서 여러 프로세스를 실행할 때, 각 프로세스가 동일한 주소를 사용하더라도 물리 메모리 상에서는 겹치지 않도록 분리시켜야 합니다.
  • MMU + 페이지 테이블을 통해 이 매핑을 하드웨어 + 운영체제가 협업하여 처리합니다.

쉽게 말해, 프로세스 입장에서는 ‘0x400000’이라는 주소를 쓴다고 해도,
물리적으로는 서로 다른 위치에 매핑될 수 있는 구조입니다.


9.2 주소 공간 (Address Spaces)

주소 공간이란?

  • 0, 1, 2, ..., N-1처럼 순차적으로 번호가 붙은 주소의 집합을 말합니다.
  • 주소의 개수가 2n2^n개라면, 이건 n비트 주소 공간이라고 부릅니다.

예)

  • 32비트 주소 공간 → 2322^{32} = 약 4GB
  • 64비트 주소 공간 → 2642^{64} = 아주 큰 공간 (이론상 16EB)

가상 주소 공간 vs 물리 주소 공간

항목설명
가상 주소 공간 프로세스가 인식하는 주소 공간 (논리적 주소)
물리 주소 공간 실제 메모리 주소 (하드웨어 레벨)

여러 프로세스가 동일한 가상 주소를 사용하더라도, 페이지 테이블 덕분에 서로 다른 물리 주소로 매핑됩니다.

왜 중요할까?

  • 프로그램은 자신만의 독립된 공간에서 실행된다고 '착각'하게 됩니다.
  • 이런 분리는 메모리 충돌을 막고, 메모리 해킹도 어렵게 만듭니다.

요약

개념 설명
물리 주소 실제 메모리 주소(하드웨어)
가상 주소  CPU가 생성하는 주소(논리적)
주소 변환 MMU + 페이지 테이블로 VA → PA 변환
주소 공간 특정 비트 수로 표현 가능한 주소 집합