• Home
  • About
    • PI photo

      PI

      Beginner's Blog

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[OS] OS

๐Ÿ“† Created: 2025.04.19 Sat

Reading time ~17 minutes

Process API

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑยท์ข…๋ฃŒ API

fork(): ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๋Š” ์ž์‹ PID(>0), ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๋Š” 0์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์‹คํŒจ ์‹œ โ€“1 ๋ฐ˜ํ™˜ ๋ฐ errno ์„ค์ •

exec*() ๊ณ„์—ด: execvp(), execl(), execle() ๋“ฑ์œผ๋กœ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ ์ด๋ฏธ์ง€๋กœ ๋ฎ์–ด์”€. ์—ด๋ ค ์žˆ๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ PID๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ

wait() / waitpid(): ๋ถ€๋ชจ๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ๋ฅผ ๋Œ€๊ธฐํ•˜๋ฉฐ, ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ข…๋ฃŒ๋œ ์ž์‹์˜ PID๋ฅผ ๋ฐ›๊ณ , WIFEXITED, WEXITSTATUS ๋งคํฌ๋กœ๋กœ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํ•ด์„

์‹œ๊ทธ๋„(signal) API

kill(pid, sig): ํŠน์ • ํ”„๋กœ์„ธ์Šค๋‚˜ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์— ์‹œ๊ทธ๋„ ์ „์†ก (์˜ˆ: SIGINT, SIGTSTP). ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ๋™์ผ UID ํ”„๋กœ์„ธ์Šค์—๋งŒ, root๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ์‹œ๊ทธ๋„ ์†ก์‹  ๊ฐ€๋Šฅ

signal(sig, handler): ์‚ฌ์šฉ์ž ์ •์˜ ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก. ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ(ํƒ€์ด๋จธ, I/O ์™„๋ฃŒ ๋“ฑ)๋ฅผ ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌ

๊ถŒํ•œ๊ณผ ๊ฒฉ๋ฆฌ

UID ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๊ฒ€์‚ฌ๋กœ, ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ œ์–ด

์Šˆํผ์œ ์ €(root)๋งŒ์ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋ฐ ์‹œ๊ทธ๋„ ์†ก์‹  ๊ถŒํ•œ์„ ๊ฐ€์ง

์œ ์šฉํ•œ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

ps / top: ํ”„๋กœ์„ธ์Šค ์ƒํƒœยท์ž์› ์‚ฌ์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

killall: ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„ ๊ธฐ์ค€ ์ผ๊ด„ ์‹œ๊ทธ๋„ ์ „์†ก

macOS ๋“ฑ์—์„œ MenuMeters ๊ฐ™์€ GUI ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ™œ์šฉ ๊ฐ€๋Šฅ

์š”์•ฝ

PID (Process ID): ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ API: fork(), exec(), wait()

  • fork(): ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๊ฑฐ์˜ ์™„์ „ํ•œ ๋ณต์‚ฌ๋ณธ์ธ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  • exec(): ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ
  • wait(): ๋ถ€๋ชจ๊ฐ€ ์ž์‹์˜ ์ข…๋ฃŒ๋ฅผ ๋Œ€๊ธฐ

ํ”„๋กœ์„ธ์Šค ์ œ์–ด: ์‹œ๊ทธ๋„(kill(), signal())์„ ์ด์šฉํ•ด ์ค‘๋‹จ, ์ผ์‹œ ์ค‘๋‹จ, ์ข…๋ฃŒ ๊ฐ€๋Šฅ

  • ์‹œ๊ทธ๋„: ํ”„๋กœ์„ธ์Šค ์ œ์–ด(์ค‘๋‹จยท์žฌ๊ฐœยท์ข…๋ฃŒ ๋“ฑ)๋ฅผ ์œ„ํ•ด OS๊ฐ€ ๋ณด๋‚ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ

์‚ฌ์šฉ์ž ๊ฒฉ๋ฆฌ: ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ œ์–ดํ•˜๊ณ , root๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌ

  • superuser(root): ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์™€ ์‹œ์Šคํ…œ ์ž์›์— ๋Œ€ํ•œ ๋ฌด์ œํ•œ ๊ถŒํ•œ ์‚ฌ์šฉ์ž

Direct Execution

๊ฐœ์š”

์šด์˜์ฒด์ œ์—์„œ CPU ๊ฐ€์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ถฉ๋Œํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ชฉํ‘œ๋Š”

  • ์„ฑ๋Šฅ: ๊ฐ€๋Šฅํ•œ ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์†๋„๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰
  • ์ œ์–ด: ์–ธ์ œ๋“  OS๊ฐ€ CPU ์ œ์–ด๊ถŒ์„ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

์ด ๋‘˜์„ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๋ฐฉ์‹์ด ๋ฐ”๋กœ ์ œํ•œ์  ์ง์ ‘ ์‹คํ–‰(Limited Direct Execution)์ž…๋‹ˆ๋‹ค.

์ œํ•œ์  ์ง์ ‘ ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜

  1. ํŠธ๋žฉ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™” (๋ถ€ํŒ… ์‹œ)
  2. returnโ€‘fromโ€‘trap์œผ๋กœ ์‚ฌ์šฉ์ž ๋ชจ๋“œ ์ง„์ž… -> main() ์‹คํ–‰
  3. ์ง์ ‘ ์‹คํ–‰: ๋Œ€๋ถ€๋ถ„์˜ ๋ช…๋ น์€ ํ•˜๋“œ์›จ์–ด์—์„œ ๋ฐ”๋กœ ์‹คํ–‰
  4. ํŠธ๋žฉ/์‹œ์Šคํ…œ ์ฝœ/์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ: ํ•˜๋“œ์›จ์–ด๊ฐ€ CPU ๋ชจ๋“œ๋ฅผ ์ปค๋„๋กœ ์ „ํ™˜ํ•˜๊ณ , ์ปค๋„ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ถ„๊ธฐ -> ์ž‘์—… ํ›„ ๋‹ค์‹œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ ๋ณต๊ท€
  5. ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ†ตํ•ด ๋น„ํ˜‘๋ ฅ์  ์Šค์ผ€์ค„๋ง(์‹œ๊ฐ„๋ถ„ํ• ) ์œ ๋„

๋ฌธ์ œย #1: ์ œํ•œ๋œ ์—ฐ์‚ฐ

์‚ฌ์šฉ์ž ๋ชจ๋“œ vs ์ปค๋„ ๋ชจ๋“œ

  • ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ๋Š” ํŠน๊ถŒ ๋ช…๋ น ์‹คํ–‰ ์‹œ ํŠธ๋žฉ ๋ฐœ์ƒ
  • ์ปค๋„ ๋ชจ๋“œ์—์„œ๋Š” ๋ชจ๋“  ํ•˜๋“œ์›จ์–ดยท๋ฉ”๋ชจ๋ฆฌ ์ž์› ์ ‘๊ทผ ํ—ˆ์šฉ

์‹œ์Šคํ…œ ์ฝœ ํ”„๋กœํ† ์ฝœ

  1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜(open(), read() ๋“ฑ)๊ฐ€ ํŠธ๋žฉ ๋ช…๋ น์–ด ์‹คํ–‰
  2. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ปค๋„ ์Šคํƒ์— ์ €์žฅ, ์ปค๋„ ๋ชจ๋“œ ์ง„์ž…
  3. ํŠธ๋žฉ ํ…Œ์ด๋ธ”์— ๋“ฑ๋ก๋œ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ถ„๊ธฐํ•ด ์„œ๋น„์Šค ์ˆ˜ํ–‰
  4. returnโ€‘fromโ€‘trap์œผ๋กœ ์‚ฌ์šฉ์ž ๋ชจ๋“œ ๋ณต๊ท€

๋ฌธ์ œย #2: ํ”„๋กœ์„ธ์Šค ์ „ํ™˜

ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜ ๋น„ํ˜‘๋ ฅ์  ์ „ํ™˜

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ํ”„๋กœํ† ์ฝœ

  1. ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ -> ํ•˜๋“œ์›จ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ปค๋„ ์Šคํƒ์— ์ €์žฅ
  2. OS switch() ํ˜ธ์ถœ:
    • ์ด์ „ ํ”„๋กœ์„ธ์Šค A์˜ ์ปค๋„ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ PCB๋กœ ์ €์žฅ
    • ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค B์˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ PCB์—์„œ ๋ณต์› -> ์ปค๋„ ์Šคํƒ ๊ต์ฒด
  3. returnโ€‘fromโ€‘trap -> B์˜ ๋ ˆ์ง€์Šคํ„ฐ ๋ณต์› ํ›„ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋ณต๊ท€

๋™์‹œ์„ฑ ๊ณ ๋ ค์‚ฌํ•ญ

์ธํ„ฐ๋ŸฝํŠธ ์ค‘์ฒฉ: ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ์ค‘ ๋˜ ๋‹ค๋ฅธ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๊ธฐ๋ฒ•:

  • ์ธํ„ฐ๋ŸฝํŠธ ๋น„ํ™œ์„ฑํ™” ๊ตฌ์—ญ ์ตœ์†Œํ™”
  • ๋ฝ(lock) ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ ๋ณดํ˜ธ
  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋” ์ •๊ตํ•œ ๋™์‹œ์„ฑ ์ œ์–ด ํ•„์š”

์š”์•ฝ ๋ฐ ์ธก์ • ๊ณผ์ œ

Limited Direct Execution Protocol:

  1. ํŠธ๋žฉ ํ…Œ์ด๋ธ” โ€œbabyโ€‘proofingโ€
  2. ์‚ฌ์šฉ์ž ์ฝ”๋“œ ์ง์ ‘ ์‹คํ–‰
  3. ํŠธ๋žฉยท์ธํ„ฐ๋ŸฝํŠธ ์‹œ ์ปค๋„ ๊ฐœ์ž…
  4. ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์‹œ๊ฐ„๋ถ„ํ•  ์ „ํ™˜

์ธก์ • ๊ณผ์ œ:

  • gettimeofday()๋กœ ์‹œ์Šคํ…œ ์ฝœ ๋น„์šฉ ์ธก์ •
  • ํŒŒ์ดํ”„+sched_setaffinity()๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๋น„์šฉ ์ธก์ •

ํ•ต์‹ฌ ์šฉ์–ด

Limited Direct Execution: ํšจ์œจ์„ฑ๊ณผ ์ œ์–ด๊ถŒ ๋ณด์žฅ์„ ์œ„ํ•œ ํ•˜๋“œ์›จ์–ด+OS ํ˜‘๋ ฅ ๊ธฐ๋ฒ•

Trap / return-from-trap: ์‹œ์Šคํ…œ ์ฝœ ์ง„์ž…ยท๋ณต๊ท€์šฉ ํŠน๊ถŒ ๋ช…๋ น์–ด

User Mode / Kernel Mode: ๊ถŒํ•œ ์ œํ•œ ๋ชจ๋“œ vs ํŠน๊ถŒ ๋ชจ๋“œ

Context Switch: ํ”„๋กœ์„ธ์Šค ์ „ํ™˜์„ ์œ„ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์ €์žฅ/๋ณต์› ํ”„๋กœํ† ์ฝœ

Trap Table: ํŠธ๋žฉ ํ•ธ๋“ค๋Ÿฌ ์ฃผ์†Œ ๋ชฉ๋ก, ๋ถ€ํŒ… ์‹œ OS๊ฐ€ ์„ค์ •

CPU Scheduling

์Šค์ผ€์ค„๋ง ๊ฐœ์š”

์šด์˜์ฒด์ œ ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๋“ฑ ์ €์ˆ˜์ค€ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์œ„์— ์ž‘๋™ํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ์ •์ฑ…(์Šค์ผ€์ค„๋ง ๊ทœ์œจ)์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ์‚ดํŽด๋ณด๊ณ , ๊ฐ ์ •์ฑ…์˜ ๊ฐ€์ •, ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ, ์žฅ๋‹จ์ ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ๋ถ€ํ•˜ ๊ฐ€์ • (Workload Assumptions)

  1. ๊ฐ ์ž‘์—…(job)์ด ๋™์ผํ•œ ์‹คํ–‰ ์‹œ๊ฐ„
  2. ๋ชจ๋“  ์ž‘์—…์ด ๋™์‹œ์— ๋„์ฐฉ
  3. ์‹œ์ž‘๋˜๋ฉด ์ค‘๋‹จ ์—†์ด ์™„๋ฃŒ๊นŒ์ง€ ์‹คํ–‰
  4. I/O ์—†์ด CPU๋งŒ ์‚ฌ์šฉ
  5. ๊ฐ ์ž‘์—…์˜ ๋Ÿฐํƒ€์ž„(์‹คํ–‰ ์‹œ๊ฐ„)์„ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ์Œ

์‹ค์ œ ํ™˜๊ฒฝ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ, ์ดํ›„ ์žฅ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์™„ํ™”ํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

์Šค์ผ€์ค„๋ง ๋ฉ”ํŠธ๋ฆญ (Scheduling Metrics)

Turnaround Time: ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ โˆ’ ๋„์ฐฉ ์‹œ๊ฐ (T_completion โˆ’ T_arrival)

Fairness: ์˜ˆ) Jainโ€™s Fairness Index. ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๊ณต์ •์„ฑ์€ ์ข…์ข… ์ƒ์ถฉํ•ฉ๋‹ˆ๋‹ค.

FIFO (First In, First Out)

์ •์˜: ๋„์ฐฉ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—… ์‹คํ–‰

์žฅ์ : ๊ตฌํ˜„์ด ๊ฐ„๋‹จ

๋‹จ์ : ๊ธด ์ž‘์—…์ด ์•ž์— ์˜ค๋ฉด ์งง์€ ์ž‘์—…๋“ค์ด ๋Œ€๊ธฐํ•˜๋Š” ์ปจ๋ณด์ด ํšจ๊ณผ ๋ฐœ์ƒ

SJF (Shortest Job First)

๋น„์„ ์ ํ˜•: ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง์€ ์ž‘์—…๋ถ€ํ„ฐ ์ˆœ์ฐจ ์‹คํ–‰

FIFO ๋Œ€๋น„ ํ‰๊ท  Turnaround๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ 

์ „์ œ: ์ž‘์—… ๋Ÿฐํƒ€์ž„์„ ์•Œ์•„์•ผ ํ•จ

STCF / PSJF (Shortest Timeโ€‘toโ€‘Completion First)

์„ ์ ํ˜• SJF: ์ƒˆ ์ž‘์—… ๋„์ฐฉ ์‹œ ๋‚จ์€ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ์ž‘์—…์„ ์ฆ‰์‹œ ์‹คํ–‰

Lateโ€‘arrival ๋ฌธ์ œ ํ•ด์†Œ, ํ‰๊ท  Turnaround ์ตœ์ ํ™”

์‘๋‹ต ์‹œ๊ฐ„(Response Time)

์ •์˜: ์ž‘์—… ๋„์ฐฉ ์‹œ๊ฐ๋ถ€ํ„ฐ ์ฒซ ์‹คํ–‰ ์‹œ๊ฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„ (T_first_run โˆ’ T_arrival)

STCF ๋“ฑ์€ Turnaround์— ์ข‹์ง€๋งŒ, ์‘๋‹ต ์‹œ๊ฐ„์€ ์—ด์•…

๋ผ์šด๋“œ ๋กœ๋นˆ(Round Robin)

Time Slice(ํ€€ํ…€) ๋‹จ์œ„๋กœ ์ž‘์—…์„ ์ˆœํ™˜ ์‹คํ–‰(์‹œ๊ฐ„ ๋ถ„ํ• )

์žฅ์ : ๊ณต์ •์„ฑ ์œ ์ง€, ์‘๋‹ต ์‹œ๊ฐ„ ๋Œ€ํญ ๊ฐœ์„ 

๋‹จ์ : Context Switch ์˜ค๋ฒ„ํ—ค๋“œ -> ํ€€ํ…€ ๊ธธ์ด ๊ฒฐ์ • ์‹œ tradeโ€‘off ํ•„์š”

Amortization ํŒ

ํ€€ํ…€์„ ๋Š˜๋ ค Context Switch ๋น„์šฉ์„ ํฌ์„(Amortize)ํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

ํ€€ํ…€(time slice): Round Robin ์Šค์ผ€์ค„๋ง์—์„œ, ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์†์œผ๋กœ CPU๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์ˆ˜ ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜(Context Switch) ๋น„์šฉ:

  • ํ”„๋กœ์„ธ์Šค A -> B ์ „ํ™˜ ์‹œ, A์˜ ๋ ˆ์ง€์Šคํ„ฐยทPCยท์Šคํƒ ํฌ์ธํ„ฐ ๋“ฑ์„ ์ €์žฅํ•˜๊ณ , B์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ๋ฐ ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ(์ˆ˜์‹ญ~์ˆ˜๋ฐฑ ๋งˆ์ดํฌ๋กœ์ดˆ).
  • ์ด ์‹œ๊ฐ„๋งŒํผ CPU๋Š” โ€œ์‹ค์ œ ์ž‘์—…โ€์ด ์•„๋‹ˆ๋ผ โ€œ์Šค์œ„์นญ ์ž‘์—…โ€์— ์†Œ๋น„๋ฉ๋‹ˆ๋‹ค.

ํ€€ํ…€์ด ์งง์œผ๋ฉด

  • ๋” ์ž์ฃผ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒ -> ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ˆ„์  -> ์œ ์šฉํ•œ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ฆ.

ํ€€ํ…€์„ ๋Š˜๋ฆฌ๋ฉด

  • ํ•œ ๋ฒˆ ์Šค์œ„์น˜ ํ›„ ์˜ค๋žซ๋™์•ˆ ๋™์ผ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉ -> ์Šค์œ„์น˜ ํšŸ์ˆ˜ ๊ฐ์†Œ
  • ์ „์ฒด ์‹คํ–‰ ์‹œ๊ฐ„ ๋Œ€๋น„ ์Šค์œ„์น˜ ๋น„์šฉ ๋น„์œจ์ด ์ž‘์•„์ ธ โ€œํฌ์„(amortize)โ€๋จ
  • ๋”ฐ๋ผ์„œ CPU๋Š” ์‹ค์ œ ์ž‘์—…(๋ฒ„์ŠคํŠธ) ์ˆ˜ํ–‰์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

I/O ํ†ตํ•ฉ (Incorporating I/O)

CPU ๋ฒ„์ŠคํŠธ์™€ I/O ๋ฒ„์ŠคํŠธ๋ฅผ ๋…๋ฆฝ ์ž‘์—…์œผ๋กœ ๊ฐ„์ฃผ

I/O ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…์ด Blocked ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•ด CPU ํ™œ์šฉ๋„๋ฅผ ๊ทน๋Œ€ํ™”

CPU ๋ฒ„์ŠคํŠธ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์†ํ•ด์„œ CPU ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ˆœ์ˆ˜ ๊ณ„์‚ฐ ์ž‘์—…์ด ๊ณ„์† ์ด์–ด์งˆ ๋•Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
  • ๊ธธ์ด๊ฐ€ ๋‹ค์–‘ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ๊ณ„์‚ฐ๋Ÿ‰์ด ๋งŽ์€ ์ž‘์—…์ผ์ˆ˜๋ก ๊ธธ๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

I/O ๋ฒ„์ŠคํŠธ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ, ํ„ฐ๋ฏธ๋„ ๊ฐ™์€ I/O ์žฅ์น˜์™€ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์ปจ๋Œ€ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ณ , ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ณ , ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ตฌ๊ฐ„ ๋™์•ˆ์—๋Š” CPU๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋Œ€์‹  I/O ์žฅ์น˜์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

๋ฌด(็„ก) ์˜ค๋ผํด(No More Oracle)

๋Ÿฐํƒ€์ž„ ์ •๋ณด๋ฅผ ๋ชจ๋ฅด๋Š” ํ˜„์‹ค์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•จ

์ดํ›„ ์žฅ์—์„œ MLFQ(Multiโ€‘Level Feedback Queue)๋กœ ๊ณผ๊ฑฐ ์‹คํ–‰ ํŒจํ„ด์„ ์ด์šฉํ•ด ๋ฏธ๋ž˜ ํ–‰๋™์„ ์˜ˆ์ธกํ•˜๋Š” ๊ธฐ๋ฒ• ์†Œ๊ฐœ ์˜ˆ์ •

์š”์•ฝ

๋‘ ๊ณ„์—ด์˜ ์Šค์ผ€์ค„๋Ÿฌ:

  1. ๊ธธ์ด ๊ธฐ๋ฐ˜(SJF, STCF) -> Turnaround ์ตœ์ ํ™”, ์‘๋‹ต ์‹œ๊ฐ„ ๋ฏธํก
  2. ๊ณต์ •์„ฑ ๊ธฐ๋ฐ˜(RR) -> Response Time ์ตœ์ ํ™”, Turnaround ์•…ํ™”

I/O, ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅ์„ฑ ๋“ฑ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํ˜ผํ•ฉ ๊ธฐ๋ฒ•๊ณผ ์˜ˆ์ธก ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Multiโ€‘Level Feedback

๋™๊ธฐ ๋ฐ ๊ธฐ๋ณธ ๊ฐœ๋…

๋ชฉํ‘œ: ์งง์€(interactive) ์ž‘์—…์—๋Š” ๋น ๋ฅธ ์‘๋‹ต, ๊ธด(CPUโ€‘bound) ์ž‘์—…์—๋Š” ๊ณต์ •ํ•œ ์ง„ํ–‰ ๋ณด์žฅ

ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋ฐ˜ ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •: ๊ณผ๊ฑฐ CPU ์‚ฌ์šฉ ํŒจํ„ด์„ ๊ด€์ฐฐํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ

MLFQ์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ทœ์น™

  1. Ruleย 1: ์šฐ์„ ์ˆœ์œ„(A) > ์šฐ์„ ์ˆœ์œ„(B) -> A ์‹คํ–‰
  2. Ruleย 2: ์šฐ์„ ์ˆœ์œ„ ๋™์ผ -> ํ•ด๋‹น ํ์˜ timeโ€‘slice(quantum)๋กœ Roundย Robin
  3. Ruleย 3: ์ƒˆ ์ž‘์—…์€ ์ตœ์ƒ์œ„ ํ(Q0)์— ๋ฐฐ์น˜
  4. Ruleย 4: ์ฃผ์–ด์ง„ ํ์—์„œ ํ• ๋‹น๋œ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด(ํ• ๋‹น ์—ฌ๋Ÿฌ ๋ฒˆ ๋ถ„ํ•  ์‚ฌ์šฉ ํฌํ•จ) ํ•œ ๋‹จ๊ณ„ ๋‚ฎ์€ ํ๋กœ ๊ฐ•๋“ฑ
  5. Ruleย 5: ์ผ์ • ๊ธฐ๊ฐ„ S๋งˆ๋‹ค ๋ชจ๋“  ์ž‘์—…์„ ์ตœ์ƒ์œ„ ํ๋กœ ์Šน๊ฒฉ(์Šคํƒ€๋ฒ ์ด์…˜ ๋ฐฉ์ง€ ๋ฐ ํ–‰๋™ ๋ณ€ํ™” ๋ฐ˜์˜)

์šฐ์„ ์ˆœ์œ„ ๋ถ€์ŠคํŠธ (Ruleย 5)

ํ•„์š”์„ฑ: ๋‚ฎ์€ ํ์— ๋‚ด๋ ค๊ฐ„ CPUโ€‘bound ์ž‘์—…์ด ๋ฌดํ•œ ๋Œ€๊ธฐ(starvation) ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

โ€œvooโ€‘doo constantโ€ ๋ฌธ์ œ: Boost ์ฃผ๊ธฐ S ์„ค์ •์ด ์›Œํฌ๋กœ๋“œ๋งˆ๋‹ค ๋‹ฌ๋ผ, ์ ์ ˆํ•œ ๊ฐ’์„ ์ฐพ๊ธฐ ์–ด๋ ค์›€

Antiโ€‘Gaming์„ ์œ„ํ•œ ๊ฐœ์„  (Ruleย 4 ๊ฐœ์ •)

์›๋ž˜ Ruleย 4a/4b: I/O ์ „์—๋Š” ๊ฐ™์€ ํ ์œ ์ง€ ๊ฐ€๋Šฅ -> CPU ๋…์ (gaming) ์œ ๋ฐœ

๊ฐœ์„ ๋œ Ruleย 4: I/O ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ํ• ๋‹น๋œ ์ด ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ•๋“ฑ -> ๊ณต์ •์„ฑ ํ™•๋ณด

ํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹

ํ ์ˆ˜, ํ๋ณ„ quantum, boost ์ฃผ๊ธฐ S ๋“ฑ์„ ์›Œํฌ๋กœ๋“œ์— ๋งž์ถฐ ์กฐ์ •

Quantum ์ฐจ๋ณ„ํ™”:

  • ์ƒ์œ„ ํ(Q0): ์งง์€ quantum(โ‰ˆ10ย ms) -> ๋ฐ˜์‘์„ฑ ํ–ฅ์ƒ
  • ํ•˜์œ„ ํ(Q2 ์ด์ƒ): ๊ธด quantum(์ˆ˜์‹ญย ~ย ์ˆ˜๋ฐฑย ms) -> CPUโ€‘bound ํšจ์œจ ํ–ฅ์ƒ

์‹ค์ œ ์‹œ์Šคํ…œ ๊ตฌํ˜„ ์˜ˆ

Solaris TS: 60๊ฐœ ํ, 20ย ms->์ˆ˜๋ฐฑย ms๋กœ ์ฆ๊ฐ€ํ•˜๋Š” quantum, ์•ฝ 1ย s๋งˆ๋‹ค boost

FreeBSD (4.3BSD): decayโ€‘usage ๋ฐฉ์‹์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ์ˆ˜์‹ ๊ณ„์‚ฐ, ์‚ฌ์šฉ๋Ÿ‰ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ๊ฐ์†Œ์‹œ์ผœ boost ํšจ๊ณผ

์‚ฌ์šฉ์žยท๊ด€๋ฆฌ์ž ์กฐ์–ธ(Advice)

nice(์Šค์ผ€์ค„๋Ÿฌ), madvise(๋ฉ”๋ชจ๋ฆฌ), ํŒŒ์ผ ์‹œ์Šคํ…œ ํ”„๋ฆฌํŽ˜์น˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์—์„œ hint ์ œ๊ณต ๊ฐ€๋Šฅ

์ผ๋ถ€ ์‹œ์Šคํ…œ์€ OS ์ „์šฉ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์˜ˆ์•ฝํ•ด ์‚ฌ์šฉ์ž ์ž‘์—…๊ณผ ๊ฒฉ๋ฆฌ

์š”์•ฝ

  • Interactive ์„ฑ๋Šฅ: ์งง์€ ์ž‘์—…์— ๋น ๋ฅธ ์‘๋‹ต ์ œ๊ณต (SJF/STCF ์œ ์‚ฌ)
  • Fairness: ๊ธด ์ž‘์—…๋„ starvation ์—†์ด ์ฃผ๊ธฐ์  ์‹คํ–‰ ๋ณด์žฅ
  • ์ ์‘์„ฑ: ์›Œํฌ๋กœ๋“œ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„ ๋™์  ์กฐ์ •

MLFQ๋Š” โ€œ๋‹ค๋‹จ๊ณ„ ํ + ์‹คํ–‰ ํ”ผ๋“œ๋ฐฑโ€์ด๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์•„์ด๋””์–ด๋กœ, ๋‹ค์–‘ํ•œ ์ž‘์—… ๋ถ€๋ฅ˜๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

Lottery Scheduling

Proportional Share Scheduling ๊ฐœ๋…

๋ชฉํ‘œ: ์‹œ์Šคํ…œ ์ž์›(CPU ์‹œ๊ฐ„)์„ ํ‹ฐ์ผ“ ์ˆ˜๋‚˜ ๊ฐ€์ค‘์น˜์— ๋น„๋ก€ํ•˜์—ฌ ๊ณต์ •ํ•˜๊ฒŒ ๋ถ„๋ฐฐ

์ ์šฉ: ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์—์„œ ๊ฐ€์ƒ ๋จธ์‹ ์— CPU ์‚ฌ์ดํด์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ์„ธ์Šค๋ณ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€๋ณ€์ ์œผ๋กœ ์„ค์ •ํ•  ๋•Œ ์œ ์šฉ

Lottery Scheduling

์•„์ด๋””์–ด: ๊ฐ ์ž‘์—…์— ํ‹ฐ์ผ“์„ ํ• ๋‹นํ•˜๊ณ , ๋งค ์Šค์ผ€์ค„๋ง ์‹œ ๋ฌด์ž‘์œ„๋กœ ํ‹ฐ์ผ“์„ ์ถ”์ฒจ

ํŠน์ง•:

  • ๋‹จ์ˆœ์„ฑ: ํ‹ฐ์ผ“ ํ’€์— ๋ฒˆํ˜ธ๋งŒ ๋„ฃ์—ˆ๋‹ค ๋ฝ‘์œผ๋ฉด ๋จ
  • ํ™•๋ฅ ์  ๊ณต์ •์„ฑ: ์ถฉ๋ถ„ํžˆ ๊ธด ์‹œ๊ฐ„ ๋™์•ˆ, ๊ฐ ์ž‘์—…์ด ํ• ๋‹น๋œ ํ‹ฐ์ผ“ ๋น„์œจ์— ๋”ฐ๋ผ CPU ์‹œ๊ฐ„์„ ์ฐจ์ง€
  • ์œ ์—ฐ์„ฑ: ํ‹ฐ์ผ“ ์ˆ˜ ์กฐ์ ˆ๋กœ ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ ๋‹จ์ :
  • ๋ฌด์ž‘์œ„์„ฑ์œผ๋กœ ์ธํ•ด ์งง์€ ์‹œ๊ฐ„ ๊ตฌ๊ฐ„์—์„œ๋Š” ๋ถˆ๊ณต์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ‹ฐ์ผ“ ํ’€์ด ํด์ˆ˜๋ก ์ถ”์ฒจ ๋น„์šฉ ์ฆ๊ฐ€ (๋ณดํ†ต ์„ ํ˜• ๊ฒ€์ƒ‰)

Stride Scheduling

์•„์ด๋””์–ด: Lottery๋ฅผ ๊ฒฐ์ •๋ก ์  ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„

๊ตฌ์„ฑ ์š”์†Œ:

  • Stride = L / tickets (L์€ ํฐ ์ƒ์ˆ˜, ์˜ˆ: 10,000)
  • ๊ฐ ์ž‘์—…์€ pass ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ๋งค ์‹คํ–‰๋งˆ๋‹ค ์ž์‹ ์˜ stride๋ฅผ pass์— ๋”ํ•จ
  • ๋‹ค์Œ ์‹คํ–‰ ์ž‘์—…์€ ์ตœ์†Œ pass ๊ฐ’์„ ๊ฐ€์ง„ ์ž‘์—…์„ ์„ ํƒ

์žฅ์ : ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ , ํ™•๋ฅ ์  ๋ณ€๋™์ด ์—†์Œ

๋‹จ์ : stride ๊ณ„์‚ฐ์— ์˜ค๋ฒ„ํ—ค๋“œ, ํ‹ฐ์ผ“ ์žฌํ• ๋‹น ์‹œ ๋ณต์žก๋„

Completely Fair Scheduler (CFS)

Linux์˜ CFS๋Š” ๊ฐ€์ค‘์น˜ ๊ธฐ๋ฐ˜ Roundโ€‘Robin์„ ํ™•์žฅํ•œ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

๊ฐ€์ค‘์น˜(Weight)์™€ nice ๋ ˆ๋ฒจ

UNIX์˜ nice ๊ฐ’์„ โˆ’20~+19 ๋ฒ”์œ„๋กœ ์ง€์ •ํ•ด ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •

CFS๋Š” nice ๊ฐ’์„ weight ํ…Œ์ด๋ธ”(40๊ฐœ ํ•ญ๋ชฉ)๋กœ ๋งคํ•‘, ๊ธฐ๋ณธ weightโ‚€=1024 -> time_slice ๊ณ„์‚ฐ ์‹œ ์‚ฌ์šฉ

time slice ๊ณ„์‚ฐ

n๊ฐœ์˜ runnable ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด:

\[timeslice_k = {weight_k\over \displaystyle\sum_{k=0}^{k=n}{weight_k}} \times SchedLatency\]

์˜ˆ: A(niceโ€Š=โ€Šโ€“5, weightโ€Š=โ€Š3121), B(niceโ€Š=โ€Š0, weightโ€Š=โ€Š1024), sched_latency=48ย ms -> Aย โ‰ˆย 36ย ms, Bย โ‰ˆย 12ย ms

vruntime ์—…๋ฐ์ดํŠธ

์‹ค์ œ ์‹คํ–‰ ์‹œ๊ฐ„(runtimeแตข)์— ๋Œ€ํ•ด:

\[vruntime_i += {weight_0\over weight_i} \times runtime_i\]

๊ฐ€์ค‘์น˜๊ฐ€ ํด์ˆ˜๋ก vruntime ์ฆ๊ฐ€์œจ์ด ๋А๋ ค, ๋” ๋งŽ์€ CPU ์‹œ๊ฐ„์ด ๋ณด์žฅ๋จ

์ž๋ฃŒ๊ตฌ์กฐ: ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ

runnable ํ”„๋กœ์„ธ์Šค๋ฅผ vruntime ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋œ ๋ ˆ๋“œโ€‘๋ธ”๋ž™ ํŠธ๋ฆฌ์— ์ €์žฅ

๋‹ค์Œ ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ตœ์†Œ vruntime ๋…ธ๋“œ์—์„œ O(logย n) ์‹œ๊ฐ„์— ์„ ํƒ

sleep -> runnable ์ „ํ™˜ ์‹œ vruntime์„ ํŠธ๋ฆฌ์˜ ์ตœ์†Œ vruntime์œผ๋กœ ์กฐ์ •ํ•ด starvation ๋ฐฉ์ง€

์žฅ๋‹จ์  ๋ฐ ํ™œ์šฉ

์žฅ์ :

  • ํ™•์žฅ์„ฑ: ์ˆ˜์ฒœ ๊ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ O(logย n) ์Šค์ผ€์ค„๋ง
  • ๊ณต์ •์„ฑ: ๊ฐ€์ค‘์น˜์— ๋”ฐ๋ฅธ ๋น„๋ก€ ๋ถ„๋ฐฐ, nice ๊ฐ’ ์กฐ์ ˆ ๊ฐ€๋Šฅ ๋‹จ์ :
  • I/O ์ง‘์ค‘ ์ž‘์—…์€ wakeup ํ›„ ๊ณผ๋„ํ•œ CPU ์ ์œ  ๊ฐ€๋Šฅ
  • ํ‹ฐ์ผ“/๊ฐ€์ค‘์น˜ ํ• ๋‹น ์ •์ฑ…์€ ์—ฌ์ „ํžˆ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ

์ ์šฉ ์˜ˆ: ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ(ESX Server), ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ

Address Spaces

์˜ˆ์‹œ ์ฃผ์†Œ ๊ณต๊ฐ„ ๊ตฌ์กฐ

๊ฐ€์ƒ ์ฃผ์†Œ ๊ณต๊ฐ„์€ ํฌ๊ฒŒ ์„ธ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

  • ์ฝ”๋“œ(Code): ํ”„๋กœ๊ทธ๋žจ ๋ช…๋ น์–ด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณ ์ • ํฌ๊ธฐ ์„ธ๊ทธ๋จผํŠธ
  • ํž™(Heap): malloc() ๋“ฑ์œผ๋กœ ๋™์ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋ฉฐ, ์ฝ”๋“œ ๋ฐ”๋กœ ์•„๋ž˜์—์„œ ์œ„๋กœ ์„ฑ์žฅ
  • ์Šคํƒ(Stack): ์ง€์—ญ ๋ณ€์ˆ˜ยทํ•จ์ˆ˜ ์ธ์žยท๋ฆฌํ„ด ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๋(์ตœ์ƒ์œ„)์—์„œ ์•„๋ž˜๋กœ ์„ฑ์žฅ

์ด์ฒ˜๋Ÿผ ํž™๊ณผ ์Šคํƒ์„ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์–‘ ๋์— ๋ฐฐ์น˜ํ•˜๋ฉด ๋‘ ์˜์—ญ์ด ์„œ๋กœ ์ถฉ๋Œ ์—†์ด ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ฉ”๋ชจ๋ฆฌ ๊ฐ€์ƒํ™”์˜ ํ•ต์‹ฌ ๊ณผ์ œ

๊ฐ€์ƒํ™” ๋ชฉํ‘œ: ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ๊ฐ 32๋น„ํŠธ(๋˜๋Š” 64๋น„ํŠธ)์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํฐ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋ฉด์„œ๋„, ์‹ค์ œ๋กœ๋Š” ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ

์ž‘๋™ ์›๋ฆฌ: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ƒ ์ฃผ์†Œ(์˜ˆ: 0)๋ฅผ ์ฐธ์กฐํ•˜๋ฉด, ํ•˜๋“œ์›จ์–ด MMU์™€ ์šด์˜์ฒด์ œ๊ฐ€ ํ˜‘๋ ฅํ•ด ์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ(์˜ˆ: 320ย KB)๋กœ ํˆฌ๋ช…ํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„ ๋ชฉํ‘œ

ํˆฌ๋ช…์„ฑ(Transparency)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€์ƒํ™”๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•ด์•ผ ํ•˜๋ฉฐ, ๋งˆ์น˜ ์ž์‹ ๋งŒ์˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํšจ์œจ์„ฑ(Efficiency)

  • ์‹œ๊ฐ„์  ์˜ค๋ฒ„ํ—ค๋“œ(TLB ํ™œ์šฉ ๋“ฑ)์™€ ๊ณต๊ฐ„์  ์˜ค๋ฒ„ํ—ค๋“œ(ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋“ฑ ์ง€์› ๊ตฌ์กฐ) ์–‘์ชฝ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด TLB ๊ฐ™์€ ์ง€์› ์žฅ์น˜๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

๋ณดํ˜ธ(Protection) / ๊ฒฉ๋ฆฌ(Isolation)

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค์™€ ์ปค๋„ ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•ด, ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ OS๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค

โ€œ๋ชจ๋“  ์ฃผ์†Œ๋Š” ๊ฐ€์ƒ ์ฃผ์†Œโ€

์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์ถœ๋ ฅํ•˜๋Š” ํฌ์ธํ„ฐ ๊ฐ’(์˜ˆ: main() ์œ„์น˜, malloc() ๋ฐ˜ํ™˜ ์ฃผ์†Œ, ์Šคํƒ ๋ณ€์ˆ˜ ์ฃผ์†Œ)์€ ๋ชจ๋‘ ๊ฐ€์ƒ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋Š” ์šด์˜์ฒด์ œ์™€ ํ•˜๋“œ์›จ์–ด๋งŒ์ด ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ€์ƒ ์ฃผ์†Œ๋Š” ๋‹จ์ง€ โ€œ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์˜ ํ™˜์ƒโ€์ž„์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์š”์•ฝ

์šด์˜์ฒด์ œ์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์„œ๋ธŒ์‹œ์Šคํ…œ์€

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

Address Translation

๋™์  ์žฌ๋ฐฐ์น˜(Dynamic Relocation) ๊ฐœ์š”

โ€œBase-and-boundsโ€ ๋ฐฉ์‹์œผ๋กœ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์ƒ ์ฃผ์†Œ์— ํ•˜๋“œ์›จ์–ด๊ฐ€ base ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๋”ํ•ด ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, bounds ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋ฒ”์œ„ ๊ฒ€์‚ฌ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋…๋ฆฝ๋œ ์—ฐ์† ๋ฌผ๋ฆฌ ์˜์—ญ์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ CPU์—์„œ ์ง์ ‘ ์‹คํ–‰ ์†๋„๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค

ํ•˜๋“œ์›จ์–ด ์š”๊ตฌ์‚ฌํ•ญ

  1. ํŠน๊ถŒ ๋ชจ๋“œ(Privileged/User Mode): ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์„ ์ œํ•œํ•˜๊ณ , ์ปค๋„ ๋ชจ๋“œ์—์„œ๋งŒ base/bounds ์„ค์ • ๋“ฑ ํŠน๊ถŒ ์ž‘์—…์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. Base/Bounds ๋ ˆ์ง€์Šคํ„ฐ: ๊ฐ CPU MMU์— ํ•œ ์Œ์˜ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์–ด, ๊ฐ€์ƒ ์ฃผ์†Œ์— base๋ฅผ ๋”ํ•˜๊ณ  bounds๋ฅผ ์ฒดํฌํ•˜๋Š” ์ „์šฉ ํšŒ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฃผ์†Œ ๋ณ€ํ™˜ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํšŒ๋กœ: ๊ฐ€์ƒ->๋ฌผ๋ฆฌ ๋ณ€ํ™˜์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ณ , bounds ์œ„๋ฐ˜ ์‹œ ์˜ˆ์™ธ(trap)๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ OS ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ถ„๊ธฐํ•˜๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  4. ํŠน๊ถŒ ๋ช…๋ น์–ด: OS๊ฐ€ ๋ถ€ํŒ… ์‹œ์™€ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์‹œ base/bounds ๊ฐ’์„ ์„ค์ •ยท๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ช…๋ น์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

์šด์˜์ฒด์ œ ์ฑ…์ž„

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น/ํšŒ์ˆ˜

  • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ, free list ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฒ€์ƒ‰ํ•ด ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์Šฌ๋กฏ์„ ํ• ๋‹นํ•˜๊ณ , ์ข…๋ฃŒ ์‹œ ํ•ด๋‹น ์Šฌ๋กฏ์„ ๋‹ค์‹œ ํšŒ์ˆ˜ํ•ด ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Base/Bounds ๊ด€๋ฆฌ

  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์‹œ CPU base/bounds ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค PCB์— ์ €์žฅํ•˜๊ณ , ์ƒˆ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ’์„ ๋ณต์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ, ํ”„๋กœ์„ธ์Šค ์ด๋™(migration)์ด ํ•„์š”ํ•  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ํ›„ PCB์˜ base ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ ํ•ธ๋“ค๋ง

  • ๋ถ€ํŒ… ์‹œ ํŠธ๋žฉ ํ…Œ์ด๋ธ”์— โ€œoutโ€‘ofโ€‘boundsโ€ ๋ฐ โ€œprivileged instructionโ€ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•ด ๋ณดํ†ต ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋ถ€ํŒ… ์ดˆ๊ธฐํ™”

  • ํŠธ๋žฉ ํ…Œ์ด๋ธ” ์„ค์ •, ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ์ดˆ๊ธฐํ™”, ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”ยทfree list ์ดˆ๊ธฐํ™” ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ด ์‹œ์Šคํ…œ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค

๋™์ž‘ ํƒ€์ž„๋ผ์ธ ์š”์•ฝ

๋ถ€ํŒ… ์‹œ (Boot)

  1. ํŠธ๋žฉ ํ…Œ์ด๋ธ”(์‹œ์Šคํ…œ ์ฝœยทํƒ€์ด๋จธยท๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์™ธ) ์ดˆ๊ธฐํ™”
  2. ์ธํ„ฐ๋ŸฝํŠธ ํƒ€์ด๋จธ ์‹œ์ž‘
  3. ํ”„๋กœ์„ธ์Šคยทfree list ๊ตฌ์กฐ ์ดˆ๊ธฐํ™”

์‹คํ–‰ ์ค‘ (Runtime)

  1. ํ”„๋กœ์„ธ์Šค A ์‹คํ–‰: ๊ฐ€์ƒ ์ฃผ์†Œ ๋ณ€ํ™˜์€ ์ „๋ถ€ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ฒ˜๋ฆฌ
  2. ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ -> ์ปค๋„ ์ „ํ™˜ -> ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜(A->B)
  3. B ์‹คํ–‰ ์ค‘ โ€œbad loadโ€ ๋ฐœ์ƒ -> bounds ์˜ˆ์™ธ -> OS๊ฐ€ B ์ข…๋ฃŒยท๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜
  4. ์ดํ›„๋„ ๋ชจ๋‘ LDE(์ œํ•œ์  ์ง์ ‘ ์‹คํ–‰) ํ”„๋กœํ† ์ฝœ๋กœ ๋™์ž‘

์žฅ์ ยทํ•œ๊ณ„

์žฅ์ :

  • ๋งค์šฐ ์ ์€ ํ•˜๋“œ์›จ์–ด ์ถ”๊ฐ€ ๋…ผ๋ฆฌ๋กœ ๋น ๋ฅธ ์ฃผ์†Œ ๋ณ€ํ™˜
  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ(๋ณดํ˜ธ) ๋ณด์žฅ
  • ํ”„๋กœ์„ธ์Šค๋Š” ๋ฒˆ์—ญ ์‚ฌ์‹ค์„ ์ „ํ˜€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ํˆฌ๋ช…์„ฑ

ํ•œ๊ณ„:

  • ๋‚ด๋ถ€ ๋‹จํŽธํ™”(Internal Fragmentation): ๊ณ ์ • ํฌ๊ธฐ ์Šฌ๋กฏ์— ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ฐฐ์น˜ํ•˜๋ฏ€๋กœ ๋นˆ ๊ณต๊ฐ„์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์Œ
  • ๋” ์„ธ๋ฐ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ์„ ์œ„ํ•ด ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์ด๋‚˜ ํŽ˜์ด์ง• ๊ฐ™์€ ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

Segmentation

๊ฐ€์ƒ ์ฃผ์†Œ์™€ ์˜คํ”„์…‹

๊ฐ€์ƒ ์ฃผ์†Œ๋Š” (segment, offset) ์Œ์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

์˜คํ”„์…‹ ์ฒ˜๋ฆฌ:

  • ์ˆœ๋ฐฉํ–ฅ(positive) ์˜คํ”„์…‹: ์ฝ”๋“œยทํž™ ์˜์—ญ์ฒ˜๋Ÿผ ์œ„๋กœ ์„ฑ์žฅํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ
  • ์—ญ๋ฐฉํ–ฅ(negative) ์˜คํ”„์…‹: ์Šคํƒ์ฒ˜๋Ÿผ ์•„๋ž˜๋กœ ์„ฑ์žฅํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ

ํ•˜๋“œ์›จ์–ด๋Š” ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ base์™€ size๋ฅผ ์ฝ๊ณ ,

  1. ์˜คํ”„์…‹์˜ ์ ˆ๋Œ€๊ฐ’์ด size ์ดํ•˜์ธ์ง€ ๊ฒ€์‚ฌ(๋ฒ”์œ„ ๊ฒ€์‚ฌ)
  2. PA = base + offset ๊ณ„์‚ฐ
  3. ์œ„๋ฐ˜ ์‹œ ์˜ˆ์™ธ(trap) ๋ฐœ์ƒ

๋ณดํ˜ธ ๋ฐ ๊ณต์œ 

์„ธ๊ทธ๋จผํŠธ๋ณ„ ๋ณดํ˜ธ ๋น„ํŠธ(์ฝ๊ธฐยท์“ฐ๊ธฐยท์‹คํ–‰)๋ฅผ ์„ค์ •ํ•ด, ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด, OS๋Š” ์‹ค์ œ๋กœ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•˜๋‚˜๋งŒ ํ• ๋‹นํ•ด ๋‘๊ณ  ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ™์€ base๋ฅผ ์ง€์ •ํ•ด ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋กœ์จ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์ œ๋ฅผ ์ค„์ด๋ฉด์„œ๋„ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๊ฒฉ๋ฆฌ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค

Coarseโ€‘ vs Fineโ€‘grained Segmentation

Coarseโ€‘grained: ๋ณดํ†ต ์ฝ”๋“œยทํž™ยท์Šคํƒ์ฒ˜๋Ÿผ ๋ช‡ ๊ฐœ์˜ ํฐ ์„ธ๊ทธ๋จผํŠธ๋งŒ ์‚ฌ์šฉ

Fineโ€‘grained: Multics ๋“ฑ์—์„œ๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ์ž‘์€ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ง€์›

  • ํ•˜๋“œ์›จ์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ”์„ ๋‘๊ณ , ํ•ด์‹œ๋‚˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒ

Fineโ€‘grained๋Š” ์œ ์—ฐํ•˜์ง€๋งŒ, ํ•˜๋“œ์›จ์–ดยทOS ๋ณต์žก๋„์™€ ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํฌ๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค

OS์˜ ์ถ”๊ฐ€ ์ง€์›

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜

  • ํ”„๋กœ์„ธ์Šค ์ „ํ™˜ ์‹œ, ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ(base, size, ๋ณดํ˜ธ ๋น„ํŠธ)๋ฅผ PCB์— ์ €์žฅยท๋ณต์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ธ๊ทธ๋จผํŠธ ์„ฑ์žฅ/์ถ•์†Œ

  • malloc()์œผ๋กœ ํž™ ํ™•์žฅ ์‹œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ sbrk() ๊ฐ™์€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด OS์— ์š”์ฒญ -> OS๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

Freeโ€‘Space Management

  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ€๋ณ€ ํฌ๊ธฐ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ํฉ์–ด์ง€๋ฉด์„œ ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํŒฉ์…˜(๋นˆ ๊ณต๊ฐ„ ํ†ตํ•ฉ)์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ๋น„์šฉ์ด ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์‹  freeโ€‘list ์•Œ๊ณ ๋ฆฌ์ฆ˜(bestโ€‘fit, firstโ€‘fit, buddy ๋“ฑ)์„ ์‚ฌ์šฉํ•ด ํฐ ๋นˆ ์˜์—ญ์„ ์œ ์ง€ํ•˜๋ ค ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”์™€ ์ปดํŒฉ์…˜ ์˜ˆ์‹œ

์™ธ๋ถ€ ๋‹จํŽธํ™”: 24ย KB์˜ ๋นˆ ๊ณต๊ฐ„์ด ์žˆ์ง€๋งŒ, 3ย ร—ย 8ย KB๋กœ ๋ถ„์‚ฐ๋˜์–ด ์žˆ์–ด 20ย KB ์š”์ฒญ์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ

์ปดํŒฉ์…˜:

  • ๋ชจ๋“  ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํ•œ์ชฝ์œผ๋กœ ๋ชฐ์•„๋ถ™์—ฌ ์—ฐ์†๋œ ๋นˆ ๊ณต๊ฐ„์„ ํ™•๋ณด
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์‚ฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ณ , ๋ฐ˜๋ณต ์‹œ ๋˜ ๋‹ค๋ฅธ ์ปดํŒฉ์…˜์ด ํ•„์š”ํ•ด ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์š”์•ฝ ๋ฐ ํ•œ๊ณ„

์žฅ์ :

  • ๋น ๋ฅธ ์ฃผ์†Œ ๋ณ€ํ™˜(ํ•˜๋“œ์›จ์–ด๋งŒ์œผ๋กœ ๊ณ„์‚ฐ)
  • ๊ฐ€๋ณ€ ํฌ๊ธฐ ์„ธ๊ทธ๋จผํŠธ๋กœ ํฌ์†Œ(sparse) ์ฃผ์†Œ ๊ณต๊ฐ„ ํšจ๊ณผ์  ์ง€์›
  • ์ฝ”๋“œ ๊ณต์œ ๋ฅผ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ

๋‹จ์ :

  • ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ(๋ณ€์ˆ˜ ํฌ๊ธฐ ์„ธ๊ทธ๋จผํŠธ ํ• ๋‹น)
  • ์—ฌ์ „ํžˆ ์™„์ „ํžˆ ์œ ์—ฐํ•œ ํฌ์†Œ ์ฃผ์†Œ ๊ณต๊ฐ„ ์ง€์›์—๋Š” ํ•œ๊ณ„

๋‹ค์Œ ๋‹จ๊ณ„๋กœ, ํŽ˜์ด์ง€ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ด ํ•œ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทน๋ณตํ•˜๋Š”์ง€ ๋ฐฐ์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Free Space Management

ํž™ ํ™•์žฅ(Heap Growth)

sbrk()/brk() ์‹œ์Šคํ…œ ์ฝœ๋กœ ํž™์„ ํ™•์žฅ

OS๋Š” free list์—์„œ ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘ํ•œ ๋’ค, ์ƒˆ๋กœ์šด ํž™ ๋ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

๊ธฐ๋ณธ ํ• ๋‹น ์ „๋žต (17.3)

์ „๋žต ์žฅ์  ๋‹จ์ 
Best Fit ์š”์ฒญ ํฌ๊ธฐ์™€ ๊ทผ์ ‘ํ•œ ๋ธ”๋ก์„ ํ• ๋‹นํ•˜์—ฌ ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๊ฐ์†Œ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ -> ๋†’์€ ๊ฒ€์ƒ‰ ๋น„์šฉ
Worst Fit ๊ฐ€์žฅ ํฐ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•ด ํฐ ์ž”์—ฌ ๋ธ”๋ก ์œ ์ง€ ์ „์ฒด ํƒ์ƒ‰ ๋น„์šฉ ๋†’์Œ, ์™ธ๋ถ€ ๋‹จํŽธํ™” ์ฆ๊ฐ€ ๊ฒฝํ–ฅ
First Fit ๋ฆฌ์ŠคํŠธ ์•ž์—์„œ ์ฒซ ๋ฒˆ์งธ ์ ํ•ฉ ๋ธ”๋ก ํ• ๋‹น -> ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์ž‘์€ ๋ธ”๋ก์ด ๋ฆฌ์ŠคํŠธ ์•ž์— ๋ˆ„์ ๋  ์ˆ˜ ์žˆ์Œ
Next Fit ๋งˆ์ง€๋ง‰ ๊ฒ€์ƒ‰ ์œ„์น˜๋ถ€ํ„ฐ ํƒ์ƒ‰ ์‹œ์ž‘ -> ๋ธ”๋ก ๋ถ„์‚ฐ, First Fit ์œ ์‚ฌ ์„ฑ๋Šฅ First Fit๊ณผ ๋น„์Šทํ•œ ์„ฑ๋Šฅ, ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ ๊ด€๋ฆฌ ํ•„์š”

๊ณ ๊ธ‰ ๊ธฐ๋ฒ•

Segregated Lists

  • ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ „์šฉ ๋ฆฌ์ŠคํŠธ ์œ ์ง€
  • ์žฅ์ : ํŠน์ • ํฌ๊ธฐ ํ• ๋‹น/ํ•ด์ œ๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„, ๋‹จํŽธํ™” ๊ฐ์†Œ
  • ๋‹จ์ : ํ’€ ํฌ๊ธฐ ๊ฒฐ์ •์˜ ์–ด๋ ค์›€
  • ์˜ˆ์‹œ: Solaris์˜ Slab Allocator

Buddy Allocation

  • ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 2^N ํฌ๊ธฐ ๋ธ”๋ก์œผ๋กœ ๊ด€๋ฆฌ
  • ์š”์ฒญ ํฌ๊ธฐ์— ๋งž๊ฒŒ ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•˜๋ฉฐ power-of-two ๋ธ”๋ก ํ• ๋‹น
  • ํ•ด์ œ ์‹œ ์ธ์ ‘ํ•œ โ€œ๋ฒ„๋””โ€ ๋ธ”๋ก์ด ๋น„์–ด ์žˆ์œผ๋ฉด ๋ณ‘ํ•ฉ(coalesce)
  • ์žฅ์ : coalescing์ด ๋‹จ์ˆœ(์ฃผ์†Œ์˜ ํŠน์ • ๋น„ํŠธ ์ฐจ์ด๋กœ ํŒ๋ณ„)
  • ๋‹จ์ : ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋ฐœ์ƒ ๊ฐ€๋Šฅ

๊ธฐํƒ€ ์ž๋ฃŒ๊ตฌ์กฐ

  • ์„ฑ๋Šฅยทํ™•์žฅ์„ฑ ์œ„ํ•ด ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ, ์Šคํ”Œ๋ ˆ์ด ํŠธ๋ฆฌ, ๋ถ€๋ถ„ ์ˆœ์„œ ํŠธ๋ฆฌ ๋“ฑ ํ™œ์šฉ

์‹ค์ œ ํ• ๋‹น๊ธฐ ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ

์†๋„ vs. ๋‹จํŽธํ™”

  • ๋น ๋ฅธ ๊ฒ€์ƒ‰(First/Next Fit)๊ณผ ๋‚ฎ์€ ๋‹จํŽธํ™”(Best Fit) ๊ฐ„ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

๋‹จ์ˆœ์„ฑ vs. ํ™•์žฅ์„ฑ

  • Buddy, Segregated Lists๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ์ฝ”์–ด ๋™์‹œ์„ฑ ์ž ๊ธˆ ๋น„์šฉ ๊ณ ๋ ค ํ•„์š”
  • Hoard, jemalloc ๊ฐ™์€ ํ˜„๋Œ€ ํ• ๋‹น๊ธฐ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œยท๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ ์ตœ์ ํ™”

Introduction to Paging

ํŽ˜์ด์ง•์˜ ๋™๊ธฐ์™€ ๊ฐœ์š”

์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์ฒ˜๋Ÿผ ๊ฐ€๋ณ€ ํฌ๊ธฐ ๋Œ€์‹ , ๊ณ ์ • ํฌ๊ธฐ ํŽ˜์ด์ง€(์˜ˆ: 4ย KB)์™€ ๊ณ ์ • ํฌ๊ธฐ ํ”„๋ ˆ์ž„(๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋‹จ์œ„)์œผ๋กœ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ถ„ํ• 

๋‹จํŽธํ™”(fragmentation) ๊ด€๋ฆฌ๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๋ฉฐ, ์—ฐ์†์„ฑ์ด ํ•„์š” ์—†๋Š” ํ• ๋‹นยทํšŒ์ˆ˜๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ์ด๋ฃจ์–ด์ง

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์˜ ์ €์žฅ ์œ„์น˜

๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•˜์—ฌ, ๊ฐ€์ƒ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ(VPN)->๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„ ๋ฒˆํ˜ธ(PFN)๋ฅผ ๋งคํ•‘

32๋น„ํŠธ ์ฃผ์†Œยท4ย KB ํŽ˜์ด์ง€ ๊ธฐ์ค€:

  • ๊ฐ€์ƒ ํŽ˜์ด์ง€ ์ˆ˜ = \(2^{32}ย /ย 2^{12} = 2^{20}\)
  • PTE ํฌ๊ธฐ 4B -> ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํฌ๊ธฐ โ‰ˆย 4ย MB

MMU ๋‚ด๋ถ€์— ๋‘๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ปค์„œ, ์ผ๋ฐ˜ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋†“๊ณ  ํ•„์š” ์‹œ ์Šค์™€ํ•‘๋„ ๊ฐ€๋Šฅ

ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ(PTE)์˜ ๊ตฌ์„ฑ

Valid/Present ๋น„ํŠธ: ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๋Š”์ง€

Protection ๋น„ํŠธ: ์ฝ๊ธฐ/์“ฐ๊ธฐ/์‹คํ–‰ ๊ถŒํ•œ

Dirty ๋น„ํŠธ: ํŽ˜์ด์ง€๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€

Accessed ๋น„ํŠธ: ํŽ˜์ด์ง€๊ฐ€ ์ฐธ์กฐ๋˜์—ˆ๋Š”์ง€ (๊ต์ฒด ์ •์ฑ… ์‹œ ํ™œ์šฉ)

Physical Frame Number (PFN): ์‹ค์ œ ๋ฌผ๋ฆฌ ํ”„๋ ˆ์ž„ ๋ฒˆํ˜ธ

x86 PTE ์˜ˆ์‹œ ํ•„๋“œ: P, R/W, U/S, PWT, PCD, A, D, PFN

ํŽ˜์ด์ง• ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ

์ฃผ์†Œ ๋ณ€ํ™˜ ๊ฒฝ๋กœ:

  1. ๊ฐ€์ƒ ์ฃผ์†Œ -> VPN/์˜คํ”„์…‹ ๋ถ„ํ•  -> MMU์˜ PTBR(Page Table Base Register)์—์„œ PTE ์ฃผ์†Œ ๊ณ„์‚ฐ
  2. ๋ฉ”๋ชจ๋ฆฌ์—์„œ PTE ์ฝ๊ธฐ -> PFN ํš๋“
  3. PFN + ์˜คํ”„์…‹ ๊ฒฐํ•ฉ -> ์ตœ์ข… ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ
  4. ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ

๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšŸ์ˆ˜๊ฐ€ ๋‘ ๋ฐฐ ์ด์ƒ ์ฆ๊ฐ€ -> ์„ฑ๋Šฅ ์ €ํ•˜

์ด ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด TLB๊ฐ€ ํ›„์† ์žฅ์—์„œ ์†Œ๊ฐœ๋จ

๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŠธ๋ ˆ์ด์Šค ์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ์ฝ”๋“œ(for (iโ€ฆ) array[i]=0;)๋ฅผ ํ†ตํ•ด

  • ๋ช…๋ น์–ด ํŽ˜์น˜, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ ‘๊ทผ, ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ์‹ค์ œ๋กœ ๋ช‡ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ถ”์ 
  • ๊ฐ ๋ฃจํ”„ ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์›Œํฌ์˜ ์ˆ˜๋ฅผ ์‹œ๊ฐํ™”ํ•˜์—ฌ, ์˜ค๋ฒ„ํ—ค๋“œ์˜ ํฌ๊ธฐ๋ฅผ ์ •๋Ÿ‰์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ

Translation Lookaside Buffers

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

  1. ๊ฐ€์ƒ ์ฃผ์†Œ์—์„œ VPN์„ ์ถ”์ถœํ•œ ๋’ค, ํ•˜๋“œ์›จ์–ด TLB๋ฅผ ์กฐํšŒ
  2. ํžˆํŠธ ์‹œ PFN์„ ๊บผ๋‚ด ์˜คํ”„์…‹๊ณผ ๊ฒฐํ•ฉํ•ด ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋ฐ˜ํ™˜
  3. ๋ฏธ์Šค ์‹œ ํŠธ๋žฉ์„ ๋ฐœ์ƒ์‹œ์ผœ OS(๋˜๋Š” ํ•˜๋“œ์›จ์–ด)๊ฐ€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์กฐํšŒยทTLB ๊ฐฑ์‹  ํ›„ ๋ช…๋ น ์žฌ์‹œ๋„

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

๋ฐฐ์—ด์„ ์ˆœ์ฐจ ์ ‘๊ทผํ•  ๋•Œ, ๊ฐ™์€ ํŽ˜์ด์ง€ ๋‚ด ์ฐธ์กฐ๋Š” ๋†’์€ TLB ํžˆํŠธ์œจ์„ ๋ณด์ด๊ณ 

ํŽ˜์ด์ง€ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒํ•จ์„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์—ฌ ์คŒ

TLB Miss ์ฒ˜๋ฆฌ ์ฃผ์ฒด

ํ•˜๋“œ์›จ์–ด ๊ด€๋ฆฌํ˜• TLB (์˜ˆ: x86): ๋ฏธ์Šค ์‹œ CPU๊ฐ€ ์ง์ ‘ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์›Œํฌ ์ˆ˜ํ–‰

์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ฆฌํ˜• TLB (์˜ˆ: MIPS/SPARC): ๋ฏธ์Šค๊ฐ€ ์˜ˆ์™ธ(trap)๋กœ ์ „ํ™˜๋˜์–ด OS ์ปค๋„์ด ์ฒ˜๋ฆฌ ํ›„ ์žฌ์‹œ๋„

TLB ์—”ํŠธ๋ฆฌ ๊ตฌ์„ฑ

์ฃผ์š” ํ•„๋“œ: VPN, PFN, Valid/Present, Protection (R/W/X), Dirty, Accessed, ASID, Cache coherence bits ๋“ฑ

ASID๋ฅผ ํ™œ์šฉํ•ด ํ”„๋กœ์„ธ์Šค๋ณ„ ์—”ํŠธ๋ฆฌ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ

์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ์ด์Šˆ

ํ”„๋กœ์„ธ์Šค ๊ฐ„ VPN -> PFN ๋งคํ•‘ ์ถฉ๋Œ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด

  • ์ „์ฒด ํ”Œ๋Ÿฌ์‹œ or
  • ASID ์‚ฌ์šฉ(ํ”Œ๋Ÿฌ์‹œ ์—†์ด ํ”„๋กœ์„ธ์Šค๋ณ„ ๋งคํ•‘ ์œ ์ง€)

๊ต์ฒด ์ •์ฑ…

์ •์ฑ… ๊ต์ฒด ๋Œ€์ƒ ์žฅ์  ๋‹จ์ 
OPT ์•ž์œผ๋กœ ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๋ธ”๋ก ์ด๋ก ์ ์œผ๋กœ ์ตœ์†Œ ๋ฏธ์Šค์œจ (ํ•˜ํ•œ) ๋ฏธ๋ž˜ ์ฐธ์กฐ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ด ์‹ค์ œ ๊ตฌํ˜„ ๋ถˆ๊ฐ€
LRU ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€(๊ฐ€์žฅ ์ตœ๊ทผ์— ์ฐธ์กฐ๋˜์ง€ ์•Š์€) ๋ธ”๋ก ์‹ค์ œ ์›Œํฌ๋กœ๋“œ์—์„œ OPT์— ๊ทผ์ ‘ํ•˜๋Š” ์„ฑ๋Šฅ โ€œ๊ฐ€์žฅ ์ตœ๊ทผ ์‚ฌ์šฉ ์‹œ๊ฐโ€์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋“œ์›จ์–ด/์†Œํ”„ํŠธ์›จ์–ด ์˜ค๋ฒ„ํ—ค๋“œ
FIFO ๊ฐ€์žฅ ๋จผ์ € ์บ์‹œ์— ๋“ค์–ด์˜จ(์ ์žฌ๋œ) ๋ธ”๋ก ๊ตฌํ˜„์ด ๋งค์šฐ ๊ฐ„๋‹จ (์›ํ˜• ํ ํฌ์ธํ„ฐ) ์ ‘๊ทผ ํŒจํ„ด ๋ฌด์‹œ โ†’ Belรกdy ์—ญ์„ค(์บ์‹œ ํฌ๊ธฐ ์ฆ๊ฐ€ ์‹œ ๋ฏธ์Šค์œจ ์ฆ๊ฐ€ ๊ฐ€๋Šฅ)
Random ๋ฌด์ž‘์œ„๋กœ ์„ ํƒ๋œ ๋ธ”๋ก ๊ตฌํ˜„์ด ๊ฐ€์žฅ ๋‹จ์ˆœ, ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œ ์ค‘์š”ํ•œ ์ง€์—ญ์„ฑ ์ •๋ณด ์ „ํ˜€ ๋ฐ˜์˜ ๋ชปํ•จ โ†’ ์„ฑ๋Šฅ์ด ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋Œ€์ฒด๋กœ ๋น„ํšจ์œจ์ 

์‹ค์ œ TLB ์—”ํŠธ๋ฆฌ: MIPS R4000 ์‚ฌ๋ก€

VPN: 19๋น„ํŠธ (32๋น„ํŠธ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ํ•˜์œ„ ์ ˆ๋ฐ˜)

PFN: 24๋น„ํŠธ(์ตœ๋Œ€ 64ย GiB ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ง€์›)

๊ธฐํƒ€: Global bit, 8๋น„ํŠธ ASID, Dirty, Valid, Cache bits, Page mask(์ŠˆํผํŽ˜์ด์ง€)

์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ฆฌ: TLBP, TLBR, TLBWI, TLBWR ํŠน๊ถŒ ๋ช…๋ น์–ด๋กœ OS๊ฐ€ ์ง์ ‘ ์—”ํŠธ๋ฆฌ ๊ด€๋ฆฌ

์š”์•ฝ

TLB๋ฅผ ํ†ตํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์ ‘๊ทผ ์บ์‹ฑ์œผ๋กœ, ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐ

TLB ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์›Œํฌ๋กœ๋“œ๋Š” ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ์ดˆ๋ž˜

์ŠˆํผํŽ˜์ด์ง€, ๊ฐ€์ƒ ์ƒ‰์ธ ์บ์‹œ ๋“ฑ ์ถ”๊ฐ€ ๊ธฐ๋ฒ•์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ์™„ํ™” ๊ฐ€๋Šฅ

Advanced Page Tables

๋ฌธ์ œ ์ œ๊ธฐ

  • ์„ ํ˜•(linear) ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ 32๋น„ํŠธ ์ฃผ์†Œ ๊ณต๊ฐ„, 4ย KB ํŽ˜์ด์ง€, 4ย B/PTE ๊ธฐ์ค€์œผ๋กœ ์•ฝ 4ย MB ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜์‹ญ~๋ฐฑ ๊ฐœ๋ผ๋ฉด, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋งŒ ์ˆ˜๋ฐฑ MB๋ฅผ ์ฐจ์ง€ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์ด ๋งค์šฐ ํผ

ํ•ต์‹ฌ ์งˆ๋ฌธ(CRUX)

  • โ€œํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์–ด๋–ป๊ฒŒ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ค๊นŒ? ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋„์ž…๋˜๋ฉด ์–ด๋–ค ๋น„ํšจ์œจ์ด ์ƒ๊ธฐ๋Š”๊ฐ€?โ€

๋” ํฐ ํŽ˜์ด์ง€(Bigger Pages)

ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ 4ย KB -> 16ย KB๋กœ ๋„ค ๋ฐฐ ๋Š˜๋ฆฌ๋ฉด, VPN ๋น„ํŠธ ์ˆ˜๊ฐ€ 20 -> 18๋กœ ๊ฐ์†Œํ•ด ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ˆ˜๋„ 1/4๋กœ ์ค„์–ด๋“ฆ(์•ฝ 1ย MB)

์žฅ์ : ์„ ํ˜• ๊ตฌ์กฐ ์œ ์ง€, ๊ตฌํ˜„ ๊ฐ„๋‹จ

๋‹จ์ :

  • ๋‚ด๋ถ€ ๋‹จํŽธํ™”(internal fragmentation) ์ฆ๊ฐ€
  • ๋Œ€ํ˜• ํŽ˜์ด์ง€๋Š” TLB ์ปค๋ฒ„๋ฆฌ์ง€ ๊ด€์ ์—์„œ๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํŒจํ„ด์— ๋”ฐ๋ผ ์œ ์—ฐ์„ฑ ์ €ํ•˜

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(segmentation + paging)

Multics ์•„์ด๋””์–ด: ๋จผ์ € ์„ธ๊ทธ๋จผํŠธ(์˜ˆ: ์ฝ”๋“œยท๋ฐ์ดํ„ฐยท์Šคํƒ)๋กœ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋งˆ๋‹ค ์„ ํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ

๋™์ž‘:

  • ์„ธ๊ทธ๋จผํŠธ ์ˆ˜๋งŒํผ ์†Œํ˜• ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋ณด์œ  -> ์ „์ฒด ํฌ๊ธฐ ๊ฐ์†Œ
  • TLB ๋ฏธ์Šค ์‹œ, ์„ธ๊ทธ๋จผํŠธ ์„ ํƒ ํ›„ ํ•ด๋‹น ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์กฐํšŒ

์žฅ์ : ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ํฐ ๋น„์‚ฌ์šฉ ์˜์—ญ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ, ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ

๋‹จ์ :

  • ์„ธ๊ทธ๋จผํŠธ ์ˆ˜๋งŒํผ ๋ ˆ์ง€์Šคํ„ฐยทPDE ํ•„์š” -> ๊ตฌํ˜„ ๋ณต์žก
  • ์™ธ๋ถ€ ๋‹จํŽธํ™”(external fragmentation) ๋ฐœ์ƒ, ๊ด€๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ

๋‹ค๋‹จ๊ณ„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”(Multiโ€‘Level Page Tables)

์•„์ด๋””์–ด: ์„ ํ˜• ํ…Œ์ด๋ธ”์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ถ„ํ• 

  1. ํŽ˜์ด์ง€ ๋””๋ ‰ํ„ฐ๋ฆฌ(PD, Page Directory): ๊ฐ ์—”ํŠธ๋ฆฌ๊ฐ€ โ€œํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํŽ˜์ด์ง€โ€ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  2. ๋‘ ๋‹จ๊ณ„ ์กฐํšŒ: PD -> ํŠน์ • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํŽ˜์ด์ง€(PTE ํŽ˜์ด์ง€) -> ์ตœ์ข… PTE

์žฅ์ :

  • ์‹ค์ œ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ€์ƒ ํŽ˜์ด์ง€์— ๋Œ€์‘ํ•˜๋Š” PTE ํŽ˜์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น -> ์ ˆ๊ฐ ํšจ๊ณผ
  • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ณต๊ฐ„์ด โ€œ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‚ฌ์šฉ๋œ ํฌ๊ธฐโ€์— ๋น„๋ก€
  • ๋น„์—ฐ์†๋œ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ(ํ”„๋ฆฌ ํŽ˜์ด์ง€ ํ’€ ํ™œ์šฉ)

๋‹จ์ :

  • TLB ๋ฏธ์Šค ์‹œ ๋‘ ๋ฒˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํ•„์š” -> ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์กฐํšŒ ๋น„์šฉ ์ฆ๊ฐ€
  • ์ž๋ฃŒ๊ตฌ์กฐยทํ•˜๋“œ์›จ์–ดยท์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„ ๋ณต์žก๋„ ์ƒ์Šน

์‹œ๊ฐ„ยท๊ณต๊ฐ„ ์ ˆ์ถฉ (Timeโ€‘Space Tradeโ€‘Off)

์„ ํ˜• ํ…Œ์ด๋ธ”: ์กฐํšŒ ๋‹จ์ˆœยทTLB ๋ฏธ์Šค ์‹œ ํ•œ ๋ฒˆ ์ ‘๊ทผ, ๊ณต๊ฐ„ ๋น„ํšจ์œจ

๋‹ค๋‹จ๊ณ„ ํ…Œ์ด๋ธ”: ๊ณต๊ฐ„ ํšจ์œจ ๊ทน๋Œ€ํ™”, ์กฐํšŒ ๋น„์šฉยท๋ณต์žก๋„ ์ฆ๊ฐ€

์„ค๊ณ„ ์‹œ ๋ชฉํ‘œ ์›Œํฌ๋กœ๋“œ์™€ ์‹œ์Šคํ…œ ์ œ์•ฝ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๊ธฐ๋ฒ• ์„ ํƒ์ด ํ•„์š”



OSTIL Share Tweet +1
/#disqus_thread