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