[05.29/week12]TIL

CHO WanGi·2025년 5월 29일

KRAFTON JUNGLE 8th

목록 보기
61/89

오늘 하루 요약

✏️ 오늘의 한 일

  • CSAPP 09. 가상주소를 물리주소로 번역하는 과정
  • PintOS VM Gitbook Introduction

🌈오늘의 성장!

CSAPP 09. 가상주소를 물리주소로 번역하는 과정

1. 가상 주소 분해

  • 가상 주소는 Virtual Page Number(8비트)Virtual Page Offset(6비트)으로 분리 가능하다
    만약 0x03D4 라는 가상 주소가 있다면 일단 이걸 2진수로 변경하고 진행한다.

  • 분해 결과

    • VPN : 00 0011 11 = 0x0F
    • VPO : 01 0100 = 0x14

2. TLB 접근(Translation Lookaside Buffer), VPN 분해

  • TLB란?
    가상 메모리의 주소를 물리 메모리의 주소로 번역하기 위해 사용되는 캐시.

  • VPN 분해 (VPN = 00 0011 11)
    VPN는 또 TLB Tag(왼쪽부터 6비트), TLB Index(하위 2비트)로 분리 가능하다

  • 분해 결과

  • TLBT(Tag) : 00 0011 (0x03)

  • TLBI(Index) : 11 (0x03)

  • TLB Table 확인
    사진을 보면 TLBI가 3이기때문에 3번 Set를 확인.
    TLBT 값을 갖고 있다면 TLB Hit,없다면 TLB Miss 이다.
    3번 Set에 tag값 03이 있기에 TLB Hit.
    이를 활용해서 PPN, 즉 물리 페이지 번호를 얻을 수 있다.

  • 물리 주소 생성
    • PPN : 0x0D
    • PPO = VPO(offset이기에 동일) : 0x14

만약 TLB Miss 라면 MMU는 Page Table Entry에 접근한다. 만약 여기에도 없다면 그게 Page Fault.

3. 물리 주소 분해

전 단계에서 생성한 물리 주소로 L1 캐시에 접근하는 과정이다.

  • 물리 주소는 Cache Tag(CT), Cache Index(CI), Cache Offset(CO)로 분해가능하다.
    CT는 왼쪽부터 6비트, CI는 중간 4비트, CO는 마지막 2비트 이다.

  • 분해 결과
    • CT(Tag) : 0011 01 (0x0D)
    • CI(Index) : 01 01 (0x05)
    • CO(Offset) : 00 (0x00)

4. Cache 접근

TLB 와 동일한 방식으로 찾는다.
CI로 인덱스를 확인하고, 그 테이블에 CT가 있는지를 확인, 존재한다면 Cache Hit, 없다면 Cache Miss.

위 예시는 캐시 히트이므로
물리 주소인 0x354 + Offset(CO) 주소로 부터 36바이트 만큼 데이터를 읽고
MMU를 거쳐, CPU로 전달된다.

PintOS VM Gitbook Introduction

요구사항

가상 메모리를 구현하여 메모리 크기 제한을 없애기.

세부 구현 사항

  1. Supplemental Page Table
  2. Frame Table
  3. Swap Table
  • 메모리 구성

Managing Supplemental Page Table

// vm.h
/* Representation of current process's memory space.
 * We don't want to force you to obey any specific design for this struct.
 * All designs up to you for this. */
struct supplemental_page_table {
};

Task

  1. Page Fault 처리 => vm_try_handle_fault 함수 수정
  2. Process 종료 => 해당 프로세스가 쓰던 자원을 모두 해제

vm_try_handle_fault의 flow

  1. Fault 위치 확인 및 유효성 체크
    Page Fault가 발생한 가상 페이지를 찾고 메모리 참조가 유효한지 체크한다.

만약 유효하다면, 해당 페이지에 들어갈 데이터의 위치를 파악,
file System, Swap slow, 0으로 채워진 페이지 등 어디서 데이터를 가져올건지를 정해야한다.

  1. Page를 담을 frame 확보

  2. Data를 frame에 채우기

  3. Page table 항목을 업데이트 한다.

⛏ 오늘의 삽질

문과적 감성으로 Docs좀 친절히 써주면 좋겠당....^^

profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글