CS ๊ณต๋ถ€

CPU ์Šค์ผ€์ค„๋Ÿฌ ์ „๋žต (FCFS, SJF, HRN, SRT, Round Robin, Multi-Level Queue)

์€์ง„ 2021. 10. 24. 05:05

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

  • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ• ์ง€ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘์— ๋ˆ„๊ตฌ์—๊ฒŒ CPU๋ฅผ ํ• ๋‹นํ•ด ์ค„ ๊ฒƒ์ธ์ง€ ์ •ํ•œ๋‹ค.

 

์™œ ํ•„์š”ํ• ๊นŒ?

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

.


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

  • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ๋กœ CPU๋ฅผ ๋นผ์•—์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์ด๋‹ค.
  • ์ข…๋ฅ˜ : FCFS, SJF, ์šฐ์„ ์ˆœ์œ„, HRN, ๊ธฐํ•œ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

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

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๊ฐ•์ œ๋กœ ๋นผ์•—์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šค์ผ€์ค„๋ง ๊ธฐ๋ฒ•์ด๋‹ค. 
  • ์ข…๋ฅ˜ : Round Robin, SRT, ์„ ์  ์šฐ์„ ์ˆœ์œ„, ๋‹ค๋‹จ๊ณ„ ํ, ๋‹ค๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ ํ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 


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

1) FCFS (First Come First Served)

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์— ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋น„์„ ์ ํ˜• ๋ฐฉ์‹์ด๋‹ค.
  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋™์ผํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์˜ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ๋”ฐ๋กœ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋‹จ์ˆœํ•˜๊ณ  ๊ณตํ‰ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค.
  • CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธธ์ง€๋งŒ ๋œ ์ค‘์š”ํ•œ ์ž‘์—…์ด, CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง๊ณ  ๋” ์ค‘์š”ํ•œ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    → ์ด๋ฅผ ์ฝ˜๋ณด์ด ํšจ๊ณผ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ฝ˜๋ณด์ด ํšจ๊ณผ : CPU๋ฅผ ๋งค์šฐ ์˜ค๋ž˜ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋งค์šฐ ์ปค์ง€๋Š” ํ˜„์ƒ

2) SJF (Shortest Job First)

  • Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ์ˆœ์„œ๋Œ€๋กœ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋น„์„ ์ ํ˜• ๋ฐฉ์‹์ด๋‹ค.
  • ๋Šฆ๊ฒŒ ๋„์ฐฉํ•˜๋”๋ผ๋„ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์•ž์— ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์งง์œผ๋ฉด ๋จผ์ € CPU๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. → ์ฝ˜๋ณด์ด ํšจ๊ณผ ์™„ํ™”
  • ๋ชจ๋“  ๋ฐฉ์‹์„ ํ†ตํ‹€์–ด ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๊ฐ€์žฅ ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.
  • CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋“ค์–ด์˜ค๋ฉด Ready Queue์—์„œ ๋ฌดํ•œ์ • CPU๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    → ์ด๋ฅผ ๊ธฐ์•„(starvation) ํ˜„์ƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ธฐ์•„(starvation) ํ˜„์ƒ : ์ž์‹ ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค ๋•Œ๋ฌธ์— ์˜ค๋žซ๋™์•ˆ CPU ํ• ๋‹น์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ


3) HRN(Highest Response ratio Next)

  • SJF ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์•„ ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ฐฉ์‹์ด๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‹จ์ˆœํžˆ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์œผ๋กœ ๊ฒฐ์ •ํ•˜์ง€ ์•Š๊ณ , Ready Queue์—์„œ ๋Œ€๊ธฐํ•œ ์‹œ๊ฐ„๊นŒ์ง€ ๊ณ ๋ คํ•˜์—ฌ ๊ฒฐ์ •ํ•œ๋‹ค. --> aging ๊ธฐ๋ฒ•
  • aging(๋…ธํ™”) ๊ธฐ๋ฒ• : ๊ธฐ์•„ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ ์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฐ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„์— ๋น„๋ก€ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” ๊ธฐ๋ฒ•

HRN ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด ์„ ์ ์ผ ๊ฒฝ์šฐ์—” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋„ˆ๋ฌด ์ž์ฃผ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— Context Switching์ด ๋„ˆ๋ฌด ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค. ์ด์— ๋”ฐ๋ผ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์ผ์ด ๋„ˆ๋ฌด ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— HRN ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์€ ๋น„์„ ์  ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์„ค๋ช…๋งŒ ์ฝ์–ด๋ดค๋‹ค๋ฉด FCFS ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ํ•˜๋“ฑ์˜ ์ด์œ ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. HRN ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด ๋‹ค๋ฅธ ๋น„์„ ์  ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— ๋น„ํ•ด ์ด์ƒ์ ์œผ๋กœ ํ›จ์”ฌ ์šฐ์›”ํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ SJF, HRN ๋“ฑ์˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ๊ฐ€ ์žˆ๋Š”๋ฐ, ํ˜„์‹ค์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” SRT ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

 

4) ์šฐ์„ ์ˆœ์œ„ (Priority)

  • ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋จผ์ € ํ• ๋‹นํ•œ๋‹ค.
    • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ณดํ†ต FCFS ์ˆœ์„œ๋กœ ์Šค์ผ€์ค„ ๋œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ์˜ค๋žซ๋™์•ˆ CPU ํ• ๋‹น์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋‹ค. (๊ธฐ์•„ ํ˜„์ƒ)
  • ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. → aging ๊ธฐ๋ฒ•์œผ๋กœ ๊ธฐ์•„ ์ƒํƒœ ๋ฐฉ์ง€
  • ์„ ์ ํ˜•์ด๊ฑฐ๋‚˜ ๋˜๋Š” ๋น„์„ ์ ํ˜•์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 


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

 

1) SRT(Shortest Remaining Time)

  • SJF ๋ฐฉ์‹์„ ์„ ์  ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๊ธฐ๋ฒ•์ด๋‹ค.
  • CPU๋ฅผ ์ ์œ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋‚จ์€ CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์— ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ ์ ํ˜• ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์žฆ์€ Context Switching์ด ์ผ์–ด๋‚˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง„๋‹ค.
  • starvation ํ˜„์ƒ์ด ๋” ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์€ ์˜ˆ์ธกํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ์–ด๋ ต๋‹ค.

 

2) ์šฐ์„ ์ˆœ์œ„ (Priority)

SJF์™€ SRT์˜ ๊ด€๊ณ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„์„ ์  ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง, ์„ ์  ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์ด ์žˆ๋‹ค.

 

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

  • FCFS ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— ์„ ์  ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹๊ณผ Time Quantum ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ•œ ๋ฐฉ์‹์ด๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ฐ๊ฐ ๋™์ผํ•œ CPU ํ• ๋‹น ์‹œ๊ฐ„(ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค, quantum)์„ ๋ถ€์—ฌํ•ด์„œ ๊ทธ ์‹œ๊ฐ„ ๋™์•ˆ๋งŒ CPU๋ฅผ ์ด์šฉํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์ด Time Quantum๋งŒํผ ์ง€๋‚˜๋ฉด ์ด ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ CPU ์ž์›์„ ํšŒ์ˆ˜ํ•˜๊ณ , ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ Ready Queue์˜ ๊ฐ€์žฅ ๋’ค๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ตœ์ดˆ ์‘๋‹ต ์‹œ๊ฐ„์„ ๋น ๋ฅด๊ฒŒ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ๋‹ค.
    ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝ˜๋ณด์ด ํšจ๊ณผ ์—ญ์‹œ ์ค„์–ด๋“ ๋‹ค.
  • ์ ๋‹นํ•œ Time Quantum์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
    • ํฌ๋ฉด CPU ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์˜ค๋ž˜ ์ ์œ ํ•˜๋ฉฐ ์ •์ž‘ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ด ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ FCFS ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•˜๋˜ ์ฝ˜๋ณด์ด ํšจ๊ณผ๊ฐ€ ๋˜ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ž‘์œผ๋ฉด ์žฆ์€ Context Switching์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ์ปค์ง„๋‹ค.
    • ๋ณดํ†ต 10-100ms๋กœ ์„ค์ •ํ•œ๋‹ค.

 

4) ๋‹ค๋‹จ๊ณ„ ํ(Multi-Level Queue)

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

์ด ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € Foreground Queue์™€ Background Queue์— ๋Œ€ํ•ด ์•Œ๊ณ ๊ฐ€์•ผ ํ•œ๋‹ค.

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

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ์ธ Foreground Queue์—๋Š” ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ผ์šด๋“œ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ์ธ Background Queue์—๋Š” ์‘๋‹ต ์‹œ๊ฐ„์ด ํฐ ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— FCFS ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์„ ์ ์šฉํ•˜๋Š” ๋“ฑ ๊ฐ Queue๋งˆ๋‹ค ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ€์žฅ ์ ์ •ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์œ„ ์‚ฌ์ง„์„ ์˜ˆ๋กœ ๋“ค๋ฉด,
๋Œ€ํ™”ํ˜• ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ด๊ธฐ ์œ„ํ•œ Foreground Queue์—๋Š” ๋ผ์šด๋“œ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค ์ผ๊ด„ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ Background Queue์—๋Š” ์ผ๊ด„ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ํ–ˆ๋˜ ๋น„์„ ์  ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ ์šฉํ•˜๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

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

 

Queue์— ์–ผ๋งˆ๋‚˜ CPU๋ฅผ ์˜ค๋ž˜ ํ• ๋‹นํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์Šค์ผ€์ค„๋ง

  • ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„ (Fixed Priority)
    Queue๋งˆ๋‹ค ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘๋Š” ๋ฐฉ์‹์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ Queue์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด, ๋ฌด์กฐ๊ฑด ๊ทธ Queue์— ๋‚จ์•„์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋’ค์— ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„์˜ Queue๋ฅผ ์„œ๋น„์Šคํ•œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์›ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์— CPU ์ž์›์„ ์šฐ์„  ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์•„๋ณด์ด์ง€๋งŒ SJF ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ฒ˜๋Ÿผ ๊ฒฐ๊ตญ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ ์ฆ‰, ๊ธฐ์•„ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค (Time Slice)
    ๊ณ ์ • ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์—์„œ ๊ธฐ์•„ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ์ƒ๊ธด ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ Time Slice๋ฅผ ๋‘๊ณ , ์ด ์‹œ๊ฐ„ ๋น„์œจ์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ Queue๋ฅผ ์„œ๋น„์Šคํ•˜๊ฒŒ ๋œ๋‹ค. Queue๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋ฅผ CPU์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„ ๋น„์œจ์ด ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, CPU ์ž์›์˜ 75%๋Š” Foreground Queue, 25%๋Š” Background Queue๋ฅผ ์„œ๋น„์Šคํ•˜๋Š” ๋ฐ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5) ๋‹ค๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ ํ(Multi-Level Feedback Queue)

  • ๋‹ค๋‹จ๊ณ„ ํ”ผ๋“œ๋ฐฑ ํ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์€ ๋‹ค๋‹จ๊ณ„ ํ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— aging ๊ธฐ๋ฒ•์„ ์ ์šฉํ•œ ๋ฐฉ์‹์ด๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ณ€๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ ์‚ฌ์ด์˜ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์šฐ์„ ์ˆœ์œ„ ๐Ÿ‘ : ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ์—์„œ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฐ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ์  ์˜ฌ๋ ค์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค. -> starvation์„ ์˜ˆ๋ฐฉ
    • ์šฐ์„ ์ˆœ์œ„ ๐Ÿ‘Ž : ํ•œ ๋ฒˆ CPU๋ฅผ ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์กฐ๊ธˆ ๋‚ฎ์•„์ ธ ๋” ๋‚ฎ์€ ํ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ๋ณด๋‹ค ๋‚ฎ์€ ํ์— ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค€๋‹ค. ์–ด๋ ต๊ฒŒ ์–ป์€ CPU๋ฅผ ์ข€ ๋” ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • I/O ์ค‘์‹ฌ์˜ ํ”„๋กœ์„ธ์Šค์™€ ๋Œ€ํ™”ํ˜• ํ”„๋กœ์„ธ์Šค๋“ค์„ ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ์— ๋„ฃ๋Š”๋‹ค.(ํ†ต์ƒ์ ์œผ๋กœ ์งง์€ CPU ๋ฒ„์ŠคํŠธ๊ฐ€ ํŠน์ง•์ด๋‹ค.)