Skip to content

Latest commit

ย 

History

History
ย 
ย 

operating-system

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 

Operating System (์šด์˜์ฒด์ œ)

์ž‘์„ฑ์ž : ๊ถŒํ˜์ง„, ์„œ๊ทธ๋ฆผ, ์œค๊ฐ€์˜, ์žฅ์ฃผ์„ญ, ์ •ํฌ์žฌ, ์ด์„ธ๋ช…

Table of Contents

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ

  • ํ”„๋กœ๊ทธ๋žจ : ํŒŒ์ผ ๋‹จ์œ„๋กœ ์ €์žฅ ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์˜ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„, ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์ด ํ•„์š”ํ•œ๋ฐ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ํ• ๋‹น ๋ฐ›์€ ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์Šค๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค. ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค (Process)

ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

์ฝ”๋“œ(Code), ๋ฐ์ดํ„ฐ(Data), ํž™(Heap), ์Šคํƒ(stack) ์˜์—ญ

  • ์ฝ”๋“œ ์˜์—ญ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค. (์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •, Read-Only)
  • ๋ฐ์ดํ„ฐ ์˜์—ญ : ์ „์—ญ ๋ณ€์ˆ˜, static ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค. ์ „์—ญ ๋ณ€์ˆ˜, static ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผํ•˜๊ณ  ๋‚˜๋ฉด ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฅดํ‚จ๋‹ค. (์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •, Read-Write : ์‹คํ–‰ ๋„์ค‘ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)
  • ํž™ ์˜์—ญ : ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ, ํž™ ์˜์—ญ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋™์  ํ• ๋‹น์ด๋ผ๊ณ  ํ•œ๋‹ค. (๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •, ์Šคํƒ๋ณด๋‹ค ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งŽ์œผ๋‚˜ ๋ฐ์ดํ„ฐ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๋Š๋ฆผ)
  • ์Šคํƒ ์˜์—ญ : ํ•จ์ˆ˜ ์•ˆ์—์„œ ์„ ์–ธ๋œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’, ๋ณต๊ท€ ์ฃผ์†Œ ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค. ์Šคํƒ์˜ LIFO ๋ฐฉ์‹์— ๋”ฐ๋ผ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๊ธฐ๋กํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋ฉด ์ œ๊ฑฐํ•œ๋‹ค. (์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •, ์ •ํ•ด์ง„ ํฌ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ stack overflow ์—๋Ÿฌ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)

ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก (Process Control Block, PCB)

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

ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)์— ์ €์žฅ๋˜๋Š” ์ •๋ณด

  • ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž (Process ID, PID)
  • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ (Process state) : new, ready, running, waiting, terminated
  • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ (Program counter) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • CPU ๋ ˆ์ง€์Šคํ„ฐ : Accumulator, Index Register, ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ ๋“ฑ
  • CPU ์Šค์ผ€์ค„๋ง ์ •๋ณด : ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„, ์ตœ์ข… ์‹คํ–‰ ์‹œ๊ฐ, CPU ์ ์œ  ์‹œ๊ฐ„ ๋“ฑ
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ณด : Page table, Segment table ๋“ฑ
  • ๊ณ„์ • ์ •๋ณด : CPU ์‚ฌ์šฉ ์‹œ๊ฐ„, ์ œํ•œ ์‹œ๊ฐ„, ๊ณ„์ • ๋ฒˆํ˜ธ ๋“ฑ
  • ์ž…์ถœ๋ ฅ ์ƒํƒœ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜, ๊ฐœ๋ฐฉ๋œ ํŒŒ์ผ ๋ชฉ๋ก ๋“ฑ

์Šค๋ ˆ๋“œ (Thread)

์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋„ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํ๋ฆ„์ด๋ฏ€๋กœ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ๋…๋ฆฝ์  : ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž์‹ ๋งŒ์˜ ๊ณ ์œ ํ•œ ์Šค๋ ˆ๋“œ ID, ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ (PC), ๋ ˆ์ง€์Šคํ„ฐ ์ง‘ํ•ฉ, ์Šคํƒ ์˜์—ญ์„ ๊ฐ€์ง„๋‹ค.
    • ๊ณต์œ  : ๊ทธ๋ฆฌ๊ณ  ์†ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ฝ”๋“œ/๋ฐ์ดํ„ฐ/ํž™ ์˜์—ญ๊ณผ ๊ธฐํƒ€ ์šด์˜์ฒด์ œ ์ž์› (์—ด๋ฆฐ ํŒŒ์ผ, ์‹ ํ˜ธ ๋“ฑ) ์„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต์œ ํ•œ๋‹ค.
  • ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์Šคํƒ ์˜์—ญ์„ ํ†ตํ•ด ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ๊ฐ€์ง„๋‹ค.
  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์Šค๋ ˆ๋“œ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ๋ชจ๋‘๊ฐ€ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋œ๋‹ค. (ํ”„๋กœ์„ธ์Šค๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋˜์–ด๋„ ๊ณต์œ  ์ž์›์„ ์†์ƒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.)

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

๋™์‹œ์„ฑ - Concurrent vs Parallel

  • Concurrent : ์–ด๋–ค Job ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฐœ๋… (๋ฉ€ํ‹ฐ)
  • Parallel : ์–ด๋–ค ํ•˜๋‚˜์˜ Job์„ ์ชผ๊ฐœ์„œ ์—ฌ๋Ÿฌ sub-job์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์ด๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ์—์„œ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•ด์„œ ์™„์„ฑํ•˜๋Š” ๊ฐœ๋… (์ž๋™์ฐจ ์กฐ๋ฆฝ์„ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋™์‹œ์— ํ•˜๋Š” ๊ฒƒ, CPU์˜ Core ์—ฌ๋Ÿฌ ๊ฐœ ํ‘œํ˜„)

๋”ฐ๋ผ์„œ parallelism ์—†์ด concurrency๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ๋‚˜ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๊ตฌ์กฐ๊ฐ€ ๋ฐœ์ „ํ•˜๊ธฐ ์ „์—๋Š” ์‹ฑ๊ธ€ ํ”„๋กœ์„ธ์„œ๋กœ ์žฌ๋น ๋ฅด๊ฒŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ „ํ™˜ํ•˜์—ฌ concurrentํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋งŒ parallelํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ํ•˜์˜€๋‹ค.

image

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ (Context-Switching)

Context-Switching ์ด๋ž€, CPU ์ฝ”์–ด๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ €์žฅ ๋ฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋ณต์›์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

  • Context๋ž€ CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋งํ•˜๋ฉฐ, PCB์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋“ค์ด ํ•ด๋‹น๋œ๋‹ค.
  • Context-Switching์ด ๋ฐœ์ƒํ•˜๋ฉด ์ปค๋„์ด ์ด์ „ ํ”„๋กœ์„ธ์Šค์˜ context๋ฅผ ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ PCB์— ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ์‹คํ–‰ํ•  (์Šค์ผ€์ค„๋ง์œผ๋กœ ์˜ˆ์•ฝ) ํ”„๋กœ์„ธ์Šค์˜ ์ €์žฅ๋œ context๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค.
  • Context-Switching ์ˆ˜ํ–‰ ์ค‘์—๋Š” CPU์˜ ์ž์›์ด ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— CPU๊ฐ€ ์•„๋ฌด ์ž‘์—…๋„ ํ•  ์ˆ˜ ์—†๋‹ค. (๋”ฐ๋ผ์„œ Context-Switching time์€ pure overhead)

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค (Multi-Process)

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ผ๊ณ  ํ•ด๋„ ์ž์‹ ๋งŒ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์—†์ด ๋…๋ฆฝ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ

๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ํƒญ ๋ธŒ๋ผ์šฐ์ง•์„ ์ง€์›ํ•œ๋‹ค. ๋งŒ์ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์–ด๋–ค ํƒญ์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋‹ค๋ฅธ ๋ชจ๋“  ํƒญ์„ ํฌํ•จํ•œ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๊ฒƒ์ด๋‹ค.

๊ตฌ๊ธ€์˜ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐ ํƒญ์€ (Renderer) ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ, ์ด๋“ค์€ ๊ฐ์ž ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ํ•˜๋‚˜์˜ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋˜์–ด๋„ ๋‹ค๋ฅธ (Renderer) ํ”„๋กœ์„ธ์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

ํฌ๋กฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์œ ํ˜•์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค : ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋””์Šคํฌ ๋ฐ ๋„คํŠธ์›Œํฌ I/O๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ํฌ๋กฌ์ด ์‹œ์ž‘๋˜๋ฉด ์ƒˆ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • Renderer ํ”„๋กœ์„ธ์Šค : ์›น ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์„ ์œ„ํ•œ ๋กœ์ง(HTML, JavaScript, ์ด๋ฏธ์ง€ ๋“ฑ ์ฒ˜๋ฆฌ)์„ ํฌํ•จํ•œ๋‹ค. ์ด ๋•Œ, ์ƒˆ ํƒญ์—์„œ ์—ด๋ฆฌ๋Š” ๊ฐ ์›น ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด ์ƒˆ Renderer ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ํ™œ์„ฑํ™”๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค : Flash ๋˜๋Š” QuickTime๊ณผ ๊ฐ™์€ ๊ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ์œ ํ˜•์— ๋Œ€ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค์—๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์ฝ”๋“œ์™€ ์—ฐ๊ด€๋œ Renderer, ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์„ธ์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ถ”๊ฐ€ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•

๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋ฆฌ๋„ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ IPC (Inter-Process Communication) ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค. IPC์—๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ (shared memory) ์™€ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ (message passing) ์˜ ๋‘๊ฐ€์ง€ ๋ชจ๋ธ์ด ์žˆ๋‹ค.

  • ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์„ค์ •๋˜๋ฉฐ, ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณต์œ  ์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ : ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•˜๋ฉฐ ํ†ต์‹ ํ•œ๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ์žฅ์ 

  • ๋…๋ฆฝ๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „์„ฑ์ด ๋†’๋‹ค.
  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด๋„ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ด์™ธ์˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๋‹จ์ 

  • ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Context Switching์„ ์œ„ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ(์บ์‹œ ์ดˆ๊ธฐํ™” ๋“ฑ)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • Context Switching์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ (Multi-Thread)

ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

image

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์šฉํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ˆ์‹œ (Multi-threaded applications example)

  • ์›น ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋Š” ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น„์šฉ์ ์ธ ์ธก๋ฉด์—์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.
  • ์šด์˜์ฒด์ œ์˜ ์ปค๋„์€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์ด๋‹ค. Linux ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ์—ฌ๋Ÿฌ ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์žฅ์น˜ ๊ด€๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (ps -ef ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ Linux ์‹œ์Šคํ…œ์—์„œ ์ปค๋„ ์Šค๋ ˆ๋“œ๋ฅผ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • ์ด๋ฏธ์ง€์˜ ๋ชจ์Œ์—์„œ ์‚ฌ์ง„ ์ธ๋„ค์ผ์„ ์ƒ์„ฑํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐœ๋ณ„ ์ด๋ฏธ์ง€์—์„œ ์ธ๋„ค์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ๋Š” ์ด๋ฏธ์ง€๋‚˜ ํ…์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ๋˜๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์›Œ๋“œ ํ”„๋กœ์„ธ์„œ๋Š” ๊ทธ๋ž˜ํ”ฝ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋ ˆ๋“œ, ์‚ฌ์šฉ์ž์˜ ํ‚ค ์ž…๋ ฅ์— ์‘๋‹ตํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋ ˆ๋“œ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋งž์ถค๋ฒ• ๋ฐ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์žฅ์ 

  • ์‘๋‹ต์„ฑ์ด ์ข‹์•„์ง„๋‹ค. ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ์‘๋‹ต์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ†ตํ•ด์„œ๋งŒ ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž์‹ ์ด ์†ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋น„์šฉ์ด ์ ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์ž์‹ ์ด ์†ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ๊ณผ Context-Switching ๋น„์šฉ์ด ๋” ์ ๋‹ค.

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ๋‹จ์ 

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง

ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ time sharing์˜ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ด ์‹คํ–‰ํ•œ๋‹ค. ๊ฐ CPU ์ฝ”์–ด๋Š” ํ•œ๋ฒˆ์— ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ CPU ์ฝ”์–ด ์‹œ์Šคํ…œ์— ๋ฐ˜ํ•ด ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์€ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (multiprogramming) : CPU ์‚ฌ์šฉ๋ฅ ์„ ์ตœ๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ I/O ์ž‘์—… ๋“ฑ CPU๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ์ˆœ๊ฐ„์ด ์˜ค๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์‹œ๋ถ„ํ•  (time sharing) : ๊ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋“ค์ด ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ์„ธ์Šค ๊ฐ„ CPU ์ฝ”์–ด๋ฅผ ์ž์ฃผ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. CPU๊ฐ€ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„์„ ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„(ms)์œผ๋กœ ์ œํ•œํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฒˆ๊ฐˆ์•„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋ฉด CPU๊ฐ€ ํ•˜๋‚˜์ธ ํ™˜๊ฒฝ์—์„œ๋„ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ

image

  • New : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋จ
  • Running : ํ”„๋กœ์„ธ์Šค์˜ Instruction์ด ์‹คํ–‰๋จ
  • Waiting : (I/O ์ž‘์—… ์™„๋ฃŒ๋‚˜ ์‹ ํ˜ธ ์ˆ˜์‹ ๊ณผ ๊ฐ™์€) ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆผ
  • Ready : ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹น๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆผ
  • Terminated : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์„ ๋๋ƒ„

์Šค์ผ€์ค„๋ง ํ

Ready Queue

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋ฉด ready queue์— ๋“ค์–ด๊ฐ€์„œ CPU ์ฝ”์–ด์—์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • Linked List ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ready queue์˜ header๋Š” list์˜ ์ฒซ๋ฒˆ์งธ PCB๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๊ฐ PCB์˜ ํฌ์ธํ„ฐ๋Š” ready queue์— ์žˆ๋Š” ๋‹ค์Œ PCB๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

Wait Queue

  • I/O ์š”์ฒญ๊ณผ ๊ฐ™์€ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ wait queue์— ๋ฐฐ์น˜๋œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๋Š” waiting ์ƒํƒœ์—์„œ ready ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๋ฉด ready queue์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

queueing-diagram

ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ„์˜ Queueing-diagram๊ณผ ๊ฐ™์€ ์ฃผ๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ , ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ํ์—์„œ ์ œ๊ฑฐ๋˜๊ณ  PCB ๋ฐ ์ž์› ํ• ๋‹น์ด ํ•ด์ œ๋œ๋‹ค.

๋‚ด์šฉ ์ถ”๊ฐ€ ์˜ˆ์ •

CPU ์Šค์ผ€์ค„๋ง

CPU ์Šค์ผ€์ค„๋ง์€ Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์„ ์  / ๋น„์„ ์  ์Šค์ผ€์ค„๋ง (Preemptive and Non-preemptive Scheduling)

CPU ์Šค์ผ€์ค„๋ง์€ ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ์ƒํ™ฉ์— ๋Œ€ํ•˜์—ฌ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ running โ†’ waiting ์ƒํƒœ๋กœ ์ „ํ™˜ (ex. I/O ์š”์ฒญ ๋˜๋Š” ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ์œ„ํ•œ wait() ํ˜ธ์ถœ)
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ running โ†’ ready ์ƒํƒœ๋กœ ์ „ํ™˜ (ex. interrupt ๋ฐœ์ƒ)
  3. ํ”„๋กœ์„ธ์Šค๊ฐ€ waiting โ†’ ready ์ƒํƒœ๋กœ ์ „ํ™˜ (ex. I/O ์™„๋ฃŒ)
  4. ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

์Šค์ผ€์ค„๋ง ์‹œ ์ƒํ™ฉ 1, 4์—์„œ๋Š” ์„ ํƒ๊ถŒ ์—†์ด ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒํ™ฉ 2, 3์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ ํƒ๊ถŒ์ด ์žˆ๋‹ค.

  • ๋น„์„ ์  ์Šค์ผ€์ค„๋ง : CPU๊ฐ€ ํ• ๋‹น๋œ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ / waiting ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜์—ฌ CPU๋ฅผ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ CPU๋ฅผ ์œ ์ง€ํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ๋•Œ๊นŒ์ง€ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„ ์  ์Šค์ผ€์ค„๋ง : ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์„ ์ ํ•  ์ˆ˜ ์žˆ๋‹ค. Windows, macOS, Linux ๋ฐ UNIX๋ฅผ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์ตœ์‹  ์šด์˜์ฒด์ œ๋Š” ์„ ์  ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

FCFS (First-Come, First-Served) Scheduling

  • ๋น„์„ ์  ์Šค์ผ€์ค„๋ง
  • ๋จผ์ € CPU๋ฅผ ์š”์ฒญํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— ๋จผ์ € CPU๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
  • FIFO queue ๋ฅผ ์‚ฌ์šฉํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ œ์ ) convoy effect : ๋จผ์ € ๋“ค์–ด์˜จ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์˜ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธธ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ธฐ๋‹ค๋ฆผ์œผ๋กœ์„œ ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ณด๋‹ค CPU ๋ฐ ์žฅ์น˜ ์‚ฌ์šฉ๋ฅ ์ด ๋‚ฎ์•„์ง€๋Š” ํ˜„์ƒ

SJF (Shortest-Job-First) Scheduling

  • ๋น„์„ ์  ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹ : CPU burst time์ด ๊ฐ€์žฅ ์ž‘์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋จผ์ € CPU๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ๋งŒ์ผ CPU burst time์ด ๊ฐ™๋‹ค๋ฉด, FCFS ๋ฐฉ์‹์„ ์ ์šฉํ•œ๋‹ค.
  • ์„ ์  ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹ (SRTF (Shortest-Remaining-Time-First) Scheduling) : ์ƒˆ๋กœ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค์˜ CPU burst time์ด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ burst time ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒˆ๋กœ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ ์ ํ•œ๋‹ค.
  • Priority Scheduling์˜ ํ•œ ์˜ˆ์ด๋‹ค. (์šฐ์„ ์ˆœ์œ„ = CPU burst time)
  • ์ฃผ์–ด์ง„ ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์ตœ์†Œ ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์—์„œ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํ•˜์ง€๋งŒ CPU burst time์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— CPU ์Šค์ผ€์ค„๋ง ์ˆ˜์ค€์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ SJF ์Šค์ผ€์ค„๋ง์„ ๊ทผ์‚ฌํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด์ „ CPU burst time ์ง€์ˆ˜ ํ‰๊ท ์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ œ์ ) starvation : CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ„์† Ready Queue์˜ ๋’ค๋กœ ๋ฐ€๋ ค๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

RR (Round-Robin) Scheduling

  • ์„ ์  ์Šค์ผ€์ค„๋ง
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” time quantum (or time slice) ์ด๋ผ๋Š” ์ž‘์€ ์‹œ๊ฐ„ ๋‹จ์œ„(10-100ms)๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” 1 time quantum ๋™์•ˆ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด CPU๋ฅผ ํ• ๋‹น ๋ฐ›๊ณ , ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด interrupt๋ฅผ ๋ฐ›์•„ Ready Queue์˜ tail์— ๋ฐฐ์น˜๋œ๋‹ค.
  • Ready Queue๋Š” Circular FIFO queue ํ˜•ํƒœ์ด๋‹ค.
  • RR์˜ ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์€ ๊ธด ํŽธ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ณต์ •ํ•˜๋‹ค. n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๊ณ  time quantum์ด q์ผ ๋•Œ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ (n-1) x q ์‹œ๊ฐ„ ๋‹จ์œ„ ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

Time quantum ์„ค์ • ์‹œ ์ฃผ์˜ํ•  ์ 

  • Time quantum์ด ๋„ˆ๋ฌด ํฌ๋‹ค๋ฉด : FCFS์™€ ๊ฐ™์•„์ง„๋‹ค.
  • Time quantum์ด ๋„ˆ๋ฌด ์ž‘๋‹ค๋ฉด : Context Switching์ด ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜ overhead๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด RR ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์€ time quantum์˜ ํฌ๊ธฐ์— ์ขŒ์šฐ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํžˆ ์„ ์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” context-switch time๋ณด๋‹ค ํฐ ๊ฒƒ์ด ์ข‹์ง€๋งŒ ๋˜ ๋„ˆ๋ฌด ์ปค์„œ๋Š” ์•ˆ ๋œ๋‹ค. (๊ฒฝํ—˜์ ์œผ๋กœ CPU burst์˜ 80ํ”„๋กœ๋Š” time quantum๋ณด๋‹ค ์งง์€๊ฒŒ ์ข‹๋‹ค๊ณ  ํ•จ)

Priority Scheduling

  • ์ •์ˆ˜๋กœ ํ‘œํ˜„๋œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ์Šค์ผ€์ค„๋ง์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ๋‚ด๋ถ€์ /์™ธ๋ถ€์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‚ด๋ถ€์  : ์‹œ๊ฐ„ ์ œํ•œ, ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ ์‚ฌํ•ญ, ์—ด๋ฆฐ ํŒŒ์ผ ์ˆ˜, ํ‰๊ท  I/O burst ๋Œ€ ํ‰๊ท  CPU burst ๋น„์œจ ๋“ฑ ์ธก์ • ๊ฐ€๋Šฅํ•œ ์ˆ˜๋Ÿ‰ ์‚ฌ์šฉํ•ด ๊ณ„์‚ฐ
    • ์™ธ๋ถ€์  : ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”์„ฑ, ์ปดํ“จํ„ฐ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ง€๋ถˆ๋˜๋Š” ์ž๊ธˆ์˜ ์œ ํ˜• ๋ฐ ๊ธˆ์•ก, ์ž‘์—…์„ ํ›„์›ํ•˜๋Š” ๋ถ€์„œ, ๊ธฐํƒ€ ์ •์น˜์  ์š”์ธ ๋“ฑ
  • ์„ ์  / ๋น„์„ ์  ์Šค์ผ€์ค„๋ง ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์„ ์  ๋ฐฉ์‹ : ์ƒˆ๋กœ ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„  ์ˆœ์œ„๋ณด๋‹ค ๋†’์œผ๋ฉด CPU ์„ ์ 
    • ๋น„์„ ์  ๋ฐฉ์‹ : ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ Ready Queue์˜ ๋งจ ์•ž์— ๋‘”๋‹ค.
  • ๋ฌธ์ œ์ ) indefinite blocking, starvation
    • ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์œผ๋‚˜ CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” block๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด๊ธฐํ•œ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ) Aging, Round-Robin๊ณผ ๊ฒฐํ•ฉ
    • Aging : ์˜ค๋žซ๋™์•ˆ ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋†’์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งค์ดˆ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.
    • RR+PS : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ๋™์ผํ•œ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด์„œ๋Š” Round-Robin ์Šค์ผ€์ค„๋ง์„ ์ ์šฉํ•œ๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด

Synchronous == Blocking ? Asynchronous == Non-blocking?

๊ฒฐ๋ก  ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ๋‹ค๋ฅด๋‹ค.

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, Blocking ๊ณผ Non-blocking์€ ๊ฐ๊ฐ ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๋‹ค.

Sync & Async

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋Š” ํ˜ธ์ถœ ๋˜๋Š” ํ•จ์ˆ˜์˜ ์™„๋ฃŒ๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ์‹ ๊ฒฝ์„ ์“ฐ๋ƒ ํ˜ธ์ถœ ๋ฐ›์€ ์ชฝ์—์„œ ์‹ ๊ฒฝ์„ ์“ฐ๋ƒ์˜ ์ฐจ์ด๋‹ค.

Blocking & Non-blocking

Blocking ํ˜ธ์ถœ๋ฐ›์€ ์ชฝ์ด ํ˜ธ์ถœํ•œ ์ชฝ์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์ด๊ณ  Non-blocking์€ ๋‹ค์‹œ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋„ค๊ฐ€์ง€ ์กฐํ•ฉ

Sync & Blocking Async & Blocking
Sync & Non-blocking Async & Non-blocking

์ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • Sync & Blocking

    ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” Sync ์ด๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœ ๋ฐ›์€ ์ชฝ์—์„œ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ˜ํ™˜ ๋ ๋•Œ ๊นŒ์ง€ ๋‹ค์Œ ๋™์ž‘์„ ์‹œํ–‰ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Sync & Non-Blocking

    Non-Blocking ์ด๋ผ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ ๋˜์ง€ ์•Š์•„๋„ ์ œ์–ด๊ถŒ์€ ๋„˜๊ฒจ ์ฃผ์–ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ๋‹ค์Œ ๋™์ž‘์„ ์‹œํ–‰ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ์‹ ๊ฒฝ์„ ์จ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•ด์•ผํ•œ๋‹ค.

  • Async & Blocking

    ์ž˜ ์ƒ์ƒ์ด ์•ˆ ๊ฐ€๋Š” ๊ทธ๋ฆผ์ด๋‹ค. ์ž‘์—…์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ˜ธ์ถœ๋œ ์ชฝ์—์„œ ์‹ ๊ฒฝ ์“ฐ๊ณ  ์ œ์–ด๊ถŒ๋„ ํ˜ธ์ถœ๋œ ์ชฝ์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์‚ฌ์‹ค์ƒ Sync & Blocking๊ณผ ๊ฑฐ์˜ ๊ฐ™์•„ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • Async & Non-blocking

    ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” Async์ด๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ œ์–ด๊ถŒ์„ ๋‹ค์‹œ ํ˜ธ์ถœ ํ•œ์ชฝ์œผ๋กœ ๋„˜๊ฒจ์ฃผ์–ด ๋‹ค์Œ ๋™์ž‘์„ ์ด์–ด ๋‚˜๊ฐ€๋ฉด์„œ ํ˜ธ์ถœ ๋ฐ›์€ ์ชฝ์—์„œ ์•Œ์•„์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•˜์—ฌ์ค€๋‹ค.


ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”

Critical Section(์ž„๊ณ„๊ตฌ์—ญ) ์ด๋ž€?

  • ๋™์ผํ•œ ์ž์›์„ ๋™์‹œ์— ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜์—ญ
  • ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ์˜ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒ

Example

Counter++;
=>
LOAD register1 = counter
INCREASE register1 = register1 +1
STORE counter = register1
Counter--;
=>
LOAD register2 = counter
DECREASE register2 = counter -1
STORE counter = register2

๋งŒ์•ฝ, counter = 5 ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  counter++ ๊ณผ counter-- ๋ฅผ ์„œ๋กœ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์—์„œ ์‹คํ–‰ ์‹œํ‚ค๋ฉด ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ 4, 5 ,6 ๋ชจ๋‘ ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

Ctritical Section Problem

๊ณตํ†ต๋œ (data) ์˜์—ญ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค(task or thread) ๋งŒ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ. ์ด๋Ÿฌํ•œ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„ธ๊ฐ€์ง€ ์š”๊ตฌ์กฐ๊ฑด์ด ์ถฉ์กฑ ๋˜์–ด์•ผ ํ•œ๋‹ค.

  1. Mutual Exclusion(์ƒํ˜ธ๋ฐฐํƒ€)

์–ด๋– ํ•œ Task(Thread)๊ฐ€ Critical Section ์„ ์‚ฌ์šฉ์ค‘์ด๋ฉด ๋‹ค๋ฅธ Task๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•จ.

  1. Progress

ํ˜„์žฌ Critical Section ์„ ์‚ฌ์šฉ์ค‘์ธ Task๊ฐ€ ์—†๊ณ  Critical Section์— ๋“ค์–ด๊ฐ€๊ธธ ์›ํ•˜๋Š” Task ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๋“ค์—ฌ๋ณด๋ƒ„

  1. Bounded Waiting

ํ•œ์ •๋œ ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค => ๋ฌดํ•œ ๋Œ€๊ธฐ X

Hardware Solution

  1. Memory Barriers
  2. Compare & Swap
  3. Atomic Variables.

Software Solution

  1. Mutex Lock (hardware-based)
  • Acquire() : Lock ํš๋“
  • Release() : Lock ๋ฐฉ์ถœ

Task๊ฐ€ Crtical Section์— ๋“ค์–ด๊ฐˆ ๋•Œ acquire() ํ•˜๊ณ  ๋‚˜์˜ฌ ๋•Œ release() ํ•˜์—ฌ ํ•œ Task๋งŒ Critical Section ์— ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

=> ํ™”์žฅ์‹ค ์นธ ํ•œ๊ฐœ ์—ด์‡  ํ•œ๊ฐœ!

while(true){
  acquire();
  /* Critical Section*/
  release();
  /* Remainder Section*/
}

acquire(){ // ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•ด์ง€๋ฉด ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์— ๋“ค์–ด๊ฐ„ํ›„ ๋ฌธ์„ ์ž ๊ธˆ!
  while(!available) // Busy Waiting
    available = false;
}
release(){ // ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ํ•ด์คŒ
  available = true;
}

๋ฌธ์ œ์  : Busy waiting(spin lock) ์œผ๋กœ ์ธํ•ด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค.

  1. Semaphores

Wait ๊ณผ Signal์„ ์ด์šฉํ•˜์—ฌ control ํ•œ๋‹ค.

Semaphore๋Š” Critical Section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” task์˜ ์ˆ˜์ด๋‹ค. ์ž์›์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•˜๋‹ค. ๋”ฐ๋ผ์„œ Critical Section์— ์ƒํ˜ธ ๋ฐฐํƒ€์ ์œผ๋กœ ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

=> ํ™”์žฅ์‹ค(Critical Section)์•ˆ์— ์นธ(์ž์›) n๊ฐœ , ์ „๊ด‘ํŒ์— n ํ‘œ์‹œ

Semaphore = 1 ์ด๋ฉด Mutex Lock ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์›€์ง์ธ๋‹ค.

Semaphore s // Integer Value & Positive #
  • Busy Waiting ์„ ์‚ฌ์šฉํ•˜๋Š” Semaphore
wait(s){
  while(s <= 0){} // busy waiting
  s--
}
signal(s){
  s++
}

s ๊ฐ’์ด ์–‘์ˆ˜์—ฌ์•ผ์ง€๋งŒ Critical Section์— ๋“ค์–ด๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Œ.

Busy waiting์„ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌํ˜„์€ Critical Section ์€ ์žˆ์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Task์˜ ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์‚ฌ์šฉํ•จ.

  • Busy Waiting ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Semaphore
// waiting queue๋ฅผ ์‚ฌ์šฉ
wait(s){
  s--;
  if(s < 0){ // s < 0 ์ด๋ฉด s์˜ ์ ˆ๋Œ“๊ฐ’ ๋งŒํผ waiting queue์—์„œ Task ๋Œ€๊ธฐ์ค‘
    // waiting queue์— task t ๋ฅผ ์ง‘์–ด๋„ฃ์Œ
    block();
  }
}
signal(s){
  s++;
  if(s <= 0){ // waiting queue์—์„œ ๋Œ€๊ธฐ์ค‘์ธ task ์กด์žฌ
    // waiting queue์—์„œ task t ๋ฅผ ์ œ๊ฑฐ
    wakeup(t);
  }
}

Mutex Lock ๊ณผ Semaphore ์˜ ์ฐจ์ด!

  • Semaphore ๋Š” Mutex Lock์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Semaphore ๋Š” ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„์—์„œ ์†Œ์œ  ๋ถˆ๊ฐ€๋Šฅ , Mutex๋Š” ์†Œ์œ  ๊ฐ€๋Šฅ

  • Mutex Lock์€ Lock์„ ๊ฐ–๊ณ  ์žˆ๋Š” thread๊ฐ€ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด, Semaphore๋Š” ์™ธ๋ถ€์—์„œ๋„ ํ•ด์ œ ๊ฐ€๋Šฅ

  • Semaphore ๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ์ ธ ์žˆ๊ณ  ํŒŒ์ผํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ๋ฐ˜๋ฉด, Mutex Lock์€ ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„ ๋‚ด์— ์ž‡์–ด์„œ ์ข…๋ฃŒ์‹œ ์ž๋™์œผ๋กœ clean up ๋˜์–ด์ง

  1. Monitor

๊ฐ€์žฅ ๋ฐœ์ „๋œ ๊ธฐ์ˆ , ์ด๋Ÿฐ๊ฒŒ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ์žˆ์–ด๋„ ๋˜๊ธด ํ•˜์ง€๋งŒ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด,

Operating System Concepts 10th Edition(๊ณต๋ฃก์ฑ…) 6์žฅ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋žŒ.


๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต

์•„๋ž˜์˜ ์ž๋ฃŒ์—์„œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ž€?

๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ '๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ'์ด๋‹ค.

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

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•˜๋Š” ์ผ

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

๋”ฐ๋ผ์„œ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋Š”...

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

์š”๊ตฌ ํŽ˜์ด์ง• (Demand Paging) ์ด๋ž€?

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

  • ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋Œ€๊ฐœ ํŽ˜์ด์ง€๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.
  • ์š”๊ตฌํŽ˜์ด์ง•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ์‹คํ–‰๊ณผ์ •์—์„œ ํ•„์š”ํ•ด์งˆ ๋•Œ ํŽ˜์ด์ง€๋“ค์ด ์ ์žฌ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ๋ฒˆ๋„ ์ ‘๊ทผ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋Š” ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

Reference


ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํŽ˜์ด์ง€ ๊ต์ฒด

์•ž์„  ์š”๊ตฌํŽ˜์ด์ง•์—์„œ ์–ธ๊ธ‰๋œ๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค์˜ ๋™์ž‘์— ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ณผ์ •์—์„œ page fault(ํŽ˜์ด์ง€ ๋ถ€์žฌ) ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด, ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์กฐ์ €์žฅ์žฅ์น˜์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ์ค‘์ธ ์ƒํ™ฉ์ด๋ผ๋ฉด ํŽ˜์ด์ง€ ๊ต์ฒด๊ฐ€ ์ด๋ค„์ ธ์•ผ ํ•œ๋‹ค.

ํŽ˜์ด์ง€ ๊ต์ฒด ํ๋ฆ„

  1. ๋””์Šคํฌ์—์„œ ํ•„์š”ํ•œ ํŽ˜์ด์ง€์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. ๋นˆ ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„์„ ์ฐพ๋Š”๋‹ค.
    1. ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํฌ์ƒ๋  ํŽ˜์ด์ง€๋ฅผ ๊ณ ๋ฅธ๋‹ค.
    2. ํฌ์ƒ๋  ํŽ˜์ด์ง€๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๊ณ , ๊ด€๋ จ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•œ๋‹ค.
  3. ์ƒˆ๋กญ๊ฒŒ ๋น„์›Œ์ง„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋‚ด ํ”„๋ ˆ์ž„์— ์ƒˆ ํŽ˜์ด์ง€๋ฅผ ์ฝ์–ด์˜ค๊ณ , ํ”„๋ ˆ์ž„ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•œ๋‹ค.
  4. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ์žฌ์‹œ์ž‘

ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

[FIFO ํŽ˜์ด์ง€ ๊ต์ฒด]

First-In-First-Out Page Replacement

๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด์˜จ ํŽ˜์ด์ง€ ์ˆœ์„œ๋Œ€๋กœ ํŽ˜์ด์ง€ ๊ต์ฒด ์‹œ์ ์— ๋จผ์ € ๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

  • ์žฅ์ 

    • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋„ ์‰ฝ๋‹ค.
  • ๋‹จ์ 

    • ์˜ค๋ž˜๋œ ํŽ˜์ด์ง€๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค.
    • ์ฒ˜์Œ๋ถ€ํ„ฐ ํ™œ๋ฐœํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•ด์„œ ํŽ˜์ด์ง€ ๋ถ€์žฌ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
    • Belady์˜ ๋ชจ์ˆœ : ํŽ˜์ด์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ ค๋„ ๋˜๋ ค ํŽ˜์ด์ง€ ๋ถ€์žฌ๊ฐ€ ๋” ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋ชจ์ˆœ์ด ์กด์žฌํ•œ๋‹ค.

[์ตœ์  ํŽ˜์ด์ง€ ๊ต์ฒด]

Optimal Page Replacement

๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ๋‚ฎ์€ ํŽ˜์ด์ง€ ๋ถ€์žฌ์œจ์„ ๋ณด์ด๋ฉฐ Belady์˜ ๋ชจ์ˆœ ๋˜ํ•œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์€ ์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ๋กœ ๋น„๊ต ์—ฐ๊ตฌ ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.(์•ˆ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๋ง)

  • ์žฅ์ 

    • ๊ฐ€์žฅ ๋‚ฎ์€ ํŽ˜์ด์ง€ ๋ถ€์žฌ์œจ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ๋‹จ์ 

    • ๊ตฌํ˜„์ด ์–ด๋ ต๋‹ค. ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๊ณ„ํš์„ ๋ฏธ๋ฆฌ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๊ธฐ ๋–„๋ฌธ์ด๋‹ค.

[LRU ํŽ˜์ด์ง€ ๊ต์ฒด]

Least-Recently-Used Page Replacement

์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ทผ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜. ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ต์ฒดํ•œ๋‹ค.

  • ํŠน์ง•
    • FIFO < LRU < OPT

[LFU ํŽ˜์ด์ง€ ๊ต์ฒด]

Least-Frequently-Used Page Replacement

์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค. ํ™œ๋ฐœํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€๋Š” ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๊ฑฐ๋ผ๋Š” ๊ฐ€์ •์—์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

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

[MFU ํŽ˜์ด์ง€ ๊ต์ฒด]

Most-Frequently-Used Page Replacement

์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ํŽ˜์ด์ง€๊ฐ€ ์ตœ๊ทผ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™”๊ณ , ์•ž์œผ๋กœ ๊ณ„์† ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์— ๊ธฐ๋ฐ˜ํ•œ๋‹ค.

  • ํŠน์ง•
    • OPT ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๋Œ€๋กœ ๊ทผ์‚ฌํ•˜์ง€ ๋ชปํ•ด ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.

Reference


์บ์‹œ

์บ์‹œ๋ž€?

์บ์‹œ๋ž€, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์บ์‹œ๋Š” ์ €์žฅ ๊ณต๊ฐ„์ด ์ž‘๊ณ  ๋น„์šฉ์ด ๋น„์‹ผ๋Œ€์‹ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐ์ด๋‚˜ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ๋Œ€ํญ ์ค„์—ฌ ๋” ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์บ์‹œ๋Š” ์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

  1. ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ
  2. ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ๊ฒฝ์šฐ
  3. ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ
  • ๊ฒฐ๊ตญ ์บ์‹œ๋Š” ์ง€์†์ ์œผ๋กœ DBMS ํ˜น์€ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ, ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์˜€๋‹ค๊ฐ€ ๋ถˆ๋Ÿฌ๋‹ค ์“ฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ง€์—ญ์„ฑ

CPU์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๋งค๋ฒˆ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋•Œ Hit rate๊ฐ€ ์ง€์—ญ์„ฑ์„ ๊ฐ–๋Š”๋‹ค. ์ง€์—ญ์„ฑ์ด๋ž€, ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ธฐ์–ต์žฅ์น˜ ๋‚ด์˜ ์ •๋ณด๋ฅผ ๊ท ์ผํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์–ด๋Š ์ˆœ๊ฐ„์— ํŠน์ •๋ถ€๋ถ„์„ ์ง‘์ค‘์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ง€์—ญ์„ฑ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜์™€ ์ ‘๊ทผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ๊ณต๊ฐ„์ , ์‹œ๊ฐ„์ ์ธ ํŠน์„ฑ์„ ๋ณด์ธ๋‹ค.

๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ

ํ•œ ๋ฒˆ ์ฐธ์กฐํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜†์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋Š” ์„ฑ์งˆ์„ ๋งํ•œ๋‹ค.

  • Array๋ผ๋Š” ์ผ์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•  ๋•Œ, ๊ณต๊ฐ„ ํ• ๋‹น์„ ์—ฐ์†์ ์œผ๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ์ด Array ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜์–ด์งˆ ๋•Œ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ

ํ•œ ๋ฒˆ ์ฐธ์กฐ๋œ ์ฃผ์†Œ์˜ ๋‚ด์šฉ์€ ๊ณง ๋‹ค์Œ์— ๋‹ค์‹œ ์ฐธ์กฐ๋œ๋‹ค๋Š” ํŠน์„ฑ์„ ๋งํ•œ๋‹ค.

  • ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ ์‹œ, ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ๊ฐ’์œผ๋กœ ์„ ์–ธ๋œ ๋ถ€๋ถ„์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.

Local Cache vs Global Cache

๋˜ํ•œ ์บ์‹œ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์•„๋‹Œ, ์„œ๋ฒ„์˜ ๊ธฐ์ค€์œผ๋กœ ๋กœ์ปฌ ์บ์‹œ์™€ ๊ธ€๋กœ๋ฒŒ ์บ์‹œ๋กœ ๋‚˜๋‰œ๋‹ค. ๋กœ์ปฌ ์บ์‹œ์™€ ๊ธ€๋กœ๋ฒŒ ์บ์‹œ๋ฅผ ์•Œ๋งž๊ฒŒ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

Local Cache

  1. ์„œ๋ฒ„๋งˆ๋‹ค ์บ์‹œ๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค.
  2. ๋‹ค๋ฅธ ์„œ๋ฒ„์˜ ์บ์‹œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  3. ์„œ๋ฒ„ ๋‚ด์—์„œ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  4. ๋กœ์ปฌ ์„œ๋ฒ„ ์žฅ๋น„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค.(๋ฆฌ์†Œ์Šค : ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ)

Global Cache

  1. ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ ์บ์‹œ ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜์—ฌ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋ณ„๋„์˜ ์บ์‹œ ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๊ฐ€ ์‰ฝ๋‹ค.
  3. ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์„œ Local Cache๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.
  4. ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

Reference


๊ต์ฐฉ์ƒํƒœ

๊ต์ฐฉ์ƒํƒœ๋ž€?

๊ต์ฐฉ์ƒํƒœ๋Š” ์ƒํ˜ธ ๋ฐฐ์ œ์— ์˜ํ•ด ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ์ ์œผ๋กœ, ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž์›์„ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์š”๊ตฌํ•˜๋ฉฐ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ์ด๋‹ค.

๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ์˜ ํ•„์š” ์ถฉ๋ถ„ ์กฐ๊ฑด

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ๋„ค ๊ฐ€์ง€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ํ•˜๋‚˜๋ผ๋„ ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

  1. ์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclusion) : ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ์ ์œ ์™€ ๋Œ€๊ธฐ(Hold and Wait) : ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉด์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜์–ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์ถ”๊ฐ€๋กœ ์ ์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ๋น„์„ ์ (Non-preemption) : ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์€ ์‚ฌ์šฉ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.
  4. ํ™˜ํ˜• ๋Œ€๊ธฐ(Circular Wait) : ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์ด ์›ํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋œ ์ž์›์„ ์ ์œ ํ•˜๋ฉด์„œ ์•ž์ด๋‚˜ ๋’ค ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ์š”๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๊ต์ฐฉ์ƒํƒœ๋ฅผ ๋ง‰์„ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

[์˜ˆ๋ฐฉ ๊ธฐ๋ฒ• (Prevention)]

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ์ „์— ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ต์ฐฉ์ƒํƒœ ๋ฐœ์ƒ์˜ ๋„ค ๊ฐ€์ง€ ์กฐ๊ฑด์ค‘์—์„œ ์–ด๋Š ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ž์› ๋‚ญ๋น„๊ฐ€ ๊ฐ€์žฅ ์‹ฌํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ ๋ถ€์ • : ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  2. ์ ์œ  ๋ฐ ๋Œ€๊ธฐ ๋ถ€์ • : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋Œ€๊ธฐ๋ฅผ ์—†์• ๊ฑฐ๋‚˜, ์ž์›์ด ์ ์œ ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ๋งŒ ์ž์›์„ ์š”๊ตฌํ•œ๋‹ค.
  3. ๋น„์„ ์  ๋ถ€์ • : ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ , ์š”๊ตฌํ•œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค.
  4. ํ™˜ํ˜• ๋Œ€๊ธฐ ๋ถ€์ • : ์ž์›์„ ์„ ํ˜• ์ˆœ์„œ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ˜„์žฌ ์ ์œ ํ•œ ์ž์›์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ณด๋‹ค ์•ž์ด๋‚˜ ๋’ค ์–ด๋Š ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ž์›์„ ์š”๊ตฌํ•œ๋‹ค.

[ํšŒํ”ผ ๊ธฐ๋ฒ• (Avoidance)]

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋ฐฐ์ œํ•˜์ง€ ์•Š๊ณ , ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ ์ ˆํžˆ ํ”ผํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜(Banker's Algorithm) ์ด ์‚ฌ์šฉ๋œ๋‹ค.

1. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์ต์ŠคํŠธ๋ผ๊ฐ€ ์ œ์•ˆํ•œ ๊ธฐ๋ฒ•์œผ๋กœ, ์€ํ–‰์—์„œ ๋ชจ๋“  ๊ณ ๊ฐ์˜ ์š”๊ตฌ๊ฐ€ ์ถฉ์กฑ๋˜๋„๋ก ํ˜„๊ธˆ์„ ํ• ๋‹นํ•˜๋Š”๋ฐ์„œ ์œ ๋ž˜ํ•œ ๊ธฐ๋ฒ•
2. ๊ฐ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ์•ˆ์ „ ์ƒํƒœ(safe state)๋ผ๊ณ  ํ•˜๋ฉฐ, ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋ถˆ์•ˆ์ „ ์ƒํƒœ(unsafe state)๋ผ๊ณ  ํ•จ
3. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž์›์˜ ์–‘๊ณผ ํ”„๋กœ์„ธ์Šค ์ˆ˜๊ฐ€ ์ผ์ •ํ•ด์•ผ ํ•จ
4. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ์š”๊ตฌ๋ฅผ ์œ ํ•œํ•œ ์‹œ๊ฐ„์•ˆ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•จ

[๋ฐœ๊ฒฌ ๊ธฐ๋ฒ• (Detection)]

์‹œ์Šคํ…œ์— ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ ๊ฒ€ํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์ž์›์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ฐœ๊ฒฌ ํ›„์—” ๊ต์ฐฉ์ƒํƒœ ํšŒ๋ณต(Recovery) ์ง์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋ฐœ๊ฒฌ๊ธฐ๋ฒ•๊ณผ ํšŒ๋ณต๊ธฐ๋ฒ•์„ ํ•จ๊ป˜ ์“ด๋‹ค. (Detection & Recovery)

[ํšŒ๋ณต ๊ธฐ๋ฒ• (Recovery)]

๊ต์ฐฉ์ƒํƒœ๋ฅผ ์ผ์œผํ‚จ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜, ๊ต์ฐฉ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž์›์„ ์„ ์ ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋‚˜ ์ž์›์„ ํšŒ๋ณตํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํฌ๊ฒŒ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ์™€ ์ž์› ์„ ํƒ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  1. ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ์ž„์˜๋กœ ์ข…๋ฃŒํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋‘ ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฒซ๋ฒˆ์งธ, ๊ต์ฐฉ์ƒํƒœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ์ค‘์ง€ํ•œ๋‹ค. ์ƒ๋‹นํžˆ ํฐ ๋น„์šฉ์ด ๋“ค์–ด๊ฐ€์ง€๋งŒ, ๋‹จ์ˆœํ•˜๋‹ค.
  • ๋‘๋ฒˆ์งธ, ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ํ•œ ํ”„๋กœ์„ธ์Šค์”ฉ ์ค‘์ง€ํ•œ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋  ๋•Œ๋งˆ๋‹ค ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ๋‹นํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.
  1. ์ž์› ์„ ์ 

๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๊นจ์งˆ ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ž์›์„ ๊ณ„์†์ ์œผ๋กœ ์„ ์ ํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ์‚ฌํ•ญ๋“ค์„ ๊ผญ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

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

Reference


์งˆ์˜์‘๋‹ต

์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ๋งํ•ด๋ณด๋ฉฐ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ฆญํ•˜๋ฉด ๋‹ต๋ณ€ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ํ”„๋กœ๊ทธ๋žจ: ์ž‘์—…์„ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•จ.
  • ํ”„๋กœ์„ธ์Šค: ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœ์„ธ์Šค๋ผ ์ผ์ปฌ์Œ.

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์™€ ๋‹ฌ๋ฆฌ ์Šค๋ ˆ๋“œ๋Š” ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํž™ ์˜์—ญ์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์™€ ๋‹ฌ๋ฆฌ ์Šค๋ ˆ๋“œ๋Š” ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์Šค๋ ˆ๋“œ ๋ชจ๋‘๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ค‘์— ์ค‘์ง€๋˜๋Š” ๊ฒฝ์šฐ, ๊ทธ ์›์ธ๊ณผ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

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

ํ”„๋กœ์„ธ์Šค์˜ ํž™, ์Šคํƒ ์˜์—ญ์—๋Š” ์–ด๋–ค ์ •๋ณด๊ฐ€ ์žˆ๋‚˜์š”?

  • ํž™ ์˜์—ญ: ๋™์  ํ• ๋‹น๋˜๋Š” ๋ชจ๋“  ์š”์†Œ๋“ค
  • ์Šคํƒ ์˜์—ญ: ๋งค๊ฐœ๋ณ€์ˆ˜, ๋กœ์ปฌ๋ณ€์ˆ˜, ๋ฆฌํ„ด๊ฐ’, ๋ณต๊ท€์ฃผ์†Œ ๋“ฑ

์Šคํƒ์„ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋…๋ฆฝ์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•˜๊ณ , ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์žฅ๋‹จ์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ์Šค๋ ˆ๋“œ : ํ• ๋‹น ๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ํ๋ฆ„์˜ ๋‹จ์œ„์ด๋‹ค.
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ : ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ด๋Ÿฌํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ์žฅ์  : ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‘๋Š” ๋ฐฉ์‹์— ๋น„ํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ค๋ฉฐ ์‘๋‹ต ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜ ๋‹จ์  : ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ž์›์„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค๊ณผ ๊ณต์œ ํ•˜๋ฏ€๋กœ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋‚ด๋ถ€ ์Šค๋ ˆ๋“œ๋“ค ์—ญ์‹œ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋„์น˜ ์•Š๊ฒŒ ์ข…๋ฃŒํ–ˆ์„ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋“ค๋„ ๋ชจ๋‘ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด๋ฅผ ๋งํ•ด์ฃผ์„ธ์š”.

  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ : ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ฐจ์ง€, context switch ๋น ๋ฆ„. ํ•˜์ง€๋งŒ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ „์ฒด ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Œ.
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค : ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๋Š” ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Œ. ํ•˜์ง€๋งŒ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  CPU ์ ์œ  ์‹œ๊ฐ„์„ ๋งŽ์ด ์ฐจ์ง€ํ•จ.

Context Switching์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›์€ ์ƒํƒœ์˜ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํ˜„์žฌ CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค A์™€ ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค B๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, A ํ”„๋กœ์„ธ์Šค์—์„œ B ํ”„๋กœ์„ธ์Šค๋กœ CPU ์‚ฌ์šฉ/์ œ์–ด๊ถŒ์ด ์ด์ „๋˜๋Š” ๊ฒƒ์„ Context Switching ์ด๋ผ๊ณ ํ•œ๋‹ค.


์Šค์ผ€์ฅด๋ง์ด ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

ํ•œ์ •์ ์ธ ๋ฉ”๋ชจ๋ฆฌ(์ž์›)๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๊ณต์ •์„ฑ์„ ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ์™€ CPU ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ฐจ์ด์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์Šค์ผ€์ค„๋Ÿฌ(=Job Scehduler, ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ)๋Š” ๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ„ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹นํ•œ๋‹ค.

CPU ์Šค์ผ€์ฅด๋Ÿฌ(= ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ)๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ๊ฐ„ ์Šค์ผ€์ค„๋ง์„ ๋‹ด๋‹นํ•œ๋‹ค.

์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ์—์„œ suspended ์ƒํƒœ์™€ blocked ์ƒํƒœ์˜ ๋‹ค๋ฅธ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

blocked ์ƒํƒœ๋Š” ๋‹ค๋ฅธ I/O ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ ready queue๋กœ ๋Œ์•„๊ฐˆ์ˆ˜ ์žˆ์ง€๋งŒ, suspended๋Š” ์™ธ๋ถ€์ ์ธ ์ด์œ ๋กœ ์œ ์˜ˆ๋๊ธฐ ๋•Œ๋ฌธ์— ์Šค์Šค๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์—†๋‹ค.

FCFS ์Šค์ผ€์ค„๋ง์„ ๊ฐœ์„ ํ•œ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

FCFS๋Š” ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธด ๊ฒฝ์šฐ ๋‚˜์ค‘์— ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” Convoy Effect ๋ผ๋Š” ๋ฌธ์ œ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด๋ฅผ ๊ฐœ์„ ํ•œ SJF(Shortest Job First) ๊ธฐ๋ฒ•์ด ์žˆ๋‹ค.

SJF๋Š” ์งง์€ ์‹คํ–‰์‹œ๊ฐ„์„ ๊ฐ–๋Š” ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋จผ์ € ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

Convoy Effect๋Š” ํ•ด๊ฒฐํ•˜์˜€์ง€๋งŒ, ์‹คํ–‰์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ„์† CPU๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๋Š” Starvation ํ˜„์ƒ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

Round Robin ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์—์„œ time quantum ์„ค์ •์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

RR ๊ธฐ๋ฒ•์—์„œ

  • ํƒ€์ž„ํ€€ํ…€์ด ๊ธด ๊ฒฝ์šฐ: ํƒ€์ž„ํ€€ํ…€์ด ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์‹œ๊ฐ„๊ณผ ๋น„์Šทํ•ด์ง„๋‹ค๋ฉด FCFS๋ž‘ ๋‹ค๋ฅผ ๋ฐ” ์—†์–ด์ง„๋‹ค.

  • ํƒ€์ž„ํ€€ํ…€์ด ์งง์€ ๊ฒฝ์šฐ: ํƒ€์ž„ํ€€ํ…€์ด ์งง์•„ Context Switching์ด ์ž์ฃผ ์ผ์–ด๋‚˜๊ฒŒ ๋˜์–ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์–ด๋–ค๊ฑด๊ฐ€์š”?

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„ ๋„์ค‘์— ๋™๋–จ์–ด์ง„ ์œ„์น˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•  ๋•Œ, ์ถ”๊ฐ€์ ์œผ๋กœ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, ์ž์›์ด ์‚ฌ์šฉ๋˜๋Š” ํ˜„์ƒ์„ ์˜ค๋ฒ„ํ—ค๋“œ๋ผ ํ•œ๋‹ค.


Synchronous ์™€ Asynchronous์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”.

ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ํ™•์ธํ•˜๋ฉด Synchronous, ๋ฐ˜๋Œ€๋กœ ํ˜ธ์ถœ ๋ฐ›์€ ์ชฝ์—์„œ ํ™•์ธ์„ ํ•˜๋ฉด Asynchronous ๋ผ๊ณ  ํ•œ๋‹ค.

Blocking ๊ณผ Non-Blocking์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”.

ํ˜ธ์ถœ ๋ฐ›์€ ์ชฝ์—์„œ ํ•จ์ˆ˜๊ฐ’์„ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ณ  ์ œ์–ด๊ถŒ์„ ๋“ค๊ณ  ์žˆ์œผ๋ฉด Blocking, ๋ฐ”๋กœ ๋ฆฌํ„ด์„ ํ•ด์ฃผ์–ด ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด Non-blocking ์ด๋‹ค.


Race Condition(๊ฒฝ์Ÿ ์ƒํƒœ)์— ๋Œ€ํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Race Condition์ด๋ž€ ๋‘ ๊ฐœ ์ด์ƒ์˜ concurrentํ•œ ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์—†์ด ์ ‘๊ทผํ•˜์—ฌ ๊ทธ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ๋Š” ๊ณ„์ขŒ ์ž”๊ณ  ๊ด€๋ฆฌ๋ฅผ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณ„์ขŒ์˜ ์ž”๊ณ ๋ผ๋Š” ๊ณต์œ  ์ž์› ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ถœ๊ธˆํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋™๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ์ž”๊ณ ์—์„œ ์ด์ค‘์œผ๋กœ ์ถœ๊ธˆ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์ˆ˜ํ–‰๋  ๋•Œ, ๊ฐ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๋ฌด์—‡์ด๋ผ ๋ถ€๋ฅด๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์„ค๋ช… ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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

์ž„๊ณ„ ์˜์—ญ์„ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์ „์ œ ์กฐ๊ฑด์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ž„๊ณ„ ์˜์—ญ์„ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋Š” ์ „์ œ ์กฐ๊ฑด์œผ๋กœ๋Š” Mutual Exclusion, Progress, Bounded Waiting 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒํ˜ธ ๋ฐฐ์ œ (Mutual Exclusion) : ์–ด๋–ค task๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ task๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ง„ํ–‰ (Progress) : ํ˜„์žฌ ์ž„๊ณ„ ์˜์—ญ์„ ์‚ฌ์šฉ ์ค‘์ธ task๊ฐ€ ์—†๊ณ , ๋“ค์–ด๊ฐ€๊ธธ ์›ํ•˜๋Š” task๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ”๋กœ ๋“ค์—ฌ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํ•œ์ •๋œ ๋Œ€๊ธฐ (Bounded Waiting) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„์ž… ๊ฐ€๋Šฅํ•œ ํšŸ์ˆ˜์—๋Š” ์ œํ•œ์ด ์žˆ์–ด์„œ ํŠน์ •ํ•œ ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ๊ณ„์† ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Thread-safe์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ, ์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. Thread-safeํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ž„๊ณ„ ์˜์—ญ์„ Mutex, Semaphore ๋“ฑ์˜ ๋™๊ธฐํ™” ๊ธฐ๋ฒ•์œผ๋กœ ์ œ์–ดํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Reentrant์˜ ๊ฐœ๋…์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•˜๊ณ , Thread-safe ์™€์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Reentrant๋Š” ์žฌ์ง„์ž…์„ฑ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ, Reentrant ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ์–ธ์ œ๋‚˜ ๊ฐ™์€ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ˜ธ์ถœ ์‹œ ์ œ๊ณต๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋งŒ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Reentrantํ•˜๋‹ค๋ฉด Thread-safeํ•˜์ง€๋งŒ ๊ทธ ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Mutex Lock ๊ณผ Semaphore ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ๊ฐ€์š”.

  • Semaphore๋Š” Mutex Lock์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Semaphore๋Š” ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„์—์„œ ์†Œ์œ  ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  Mutex๋Š” ์†Œ์œ  ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Mutex Lock์€ Lock์„ ๊ฐ–๊ณ  ์žˆ๋Š” thread๊ฐ€ ํ•ด์ œ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด, Semaphore๋Š” ์™ธ๋ถ€์—์„œ๋„ ํ•ด์ œ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Semaphore๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ์ ธ ์žˆ๊ณ  ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ๋ฐ˜๋ฉด, Mutex Lock์€ ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„ ๋‚ด์— ์žˆ์–ด์„œ ์ข…๋ฃŒ ์‹œ ์ž๋™์œผ๋กœ clean up ๋œ๋‹ค.


๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์˜ ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ CPU์—์„œ ๊ฐ€๊นŒ์šด ์ˆœ์œผ๋กœ ๋งํ•ด๋ณด์„ธ์š”.

๋ ˆ์ง€์Šคํ„ฐ โ†’ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ โ†’ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ โ†’ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜ โ†’ ์™ธ๋ถ€๊ธฐ์–ต์žฅ์น˜์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. CPU๋กœ๋ถ€ํ„ฐ ๋ฉ€์–ด์งˆ์ˆ˜๋ก ์‚ฌ์ด์ฆˆ๋Š” ์ปค์ง€๊ณ , ๊ฐ€๊ฒฉ์€ ์ €๋ ดํ•ด์ง€๋ฉฐ, ์ ‘๊ทผ ์†๋„๋Š” ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ์™œ ํ• ๊นŒ์š”?

์‹œ์Šคํ…œ์ด ์‹คํ–‰๋  ๋•Œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ด ๋˜๋Š”๋ฐ, ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•œ์ •๋˜์–ด ์žˆ๋‹ค. ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์‹œ๊ธฐ์— ์ ์ ˆํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ• ๋‹น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

RAM์„ ๋Š˜๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

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

์ปดํ“จํ„ฐ์˜ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋ฌด์ž‘์ • RAM๋งŒ ๋Š˜๋ฆฌ๋ฉด ๋˜๋Š” ๊ฒƒ์ธ๊ฐ€?

๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋Š˜์–ด๋‚˜๋Š” ๋งŒํผ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋งŒ์•ฝ 16GB์˜ ๋ฉ”์ธ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์šด์˜์ฒด์ œ์˜ ์šฉ๋Ÿ‰์ด 16GB๋ผ๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋Ÿผ ์ด ์ปดํ“จํ„ฐ๋Š” ์šด์˜์ฒด์ œ ์™ธ์— ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ธ๊ฐ€?

์šด์˜์ฒด์ œ์˜ ์šฉ๋Ÿ‰์ด 16GB๋ผ๊ณ ํ•ด์„œ 16GB ์ „์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ›„ ์‹คํ–‰ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ์šฉ๋Ÿ‰์ด 16GB๋ผ๊ณ ํ•ด์„œ ๊ผญ ๊ทธ ์šฉ๋Ÿ‰๋งŒํผ์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”, ๋‚ด๋ถ€ ๋‹จํŽธํ™”์— ๋Œ€ํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ์™ธ๋ถ€ ๋‹จํŽธํ™” : ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€์ง€๋งŒ ๊ทธ๊ฒƒ๋“ค์ด ์—ฐ์†์ ์ด์ง€ ์•Š๊ณ  ์ž‘์€ ๊ณต๊ฐ„๋“ค๋กœ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ๋‹จํŽธํ™” : ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์˜์—ญ๋ณด๋‹ค ์ปค์„œ ๋‚จ์€ ๊ณต๊ฐ„์ด ์ƒ๊ธด ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์ด ์žˆ๋‹ค๋ฉด?

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•œ ๊ตฐ๋ฐ๋กœ ๋ชฐ์•„๋„ฃ์–ด ๋น„์–ด์žˆ๋Š” hole์„ ์ œ๊ฑฐํ•˜๋Š” '์••์ถ•' ๊ธฐ์ˆ ์ด ์žˆ๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์••์ถ•์„ ์‹œํ–‰ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ธ๊ฐ€?

์••์ถ•์ด ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๊ธด ํ•˜์ง€๋งŒ ์••์ถ•์„ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ์••์ถ•์„ ์ž์ฃผํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์••์ถ• ์™ธ์— ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์•ˆ์€?

Paging. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ผ์ •ํ•œ ํฌ๊ธฐ๋กœ ๋ถ„๋ฐฐํ•œ ํ›„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์šฉ๋Ÿ‰๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ์„ ํ• ๋‹นํ•œ๋‹ค.


๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?

ํ”„๋กœ์„ธ์Šค์— ์กด์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฌดํ•œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ผ์–ด๋‚˜๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๋“ค์„ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ์„๊นŒ์š”?

๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘๊ฐ€์ง€ Paging : ๊ณ ์ •๋œ ์˜์—ญ์ธ ํŽ˜์ด์ง€๋กœ ๋ถ„ํ•  , Segmentation : ๊ฐ€๋ณ€์ ์ธ ์˜์—ญ์ธ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„ํ• ์ด ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ํŽ˜์ด์ง€ ์ค‘ ์‚ฌ์šฉํ•˜๋ ค๋Š” ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š” ํ˜„์ƒ์„ ๋ฌด์—‡์ด๋ผ๊ณ  ์นญํ• ๊นŒ์š”?

Page fault

page fault๊ฐ€ ์ผ์–ด๋‚ฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์šด์˜์ฒด์ œ๋Š” page fault์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ• ๊นŒ์š”?

๋ณด์กฐ์ €์žฅ์žฅ์น˜์—์„œ ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ํŽ˜์ด์ง€ ๊ต์ฒด๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”.

  • FIFO : ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด์˜จ ํŽ˜์ด์ง€ ์ˆœ์„œ๋Œ€๋กœ ๊ต์ฒดํ•œ๋‹ค.
  • OPR : ์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ๊ต์ฒดํ•œ๋‹ค.
  • LRU : ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ต์ฒดํ•œ๋‹ค.
  • LFU : ์ฐธ์กฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
  • MFU : ์ฐธ์กฐ ํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.

ํŽ˜์ด์ง€๋“ค์„ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ํ”„๋ ˆ์ž„์ด ๋งค์šฐ ์ปค์„œ ํŽธํ•˜๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ์ด ์ƒํ™ฉ์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ด๋“์ผ๊นŒ์š”? ๋งŒ์•ฝ ์•„๋‹ˆ๋ผ๋ฉด ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์ด๋“์ด ์•„๋‹์ง€ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์–ด์š”.

๋ฒจ๋ผ๋””์˜ ๋ชจ์ˆœ ํ˜„์ƒ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„ ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ํŽ˜์ด์ง€ ๋ถ€์žฌ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ํŽ˜์ด์ง€ ํ”„๋ ˆ์ž„ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผฐ๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํŽ˜์ด์ง€ ๋ถ€์žฌ๊ฐ€ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ์„ ์นญํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ์˜ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ OPR(Optimal Page Replacement)๊ฐ€ ํ˜„์‹ค์ ์œผ๋กœ ๊ฐ€๋Šฅํ• ๊นŒ์š”? ์ „์ œ์กฐ๊ฑด์ด ์žˆ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹ค์ƒํ™œ์—์„œ ์“ฐ์ผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

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

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

LRU(Least Recently Used Algorithm)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
OPR(Optimal Page Replacement)์ด ์ œ์ผ ์ด์ƒ์ ์ด์ง€๋งŒ OPR์€ ์ด๋ก ์ƒ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  ํ˜„์‹ค์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— OPR์— ๊ฐ€์žฅ ๊ทผ์‚ฌํ•œ LRU์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
LRU๋Š” ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฐ ๊ฒƒ์ด ๋‹จ์ ์ด์ง€๋งŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋น„ํ•˜์—ฌ ์ œ์ผ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.


Reference