[CSAPP 9장 완전 정복] 9.6 주소의 번역 - 가상 주소는 어떻게 물리 주소로 바뀔까?

2025. 4. 23. 12:01·크래프톤 정글/컴퓨터구조(CSAPP)

주소의 번역 - 가상 주소는 어떻게 물리 주소로 바뀔까?

가상 메모리는 각 프로세스에게 독립적인 메모리 공간을 제공해 주는 멋진 기술입니다. 그런데 실제 하드웨어 입장에서는 RAM에 있는 실제 물리 주소로 접근해야 하기 때문에, 운영체제와 하드웨어는 가상 주소를 물리 주소로 변환하는 작업을 수행합니다.

 

이번 절에서는 CSAPP 9.6절 내용을 바탕으로 이 주소 변환 과정의 구조와 흐름을 정리해 보겠습니다.

 

 

가상 주소(Virtual Address)의 구성

가상 주소는 페이지 기반으로 나뉘는데요. 일반적으로 두 부분으로 구성됩니다.

[가상 페이지 번호 (VPN)] | [페이지 오프셋]
     ← p bits →            ← d bits →
  • VPN(Virtual Page Number): 몇 번째 페이지인지
  • VPO(Virtual Page Offset): 해당 페이지 안에서 몇 번째 바이트인지

예를 들어, 64-bit 시스템에서 페이지 크기가 4KB(4096 = 212 바이트)라고 가정해 보겠습니다. 이는 곧 하나의 페이지 안에 4096개의 바이트 주소가 존재한다는 뜻입니다. 이때 offset은 하나의 페이지 안에서 바이트 단위로 주소를 구분하기 위해 총 12비트를 가지게 되지요.

 

 

가상 주소 -> 물리 주소 변환 과정

 

  1. 가상 주소(VA)가 생성된다.
    • 이 주소는 [VPN | offset] 형태로 구성
  2. TLB(MMU 내부의 캐시)에서 VPN을 조회한다.
    1. TLB hit인 경우:
      → TLB에서 해당 VPN의 PPN(Physical Page Number)을 바로 찾음
    2. TLB miss인 경우:
      → 페이지 테이블을 참조해 VPN에 대응되는 PPN을 찾음
  3. 찾은 PPN과 offset을 결합하여 물리 주소(PA)를 만든다.
    • PA = [PPN | offset]
  4. 찾은 매핑은 TLB에 자동으로 저장
    • 다음 주소 변환 시 TLB hit 확률을 높이기 위해 시스템이 처리

 

주소 번역의 핵심 구성 요소

페이지 테이블(Page Table)

  • 운영체제가 프로세스별로 관리하는 VA -> PA 매핑표
  • 각 항목은 "가상 페이지 번호" -> "물리 페이지 프레임 번호"를 연결
항목 의미
Valid bit 유효한 페이지인지 (아니면 page fault)
PPN Physical Page Number
Protection bit R/W/X 접근 권한
Dirty bit 쓰기 발생 여부 (교체 시 디스크 쓰기 필요 여부)

페이지 테이블은 메모리에 저장되며, TLB에 비해 상대적으로 접근 속도가 느립니다.

 

TLB(Translation Lookaside Buffer)

  • MMU 내부의 소형 고속 캐시로, 페이지 테이블 항목을 저장
  • 최근 접근한 VA->PA 매핑을 기억해 놓음
  • TLB hit -> 빠르게 주소를 변환
  • TLB miss -> 페이지 테이블 참조 후 TLB 갱신

TLB에는 캐시와 동일한 지역성 원리가 적용되어, 최근 쓴 매핑을 다시 쓸 가능성이 높다고 판단해 이를 저장해 놓습니다.

 

MMU(Memory Management Unit)

  • CPU 내부에 존재하는 하드웨어
  • 주소 번역을 전담하는 장치
  • CPU가 VA를 전달하면, 이를 자동으로 PA로 변환

 

다단계 페이지 테이블

가상 메모리를 페이지 단위로 나눴을 때, 이를 모두 기록하게 되면 페이지 테이블의 크기가 너무 커질 수 있는데요. 이 문제를 해결하기 위해, 페이지 테이블을 여러 단계로 나눠서 관리하는 방식이 바로 다단계 페이지 테이블입니다.

  • 예를 들어, 2단계 구조에서는 페이지 디렉터리 → 페이지 테이블 (→ 실제 물리 주소) 순으로 접근
  • x86-64 시스템은 총 4단계 구조를 사용: PML4 → PDPT → PD → PT (→ 실제 물리 주소)

이렇게 계층적으로 나누게 되면, 필요한 부분만 테이블에 만들어 관리할 수 있기 때문에 메모리 공간을 훨씬 절약할 수 있습니다. 실제로 대부분의 프로그램은 전체 주소 공간 중 일부만 사용하기 때문에, 굉장히 효율적인 방식이라고 할 수 있지요.

 

 

페이지 폴트(Page Fault)

프로그램이 어떤 데이터에 접근하려고 할 때, 그 데이터가 아직 메모리에 올라와 있지 않으면 페이지 폴트가 발생합니다.

  • 페이지 테이블에 있는 유효 비트(valid bit)가 꺼져 있거나, 해당 주소에 대한 매핑이 없는 경우 발생
  • 그러면 운영체제가 디스크에서 해당 데이터를 읽어와 메모리에 올리고,
  • 페이지 테이블과 TLB를 갱신한 뒤, 방금 실패했던 명령을 다시 실행하게 됨

이 과정은 모두 자동으로 처리되기 때문에, 사용자는 페이지 폴트가 일어났다는 사실조차 느끼지 못합니다.

 

 

상황별 주소 변환 성능 비교

상황 동작 속도
TLB hit 즉시 물리 주소 반환 매우 빠름
TLB miss + PT hit PT 참조 후 TLB 갱신 느림
Page fault 디스크에서 페이지 로드 매우 느림

TLB의 성능이 곧 주소 변환 성능을 결정하는 핵심이라고 할 수 있습니다.

 

 

핵심 요약

  • VA->PA 변환은 VPN으로부터 매핑된 PPN을 찾아 Offset을 더하는 과정이다
  • TLB는 최근 매핑을 저장해 놓는 캐시로, 주소 변환 속도에 큰 영향을 주는 핵심 장치다
  • 페이지 테이블은 프로세스별 VA->PA를 매핑해 놓은 테이블이다
  • 다단계 페이지 테이블은 메모리 절약을 위해, 주소 매핑 테이블을 계층적으로 구성한다
  • 페이지 폴트는 메모리에 없는 페이지에 접근할 때 발생하며, 필요한 페이지를 디스크 등에서 불러오는 느린 상황이다
저작자표시 비영리 변경금지 (새창열림)

'크래프톤 정글 > 컴퓨터구조(CSAPP)' 카테고리의 다른 글

[CSAPP 9장 완전 정복] 9.8 메모리 매핑 - mmap으로 파일을 메모리처럼 사용하는 방법  (0) 2025.04.23
[CSAPP 9장 완전 정복] 9.7 인텔 Core i7과 리눅스 메모리 시스템 - 실전 구조 따라잡기  (0) 2025.04.23
[CSAPP 9장 완전 정복] 9.5 메모리 보호 - 가상 메모리가 제공하는 고립과 안전  (0) 2025.04.22
[CSAPP 9장 완전 정복] 9.4 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀  (0) 2025.04.22
[CSAPP 9장 완전 정복] 9.3 캐싱 도구로서의 VM(가상 메모리) - 지역성과 페이지  (0) 2025.04.22
'크래프톤 정글/컴퓨터구조(CSAPP)' 카테고리의 다른 글
  • [CSAPP 9장 완전 정복] 9.8 메모리 매핑 - mmap으로 파일을 메모리처럼 사용하는 방법
  • [CSAPP 9장 완전 정복] 9.7 인텔 Core i7과 리눅스 메모리 시스템 - 실전 구조 따라잡기
  • [CSAPP 9장 완전 정복] 9.5 메모리 보호 - 가상 메모리가 제공하는 고립과 안전
  • [CSAPP 9장 완전 정복] 9.4 메모리 관리를 위한 도구로서의 VM - 할당과 회수의 비밀
그냥사람_
그냥사람_
IT 관련 포스팅을 합니다. 크래프톤 정글 8기 정경호
  • 그냥사람_
    그냥코딩
    그냥사람_
  • 전체
    오늘
    어제
    • 글 전체보기 N
      • 크래프톤 정글 N
        • 로드 투 정글(입학시험)
        • CS기초(키워드, 개념정리) N
        • 컴퓨터구조(CSAPP)
        • Code 정글(C언어)
        • Equipped in 정글(나만무) N
        • 마이 정글(WIL, 에세이) N
      • 자료구조&알고리즘
        • 자료구조
        • 알고리즘
      • 일상
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • hELLO· Designed By정상우.v4.10.3
그냥사람_
[CSAPP 9장 완전 정복] 9.6 주소의 번역 - 가상 주소는 어떻게 물리 주소로 바뀔까?
상단으로

티스토리툴바