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

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

 

 

์™œ ํ•„์š”ํ•œ๊ฐ€?

CPU๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. --> ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ I/O ์š”์ฒญ์œผ๋กœ ๋Œ€๊ธฐํ•  ๊ฒฝ์šฐ, CPU๋Š” ๋†€๊ฒŒ๋จ

์‹œ๊ฐ„์„ ์ƒ์‚ฐ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ณ ์ž CPU๋ฅผ ๊ทธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ํšŒ์ˆ˜ํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•œ๋‹ค.

CPU ์ด์šฉ๋ฅ  ๊ทน๋Œ€ํ™”

 

 

 

 


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

CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ž‘๋™๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ

์ƒํ™ฉ 1 : ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ƒํƒœ์—์„œ ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. I/O ์š”์ฒญ์— ์˜ํ•œ ๋Œ€๊ธฐ
์ƒํ™ฉ 2 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ƒํƒœ์—์„œ ์ค€๋น„์™„๋ฃŒ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ๋‹ค ๋๋‚ฌ์„ ๋•Œ ( timer interrupt๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ)
์ƒํ™ฉ 3 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ์ƒํƒœ์—์„œ ์ค€๋น„์™„๋ฃŒ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
ex. I/O ์ข…๋ฃŒ ์‹œ
์ƒํ™ฉ 4 : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ

 

๋น„์„ ์  nonpreemptive

: ์ƒํ™ฉ 1,4์™€ ๊ฐ™์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž๋ฐœ์ ์œผ๋กœ CPU๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒฝ์šฐ

CPU๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋˜๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋“ ์ง€, ๋˜๋Š” ๋Œ€๊ธฐ์ƒํƒœ๋กœ ์ „ํ™˜ํ•ด CPU๋ฅผ ๋ฐฉ์ถœํ•  ๋•Œ๊นŒ์ง€ ์ ์œ ํ•œ๋‹ค.

 

 

์„ ์  preemptive

: ์ƒํ™ฉ 2,3๊ณผ ๊ฐ™์ด ๊ฐ•์ œ์ ์œผ๋กœ CPU๋ฅผ ๋นผ์•—๊ธฐ๋Š” ๊ฒฝ์šฐ

Windows, macOS, Linux๋ฅผ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์ตœ์‹  ์šด์˜์ฒด์ œ๋“ค์€ ์„ ์  ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 


 

์Šค์ผ€์ค„๋ง ๊ธฐ์ค€

CPU ์ด์šฉ๋ฅ 

์ „์ฒด ์‹œ์Šคํ…œ ์‚ฌ์šฉ ์‹œ๊ฐ„ ์ค‘ CPU๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์˜ ๋น„์œจ 

 

์ฒ˜๋ฆฌ๋Ÿ‰

๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์™„๋ฃŒ๋œ ํ”„๋กœ์…‹์˜ ๊ฐœ์ˆ˜

 

์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘ํ•ด์„œ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ( ์ค€๋น„ ํ์—์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„ + CPU ์‹คํ–‰ ์‹œ๊ฐ„ + I/O ์‹œ๊ฐ„ )

 

๋Œ€๊ธฐ ์‹œ๊ฐ„

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค€๋น„ ํ์—์„œ ๋Œ€๊ธฐํ•˜๋ฉฐ ๋ณด๋‚ธ ์‹œ๊ฐ„์˜ ํ•ฉ

 

์‘๋‹ต ์‹œ๊ฐ„

ํ•˜๋‚˜์˜ ์š”๊ตฌ๋ฅผ ์ œ์ถœํ•œ ํ›„ ์ฒซ๋ฒˆ์งธ ์‘๋‹ต์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„ ( ์‘๋‹ต์ด ์ถœ๋ ฅ๋˜๋Š” ์‹œ๊ฐ„์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค )

 

CPU ์ด์šฉ๋ฅ ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ตœ๋Œ€ํ™”ํ•˜๊ณ  ์ด ์ฒ˜๋ฆฌ ์‹œ๊ฐ„, ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ํ•˜๋Š” ๊ฒƒ์œผ๋กœ~!

 

 

 


 

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

์„ ์ž… ์„ ์ฒ˜๋ฆฌ FCFS (First Come First Served)

ํŠน์ง•

  • ๋จผ์ € ์˜จ ๊ณ ๊ฐ์„ ๋จผ์ € ์„œ๋น„์Šคํ•ด์ฃผ๋Š” ๋ฐฉ์‹, ์ฆ‰ ๋จผ์ € ์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ.
  • ๋น„์„ ์ ํ˜•(Non-Preemptive) ์Šค์ผ€์ค„๋ง
    ์ผ๋‹จ CPU ๋ฅผ ์žก์œผ๋ฉด CPU burst ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ CPU ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ• ๋‹น๋˜์—ˆ๋˜ CPU ๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ๋งŒ ์Šค์ผ€์ค„๋ง์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

๋ฌธ์ œ์ 

  • convoy effect
    ์†Œ์š”์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„๋‹ฌํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋‚ฎ์ถ”๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

SJF(Shortest - Job - First)

ํŠน์ง•

  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„์ฐฉํ–ˆ์–ด๋„ CPU burst time ์ด ์งง์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์„  ํ• ๋‹น
  • ๋น„์„ ์ ํ˜•(Non-Preemptive) ์Šค์ผ€์ค„๋ง

๋ฌธ์ œ์ 

  • starvation
    ํšจ์œจ์„ฑ์„ ์ถ”๊ตฌํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•˜์ง€๋งŒ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์ฐจ๋ณ„๋ฐ›์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์Šค์ผ€์ค„๋ง์€ ๊ทน๋‹จ์ ์œผ๋กœ CPU ์‚ฌ์šฉ์ด ์งง์€ job ์„ ์„ ํ˜ธํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ๊ฑฐ์˜ ์˜์›ํžˆ CPU ๋ฅผ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

 

SRTF(Shortest Remaining Time First)

ํŠน์ง•

  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šค์ผ€์ค„๋ง์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • ์„ ์ ํ˜• (Preemptive) ์Šค์ผ€์ค„๋ง
    ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ burst time ๋ณด๋‹ค ๋” ์งง์€ CPU burst time ์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด CPU ๋ฅผ ๋บ๊ธด๋‹ค.

๋ฌธ์ œ์ 

  • starvation
  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„๋‹ฌํ•  ๋•Œ๋งˆ๋‹ค ์Šค์ผ€์ค„๋ง์„ ๋‹ค์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU burst time(CPU ์‚ฌ์šฉ์‹œ๊ฐ„)์„ ์ธก์ •ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

Priority Scheduling

ํŠน์ง•

  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์Šค์ผ€์ค„๋ง์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ž€ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋˜๊ณ  ์ž‘์€ ์ˆซ์ž๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค.
  • ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง(Preemptive) ๋ฐฉ์‹
    ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  CPU ๋ฅผ ์„ ์ ํ•œ๋‹ค.
  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง(Non-Preemptive) ๋ฐฉ์‹
    ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด Ready Queue ์˜ Head ์— ๋„ฃ๋Š”๋‹ค.

๋ฌธ์ œ์ 

  • starvation
  • ๋ฌด๊ธฐํ•œ ๋ด‰์‡„(Indefinite blocking)
    ์‹คํ–‰ ์ค€๋น„๋Š” ๋˜์–ด์žˆ์œผ๋‚˜ CPU ๋ฅผ ์‚ฌ์šฉ๋ชปํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ CPU ๊ฐ€ ๋ฌด๊ธฐํ•œ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ

ํ•ด๊ฒฐ์ฑ…

  • aging
    ์•„๋ฌด๋ฆฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ผ๋„ ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์—ฌ์ฃผ์ž.

 

Round Robin

ํŠน์ง•

  • ํ˜„๋Œ€์ ์ธ CPU ์Šค์ผ€์ค„๋ง
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ• ๋‹น ์‹œ๊ฐ„(time quantum)์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
  • ํ• ๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์„ ์ ๋‹นํ•˜๊ณ  ready queue ์˜ ์ œ์ผ ๋’ค์— ๊ฐ€์„œ ๋‹ค์‹œ ์ค„์„ ์„ ๋‹ค.
  • RR์€ CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ๋žœ๋คํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„ž์—ฌ์žˆ์„ ๊ฒฝ์šฐ์— ํšจ์œจ์ 
  • RR์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ํ”„๋กœ์„ธ์Šค์˜ context ๋ฅผ save ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์žฅ์ 

  • Response time์ด ๋นจ๋ผ์ง„๋‹ค.
    n ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue ์— ์žˆ๊ณ  ํ• ๋‹น์‹œ๊ฐ„์ด q(time quantum)์ธ ๊ฒฝ์šฐ ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” q ๋‹จ์œ„๋กœ CPU ์‹œ๊ฐ„์˜ 1/n ์„ ์–ป๋Š”๋‹ค. ์ฆ‰, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ (n-1)q time unit ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด CPU ๋ฅผ ์‚ฌ์šฉํ•  ๋งŒํผ ์ฆ๊ฐ€ํ•œ๋‹ค.
    ๊ณต์ •ํ•œ ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ 

์„ค์ •ํ•œ time quantum์ด ๋„ˆ๋ฌด ์ปค์ง€๋ฉด FCFS์™€ ๊ฐ™์•„์ง„๋‹ค. ๋˜ ๋„ˆ๋ฌด ์ž‘์•„์ง€๋ฉด ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ชฉ์ ์—๋Š” ์ด์ƒ์ ์ด์ง€๋งŒ ์žฆ์€ context switch ๋กœ overhead ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ ๋‹นํ•œ time quantum์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

 

 

 


< ์ฐธ๊ณ  >

https://velog.io/@mu1616/CPU-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81

+ Recent posts