๐Ÿ“Œ CPU ์Šค์ผ€์ค„๋Ÿฌ(Scheduler)

2 minute read

fork: ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฎ์–ด์”Œ์›€

Execlp: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฎ์–ด ์”Œ์šฐ๋Š” ์—ญํ• ์„ ํ•จ

Wait: ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด ์ปค๋„์€ child๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค A๋ฅผ sleep ์‹œํ‚จ๋‹ค. (block ์ƒํƒœ), child process๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค A๋ฅผ ๊นจ์šด๋‹ค. (Ready ์ƒํƒœ)

exit: ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์‹œ์Šคํ…œ ์ฝœ

  • ์ž๋ฐœ์  ์ข…๋ฃŒ
    • ๋งˆ์ง€๋ง‰ statement ์ˆ˜ํ–‰ ํ›„ exit()๋ฅผ ์ˆ˜ํ–‰
    • ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„๋„ ํ•จ์ˆ˜๊ฐ€ return๋˜๋Š” ํ”„๋กœ์„ธ์Šค์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์คŒ
  • ๋น„์ž๋ฐœ์  ์ข…๋ฃŒ
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œํ‚ด
      • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„œ๋Š” ์ž์›์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜
      • ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ํ…Œ์Šคํฌ๊ฐ€ ๋”์ด์ƒ ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ
    • ํ‚ค๋ณด๋“œ๋กœ kill, break ๋“ฑ์„ ์นœ ๊ฒฝ์šฐ
    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ
      • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ๋จ.

ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ˜‘๋ ฅ

  • ๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค: ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ์ž์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ–๊ณ  ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์›์น™์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•จ.
  • ํ˜‘๋ ฅ์  ํ”„๋กœ์„ธ์Šค: ํ”„๋กœ์„ธ์Šค์˜ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Œ.
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜(IPC: InterProcess Communication)
    • ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ(Message Passing)
      • Message system: ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๊ณต์œ  ๋ณ€์ˆ˜(shared variable)๋ฅผ ์ผ์ฒด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ†ต์‹ ํ•˜๋Š” ์‹œ์Šคํ…œ
      • Direct Communication: ํ†ต์‹ ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ (ํ˜‘๋ ฅํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…ํ™•ํ•จ)
      • Indirect Communication: mailbox (๋˜๋Š” port)๋ฅผ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ์ „๋‹ฌ (์ผ๋‹จ mailbox์— ๋„ฃ์–ด๋†“๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ€์ ธ๊ฐ€์„œ ํ˜‘๋ ฅ ํ•จ)
    • ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•
      • Shared memory: ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์„œ๋กœ ๊ณต์œ ํ•˜๋Š” shared memory ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Œ / ์ฃผ์˜ํ•  ์  ( ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์‹ ๋ขฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ. )
      • thread์˜ ๊ฒฝ์šฐ ์‚ฌ์‹ค์ƒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ์„œ๋กœ ๊ด€์—ฌํ•œ๋‹ค๊ณ  ๋ณด๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ, ๋™์ผํ•œ process๋ฅผ ๊ณต์œ ํ•˜๋Š” thread๊ฐ„์—๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ˜‘๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ”„๋กœ์„ธ์Šค์˜ ํŠน์„ฑ ๋ถ„๋ฅ˜

  • ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ํŠน์„ฑ์— ๋”ฐ๋ผ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰จ
    • I/O bound process: CPU๋ฅผ ์žก๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค I/O์— ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ job(many short cpu bursts)
    • CPU-bound process: ๊ณ„์‚ฐ ์œ„์ฃผ์˜ job (few very long CPU bursts)

CPU process & Dispatcher (Software)

  • CPU Scheduler
    • Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘ ์ด๋ฒˆ์— CPU๋ฅผ ์ค„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  • Dispatcher
    • CPU์˜ ์ œ์–ด๊ถŒ์„ CPU Scheduler์— ์˜ํ•ด ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ธด๋‹ค.
    • ์ด ๊ณผ์ •์„ context switch(๋ฌธ๋งฅ ๊ตํ™˜)์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
      1. Running โ†’ Blocked (์˜ˆ: I/O ์š”์ฒญ์„ ํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ)
      1. Running โ†’ Ready (์˜ˆ: ํ• ๋‹น์‹œ๊ฐ„๋งŒ๋ฃŒ๋กœ timer interrupt)
      1. Blocked โ†’ Ready ( I/O ์™„๋ฃŒ ํ›„ ์ธํ„ฐ๋ŸฝํŠธ)
      1. Terminate
    • (1, 4)์˜ ๊ณผ์ •์€ nonpreemptive(=๊ฐ•์ œ๋กœ ๋นผ์•—์ง€ ์•Š๊ณ  ์ž์ง„ ๋ฐ˜๋‚ฉ)
    • All other scheduling is preemptive(=๊ฐ•์ œ๋กœ ๋นผ์•—์Œ)

Scheduling criteria(Performance Index=์„ฑ๋Šฅ ์ฒ™๋„)

  • CPU utilization (์ด์šฉ๋ฅ )
    • keep the CPU as busy as possible
  • Throughput (์ฒ˜๋ฆฌ๋Ÿ‰)
    • of processes that complete their execution per time unit
  • Turnaround Time (์†Œ์š”์‹œ๊ฐ„, ๋ฐ˜ํ™˜์‹œ๊ฐ„)
    • amount of time to execute a particular process
  • wating time (๋Œ€๊ธฐ ์‹œ๊ฐ„)
    • amount of time a process has been in the ready queue
  • Response Time (์‘๋‹ต ์‹œ๊ฐ„)
    • amount of time it takes from when a request was submitted until the first response is produced, not output
    • (for time-sharing environment)