TLB

TLB 란?

Translation Lookaside Buffer, (변환 색인 버퍼)

정의

  • 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시

  • 일종의 주소 변환 캐시로 최근에 일어난 가상 메모리 주소와 물리 주소의 변환 테이블을 저장

특징

  • 하드웨어적으로 지원하며 페이지 테이블의 임시저장 캐시 역할을 함

  • 캐시 메모리(하드웨어)에 별도로 페이지 넘버 - 프레임 넘버에 대한 매핑 정보를 담고 있는 테이블

  • 여러가지 다른 레벨의 캐시들 사이에서 주소를 변환하는데 사용

    • EX) CPU와 CPU캐시 사이, CPU캐시와 메인 메모리 사이 등

  • 현재 모든 데스크탑 및 서버용 프로세서는 하나 이상의 TLB를 메모리 관리 하드웨어에 가지고 있음

  • 페이지, 세그먼트 단위로 처리하는 가상 메모리를 사용하는 거의 모든 하드웨어는 TLB를 사용

  • 작은 크기

    • 64~1024 entry 정도로 작은 크기

    • TLB에 내용이 있을 경우, 메모리에 접근하기 전에 사용해야하므로 크기를 작게하여 속도를 높임

    • 보통 SRAM으로 구성

실행

  1. CPU는 1차적으로 TLB에 접근해 원하는 페이지가 존재하는지 탐색

  2. TLB에 존재하지 않을 경우 MMU 페이지 테이블 참조

MMU는 CPU 내부에 존재하며, 일반적으로 MMU안에 TLB가 포함되어 있다.

사용 이유

  • 페이지 테이블은 메인 메모리에 저장되기에 프로그램에 의한 모든 메모리 접근은 최소 두 번 필요함

    • 실제 주소를 얻기 위한 메모리 주소 접근 (가상 주소 → 실제 주소)

    • 데이터를 얻기 위한 접근

  • 결과적으로 접근 시간이 2배 걸리는 것을 해결하기 위해 사용

Hit & Miss & Flushing

  • TLB Hit

    • TLB에 페이지 넘버가 존재하는 경우

    • 메모리에 1번 접근

      • TLB에 접근하며 페이지 테이블에 접근하지 않음

  • TLB Miss

    • TLB에 페이지 넘버가 없는 경우

    • TLB엔 없지만 main memory에는 올라가 있는 상태

    • 기존보다 더 많은 시간 소요

      • 기존 방식 + TLB 접근 시간 추가

  • TLB Flushing

    • TLB를 강제로 초기화

      • Full flushing - 전부 초기화

      • Partial Flushing - 부분 초기화

    • Context Switching이 발생하면 이전 프로세스의 Entry는 필요하지 않으므로 초기화

    • 페이지 테이블이 변경되면 페이지의 위치가 변할 수 있으므로 초기화

  • Hit ratio

    • 접근하려는 메모리의 페이지 번호가 TLB에서 발견되는 비율

    • 이를 통해 평균 접근 시간 EAT(effective memory access time) 계산 가능

      • EAT = (Hit ratio) * (TLB Hit시 접근시간) + (1 - Hit ratio) * (TLB Miss시 접근 시간)

이와 같은 이유로 TLB Miss를 줄이는 방법(TLB replacement)가 필요하다. 여기에 해당하는 알고리즘으로 LRU, FIFO, RANDOM등이 있다.

TLB 구성

  • VPN(Virtual Page Number)

    • 가상 페이지 번호

  • PFN(Page Frame Number)

    • 물리 메모리의 페이지 프레임 번호

  • Other bits

    • Vaild bit

      • 페이지가 물리 메모리에 적재되어 있으면 1, 아니면 0 값

    • Protection bit

      • 읽기(read), 쓰기(write), 실행(execute) 등의 권한을 설정하여 메모리와 시스템을 보호

    • Drity bit

      • TLB의 내용의 write가 있었는지 확인하는 비트

        • 1일 경우: write되었으므로 TLB에서 나갈때 메모리에 write 해줌

        • 0일 경우: 기존의 메모리에 있는 값가 동일함으로 그냥 나감

    • Reference bit

      • 메모리에서 값이 참조 될 때 1로 변환

      • TLB가 꽉 찼을때 내보낼 페이지 선택시 LRU알고리즘 사용

        • Reference bit를 기준으로 비트가 0인 페이지부터 교체

        • Reference bit가 모두 1이 되면 주기적으로 0으로 변환

    • ASID(Address Space Identifier)

      • 프로세스 구분을 위해 사용

ASID

  • 프로세스는, 프로세스 마다 다른 페이지 테이블을 가짐

  • TLB는 전역에 있기에 전체 프로세스에 대한 캐시를 다뤄야 함

  • 따라서 TLB는 테이블에 단순히 페이지 넘버 뿐 아니라, 프로세스 아이디도 가지고 있어야 함

    • 이를 ASID(Address-space Identifier)라고 함

Ref

빽 투더 기본기 [OS 7편]. 메모리 관리 2 MMU, TLB

Last updated