19 ํŽ˜์ด์ง•: ๋” ๋น ๋ฅธ ๋ณ€ํ™˜(TLB)

  • ๋งคํ•‘ ์ •๋ณด ์ €์žฅ(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ €์žฅ)์„ ์œ„ํ•ด ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์š”๊ตฌ๋จ
  • ๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ์˜ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋งคํ•‘์ •๋ณด๋ฅผ ์ฝ์–ด์•ผํ•จ.

ํ•ต์‹ฌ ์งˆ๋ฌธ: ์ฃผ์†Œ ๋ณ€ํ™˜ ์†๋„๋ฅผ ์–ด๋–ป๊ฒŒ ํ–ฅ์ƒํ• ๊นŒ?

  • ์ฃผ์†Œ ๋ณ€ํ™˜์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ณ€ํ™˜-์ƒ‰์ธ ๋ฒ„ํผ(translation-lookaside-buffer) ์ค„์—ฌ์„œ TLB๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์„ ๋„์ž…ํ•œ๋‹ค.
  • ์นฉ์˜ MMU(memory-management unit)์˜ ์ผ๋ถ€๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ž์ฃผ ์ฐธ์กฐ๋˜๋Š” ๊ฐ€์ƒ์ฃผ์†Œ - ์‹ค์ฃผ์†Œ ๋ณ€ํ™˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์บ์‹œ์ด๋‹ค.
  • ์ฃผ์†Œ-๋ณ€ํ™˜ ์บ์‹œ๊ฐ€ ์ข€ ๋” ์ ํ•ฉํ•œ ๋ช…์นญ์ด๋‹ค.

19.1 TLB์˜ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

// ๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ VPN(๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ) ์ถ”์ถœ  
VPN = (VirtualAddress & VPN_MASK) >> SHIFT;  

// TLB ์กฐํšŒ (TLB ํžˆํŠธ ์—ฌ๋ถ€ ํ™•์ธ)  
(Success, TlbEntry) = TLB_Lookup(VPN);  

if (Success == True) { // TLB Hit  
    if (CanAccess(TlbEntry.ProtectBits) == True) {  
        // ๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ ์˜คํ”„์…‹ ์ถ”์ถœ  
        Offset = VirtualAddress & OFFSET_MASK;  
        // TLB์—์„œ ๊ฐ€์ ธ์˜จ PFN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ  
        PhysAddr = (TlbEntry.PFN << SHIFT) | Offset;  
        // ๋ฌผ๋ฆฌ ์ฃผ์†Œ์—์„œ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ  
        Register = AccessMemory(PhysAddr);  
    } else {  
        // ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ โ†’ ๋ณดํ˜ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ  
        RaiseException(PROTECTION_FAULT);  
    }  
} else { // TLB Miss โ†’ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ ‘๊ทผ  
    // ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ(PTE) ์ฃผ์†Œ ๊ณ„์‚ฐ  
    PTEAddr = PTBR + (VPN * sizeof(PTE));  
    // PTE ๊ฐ€์ ธ์˜ค๊ธฐ  
    PTE = AccessMemory(PTEAddr);  

    if (PTE.Valid == False) {  
        // ํŽ˜์ด์ง€๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Œ โ†’ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ  
        RaiseException(SEGMENTATION_FAULT);  
    } else if (CanAccess(PTE.ProtectBits) == False) {  
        // ์ ‘๊ทผ ๊ถŒํ•œ ์—†์Œ โ†’ ๋ณดํ˜ธ ์˜ค๋ฅ˜ ๋ฐœ์ƒ  
        RaiseException(PROTECTION_FAULT);  
    } else {  
        // TLB์— ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ ์‚ฝ์ž…  
        TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits);  
        // ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์—ฌ ๋ณ€ํ™˜๋œ ์ฃผ์†Œ ์‚ฌ์šฉ  
        RetryInstruction();  
    }  
}
  • ๋ชจ๋“  ์บ์‹œ์˜ ์„ค๊ณ„ ์ฒ ํ•™์ฒ˜๋Ÿผ, TLB์—ญ์‹œ ์ฃผ์†Œ ๋ณ€ํ™˜ ์ •๋ณด๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์บ์‹œ์— ์žˆ๋‹ค๋ผ๋Š” ๊ฐ€์ •์„ ์ „์ œ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • TLB๋Š” ํ”„๋กœ์„ธ์‹ฑ ์ฝ”์–ด์™€ ๊ฐ€๊นŒ์šด๊ณณ์— ์œ„์น˜ํ•˜๊ณ ์žˆ์–ด ์ฃผ์†Œ๋ณ€ํ™˜์€ ๊ทธ๋‹ค์ง€ ๋ถ€๋‹ด์Šค๋Ÿฌ์šด์ž‘์—…์ด์•„๋‹ˆ๋‹ค.
  • ๋‹ค๋งŒ ๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์—„์ฒญ๋‚˜๊ฒŒ ์ปค์ง„๋‹ค.

19.2 ์˜ˆ์ œ: ๋ฐฐ์—ด ์ ‘๊ทผ

  • ๊ฐ„๋‹จํ•œ ์บ์‹œ ํžˆํŠธ ๊ด€๋ จ ์˜ˆ์ œ
  • ๋‹ค๋งŒ ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ TLB ํšจ์šฉ์„ฑ๊ณผ ์„ฑ๋Šฅ์— ๋งค์šฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ์ด๋‹ค. Image
  • (a[0]๋ถ€ํ„ฐ) : miss, hit, hit, miss, hit, hit, hit, miss, hit, hit
  • ์ด ์˜ˆ์‹œ์—์„œ ์ •๋ง ์ฒซ์ ‘๊ทผ๋ถ€ํ„ฐ ๋ฏธ์Šค๋กœ ๋“ค์–ด๊ฐ”๋Š”๋ฐ 70%์˜ ํžˆํŠธ์œจ์„ ์ž๋ž‘ํ•œ๋‹ค.
  • ์ด๊ฑด ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ(Spatial Locality)๋•Œ๋ฌธ์— ๊ทธ๋ ‡๋‹ค
    • ํ˜„์žฌ ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€๊นŒ์šด ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ๋„ ๊ณง ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
    • ์˜ˆ: ๋ฐฐ์—ด(Array)๋‚˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ.
  • ๊ทธ๋ฆฌ๊ณ  ์ดํ›„์—๋Š” ํžˆํŠธํ•  ํ™•๋ฅ ์ด ๋”๋†’์€๋ฐ (tlb์— ๋‚จ์•„์žˆ๋Š” ๋™์•ˆ ๋‹ค์‹œ ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค)
  • ์ด๊ฒƒ๋„ ์‹œ๊ฐ„ ์ง€์—ญ์„ฑ(Temoporal Locality)๋•Œ๋ฌธ์ด๋‹ค.
    • ์ตœ๊ทผ์— ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ณง ๋‹ค์‹œ ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
    • ์˜ˆ: ๋ฃจํ”„(loop)์—์„œ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฐธ์กฐํ•จ.

19.3 TLB ๋ฏธ์Šค๋Š” ๋ˆ„๊ฐ€ ์ฒ˜๋ฆฌํ• ๊นŒ?

  • ์˜ˆ์ „์—๋Š” ์ฃผ๋กœ ํ•˜๋“œ์›จ์–ด
  • ์š”์ฆ˜์—๋Š” os๊ฐ€ ํŠธ๋žฉ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋„ ํ•จ

19.4 TLB์˜ ๊ตฌ์„ฑ: ๋ฌด์—‡์ด ์žˆ๋‚˜?

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฒƒ๋“ค์ค‘ ์ผ๋ถ€
  • protection bit
  • valid bit (๊ทผ๋ฐ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ valid-bit๋ž‘์€ ๋‹ค๋ฆ„!!!!)
    • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ : ์•„์ง ํ• ๋‹น๋˜๋Š ์•Š์€ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„
    • tlb๋Š” : ์‹ค์ œ ์œ ํšจํ•œ ์บ์‹œ์ธ์ง€๋ฅผ ๋”ฐ์ง, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์‹œ invalid๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ์˜ ์ ‘๊ทผ์„ ๋ง‰์Œ!
  • dirty bit
  • ๋“ฑ๋“ฑ..

19.5 TLB์˜ ๋ฌธ์ œ: ๋ฌธ๋งฅ ๊ตํ™˜

  • ์š”์•ฝํ•˜์ž๋ฉด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์‹œ ์ด์ „ ํ”„๋กœ์„ธ์Šค์˜ tlb๊ฐ€ ๋‚จ์•„์„œ ๋ฌธ์ œ๋ผ๋Š”๊ฑด๋ฐ,
  • ๋น„์šฐ๋Š” ๋ฐฉ์‹์€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํฌ๊ฒŒ ๋งŒ๋“ ๋‹ค (valid bit๋ฅผ ๊ฑด๋“ค์–ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
  • ๊ทธ๋ž˜์„œ ์ฃผ์†Œ ๊ณต๊ฐ„ ์‹๋ณ„์ž๋ฅผ ๋‘๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž๋ฅผ ๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด์™„ํ•œ๋‹ค.

19.6 ์ด์Šˆ: ๊ต์ฒด ์ •์ฑ…

์บ์‹œ ๊ต์ฒด ์ •์ฑ…์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ํ•ต์‹ฌ ์งˆ๋ฌธ: TLB ๊ต์ฒด ์ •์ฑ…์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผํ•˜๋Š”๊ฐ€? ๋ชฉํ‘œ๋Š” ๋ฏธ์Šค์œจ์„ ์ค„์ด๊ณ  ํžˆํŠธ์œจ์„ ์ฆ๊ฐ€์‹œ์ผœ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ผ๋‹จ ๊ฐ€๋Šฅํ•œ๊ฑด ์ง€์—ญ์„ฑ์„ ์ตœ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” LRU(least-recently-used)๊ฐ€ ์žˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ๊ทผ์— ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ์• ๋“ค์ผ์ˆ˜๋ก ๋‹ค์‹œ ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ ์Œ
  • ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋žœ๋ค์ธ๋ฐ ์กฐ๊ธˆ๋” ์•ˆ์ •์ ์ธ ๋ฉด์ด ์žˆ๊ณ  ์ž˜ ๋™์ž‘ํ•œ๋‹ค.

๊ณ ์žฅ๋‚œ ์‹œ๊ณ„๋Š” 2๋ฒˆ์€ ๋งž์ง€๋งŒ ๋”ฑ 1์ดˆ ํ‹€๋ฆฐ ์‹œ๊ณ„๋Š”โ€ฆ.

  • 4๊ฐœ๋ฅผ ์ €์žฅํ• ์ˆ˜์žˆ๋Š”๋ฐ ๋‹ค์„ฏ๊ฐœ(p1,p2,p3,p4,p5)์ธ ์ƒํ™ฉ์—์„œ
  • p5 ์ง„์ž… ์‹œ์ ์— p1์„ ๋ฒ„๋ฆฌ๊ณ , ๋‹ค์Œ์ ‘๊ทผ์ด p1์ด๋ผ ๋งž๋ฌผ๋ ค ๋ฏธ์Šค๊ฐ€ ๋‚˜๋Š”๊ฑธ ์˜๋ฏธ

20 ํŽ˜์ด์ง•: ๋” ์ž‘์€ ํ…Œ์ด๋ธ”

ํ•ต์‹ฌ ์งˆ๋ฌธ: ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์–ด๋–ป๊ฒŒ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๊นŒ ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด ๊ธฐ๋ฐ˜์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉฐ ์ผ๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ฐจ์ง€ํ•œ๋‹ค.

  • 32๋น„ํŠธ ์ฃผ์†Œ๊ณต๊ฐ„์—์„œ 4kb๋Š” 4mb์˜ ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง„๋‹ค.

20.1 ๊ฐ„๋‹จํ•œ ํ•ด๋ฒ•: ๋” ํฐ ํŽ˜์ด์ง€

  • 32๋น„ํŠธ ์ฃผ์†Œ๊ณต๊ฐ„์—์„œ 16kb๋ฅผ ๊ฐ€์ •ํ•ด๋ณด์ž, ์ด์ œ๋Š” 18๋น„ํŠธ vpn๊ณผ 14๋น„ํŠธ์˜ ์˜คํ”„์…‹์„ ๊ฐ–๊ฒŒ๋œ๋‹ค.
  • ๋ฌธ์ œ๋Š” ์ด๋Ÿฌ๋ฉด ๋‚ด๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์‹ฌํ•ด์ง„๋‹ค.
  • ๊ฒฐ๋ก ์ ์œผ๋กœ ์˜ณ๋ฐ”๋ฅธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.

20.2 ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•: ํŽ˜์ด์ง•๊ณผ ์„ธ๊ทธ๋จผํŠธ

  • ํž™ ์ฝ”๋“œ, ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋”ฐ๋กœ ์ฃผ๋Š”๊ฒƒ์ด๋‹ค.
  • ์ผ๊ฒฌ ์ข‹์•„๋ณด์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์™ธ๋ถ€๋‹จํŽธํ™”, ๋‚ด๋ถ€๋‹จํŽธํ™”๊ฐ€ ์‹ฌํ–ˆ๋‹ค.

20.3 ๋ฉ€ํ‹ฐ ๋ ˆ๋ฒจ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ๋งค์šฐ ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํ˜„๋Œ€ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

  • ๊ธฐ๋ณธ ๊ฐœ๋…์€ ๊ฐ„๋‹จํ•˜๋‹ค.
    • ๋จผ์ €, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ํŽ˜์ด์ง€ ํฌ๊ธฐ์˜ ๋‹จ์œ„๋กœ ๋‹ค๋ˆˆ๋‹ค.
    • ๊ทธ ๋‹ค์Œ, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ํŽ˜์ด์ง€๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์ด ์žˆ์œผ๋ฉด, ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฐํŽ˜์ด์ง€์˜ ํ• ๋‹น ์—ฌ๋ถ€์™€ ์œ„์น˜๋ฅผ ํŒŒ์•…ํ•œ๋‹ค. Image
  • pfn์€ page frame number
  • valid๋Š” ๊ทธ ํŽ˜์ด์ง€ ๋‚ด์— validํ•œ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š”์ง€
  • ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ์— ์•ˆ์˜ฌ๋ฆฐ๋‹ค.
  • ์žฅ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ž์ฒด๊ฐ€ ์œ ๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ๋œ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„์ด ์ƒ๊ธด๋‹ค๋Š”๊ฒƒ
  • ์ถ”๊ฐ€ ๋น„์šฉ์€ tlb๋ฏธ์Šค์‹œ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์œ„ํ•ด ๋‘๋ฒˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š”๊ฒƒ
  • ๋ฆฌ๋ˆ…์Šค(x86-64)์—์„œ๋Š” **4๋‹จ๊ณ„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(PML4, PDPT, PD, PT)**์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋™์  ํ• ๋‹นํ•œ๋‹ค.
  • ์ตœ์‹  Intel CPU์—์„œ๋Š” 5-Level ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ง€์›ํ•˜์—ฌ ๋” ๋„“์€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • 64bit, 4kb๊ธฐ์ค€
    • 2^64/2^12 = (64๋น„ํŠธ / 4kb) = 2^52๊ฐœ์˜ ์—”ํŠธ๋ฆฌ์ด๊ณ ,
    • ๊ฑฐ๊ธฐ์— 8byte๋ฅผ ๊ณฑํ•˜๋ฉด 32(PB)
VPN = (VirtualAddress & VPN_MASK) >> SHIFT;
(Success, TlbEntry) = TLB_Lookup(VPN);
if (Success == True) { // TLB ํžˆํŠธ (TLB์—์„œ ํ•ด๋‹น ๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์Œ)
    if (CanAccess(TlbEntry.ProtectBits) == True) { // ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
        Offset = VirtualAddress & OFFSET_MASK;
        PhysAddr = (TlbEntry.PFN << SHIFT) | Offset; // ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ
        Register = AccessMemory(PhysAddr); // ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ
    } else {
        RaiseException(PROTECTION_FAULT); // ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ
    }
} else { // TLB ๋ฏธ์Šค (TLB์— ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์—†์Œ)
    PDIndex = (VPN & PD_MASK) >> PD_SHIFT; // ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ธ๋ฑ์Šค ์ถ”์ถœ
    PDEAddr = PDBR + (PDIndex * sizeof(PDE)); // ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ
    PDE = AccessMemory(PDEAddr); // ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ

    if (PDE.Valid == False) { // ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์Œ
        RaiseException(SEGMENTATION_FAULT); // ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    } else {
        // ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—”ํŠธ๋ฆฌ๊ฐ€ ์œ ํšจํ•จ -> ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—์„œ PTE ์กฐํšŒ
        PTIndex = (VPN & PT_MASK) >> PT_SHIFT; // ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ธ๋ฑ์Šค ์ถ”์ถœ
        PTEAddr = (PDE.PFN << SHIFT) + (PTIndex * 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); // TLB์— ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ถ”๊ฐ€
            RetryInstruction(); // ๋‹ค์‹œ ๋ช…๋ น์–ด ์‹คํ–‰
        }
    }
}

20.5 ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ๋””์Šคํฌ๋กœ ์Šค์™€ํ•‘ํ•˜๊ธฐ

  • ๋ง ๊ทธ๋Œ€๋กœ ๋„ˆ๋ฌด ์‹ฌํ•˜๋ฉด ๋””์Šคํฌ๋กœ ์Šค์™‘

21 ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์˜ ๊ทน๋ณต: ๋ฉ”์ปค๋‹ˆ์ฆ˜

ํ•ต์‹ฌ ์งˆ๋ฌธ: ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ด์ƒ์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ป๊ฒŒํ• ๊นŒ ์šด์˜์ฒด์ œ๋Š” ์–ด๋–ป๊ฒŒ ํฌ๊ณ  ๋Š๋ฆฐ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งˆ์น˜ ์ปค๋‹ค๋ž€ ๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  • ๋ฉ€ํ‹ฐํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์Šคํ…œ์ด ๋ฐœ๋ช…๋˜๋ฉด์„œ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ „๋ถ€ ์ €์žฅํ•˜๋Š”๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ผ๋ถ€ ํŽ˜์ด์ง€๋“ค์„ ์Šค์™‘ ์•„์›ƒํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐํ”„๋กœ๊ทธ๋žจ๋ฐ๊ณผ ์‚ฌ์šฉ ํŽธ์˜์„ฑ ๋“ฑ์˜ ์ด์œ ๋กœ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋”๋งŽ์€ ์šฉ๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋ญใ…†๋‹ค.
  • ์ด๊ฒŒ ํ˜„๋Œ€ Virtual Memory์˜ ์—ญํ• ์ด๋‹ค.

21.1 ์Šค์™‘ ๊ณต๊ฐ„

  • ๋จผ์ € ๋””์Šคํฌ์— ํŽ˜์ด์ง€๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ • ๊ณค๊ฐ„์„ ํ™•๋ณดํ•˜๋Š”๊ฒŒ ํ•„์š”ํ•˜๋‹ค.
  • ์ด ์šฉ๋„์˜ ๊ณต๊ฐ„์„ ์Šค์™‘ ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์šด์˜์ฒด์ œ๋Š” ์Šค์™‘ ๊ณต๊ฐ„์— ์žˆ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋“ค์˜ ๋””์Šคํฌ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•ด์•ผํ•œ๋‹ค.
  • ์ด๋Ÿฌ๋ฉด ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ๋งค์šฐ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์žˆ๋Š”๊ฒƒ์ฒ˜๋Ÿผ ์—ฌ๊ฒจ์ง€๊ฒŒ ํ•  ใ…… ใ…œ์žˆ๋‹ค.

21.2 Present Bit

๋ง‰๊ฐ„์„ ์ด์šฉํ•œ ์œ— ๋‚ด์šฉ ์ •๋ฆฌ: ๋งŒ์•ฝ vpn์„ tlb์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ํ•˜๋“œ์›จ์–ด๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ (ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ ์ด์šฉ) vpn์„ ์ธ๋ฑ์Šคํ•˜์—ฌ ์›ํ•˜๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์„ ์ถ”์ถœํ•œ๋‹ค. ํ•ด๋‹น ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์ด ์œ ํšจํ•˜๊ณ  ๊ด€๋ จ ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•œ๋‹ค๋ฉด ํ•˜๋“œ์›จ์–ด๋Š” pte์—์„œ pfn์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๊ทธ ์ •๋ณด๋ฅผ tlb์— ํƒ‘์žฌํ›„ ๋ช…๋ น์–ด๋ฅผ ์žฌ์‹คํ–‰ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๋””์Šคํฌ ์Šค์™‘์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด, ํ•˜๋“œ์›จ์–ด๊ฐ€ pte์—์„œ ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š”๊ฒƒ์„ ํ‘œํ˜„ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๊ฑธ present bit๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ํ•ด๋‹น ๋น„ํŠธ๊ฐ€ 0์ด๋ฉด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ ์ƒํ™ฉ์„ page fault๋ผ๊ณ  ํ•œ๋‹ค.
  • ํŽ˜์ด์ง€ ํดํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด page fault handler ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

21.3 ํŽ˜์ด์ง€ ํดํŠธ

  • ํŽ˜์ด์ง€ ํดํŠธ๋Š” ๋ณดํ†ต ์šด์˜์ฒด์ œ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด ์ž์—ฐ์ ์œผ๋กœ ๋“œ๋Š” ์˜๋ฌธ์ด ์žˆ๋‹ค. โ€œ๋””์Šคํฌ ์–ด๋””์— ์žˆ๋Š” ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ์ง€?โ€
    • ํ•ด๋‹น ์ •๋ณด๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ๋‹ค
    • pfn๊ณผ ๊ฐ™์€ pte ๋น„ํŠธ๋“ค์€ ํŽ˜์ด์ง€ ๋””์Šคํฌ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ดํ›„ ์žฌ์‹คํ–‰ํ•˜๋ฉด tlb๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒํ• ๊ฑฐ๊ณ  ๊ทธ ๋ฏธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ tlb๊ฐ’์ด ๊ฐฑ์‹ ๋œ๋‹ค.
  • ๋ฌผ๋ก  ์ด ๊ณผ์ •์€ I/O์ „์†ก์ค‘์— ์ฐจ๋‹จ๋œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
VPN = (VirtualAddress & VPN_MASK) >> SHIFT;
(Success, TlbEntry) = TLB_Lookup(VPN);

if (Success == True) { // TLB ํžˆํŠธ (TLB์—์„œ ํ•ด๋‹น ๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์Œ)
    if (CanAccess(TlbEntry.ProtectBits) == True) { // ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
        Offset = VirtualAddress & OFFSET_MASK;
        PhysAddr = (TlbEntry.PFN << SHIFT) | Offset; // ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ
        Register = AccessMemory(PhysAddr); // ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ
    } else {
        RaiseException(PROTECTION_FAULT); // ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ
    }
} else { // TLB ๋ฏธ์Šค (TLB์— ํ•ด๋‹น ํ•ญ๋ชฉ์ด ์—†์Œ)
    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) { // ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
            // ํ•˜๋“œ์›จ์–ด ๊ด€๋ฆฌ TLB๋ฅผ ๊ฐ€์ •
            TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits); // TLB์— PTE ์ •๋ณด ์‚ฝ์ž…
            RetryInstruction(); // ๋‹ค์‹œ ๋ช…๋ น์–ด ์‹คํ–‰
        } else if (PTE.Present == False) { // ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
            RaiseException(PAGE_FAULT); // ํŽ˜์ด์ง€ ํดํŠธ ์˜ˆ์™ธ ๋ฐœ์ƒ
        }
    }
}
  • ํ•˜๋“œ์›จ์–ด์—์„œ
PFN = FindFreePhysicalPage(); // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์Œ

if (PFN == -1) { // ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๊ฐ€ ์—†์Œ
    PFN = EvictPage(); // ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰ (๊ธฐ์กด ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐ)
}

DiskRead(PTE.DiskAddr, PFN); // ๋””์Šคํฌ์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ (I/O ๋Œ€๊ธฐ)

PTE.present = True; // ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฐฑ์‹ : ํŽ˜์ด์ง€๊ฐ€ ์ด์ œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์Œ
PTE.PFN = PFN; // ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„ ๋ฒˆํ˜ธ(PFN) ์„ค์ •

RetryInstruction(); // ์›๋ž˜ ๋ช…๋ น์–ด ์žฌ์‹œ๋„
  • ์†Œํ”„ํŠธ์›จ์–ด์—์„œ

21.4 ๋ฉ”๋ชจ๋ฆฌ์— ๋นˆ ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด

  • ํŽ˜์ด์ง€ ๊ต์ฒด๋ฅผ ํ†ตํ•ด์„œ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค.
  • ๋‹ค์Œ์žฅ์˜ ์ •์ฑ…์—์„œ ๋‹ค๋ฃธ!

๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์˜ ๊ทน๋ณต : ์ •์ฑ…

์œ„์— ์–ธ๊ธ‰๋œ ๋นˆ ๊ตฅ๊ฐ„์ด ์—†์œผ๋ฉด (๋””์Šคํฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ) ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ํŽ˜์ด์ง€๋ฅผ evictํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑธ ๊ต์ฒด์ •์ฑ…์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ•ต์‹ฌ ์งˆ๋ฌธ : ๋‚ด๋ณด๋‚ผ ํŽ˜์ด์ง€๋Š” ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•˜๋Š”๊ฐ€?

22.1 ์บ์‹œ ๊ด€๋ฆฌ

  • ์ผ๋‹จ ์ด ์ƒํ™ฉ ์ž์ฒด๋ฅด ์บ์‹œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์‹œ์Šคํ…œ์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ๋‹ค ์ข‹๊ธฐ ์œ„ํ•œ ์บ์‹œ๋กœ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๊ด€๋ฆฌ ์ •์ฑ…์€ ์บ์‹œ ๋ฏธ์Šค๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์บ์‹œ ํžˆํŠธ๋ฅผ ์ตœ๋Œ€ํ™” ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฏธ์Šค์™€ ํžˆํŠธ ์ •๋ณด๋ฅผ ์•ˆ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ amat (ํ‰๊ท  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„)์„ ๊ณ„์‚ฐ ํ•  ์ˆ˜์žˆ๋‹ค.
  • AMAT = TimeToMemory + (PageMissPercent * TimeToDiskk)
  • ํ˜„๋Œ€ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋””์Šคํฌ ์ ‘๊ทผ ๋น„์šฉ์ด ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ์ž‘์€ ๋ฏธ์Šค๊ฐ€ ์ „์ฒด์ ์ธ AMAT์— ํฐ ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋œ๋‹ค.

22.2 ์ตœ์  ๊ต์ฒด ์ •์ฑ…

  • Belady๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ ‘๊ทผ๋  ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด ์ตœ์ ์ด๋ฉฐ, ๊ฐ€์žฅ ์ ์€ ํšŸ์ˆ˜์˜ ๋ฏธ์Šค๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ–ˆ๋‹ค. ์ด ์ •์ฑ…์€ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ์–ด๋ ค์šด ์ •์ฑ…์ด๋‹ค.

Image

  • ์•„์ฃผ์•„์ฃผ ์‹ฌ๊ฐํ•œ ๋งน์ ์ด ์žˆ๋‹ค, ๋ฏธ๋ž˜๋ฅผ ๋ณด๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!
  • ํ•˜์ง€๋งŒ ํ™•์‹คํ•œ๊ฑด ์ด๊ฑด ์ตœ์ ์˜ ์„ ํƒ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค ์ฆ‰ ์„ฑ๋Šฅ ํŒ๋‹จ์˜ ์ง€ํ‘œ๊ฐ€ ๋ฏธ๋ž˜๋ฅผ ๋ณด๊ณ  ์Šค์ผ€์ค„๋งํ–ˆ์„๋•Œ์˜ ์ตœ์ ์„ 100์ ์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

22.3 ๊ฐ„๋‹จํ•œ ์ •์ฑ…: FIFO

  • ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์•ˆ์ข‹๋‹ค
  • ์œ„์˜ ์ตœ์ ์ด๋ž‘ ๋น„๊ตํ–ˆ์„์‹œ coldstart ์ œ์™ธ 57ํผ์„ผํŠธ ์ •๋„

22.4 ๋˜ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์ •์ฑ…: ๋ฌด์ž‘์œ„ ์„ ํƒ

  • ์œ„์˜ ์ •์ฑ…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌํ˜„์ด ํŽธํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋“ค์‘ฅ๋‚ ์‘ฅํ•œ๋‹ค.

22.5 ๊ณผ๊ฑฐ ์ •๋ณด์˜ ์‚ฌ์šฉ: LRU

  • least recently used๊ฐ€ ์„ ํƒ๋˜์–ด ๋‚˜๊ฐ„๋‹ค.
  • ๋นˆ๋„์ˆ˜(frequency), ์ตœ๊ทผ์„ฑ(recency)์„ ๊ณ ๋ คํ•œ๋‹ค.
  • ์ง€์—ญ์„ฑ ์›์น™์„ ์ด์šฉํ•˜๋Š” ์ •์ฑ…์ด๋‹ค.
  • ํ˜„์‹ค์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

22.6 ์›Œํฌ๋กœ๋“œ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ๋น„๊ต

  • ์ง€์—ญ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ : LRU, FIFO, Random ๋ชจ๋‘ ๋™์ผํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. Image
  • 80:20 ์›Œํฌ๋กœ๋“œ : 20ํผ์„ผํŠธ๊ฐ€ 80ํผ์„ผํŠธ์˜ ์ฐธ์กฐ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์ƒ์œ„์— ๋ชฐ๋ฆฐ ์›Œํฌ๋กœ๋“œ, lru์„ฑ๋Šฅ์ด ๋งค์šฐ ์ข‹๋‹ค Image
  • ์ˆœ์ฐจ ๋ฐ˜๋ณต ์›Œํฌ๋กœ๋“œ : ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜๋ณต ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์›Œํฌ๋กœ๋“œ Image

22.7 ๊ณผ๊ฑฐ ์ด๋ ฅ ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„

  • LRU๋Š” ๊ทธ๋ž˜๋„ ํŠน์ • ์›Œํฌ๋กœ๋“œ์™€ ํ‰๊ท ์ ์œผ๋กœ ๋งค์šฐ ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค.
  • ๊ณผ๊ฑฐ์˜ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ด์•ผํ•˜๋Š”๋ฐ ์šด์˜์ฒด์ œ์™€ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ๊ทธ๋Ÿฐ๊ฑธ ์ž˜๋ชปํ•˜๋ฉด ํฌ๊ฒŒ ์„ฑ๋Šฅ์ด ๊ฐ์†Œํ•œ๋‹ค.

23 ์™„๋ฒฝํ•œ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ

ํ•ต์‹ฌ ์งˆ๋ฌธ : ์™„์ „ํ•œ VM ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • 2๊ฐœ์˜ ์‹œ์Šคํ…œ์„ ์ƒ์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด์„œ ์ด๋Ÿฌํ•œ ๊ตฌํ˜„๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์˜ˆ์ •์ด๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ๋Š” 1970๋…„๋Œ€ ์ดˆ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์œผ๋กœ โ€œํ˜„๋Œ€์ ์ธโ€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž์˜ ์ตœ์ดˆ ์‚ฌ๋ก€์ค‘ ํ•˜๋‚˜๋กœ VAX/VMS์šด์˜์ฒด์ œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ๋Š” Linux ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ์„œ ๊ฐ€์žฅ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋‹ค์ค‘ ์ฝ”์–ด ์‹œ์Šคํ…œ์—์„œ ํšจ๊ณผ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

23.1 vax/vms ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

  • 512๋ฐ”์ดํŠธ์˜ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ vms์˜ ์„ค๊ณ„์ž๋“ค์˜ ๊ฐ€์žฅ ํฐ ์ด์Šˆ๋Š” ํŽ˜์ด์ง€ ํฌ๊ธฐ์˜€๋‹ค. (์„ ํ˜• ํŽ˜์ด์ง€์˜€์Œ)
  • ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์••๋ฐ•์„ ์ด๊ฒจ๋ƒˆ๋‹ค.
    • ์ฒซ์งธ, ์‚ฌ์šฉ์ž ์ฃผ์†Œ๊ณต๊ฐ„์„ ๋‘๊ฐœ์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‚˜๋ˆ„์–ด ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ฐ ์˜์—ญ์„ ์œ„ํ•œ ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง€๋„๋ก
    • ๋‘˜๋•Œ, ์‚ฌ์šฉ์ž ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋“ค์„ ์ปค๋„์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜