Day16 - jeremy0405/Codesquad_CS GitHub Wiki

Process Scheduling - RR

์šด์˜์ฒด์ œ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ •๋ฆฌํ–ˆ์—ˆ๋˜ CPU Scheduling (= Process Scheduling)์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์™œ Process Scheduling์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

์‚ฌ์ „ ์ง€์‹

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” CPU โ†’ I/O ์ž‘์—… โ†’ CPU โ†’ I/O ์ž‘์—… โ†’ CPU โ†’ ... ์ž‘์—…์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • CPU ์‚ฌ์šฉํ•  ๋•Œ๋Š” CPU burst ๋ผ๊ณ  ํ•˜๊ณ  CPU๋ฅผ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ CPU burst Time์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • I/O ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” I/O burst ๋ผ๊ณ  ํ•œ๋‹ค.

CPU-burstTime ์ถœ์ฒ˜

์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”(I/O์ž‘์—…์ด ๋งŽ์€) ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ ๊ต‰์žฅํžˆ ์งง๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ๋„๊ฐ€ ์žฆ๋‹ค. ์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค๋“ค์„ I/O bound job์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์œ ์ „์ž ์—ผ๊ธฐ์„œ์—ด ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋”ฅ๋Ÿฌ๋‹ ์—ฐ์‚ฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ™์ด ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋“ค์€ I/O ์ž‘์—… ์—†์ด CPU๋งŒ์„ ์ฃผ๊ตฌ์žฅ์ฐฝ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค๋“ค์€ CPU bound job์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€์„œ ์™œ Process Scheduling์ด ํ•„์š”ํ•œ์ง€ ์•Œ์•„๋ณด์ž.

CPU๋ฅผ ์งง๊ฒŒ ์“ฐ๋Š” I/O bound job๊ณผ CPU๋ฅผ ๊ธธ๊ฒŒ ์“ฐ๋Š” CPU bound job์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ Process Scheduling์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋กœ ์„ฑ์งˆ์ด ๋‹ค๋ฅธ ์• ๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ณดํ†ต ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š” I/O bound job์—๊ฒŒ ๋” ์ž์ฃผ CPU๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š”๋ฐ ์ด๋Š” ์‚ฌ๋žŒ์ด I/O ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ์„ ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ready ์ƒํƒœ๋กœ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ต๋‹ตํ•จ์„ ๋А๋ผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉˆ์ถฐ์„œ ๋ ‰์— ๊ฑธ๋ฆฐ ๊ฒƒ ์ฒ˜๋Ÿผ ๋А๋‚„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž Process Scheduling์„ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?

Process Scheduling์„ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

  1. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์šฐ์„ ๊ถŒ์„ ์ค„ ๊ฒƒ์ธ๊ฐ€?
  2. ์–ธ์ œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋บ์„ ๊ฒƒ์ธ๊ฐ€?

ํ˜„์žฌ ๋ฏธ์…˜์— ๋‚˜์˜จ RR(Round Robin) ๋ฐฉ์‹์œผ๋กœ Process Scheduling์„ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋จผ์ € RR์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ๋งŽ์€ OS๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” Process scheduling์˜ ๊ธฐ๋ฐ˜์ด๋‹ค. Ready Queue์— ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ์–ด ๋†“๊ณ  ๋จผ์ € ์˜จ ์• ๋“ค๋ถ€ํ„ฐ ์ผ์ •ํ•œ ์‹œ๊ฐ„(quantum)๋™์•ˆ CPU๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ๋„˜์œผ๋ฉด ๊ฐ•์ œ(preemptive)๋กœ CPU๋ฅผ ๋บ์–ด์„œ ๋‹ค์Œ Ready Queue์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์ธ Process scheduling ๋ฐฉ๋ฒ•์ด๋‹ค.

  1. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์šฐ์„ ๊ถŒ์„ ์ค„ ๊ฒƒ์ธ๊ฐ€?
    • ๋จผ์ € ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์šฐ์„ ๊ถŒ์„ ์คŒ
  2. ์–ธ์ œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋บ์„ ๊ฒƒ์ธ๊ฐ€?
    • ์ผ์ •ํ•œ ์‹œ๊ฐ„(quantum)์ด ์ง€๋‚˜๋„ CPU๋ฐ˜ํ™˜์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ•์ œ๋กœ ๋บ์Œ(Timer๊ฐ€ interrupt๋ฅผ ํ†ตํ•ด ๋บ์Œ)