๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Computer Science/Operating System

8 CPU Scheduling

by Dowon Kang 2023. 12. 30.

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

 

CPU ์Šค์ผ€์ค„๋ง์˜ ๋ชฉํ‘œ

  • ๊ณตํ‰์„ฑ(Fairness): ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ณตํ‰ํ•œ ์‹คํ–‰ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ ์ง€๋‚˜์น˜๊ฒŒ ์†Œํ™€ํžˆ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌ๋Ÿ‰(Maximum Throughput): ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ตœ์†Œํ™”(Minimizing Waiting Time): ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„ ์ง€์ •(Priority Assignment): ํŠน์ • ํ”„๋กœ์„ธ์Šค๋‚˜ ์ž‘์—…์— ๋Œ€ํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ค‘์š”ํ•œ ์ž‘์—…์ด๋‚˜ ์‹œ์Šคํ…œ์˜ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํšจ์œจํ™”(Efficiency): CPU์™€ ๋‹ค๋ฅธ ์ž์›๋“ค์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

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

 

 


 

์ค€๋น„ ํ(Ready Queue)์™€ ๋Œ€๊ธฐ ํ(Waiting Queue)

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

์ผ๋ฐ˜์ ์œผ๋กœ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋Š” CPU ์ž‘์—…์ด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 


 

 

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

1) FCFS (First-Come-First-Served)


๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„์ฐฉํ•˜๋ฉด ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (=ํ˜ธ์œ„ ํšจ๊ณผ) 


2) SJF (Shortest Job First)
์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


3) Priority Scheduling
๊ฐ ํ”„๋กœ์„ธ์Šค์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ• ๋‹นํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์ •์ ์œผ๋กœ ํ• ๋‹น๋  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ถ€์ž‘์šฉ์œผ๋กœ๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋งŒ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„ ๊ณ„์† ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ์•„ ํ˜„์ƒ(Starvation)์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ์ฐจ ๋†’์ด๋Š” ๋ฐฉ์‹(=์—์ด์ง•)์ด ๋„์ž…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 


4) Round Robin
๊ฐ ํ”„๋กœ์„ธ์Šค์— ์ผ์ •ํ•œ ์‹œ๊ฐ„์˜ ํ• ๋‹น๋Ÿ‰์„ ๋ถ€์—ฌํ•˜๊ณ , ํ•ด๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ณตํ‰ํ•œ ์‹คํ–‰ ๊ธฐํšŒ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค

FCFS + Time Slice (๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ๋”ฐ๋กœ ์ •ํ•ด๋‘” ๊ฒƒ)  


5) Multilevel Queue Scheduling
ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ํ์— ๋‹ค๋ฅธ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ ํ๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ๋กœ ๋‚˜๋ˆ„๋‹ค๋ณด๋‹ˆ ํ”„๋กœ์„ธ์Šค๊ฐ„์— ์ด๋™์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ„์† ์‹คํ–‰์ด ์•ˆ ๋˜๋Š” ๊ธฐ์•„ ํ˜„์ƒ์ด ์ƒ๊น๋‹ˆ๋‹ค. 


6) Multilevel Feedback Queue Scheduling
Multilevel Queue์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ ์ธ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์€ ํ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


 

 

์„ ์ ํ˜• & ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง

์„ ์ ํ˜•๊ณผ ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์€ CPU ์Šค์ผ€์ค„๋ง์—์„œ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ CPU ํ• ๋‹น ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์„ ์ ํ˜•(Preemptive) ์Šค์ผ€์ค„๋ง

  • ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๊ฐ•์ œ๋กœ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์–ธ์ œ๋“ ์ง€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์ด ๊ฐ•์ œ๋กœ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค(time slice) ๋˜๋Š” ์–‘์ž(quantum)๋ผ ๋ถˆ๋ฆฌ๋Š” ์ž‘์€ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ CPU๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๊ฐ„ ๋™์•ˆ์—๋งŒ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•˜๋ฉฐ, ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” Round Robin์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋น„์„ ์ ํ˜•(Non-Preemptive) ์Šค์ผ€์ค„๋ง

  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ์ด์ƒ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๊ฐ•์ œ๋กœ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ I/O ์š”์ฒญ ๋“ฑ์œผ๋กœ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „๊นŒ์ง€ CPU๋ฅผ ๊ณ„์† ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ ์ ํ˜•์— ๋น„ํ•ด ๊ฐ„๋‹จํ•˜๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์€ ํŠน์ง•์ด ์žˆ์ง€๋งŒ, ์‘๋‹ต ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” FCFS(First-Come-First-Served)์™€ SJF(Shortest Job First)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ์ ํ˜•๊ณผ ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์˜ ์„ ํƒ์€ ์‹œ์Šคํ…œ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋ฉฐ, ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 


CPU scheduling is an operating system technique that determines how processes, sharing the CPU, are scheduled for execution, aiming to achieve efficient resource utilization and minimize response times.

 

๋Œ“๊ธ€