ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

0. ๋“ค์–ด๊ฐ€๊ธฐ

์šด์˜์ฒด์ œ๋ฅผ ๋ณด๋ฉด ์šฉ์–ด๊ฐ€ ํ•œ ๋ฒˆ์— ๋“ฑ์žฅํ•œ๋‹ค.

  • interrupt, system call, exception
  • page table, TLB, page fault
  • swap, thrashing, working set

์ด ๊ธ€์€ ๊ฐœ๋…์„ ๋‚˜์—ดํ•˜๊ธฐ๋ณด๋‹ค, ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์ •๋ฆฌํ•˜๋Š” ๊ฑธ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.


1. ์ปค๋„๋กœ ๋“ค์–ด๊ฐ€๋Š” ์‚ฌ๊ฑด์€ 3๊ฐ€์ง€๋กœ ๋ฌถ์ธ๋‹ค

CPU๋Š” ์›๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ์ˆœ๊ฐ„์—๋Š” ์‹คํ–‰์ด ๋Š๊ธฐ๊ณ  ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

์ด ์‚ฌ๊ฑด์€ ํฌ๊ฒŒ 3๊ฐ€์ง€๋‹ค.

1.1. Hardware Interrupt (์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜ด)

  • ์™ธ๋ถ€ ์žฅ์น˜/ํƒ€์ด๋จธ/I/O ์™„๋ฃŒ/์ž…๋ ฅ ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ์›์ธ์ด๋‹ค.
  • ๋น„๋™๊ธฐ(asynchronous) ์„ฑ๊ฒฉ์ด๋ผ ํ˜„์žฌ ์ฝ”๋“œ ํ๋ฆ„๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • interrupt handler๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ „ํ†ต์ ์œผ๋กœ ISR์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

1.2. System Call (์š”์ฒญํ•ด์„œ ๋“ค์–ด๊ฐ)

  • ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด ํŒŒ์ผ/๋„คํŠธ์›Œํฌ ๊ฐ™์€ ์ปค๋„ ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋™๊ธฐ(synchronous)์ด๊ณ  ์˜๋„์ ์ธ ์ง„์ž…์ด๋‹ค.
  • syscall(trap) entry๋กœ ์ปค๋„์— ๋“ค์–ด๊ฐ€ syscall handler๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

1.3. Exception (ํ„ฐ์ ธ์„œ ๋“ค์–ด๊ฐ)

  • ํ˜„์žฌ ๋ช…๋ น์ด ์ •์ƒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์—†์„ ๋•Œ ์ปค๋„์ด ๊ฐœ์ž…ํ•œ๋‹ค.
  • ๋™๊ธฐ(synchronous)์ด๊ณ  ๋ณดํ†ต ๋น„์˜๋„์ ์ด๋‹ค.
  • ๋Œ€ํ‘œ ์˜ˆ์‹œ๊ฐ€ page fault๋‹ค. (+ 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋“ฑ)

2. ๊ณตํ†ต ํ๋ฆ„: Save → Enter → Handle → Return

 

์„ธ ๊ฐ€์ง€ ์‚ฌ๊ฑด์€ ์ปค๋„์— ๋“ค์–ด๊ฐˆ ๋•Œ ๋น„์Šทํ•œ ๊ณจ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค.

2.1. Step 1) Context Save(๋ฌธ๋งฅ ์ €์žฅ)

์ปค๋„ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ ํ”„ํ•˜๋ฉด ์›๋ž˜ ์‹คํ–‰ ์œ„์น˜๋ฅผ ์žƒ๋Š”๋‹ค.

๊ทธ๋ž˜์„œ ๋ณต๊ท€์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

2.1.1. ๋Œ€ํ‘œ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๊ฒƒ

  • PC/IP: ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น ์ฃผ์†Œ(๋ณต๊ท€ ์ฃผ์†Œ)
  • processor state/flags: ์ธํ„ฐ๋ŸฝํŠธ enable ๋“ฑ CPU ์ƒํƒœ
  • general registers(ํ•„์š”๋ถ„)

2.1.2. ๋ณด๊ฐ•(์ผ๋ฐ˜ ์ง€์‹)

  • ์ €์žฅ ๋ฒ”์œ„๋Š” CPU/OS ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌํ˜„์ƒ์œผ๋กœ๋Š” ์ปค๋„์ด ํ†ต์ œํ•˜๋Š” ์˜์—ญ(์ปค๋„ ์Šคํƒ/์ปค๋„ ์ปจํ…์ŠคํŠธ)์— ์ €์žฅํ•˜๋Š” ์„ค๊ณ„๊ฐ€ ํ”ํ•˜๋‹ค.

2.2. Step 2) Handler๋กœ ์ง„์ž…(๋ฒกํ„ฐ/์—”ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜)

์‚ฌ๊ฑด ์ข…๋ฅ˜์— ๋งž๋Š” ์ปค๋„ ์ง„์ž…์ ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

  • ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ: interrupt vector → interrupt handler(ISR)
  • ์˜ˆ์™ธ(page fault ํฌํ•จ): exception vector → exception handler
  • ์‹œ์Šคํ…œ์ฝœ: syscall/trap entry๋กœ ์ง„์ž… ํ›„ syscall number๋กœ ์„œ๋น„์Šค ๋””์ŠคํŒจ์น˜

2.3. Step 3) Handler ์‹คํ–‰

๊ฐ handler๊ฐ€ ๋งก์€ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

2.4. Step 4) Return ๋˜๋Š” Retry

๋Œ€๋ถ€๋ถ„์€ ๋ฌธ๋งฅ ๋ณต์› ํ›„ ์›๋ž˜ ์ฝ”๋“œ๋กœ ๋ณต๊ท€ํ•œ๋‹ค.

page fault๋Š” ํŽ˜์ด์ง€๋ฅผ ์˜ฌ๋ฆฐ ๋’ค, ์‹คํŒจํ–ˆ๋˜ ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰(retry)ํ•˜๋Š” ํ๋ฆ„์ด ํŠน์ง•์ด๋‹ค.


3. [์˜ˆ์‹œ]: ํŒŒ์ผ ์ฝ๊ธฐ๋Š” ์™œ system call์ธ๊ฐ€?

์•ฑ์—์„œ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ์œ ์ € ๋ชจ๋“œ์—์„œ ๋””์Šคํฌ/ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ read ๊ฐ™์€ ์š”์ฒญ์€ ์‹œ์Šคํ…œ์ฝœ์„ ํ†ตํ•ด ์ปค๋„๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

3.1. ํ๋ฆ„

  1. ์‹œ์Šคํ…œ์ฝœ๋กœ ์ปค๋„ ์ง„์ž…
  2. ์ปค๋„์ด ๊ถŒํ•œ/์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
  3. ํŒŒ์ผ ์‹œ์Šคํ…œ ์ฝ”๋“œ๊ฐ€ I/O ์ˆ˜ํ–‰
  4. ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

4. ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ (page fault๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด)

page fault๋Š” ์˜ˆ์™ธ์˜ ํ•œ ์ข…๋ฅ˜์ด๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์ƒ์ฃผ์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋กœ ๋ฐ”๋€Œ๋Š”์ง€๋ถ€ํ„ฐ ์ •๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.


5. ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ: ์ฃผ์†Œ๋Š” [VPN | offset]์œผ๋กœ ํ•ด์„๋œ๋‹ค

ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์†Œ๋Š” ์ด๋ ‡๊ฒŒ ๋‚˜๋‰œ๋‹ค.

5.1. VPN๊ณผ offset

  • VPN(๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ): ๋ช‡ ๋ฒˆ์งธ ํŽ˜์ด์ง€์ธ๊ฐ€
  • ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์ด ํ•˜๋Š” ์ผ์€ VPN์„ PFN์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ
  • offset์€ “๊ทธ ํŽ˜์ด์ง€ ์•ˆ์—์„œ์˜ ์œ„์น˜”๋ผ์„œ PFN์ด ๋ฐ”๋€Œ์–ด๋„ ๊ทธ๋Œ€๋กœ ๋ถ™๋Š”๋‹ค

5.2. ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ 4KB๋ผ๋ฉด (1kb = 1024)

  • offset ๋ฒ”์œ„๋Š” 0~4095
  • VPN = ์ฃผ์†Œ / 4096, offset = ์ฃผ์†Œ % 4096 (๋ชซ/๋‚˜๋จธ์ง€)

5.3. ํŽ˜์ด์ง€์™€ ํ”„๋ ˆ์ž„ offset์ด ๊ทธ๋Œ€๋กœ์ธ ์ด์œ 

ํŽ˜์ด์ง€/ํ”„๋ ˆ์ž„ ํฌ๊ธฐ๊ฐ€ ๊ฐ™์•„์„œ ํŽ˜์ด์ง€ ๋‚ด๋ถ€ ์œ„์น˜๊ฐ€ ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


6. Page / Frame / Page Table / TLB

6.1. Page์™€ Frame์˜ ์ฐจ์ด

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์—์„œ Page์™€ Frame์€ “์–ด๋””๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋А๋ƒ”๊ฐ€ ๋‹ค๋ฅด๋‹ค.

 

  • Page(ํŽ˜์ด์ง€)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ผ์ • ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ์กฐ๊ฐ
    • “๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ์˜ ๋‹จ์œ„”
  • Frame(ํ”„๋ ˆ์ž„)
    • ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ(RAM) ๋ฅผ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ์นธ
    • “RAM์—์„œ์˜ ๋‹จ์œ„”

 

๋‘˜์˜ ๊ด€๊ณ„๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค.

  • ํŽ˜์ด์ง€๋Š” “๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ”
  • ํ”„๋ ˆ์ž„์€ “RAM ์นธ”
  • ํŽ˜์ด์ง€ ํ•˜๋‚˜๊ฐ€ ํ”„๋ ˆ์ž„ ํ•˜๋‚˜์— ์˜ฌ๋ผ๊ฐ„๋‹ค(ํฌ๊ธฐ๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ)

6.2. Page Table

ํŽ˜์ด์ง€ํ…Œ์ด๋ธ”์€ ๋งคํ•‘/์ƒํƒœํ‘œ๋‹ค.

  • VPN → PFN(๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„ ๋ฒˆํ˜ธ) ๋งคํ•‘
  • valid/present(๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋‚˜)
  • ๊ถŒํ•œ(R/W/X, user/kernel)

6.3. TLB

์ฃผ์†Œ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ(VPN→PFN)๋ฅผ ์บ์‹œํ•ด ๋‘” ๋ฒ„ํผ๋‹ค.

  • hit๋ฉด ๋ฐ”๋กœ ๋ณ€ํ™˜
  • miss๋ฉด page table์„ ์กฐํšŒํ•œ๋‹ค

7. TLB miss์™€ Page Fault

7.1. TLB miss

  • ๋ณ€ํ™˜ ์บ์‹œ์— ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.
  • page table ์กฐํšŒ๋กœ ์ด์–ด์ง„๋‹ค.
  • ์ด ์ž์ฒด๋กœ RAM์— ํŽ˜์ด์ง€๊ฐ€ ์—†๋‹ค๊ณ  ๋‹จ์ •ํ•  ์ˆ˜ ์—†๋‹ค.

7.2. Page fault

page table์„ ๋ดค๋”๋‹ˆ

  • valid=0(= RAM์— ์—†์Œ) ์ด๊ฑฐ๋‚˜
  • ๊ถŒํ•œ ์œ„๋ฐ˜์ด๋ฉด
  • ์ปค๋„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๋กœ ์ง„์ž…ํ•œ๋‹ค.

8. ์˜ˆ์‹œ: page fault๋Š” ์–ด๋–ค ์ˆœ๊ฐ„์— ํ„ฐ์ง€๋‚˜?

8.1. ํ๋ฆ„

  1. CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๋„
  2. TLB miss → page table ์กฐํšŒ
  3. valid=0 → page fault ๋ฐœ์ƒ → ์ปค๋„ ์ง„์ž…
  4. swap-in(ํ•„์š”ํ•˜๋ฉด swap-out)
  5. page table/TLB ๊ฐฑ์‹ 
  6. ์‹คํŒจํ–ˆ๋˜ ๋ช…๋ น์„ retry

9. swap๊ณผ thrashing

page fault๊ฐ€ “๋„ˆ๋ฌด ์ž์ฃผ” ๋ฐœ์ƒํ•˜๋ฉด ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

9.1. swap-in / swap-out

  • RAM์— ์ž๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด swap-in
  • ์—†์œผ๋ฉด victim ์„ ํƒ → swap-out → swap-in

9.2. thrashing

  • page fault ํญ์ฆ → swap I/O ๋Œ€๊ธฐ ์ฆ๊ฐ€
  • CPU๊ฐ€ ๊ณ„์‚ฐ๋ณด๋‹ค ๋Œ€๊ธฐ๋ฅผ ๋” ๋งŽ์ด ํ•˜๊ฒŒ ๋˜๋Š” ์ƒํƒœ

9.3. working set / PFF

  • working set: ์ตœ๊ทผ Δ ๋™์•ˆ ์‹ค์ œ๋กœ ์ฐธ์กฐํ•œ ํŽ˜์ด์ง€ ์ง‘ํ•ฉ
  • PFF: page fault ๋นˆ๋„๋กœ ํ”„๋ ˆ์ž„์„ ์กฐ์ ˆ
    • PFF ๋†’์Œ → ํ”„๋ ˆ์ž„ ๋Š˜๋ฆผ(๋˜๋Š” ๋ถ€ํ•˜ ์กฐ์ ˆ)
    • PFF ๋‚ฎ์Œ → ํ”„๋ ˆ์ž„ ํšŒ์ˆ˜/์žฌ๋ถ„๋ฐฐ

10. ๋งˆ๋ฌด๋ฆฌ

 

์ •๋ฆฌํ•˜๋ฉด์„œ ๊ฒฐ๊ตญ ์ค‘์š”ํ•œ ๊ฑด “์šฉ์–ด”๊ฐ€ ์•„๋‹ˆ๋ผ ํ๋ฆ„์ด์—ˆ๋‹ค.

CPU๊ฐ€ ์ปค๋„๋กœ ๋“ค์–ด๊ฐ€๋Š” ์ˆœ๊ฐ„์„ ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ / ์‹œ์Šคํ…œ์ฝœ / ์˜ˆ์™ธ๋กœ ๋‚˜๋ˆ ์„œ ๋ณด๋‹ˆ,

๊ฐ๊ฐ์ด ์™œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€(๋น„๋™๊ธฐ vs ๋™๊ธฐ)๊ฐ€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ๋๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ด ํ๋ฆ„ ์œ„์— ๊ทธ๋Œ€๋กœ ์–นํ˜€ ์žˆ์—ˆ๋‹ค.

TLB miss → page table → (valid=0์ด๋ฉด) page fault → swap → retry๋กœ ์ด์–ด์ง€๋Š” ํ•œ ์ค„์ด ์žกํžˆ๋‹ˆ๊นŒ,

TLB miss์™€ page fault๋ฅผ ์„ž์–ด ๋ณด๋˜ ์ง€์ ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ’€๋ ธ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ thrashing / working set / PFF๋Š”

“๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ OS๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฌด๋„ˆ์ง€๊ณ , ๋˜ ์–ด๋–ป๊ฒŒ ๋ฒ„ํ‹ฐ๊ฒŒ ๋งŒ๋“œ๋Š”๊ฐ€”๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋…์ด๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋๋‹ค.

 

์ด์ œ๋Š” ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ๋ฅผ ์™ธ์šฐ๊ธฐ๋ณด๋‹ค,

์ปค๋„ ์ง„์ž… → ์ฃผ์†Œ ๋ณ€ํ™˜ → fault ์ฒ˜๋ฆฌ → ์„ฑ๋Šฅ ๋ถ•๊ดด/์™„ํ™”

์ด ํ๋ฆ„์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•ด๋ณด๋ ค ํ•œ๋‹ค.