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
