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