Search
πŸ’Ύ

10 : Translation-Lookaside Buffer

course
last review
2023/04/13 β†’ 2023/04/14
mastery
rookie
progress
not started
date
2023/03/30
4 more properties
Previous chapter

Paging

νŽ˜μ΄μ§•μ€ κ³ μ • μ‚¬μ΄μ¦ˆλ‘œ λ©”λͺ¨λ¦¬λ₯Ό λ‚˜λˆ μ„œ 정보 맀핑에 λ§Žμ€ 양을 μš”κ΅¬ν•˜λŠ” ν˜•νƒœλ‘œ μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ„ν•œλ‹€.
β€’
각 가상 νŽ˜μ΄μ§€μ— ν•΄λ‹Ήν•˜λŠ” 물리 ν”„λ ˆμž„ λ„˜λ²„μ™€ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” μ—”νŠΈλ¦¬λ₯Ό μž‘μ„±ν•­ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ μ‚¬μ΄μ¦ˆκ°€ μ–΄λ§ˆλ¬΄μ‹œν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
β€’
가상 λ©”λͺ¨λ¦¬λ₯Ό 물리 μ£Όμ†Œλ‘œ λ³€ν™˜ν• λ•Œλ§ˆλ‹€ 이 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ μ°Έμ‘°ν•΄μ•Ό ν•˜λŠ”λ°, νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 읽기 μž‘μ—…μ€ μ—„μ²­λ‚œ μ„±λŠ₯ μ €ν•˜λ₯Ό μœ λ°œν•œλ‹€.

Main QUEST : Accelerating Address-Translation

μ£Όμ†Œ λ³€ν™˜μ„ λΉ λ₯΄κ²Œ ν•˜λŠ” 방법은 무엇이 μžˆμ„κΉŒ? νŽ˜μ΄μ§•μ—μ„œ λ°œμƒν•˜λŠ” μΆ”κ°€ λ©”λͺ¨λ¦¬ μ°Έμ‘°λ₯Ό ν”Όν•˜λŠ” 방법은 μ–΄λ–€κ²Œ μžˆμ„κΉŒ? μ–΄λ–€ ν•˜λ“œμ›¨μ–΄κ°€ ν•„μš”ν•˜λ©° OSκ°€ κ°œμž…λ₯Ό! μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?
OS의 싀행속도λ₯Ό κ°œμ„ ν•˜λ €λ©΄ 도움이 ν•„μš”ν•˜λ‹€.
λŒ€λΆ€λΆ„ ν•˜λ“œμ›¨μ–΄λ‘œλΆ€ν„° 도움을 λ°›λŠ”λ° μ΄λ²ˆμ—λ„ ν•˜λ“œμ›¨μ–΄κ°€ 해결해쀄 κ±°λ‹€.
μ£Όμ†Œ λ³€ν™˜μ„ λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•΄ λ³€ν™˜-색인 버퍼(translation-lookaside buffer, TLB)λ₯Ό λ„μž…ν•œλ‹€.
자주 μ°Έμ‘°λ˜λŠ” νŽ˜μ΄μ§€ν…Œμ΄λΈ” μ—”νŠΈλ¦¬λ₯Ό μ €μž₯ν•˜λŠ” ν•˜λ“œμ›¨μ–΄ μΊμ‹œμ΄λ©° MMU(λ©”λͺ¨λ¦¬ 관리 μœ λ‹›, memory-management unit)의 일뢀이닀.
β€’
μ£Όμ†Œλ³€ν™˜μ‹œ λ¨Όμ € TLB에 ν•΄λ‹Ή 정보가 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
β—¦
μžˆλ‹€λ©΄ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ ν†΅ν•˜μ§€ μ•Šκ³  λ³€ν™˜μ„ λΉ λ₯΄κ²Œ μˆ˜ν–‰ν•œλ‹€.

Translation-Lookaside Buffer(TLB)

VPN = (VirtualAddress & VPN_MASK) >> SHIFT (Success, TlbEntry) = TLB_Lookup(VPN) if (Success == True) // TLB hit if (CanAccess(TlbEntry.ProtectBits) == True) offset = VirtualAddress & OFFSET_MASK PhysAddr = (TlbEntry.PFN << SHIFT) | offset Register = AccessMemory(PhysAddr) else RaiseException(PROTECTION_FAULT) else // TLB miss PTEAddr = PTBR + (VPN * sizeof(PTE)) PTE = AccessMemory(PTEAddr) //νŽ˜μ΄μ§€ν…Œμ΄λΈ”μ„ μ ‘κ·Όν•˜κΈ°μœ„ν•œ 높은 μ˜€λ²„ν—€λ“œ if (PTE.Valid == False) RaiseException(SEGMENTATION_FAULT) else if (CanAccess(PTE.ProtectBits) == False) RaiseException(PROTECTION_FAULT) else TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits) RetryInstruction()
C
볡사
VPN = (VirtualAddress & VPN_MASK) >> SHIFT
C
볡사
λ¨Όμ € κ°€μƒμ£Όμ†Œλ‘œλΆ€ν„° VPN을 μΆ”μΆœν•œλ‹€. μ΅μˆ™ν•œ μ½”λ“œμ§€?
(Success, TlbEntry) = TLB_Lookup(VPN) if (Success == True) // TLB hit if (CanAccess(TlbEntry.ProtectBits) == True) offset = VirtualAddress & OFFSET_MASK PhysAddr = (TlbEntry.PFN << SHIFT) | offset Register = AccessMemory(PhysAddr) else RaiseException(PROTECTION_FAULT)
C
볡사
κ·Έ λ‹€μŒ VPN을 TLB에 μΈλ±μ‹±ν•˜μ—¬ ν•΄λ‹Ή PTEκ°€ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
성곡할 경우 (TLBμ—μ„œ νƒμƒ‰ν•˜μ—¬ λ§€ν•‘λ˜λŠ” λ†ˆμ΄ μžˆμ„κ²½μš°, 이λ₯Ό TLB HiT!이라고 ν•œλ‹€.) TLBκ°€ λ³€ν™˜ 값을 κ°–κ³  μžˆλ‹€λŠ” κ±Έ λœ»ν•œλ‹€.
ν•΄λ‹Ή TLBμ—μ„œ νŽ˜μ΄μ§€ ν”„λ ˆμž„ 번호λ₯Ό μΆ”μΆœν•  수 μžˆλ‹€.
else // TLB miss PTEAddr = PTBR + (VPN * sizeof(PTE)) PTE = AccessMemory(PTEAddr) //νŽ˜μ΄μ§€ν…Œμ΄λΈ”μ„ μ ‘κ·Όν•˜κΈ°μœ„ν•œ 높은 μ˜€λ²„ν—€λ“œ if (PTE.Valid == False) RaiseException(SEGMENTATION_FAULT) else if (CanAccess(PTE.ProtectBits) == False) RaiseException(PROTECTION_FAULT) else TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits) RetryInstruction()
C
볡사
λ°˜λŒ€λ‘œ TLB λ―ΈμŠ€κ°€ 일어날 경우 ν•΄μ•Όν•  일이 μ‚°λ”λ―Έμ²˜λŸΌ μŒ“μ΄κ²Œ λœλ‹€.
기본적으둜 μ˜¬λ°”λ₯Έ PTEλ₯Ό μ°ΎκΈ° μœ„ν•΄ λ©”λͺ¨λ¦¬μ— μžˆλŠ” νŽ˜μ΄μ§€ ν…Œμ΄λΈ”λ‘œ μ ‘κ·Όν•΄μ•Όν•œλ‹€.
λ©”λͺ¨λ¦¬μ—μ„œ μ˜¬λ°”λ₯Έ PTEλ₯Ό μ°Ύμ•˜λ‹€λ©΄, 이λ₯Ό TLB에 λ„£μ–΄μ£ΌλŠ” μž‘μ—…μ„ ν•œλ‹€.
λͺ¨λ“  μž‘μ—…μ΄ λλ‚œ ν›„, TLBλ₯Ό λ‹€μ‹œ νƒμƒ‰ν•˜μ—¬ HiTμ‹œν‚¨λ‹€!

Example

int a[10]; int sum =0; for(int i=0; i<10; i++){ sum += a[i]; }
C
볡사
가상 μ£Όμ†Œ 곡간은 8λΉ„νŠΈμ΄λ©°, νŽ˜μ΄μ§€ ν¬κΈ°λŠ” 16λ°”μ΄νŠΈμ΄λ‹€. 가상 μ£Όμ†ŒλŠ” 4λΉ„νŠΈ VPNκ³Ό 4λΉ„νŠΈ μ˜€ν”„μ…‹μœΌλ‘œ κ΅¬μ„±λœλ‹€.
λ°°μ—΄μ˜ 첫 ν•­λͺ©μΈ a[0]은 VPN : 06 offset : 4이닀.
for문을 λŒλ©΄μ„œ 각 λ°°μ—΄μ˜ μš”μ†Œλ₯Ό λͺ¨λ‘ ν•œλ²ˆμ”© λŒμ•„λ³΄λŠ” μ˜ˆμ œμ΄λ‹€.
맨처음 a[0]을 탐색할 λ•Œ TLBλ₯Ό 보자. TLBκ°€ μ™„μ „νžˆ μ΄ˆκΈ°ν™”λ˜μ–΄μžˆλ‹€κ³  κ°€μ •ν–ˆμ„ λ•Œ, TLB λ―ΈμŠ€κ°€ λ°œμƒν•œλ‹€.
λ”°λΌμ„œ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”λ‘œ μ•‘μ„ΈμŠ€ν•˜μ—¬, VPN06에 μžˆλŠ” PTEλ₯Ό TLB에 μ˜¬λ €λ†“λŠ”λ‹€.
a[1]의 VPN은 a[0]κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 06μ΄λ―€λ‘œ, TLB νžˆνŠΈκ°€ μΌμ–΄λ‚œλ‹€. a[2]도 λ§ˆμ°¬κ°€μ§€.
a[3]λŠ” λ‹€μ‹œ TLB λ―ΈμŠ€κ°€ λ‚œλ‹€. λ‹€μ‹œ VPN = 07둜 κ°±μ‹ ν•΄μ£Όλ©΄ a[6]κΉŒμ§€λŠ” TLBνžˆνŠΈκ°€ μΌμ–΄λ‚œλ‹€.
TLB의 둜그λ₯Ό μ‚΄νŽ΄λ³΄μž.
TLB log : miss HiT HiT miss HiT HiT HiT miss HiT HiT
C
볡사
TLB 히트율이 70%λ‹€. κ·Έλ‹₯ 높은 μˆ˜μΉ˜λŠ” μ•„λ‹ˆμ§€λ§Œ, 0은 μ•„λ‹ˆλ‹ˆκΉŒ 닀행이닀.
μ˜ˆμ œμ—μ„œ μ•Œ 수 μžˆλŠ” 사싀은 νŽ˜μ΄μ§€μ˜ μ‚¬μ΄μ¦ˆκ°€ TLB의 νžˆνŠΈμœ¨μ— λ†€λΌμš΄ κ΄€μ—¬λ₯Ό ν•œλ‹€λŠ” 점이닀.
νŽ˜μ΄μ§€ 크기가 두배가 되면, TLB미슀 νšŒμˆ˜λŠ” μ••λ„μ μœΌλ‘œ 쀄 것이닀.
λ˜ν•œ, 루프 후에도 배열이 μ‚¬μš©λ˜λŠ” 일이 μžˆλ‹€λ©΄ μ„±λŠ₯상에 쒋은 영ν–₯을 쀄 것이닀.

Who handles the TLB miss?

Hardware Managing TLB

β€’
CICS(x86)
β€’
ν•˜λ“œμ›¨μ–΄κ°€ νŽ˜μ΄μ§€κ°€ λ©”λͺ¨λ¦¬ 어디에 μžˆλŠ”μ§€ 확인해야 ν•œλ‹€.(via Page Table Base Register)
β€’
RISC(MIPS)

Software Managing TLB

RISC μ•„ν‚€ν…μ²˜μ—μ„œ 많이 μ‚¬μš©λ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ§€λ‹ˆμ§• TLBλŠ” ν•˜λ“œμ›¨μ–΄ λ§€λ‹ˆμ§• TLB와 달리 μ†Œν”„νŠΈμ›¨μ–΄λ‘œ TLB 미슀λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€. 이 경우, TLB missκ°€ λ°œμƒν•˜λ©΄ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌœ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
MIPS μ•„ν‚€ν…μ²˜μ—μ„œλŠ” λ‹€μŒκ³Ό 같은 μ½”λ“œλ‘œ TLB 미슀λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.
TLB missκ°€ λ°œμƒν•˜λ©΄ μ˜ˆμ™Έλ₯Ό μΌμœΌν‚€κ³ , 이 μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ½”λ“œμ—μ„œ TLB miss ν•Έλ“€λŸ¬λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. TLB miss ν•Έλ“€λŸ¬λŠ” TLB missλ₯Ό μ²˜λ¦¬ν•˜κ³ , νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ—μ„œ 물리적 μ£Όμ†Œλ₯Ό 얻어와 TLB에 μ‚½μž…ν•©λ‹ˆλ‹€.
β€’
μš΄μ˜μ²΄μ œλŠ” CPUκ°€ 뭐가 됐던 간에 λ‚΄κ°€ μ›ν•˜λŠ” νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.
VPN = (VirtualAddress & VPN_MASK) >> SHIFT (Success, TlbEntry) = TLB_Lookup(VPN) if (Success == True) // TLB hit if (CanAccess(TlbEntry.ProtectBits) == True) offset = VirtualAddress & OFFSET_MASK PhysAddr = (TlbEntry.PFN << SHIFT) | offset Register = AccessMemory(PhysAddr) else RaiseException(PROTECTION_FAULT) else // TLB miss RaiseException(TLB_MISS)
C
볡사
RISCλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 관리 TLBλ₯Ό μ‚¬μš©ν•œλ‹€.
TLBμ—μ„œ μ£Όμ†Œμ°ΎκΈ°μ—μ„œ μ‹€νŒ¨ν•˜λ©΄ ν•˜λ“œμ›¨μ–΄λŠ” μ˜ˆμ™Έ μ‹œκ·Έλ„μ„ λ°œμƒμ‹œν‚¨λ‹€.
μ˜ˆμ™Έ μ‹œκ·Έλ„μ„ 받은 OSλŠ” λͺ…λ Ήμ–΄λ₯Ό μž μ • μ€‘λ‹¨ν•˜κ³ , μœ μ €λͺ¨λ“œμ—μ„œ 컀널λͺ¨λ“œλ‘œ λͺ¨λ“œλ₯Ό λ°”κΏ” 컀널 μ½”λ“œλ₯Ό μ€€λΉ„ν•œλ‹€.
컀널λͺ¨λ“œλ‘œ 변경이 되면 트랩 ν•Έλ“€λŸ¬(trap handler)λ₯Ό μ‹€ν–‰ν•œλ‹€.
TLB 미슀의 처리λ₯Ό λ‹΄λ‹Ήν•˜λŠ” OS μ½”λ“œμ΄λ‹€.
νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ κ²€μƒ‰ν•˜μ—¬ 정보λ₯Ό μ°Ύκ³  TLB 접근이 κ°€λŠ₯ν•œ 레벨의 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ TLBλ₯Ό κ°±μ‹ ν•œ 후에 λ¦¬ν„΄ν•œλ‹€.
트랩 ν•Έλ“€λŸ¬μ—μ„œ λ¦¬ν„΄λ˜λ©΄ ν•˜λ“œμ›¨μ–΄κ°€ λͺ…λ Ήμ–΄λ₯Ό μž¬μ‹€ν–‰ν•˜λŠ” 방식이닀.
TLB미슀λ₯Ό μ²˜λ¦¬ν•˜λŠ” 트랩 ν•Έλ“€λŸ¬μ™€ μ‹œμŠ€ν…œ 콜 호좜 μ‹œ μ‚¬μš©λ˜λŠ” νŠΈλž©ν•Έλ“€λŸ¬μ˜ 결정적인 차이점은 반볡의 μœ λ¬΄λ‹€.
β€’
μ‹œμŠ€ν…œ 콜의 경우, νŠΈλž©μ—μ„œ λ¦¬ν„΄ν•œ ν›„ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό ν˜ΈμΆœν•œλ‹€.
β€’
κ·ΈλŸ¬λ‚˜ TLB의 경우 ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό μž¬μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€.
즉, OSλŠ” 트랩의 원인에 λ”°λΌμ„œ ν˜„μž¬ λͺ…λ Ήμ–΄μ˜ PCκ°’ ν˜Ήμ€ λ‹€μŒ λͺ…λ Ήμ–΄μ˜ PC값을 μ €μž₯ν•΄μ•Όν•œλ‹€.
λ˜ν•œ, TLB 미슀 ν•Έλ“€λŸ¬λ₯Ό μ‹€ν–‰ν•  λ•Œ, TLB λ―ΈμŠ€κ°€ λ¬΄ν•œλ°˜λ³΅μ΄ μΌμ–΄λ‚˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•˜μž.
β€’
TLB 미슀λ₯Ό ν•΄κ²°ν•˜λŠ” κ³Όμ •μ—μ„œ TLB λ―ΈμŠ€κ°€ 또 μΌμ–΄λ‚˜λŠ” ν˜•νƒœ 등등…

TLB Contents

β€’
Fully associative : νŠΉμ • μ–΄λ“œλ ˆμŠ€ μ£Όμ†Œκ°€ μœ„μΉ˜ν•  수 μžˆλŠ” 룰이 μ—†μœΌλ©° 아무 곳에 λ“€μ–΄κ°ˆ 수 μžˆλ‹€.
β—¦
많이 μ‚¬μš©λ˜λŠ” λ†ˆλ“€λ‘œ μ΅œλŒ€ν•œ μ±„μšΈ 수 μžˆλ‹€.
β—¦
ν•˜λ“œμ›¨μ–΄μ μœΌλ‘œ μ–΄λ–€ 값을 찾을 λ•Œ λ³‘λ ¬λ‘œ ν•œκΊΌλ²ˆμ— 찾을 수 μžˆλ‹€.
β€’
VPN | PFN | other bits
β—¦
μœ νš¨λΉ„νŠΈ : μ—”νŠΈλ¦¬κ°€ μœ νš¨ν•œ translation을 κ°€μ§€λŠ”μ§€
β—¦
Protection bits : νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ— μ–΄λ–»κ²Œ νŽ˜μ΄μ§€κ°€ μ €μž₯λ˜λŠ”μ§€?
β—¦
Address-space identifier, dirty bit, etc.

TLB valid bit β‰  Page Table valid bit

Context Switches

TLBλ₯Ό μ‚¬μš©ν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€κ°„ λ¬Έλ§₯ κ΅ν™˜μ‹œ, μƒˆλ‘œμš΄ λ¬Έμ œκ°€ λ“±μž₯ν•œλ‹€.
ν”„λ‘œμ„ΈμŠ€ P1이 μ‹€ν–‰λ˜κ³  μžˆλŠ” 상황이닀. TLBλŠ” P1의 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ λ‚΄μš©μ„ κ°–κ³  μžˆλ‹€.
P1의 VPN은 10μΌλ•Œ, 또 λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€ P2둜 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ΄ 일어났닀.
κ³΅κ΅λ‘­κ²Œλ„ P2의 VPNλ˜ν•œ 10번이라 μœ„μ™€ 같은 상황이 μΌμ–΄λ‚œλ‹€.
ν•˜λ‚˜μ˜ 가상 νŽ˜μ΄μ§€ λ„˜λ²„ VPN 10에 λŒ€ν•΄μ„œ λŒ€μ‘λ˜λŠ” 물리 ν”„λ ˆμž„ λ„˜λ²„κ°€ 100, 170 λ‘κ°œκ°€ λ˜λŠ” 것이닀. λ”κ΅°λ‹€λ‚˜ μ–΄λŠ ν•­λͺ©μ΄ μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€μ˜ νŽ˜μ΄μ§€μΈμ§€ μ•Œ 방법이 μ—†λ‹€. λ”°λΌμ„œ TLBκ°€ μ •ν™•ν•˜κ³  효율적으둜 λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ κ°„μ˜ 가상화λ₯Ό μ§€μ›ν•˜λ €λ©΄ μΆ”κ°€ κΈ°λŠ₯이 ν•„μš”ν•˜λ‹€.
λ¬Έλ§₯ κ΅ν™˜μ‹œ 싀행될 ν”„λ‘œμ„ΈμŠ€μ—κ²ŒλŠ” 이전 ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©ν•œ TLB μ •λ³΄λŠ” μ˜λ―Έκ°€ μ—†λ‹€. ν•˜λ“œμ›¨μ–΄ λ˜λŠ” μš΄μ˜μ²΄μ œλŠ” 이런 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν• κΉŒ?
μ—¬λŸ¬κ°€μ§€ 해결방법이 μžˆλ‹€.
ν•œ 방법은 μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜λ₯Ό 진행할 λ•Œ κΈ°μ‘΄ TLB λ‚΄μš©μ„ μ§€μš°λŠ” 것이닀.
ν•˜λ“œμ›¨μ–΄λ‘œ κ΄€λ¦¬λ˜λŠ” TLBλŠ” νŽ˜μ΄μ§€ ν…Œμ΄λΈ” 베이슀 λ ˆμ§€μŠ€ν„°κ°€ 변경될 λ•Œ FLUSHλ₯Ό μ‹œμž‘ν•  수 μžˆλ‹€.
μ΄λ•Œ flushλŠ” λͺ¨λ“  valid bitλ₯Ό 0으둜 μ„€μ •ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ³€κ²½ν•  수 μžˆλ‹€.
μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행될 λ•Œ, 데이터와 μ½”λ“œ νŽ˜μ΄μ§€μ— λŒ€ν•œ μ ‘κ·ΌμœΌλ‘œ λ°˜λ“œμ‹œ TLB λ―ΈμŠ€κ°€ μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ—, μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜κ°€ 자주 μΌμ–΄λ‚œλ‹€λ©΄ μ„±λŠ₯μ €ν•˜λ₯Ό μœ λ°œν•œλ‹€.
이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄, μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ˜κ°€ μΌμ–΄λ‚˜λ”λΌλ„ TLB의 λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ μœ μ§€ν•  수 μžˆμœΌλ©΄μ„œ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ™€ ꡬ뢄이 κ°€λŠ₯ν•΄μ•Όν•œλ‹€.
이λ₯Ό μœ„ν•΄ ν•˜λ“œμ›¨μ–΄μ— TLB의 λ‚΄μš©μ„ μ €μž₯ν•˜λŠ” κΈ°λŠ₯인 μ£Όμ†Œ 곡간 μ‹λ³„μž(Address Space IDentifier, ASID) ν•„λ“œλ₯Ό λ„μž…ν•œλ‹€.
ASIDλŠ” PID와 μœ μ‚¬ν•˜λ‹€. λ‹€λ§Œ ASIDλŠ” μ’€ 더 적은 λΉ„νŠΈλ₯Ό 가지고 μžˆλ‹€.(ASID : 8bit, PID : 32bit)
μœ„ μ˜ˆμ œλŠ” ν•˜λ‚˜μ˜ VPNμ—μ„œ λ‘κ°œμ˜ PFN이 λ„μΆœλ  λ•Œμ— λŒ€ν•œ 이야기닀.
λ°˜λŒ€λ‘œ μ—¬λŸ¬κ°œμ˜ VPN이 ν•˜λ‚˜μ˜ 물리 λ©”λͺ¨λ¦¬μ— μˆ˜λ ΄ν•˜λ“― λ§€ν•‘λ˜λ©΄ μ–΄λ–¨κΉŒ?
P! F! N!
이런 κ²½μš°λŠ” λ‘κ°œμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ νŽ˜μ΄μ§€(μ½”λ“œ νŽ˜μ΄μ§€ λ“±λ“±)
ν”„λ‘œμ„ΈμŠ€ 1이 PFN 101을 ν”„λ‘œμ„ΈμŠ€ 2와 κ³΅μœ ν•˜λŠ” 상황이닀. μ½”λ“œνŽ˜μ΄μ§€λ₯Ό κ³΅μœ ν•˜λ©΄ ν”„λ‘œμ„ΈμŠ€κ°€ μ‚¬μš©ν•˜λŠ” 물리 νŽ˜μ΄μ§€μ˜ 수λ₯Ό 쀄일 수 μž‡λ‹€.

Replacement Policy

μ•žμ„œ λ§ν–ˆλ“―μ΄ TLBλŠ” μΌμ’…μ˜ μΊμ‹œλ‹€. λͺ¨λ“  μΊμ‹œκ°€ κ·ΈλŸ¬ν•˜λ“―, TLBμ—μ„œλ„ μΊμ‹œλ₯Ό μ–΄λ–»κ²Œ κ΅μ²΄ν•˜λŠ”μ§€ 정책을 μ§œλŠ” 것이 μ„±λŠ₯을 κ²°μ •ν•˜λŠ” 맀우 μ€‘μš”ν•œ μ—΄μ‡ λ‹€.
TLB에 μƒˆ ν•­λͺ©μ„ 달기 μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ TLB의 κΈ°μ‘΄ ν•­λͺ© 쀑 ν•˜λ‚˜λ₯Ό 버렀야 ν•œλ‹€. μ§ˆλ¬Έμ€ λ‹€μŒκ³Ό κ°™λ‹€.
TLB에 μƒˆλ‘œμš΄ ν•­λͺ©μ„ μΆ”κ°€ν•  λ•Œ μ–΄λ–€ ν•­λͺ©μ„ ꡐ체해야 μ„±λŠ₯이 κ°œμ„ λ κΉŒ?

Least-Recently-Used : LRU

Least-Recently-Used : LRU

LRUλŠ” λ©”λͺ¨λ¦¬ μ°Έμ‘° νŒ¨ν„΄μ—μ„œμ˜ 지역성을 μ΅œλŒ€ν•œ ν™œμš©ν•œ 방법이닀.
μ‚¬μš©λœμ§€ κ°€μž₯ 였래된 ν•­λͺ©μ΄ μ•žμœΌλ‘œ μ‚¬μš©λ  ν™•λ₯ λ„ μ λ‹€λŠ” 가정에 κ·Όκ±°ν•œλ‹€.

Random

ꡐ체 λŒ€μƒμ΄ λ¬΄μž‘μœ„λ‹€.
잘λͺ»λœ 결정을 내릴 κ°€λŠ₯성이 μžˆμ§€λ§Œ, κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜κ³  μ˜ˆμƒμΉ˜ λͺ»ν•œ μ˜ˆμ™Έλ₯Ό ν”Όν•  수 μžˆλ‹€.

Example

β€’
32-bit 4KB page μ–΄λ“œλ ˆμŠ€ 슀페이슀
β—¦
12λΉ„νŠΈ μ˜€ν”„μ…‹
β—¦
20λΉ„νŠΈ VPN
β€’
PFN
β—¦
24λΉ„νŠΈ β†’ 64GB 피지컬 λ©”λͺ¨λ¦¬ 인식
β€’
Global bit(G)
β—¦
ν”„λ‘œμ„ΈμŠ€ 사이에 κΈ€λ‘œλ²Œν•˜κ²Œ κ³΅μœ λ˜λŠ” νŽ˜μ΄μ§€ β†’ 컀널 μ˜μ—­
β€’
ASID bits
β—¦
μ–΄λ“œλ ˆμŠ€ 슀페이슀λ₯Ό κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ λΉ„νŠΈ
β—¦
PID보닀 λΉ„νŠΈμˆ˜κ°€ 적음
β–ͺ
ASID λ„˜λ²„λ³΄λ‹€ λ§Žμ€ 수의 ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성λͺ»ν•˜κ²Œ 함
β–ͺ
ASIDκ°€ μ„œν¬νŒ…ν•˜μ§€ μ•ŠλŠ”κ±° 처럼 행동
β–ͺ
ASIDλ₯Ό λ‹€μ΄λ‚˜λ―Ήν•˜κ²Œ ν• λ‹Ήν•œλ‹€.
β€’
Coherence bits(C)
β€’
Dirty bits(D)
β€’
Valid bits(V)
β€’
Next chapter