[CS] TLB(Translation Lookaside Buffer)
1. TLB 의미와 구성
TLB 정의
: 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시
: 최근에 일어난 가상 메모리 주소와 물리 주소의 변환 테이블 저장
: 일종의 주소 변환 캐시
TLB 발생 이유
: 모든 가상메모리 참조는 두 번의 물리 메모리 참조 수반
- 해당 페이지테이블 항목 참조
- 요구된 데이터 접근을 위한 참조
: 두 배의 메모리 접근 시간을 갖게 됨
→ 그래서 가상에서 물리주소로 변환을 위한 전용 하드웨어 캐시
mmu의 chip 부분 → table로 가기 전에 한번 tlb에 있는 지 검사
💡 TLB가 나오게 된 배경은 무엇이고, TLB 개념에 대해 설명해 주세요.
💡 TLB를 사용한 전체적인 페이지 탐색과정에 대해 설명해 주세요.
TLB 구성
- VPN(VPFS Virtual Page Frame Number)
- TLB KEY
- CPU 코어가 요청한는 가상주소(Virtual Address)는 VPN과 VPO(offset)로 구성
- TLB 에서는 코어에서 요청한 가상주소에서 VPN을 추출해 내부 검색
- PPN(PPFN Physical Page Frame Number)
- VPN과 1:1 대응되는 TLB VALUE
- 코어가 요청한 가상주소에 해당하는 페이지의 주기억장치 주소를 저장
- PFO(offet)와 결합해 주기억창지 주소 완성
- other bits 상태관리비트들
- valid
- hit/miss 여부를 표시
- 시스템 시작시 invalid 로 초기화됨
- protection
- TLB 페이지 접근 방식에 대한 표시, read/write/execute 에 대한 상태 표시
- 일종의 보호 비트
- ASID(Address Space ID)
- 단일 프로세스 환경
- VPN 충돌이 일어나지 않아 사용되지 않음
- 다중 프로세스 환경
- TLB가 하나인 경우 프로세스가 TLB에 접근하려 할 때 충돌 방지목적으로 프로세스 별 ID 부여하고 ID 별로 VPN 을 관리하게 됨.
- ASID가 등장하기 전에는 새로운 프로세스가 TLB에 접근시 매번 초기화 하는 방법을 사용했으나 큰 오버헤드 발생으로 고안됨.
- 단일 프로세스 환경
- dirty
- 페이지가 TLB에 적재된 이후 수정 여부를 나타내는 비트
- valid
tlb 순서
1) 가상주소가 주어지면, 처음에 TLB 살펴봄
2-1) 가상주소가 TLB에 존재 (TLB hit) ---> 바로 프레임 번호 추출 --> 실주소 구성
2-2) 해당 페이지테이블 항목 부재(TLB miss) ---> 페이지 번호로 페이지 테이블 인덱싱 ---> 페이지테이블 항목 참조
3-1) 존재비트 1일 경우, 해당 페이지 주기억장치에 존재 ---> 페이지테이블 항목의 프레임 번호 이용 ---> 실주소 구성 및 TLB 갱신
3-2) 존재비트 0일 경우, 해당 페이지 주기억장치에 존재X ---> 메모리 접근 오류 발생 (Page fault)
사상의 종류
- 직접사상
- 메인 메모리와 캐시를 똑같은 크기로 나누어 순서대로 매핑하는 것
- 블럭 하나, 캐시하나 매치
- 연관사상
- 페이지 번호가 순서대로 매치되지 않는 것
- 페이지 번호를 tlb 인덱스로 사용 x
- 특정 페이지 번호랑 일치하는 tlb 항목이 있는 지 조사하는 하드웨어 장착
TLB Hit
- TLB에서 주소변환이 성공한 것을 TLB Hit이라고 한다.
TLB MISS
TLB Miss | TLB Hit | TLB Hit | TLB Miss | TLB Hit | TLB Hit | TLB Hit | TLB Miss | TLB Hit | TLB Hit |
TLB는 Locality로 인해 성능을 향상
Spatical Locality
메모리 x를 접근했다면, x 근처의 메모리를 접근할 확률이 높다.
예) For문 등이 연속된 주소(공간)를 접근하기 때문에
다음에 수행될 부분이 TLB에 저장되어 있을 확률이 높다.
Temporal Locality
최근에 접근된 데이터는 또 다시 접근될 확률이 높다.
예) 첫 For문 이후에, 또 동일한 For문을 돌리는 경우
모든 경우에 대해서 Hit이 수행될 수 있다.
💡 TLB가 메모리 성능을 어떻게 향상시키는지 TLB hit rate 와 Spatial Locality 개념과 연관지어 설명해 주세요.
0. TLB -> hit, Cache -> hit, Virtual Memory -> hit
- Best, 먼저, TLB가 hit이므로 페이지 테이블을 볼 필요 없다. 즉, 메인 메모리 접근 필요없음. 그리고, cache hit이므로 TLB에 의해 가상 주소 -> 실제 주소, 이 실제주소를 가지고 cache에 접근해 페이지를 접근함.
1. TLB -> hit, Cache -> miss, Virtual Memory -> hit
- 이 경우는 TLB가 hit이므로 page table에 접근하지는 않는다. 그러나, cache가 miss이므로 페이지를 읽기 위해 메모리 접근 1회가 필요하다.
2. TLB -> miss, Cache -> hit, Virtual Memory -> hit
- 이 경우는 TLB가 miss이므로 page table에 접근해 가상 주소 -> 실제 주소 변환 작업이 필요하다. (메모리 접근 1회) 만약, page table을 접근했는데 valid bit이 0 이라면 page fault가 발생한다.
- cache는 hit이므로 더 이상의 메모리 접근은 없다.
3. TLB -> miss, Cache -> miss, Virtual Memory -> hit
- 이 경우는 TLB가 miss이므로 page table에 접근한다. 또한, cache도 miss 이므로 메모리에 접근해 페이지를 가져온다. 즉, 메모리 접근 2번이다.
4. TLB -> miss, Cache -> miss, Virtual Memory -> miss
- 이 경우는 최악의 경우로 메모리에서 miss가 발생했으므로 page fault가 발생한다. 즉, 가장 페이지의 Valid bit가 0이므로 운영체제가 제어를 넘겨받게 된다.(디스크로부터 페이지를 가져옴 - 시간이 오래걸려 성능이 저하된다. )
5,6,7. 불가능한 경우
- 가상 메모리와 캐시 시스템은 계층구조를 이루며 같이 동작한다. 따라서, 데이터가 메인 메모리에 없다면 그 데이터는 캐시에 있을 수 없다.(디스크 -> 메모리 -> 캐시 )