Search
πŸ’Ύ

12 : Swapping

course
last review
2023/04/15
mastery
none
progress
not started
date
4 more properties
Previous chapter

How to Go Beyond Physical Memory

32λΉ„νŠΈ μ–΄λ“œλ ˆμ‹±μ„ ν•œλ‹€
β†’ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ 4GB만큼의 VAκ°€ 생긴닀.
μ΄λ•ŒκΉŒμ§€λŠ” ν”„λ‘œμ„ΈμŠ€μ— ν•„μš”ν•œ νŽ˜μ΄μ§€κ°€ 피지컬 λ©”λͺ¨λ¦¬μ— λͺ¨λ‘ νƒ‘μŠΉν–ˆλ‹€κ³  κ°€μ •ν–ˆλ‹€.
κ·ΈλŸ¬λ‚˜ ν˜„μ‹€μ€ 더 넓은 μ–΄λ“œλ ˆμŠ€ 슀페이슀λ₯Ό μ§€μ›ν•΄μ•Όν•˜λ©°, 이λ₯Ό μœ„ν•΄ OSκ°€ λ©”λͺ¨λ¦¬ 계측 ꡬ쑰에 μƒˆλ‘œμš΄ λ ˆλ²¨μ„ λ„μž…ν•΄μ•Όν•œλ‹€.
λ§Œμ•½ λ©”λͺ¨λ¦¬κ°€ λΆ€μ‘±ν•΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό 죽인닀면 μ—„μ²­λ‚œ 반발이 일어날 것이닀.
λ”°λΌμ„œ μ§€κΈˆ λ‚΄κ°€ ν•„μš”ν•œ 뢀뢄듀에 λŒ€ν•΄μ„œ λ©”λͺ¨λ¦¬κ°€ μ•„λ‹Œ ν•œμ‹œμ μœΌλ‘œ λ‘˜ λ§Œν•œ 곡간을 같이 μ¨μ•Όν•œλ‹€.
β†’ 이게 λ°”λ‘œ λ””μŠ€ν¬.

Swap Space

κ°€μž₯ λ¨Όμ €ν•  일은 λ””μŠ€ν¬μ— νŽ˜μ΄μ§€λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 일정 곡간을 ν™•λ³΄ν•˜λŠ” 것.

Present Bit

λ””μŠ€ν¬μ— μŠ€μ™‘ 곡간을 ν™•λ³΄ν–ˆμœΌλ‹ˆ 이제 νŽ˜μ΄μ§€ μŠ€μ™‘μ„ μœ„ν•œ κΈ°λŠ₯을 λ‹€λ£° μ°¨λ‘€.
μ–΄λ–€ λ†ˆμ΄ λ©”λͺ¨λ¦¬μ— 있고 μ–΄λ–€ λ†ˆμ΄ λ””μŠ€ν¬μ— μžˆλŠ”μ§€ 확인해야 ν•œλ‹€. β†’ Address Translation을 μ œλŒ€λ‘œ ν•˜κΈ° μœ„ν•œ μž₯치

Page Fault

Page Fault Control Flow

Hardware

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 if (PTE.Present == True) // assuming hardware-managed TLB TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits) RetryInstruction() else if (PTE.Present == False) RaiseException(PAGE_FAULT)
C
볡사

Software

PFN = FindFreePhysicalPage() if (PFN == -1) // no free page found PFN = EvictPage() // run replacement algorithm DiskRead(PTE.DiskAddr, PFN) // sleep (waiting for I/O) PTE.present = True // update page table with present PTE.PFN = PFN // bit and translation (PFN) RetryInstruction() // retry instruction
C
볡사

Page Replacement

Next chapter