수정입니다
19. Translation Lookaside Buffers 본문
TLB
- Part of the chip's memory-management unit(MMU)
- 자주 쓰이는 PTE를 TLB에 저장하는 방식
- cache memory의 일
- VA에서 PA 변환하려 page table 보기 전에 TLB를 먼저 보고, TLB에 있으면 굳이 page table을 보려고 memory를 방문하지 않고도, MMU에서 알아서 TLB를 보고 PA로 변환
- 대신 TLB는 몹시 작다
TLB Basic Algorithms
- TLB hit이고, accessible 하면 바로 TLB 내부에서 PFN 추출 후 PA 변환
- TLB hit이지만 inaccessible이면 exception 발생
- TLB miss 나면, page table을 봐서 PTE를 꺼냄
- 이후 그 miss 난 PTE를 TLB에 insert 하고, retry 해서 TLB hit으로 만들어 줌
- => PTE에서 physical mem으로 접근하는게 아니라 걍 PTE 정보랑 VPN 같이 TLB에 넣어주고 재실행
Accessing An Array
- TLB 사용으로 performance 증가
- 이 경우는 spatial locality(접근했던 곳의 인접한 곳을 다시 접근할 확률이 높음)
** Temporal locality (방금 접근한 주소를 다시 접근할 확률이 높음)
Who Handles The TLB Miss?
- CISC vs RISC
CISC (Intel)
- hardware가 자동으로 page table을 보고, 맞는 entry를 찾고 translation 해주고 update, retry 알아서 해줌
- hardware-managed TLB
RISC(ARM)
- hardware는 그냥 exception만 띄움 => trap handler 발생
- OS로 넘어가서 TLB miss 처리
- prefetch abort exception (명령어 패치할 때)
- data abort exception(load/store 같은 명령어 처리할 )
- software-managed TLB
TLB Control Flow algorithm(OS handled)
- MMU 처리랑 비슷하나, TLB miss가 났을 때, hardware가 exception 처리만 한다는 점이 다름
- (이후에는 OS가 trap handler로 처리)
TLB entry
- fully associative method => (VPN의 번호가 어떻든 상관없이 걍 TLB 내의 위치 자유, 정렬x)
- hardware가 모든 TLB를 병렬적으로 찾음 (빠르게 찾으려고)
TLB Issue : Context Switching
- process A가 실행 중에 TLB에 VPN 10에 대한 정보를 넣고
- process B로 switching 했을 때, B도 같은 VPN 10에 대한 정보를 TLB에 넣을 수 있음(VPN은 process마다 고유하니까)
- 이 때 TLB table 내에서는 VPN 번호가 같기 때문에 혼란이 올 수 있음
To solve Problem
- address space identifier(ASID) 를 TLB에 부여
- 예전에는 switching 할때마다 TLB를 다 날리고 다시 채우는 방식으로 했다고 한다.
TLB Replacement Policy
- LRU(Least Recently Used)
- 제일 오랫동안 안 쓴 공간부터 치워버리는 방식
'전공 > 운영체제' 카테고리의 다른 글
26. Concurrency : An Introduction (1) | 2024.01.15 |
---|---|
20. Paging: Smaller Tables (1) | 2024.01.14 |
18. Paging: Introduction (0) | 2024.01.14 |
17. Free-Space Management (1) | 2024.01.11 |
16. Segmentation (2) | 2024.01.09 |