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