크래프톤 정글(PintOS WEEK 9 ~ 14)

TLB(Translation Lookaside Buffer)

devkty 2025. 6. 8. 00:20
728x90

TLB(Translation Lookaside Buffer)

TLB는 가상 주소 → 물리 주소 변환 정보를 캐시해 놓는 하드웨어 캐시입니다.

주소 변환 시 매번 페이지 테이블을 참조하면 느리기 때문에, 자주 접근하는 페이지 매핑 정보를 빠르게 제공하기 위해 존재합니다.
→ [ TLB = 주소 변환 캐시 ] 라고 생각하면 좋습니다.

필요성

페이지 테이블 탐색은 메모리 접근이 여러 번 필요하기 때문에 느릴 수 있습니다. 특히 x86-64에서는 4단계 페이지 테이블 구조를 사용하기 때문에 사용합니다.

하나의 VA 변환 = 최대 4번의 메모리 접근 필요

→ 그래서 자주 쓰는 VA 매핑을 TLB에 저장해두고, 먼저 확인합니다.

동작 흐름

  1. CPU가 가상 주소(VA)를 생성
  2. TLB에서 해당 VA의 페이지 번호(VPN) 매핑을 검색
  3. 있으면 (TLB hit): 물리 주소(PA)를 즉시 얻음
  4. 없으면 (TLB miss)
    • 페이지 테이블 참조
    • VA → PA 변환
    • 변환 결과를 TLB에 저장 (캐싱)
    • 이후 재사용 가능

구조와 성능

  • 작지만 빠른 캐시 (보통 수십 ~ 수백 개 항목)
  • Context Switch 시 무효화(invalidate) 필요 → 프로세스마다 주소 공간이 다르기 때문입니다.
  • 일부 CPU는 Process ID (PID) 기반 TLB를 지원해서 context switch 시에도 재사용 가능합니다.

Pintos 에서…

Pintos에서는 직접적인 TLB 구현은 없지만 암묵적으로 작동합니다.

  • Pintos는 x86-64 하드웨어 기반에서 돌아가는 소형 커널입니다.
  • TLB는 하드웨어가 자동으로 처리합니다.
  • Pintos에서는 페이지 테이블만 관리하면 됩니다.
/* 페이지 테이블에 가상 주소와 물리 프레임을 매핑 */
pml4_set_page (pml4, upage, kpage, writable);

→ 위 호출이 끝나면, 다음 VA 접근 시 TLB가 자동으로 업데이트 됩니다. (단, 현재 실행 중인 PML4와 일치할 경우)

Context Switch 시 고려 사항
Pintos에서는 새로운 프로세스가 실행될 때마다 pml4_activate()가 호출됩니다. 이때 하드웨어는 현재의 CR3 레지스터 (페이지 테이블 루트 주소)를 교체합니다. 즉, 기존 TLB의 내용은 대부분 무효화(invalidate) 됩니다.

/* 새 프로세스의 페이지 테이블 활성화 */
void
pml4_activate (struct pml4 *pml4) {
lcr3(vaddr_to_paddr(pml4));
}

lcr3()를 호출하면 하드웨어가 TLB를 자동으로 비웁니다.

요약

항목 설명
TLB란? 가상 주소 → 물리 주소 매핑 정보를 저장하는 하드웨어 캐시
장점 빠른 주소 변환, 페이지 테이블 접근 횟수 감소
단점 제한된 용량, context switch 시 invalidation 필요
Pintos에서의 처리 pml4_set_page()로 매핑 생성, pml4_activate()로 context 전환 시 TLB 갱신 유도
직접 구현? X. TLB는 하드웨어가 처리, Pintos는 페이지 테이블만 구성하면 자동 적용됨
728x90

'크래프톤 정글(PintOS WEEK 9 ~ 14)' 카테고리의 다른 글

Lazy Loading(지연 로딩)  (0) 2025.06.08
Page Fault (페이지 폴트)  (0) 2025.06.08
Page Table  (0) 2025.06.08
VM (가상메모리)  (0) 2025.06.08
WEEK 12 PintOS TIL(6월1일 일요일)  (0) 2025.06.08