Linux

ํ”„๋กœ์„ธ์Šค (์ƒํƒœ, ๋ฌธ๋งฅ๊ตํ™˜, ๊ตฌ์กฐ, ์Šค๋ ˆ๋“œ, ์Šค์ผ€์ฅด๋ง)

๐Ÿง Yon 2021. 12. 27. 23:53
๋ฐ˜์‘ํ˜•

 

 

ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…๊ณผ์ • Outline            

1.  OS๋Š” ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
2.  ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)์„ ์ƒ์„ฑ
3.  ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ™•๋ณดํ•œ ํ›„
4.  ์ค€๋น„๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค€๋น„ ํ์— ์‚ฝ์ž…
5.  ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋’ค CPU ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•  ์ผ์„ CPU์— ์ „๋‹ฌ
6.  ์‹ค์ œ ์ž‘์—…์€ CPU๊ฐ€ ์ˆ˜ํ–‰

 

 


 

ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋…            

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด ๋™์ž‘ํ•  ๋–„ ํ•˜๋“œ์›จ์–ด์—์„œ๋Š” ๋‹ค์Œ ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋ณต๋œ๋‹ค

1. ์ž…๋ ฅ์žฅ์น˜ ํ˜น์€ ๋„คํŠธ์›Œํฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์— ๋ฌด์–ธ๊ฐ€ ์ฒ˜๋ฆฌ ์š”์ฒญ์ด ๋“ค์–ด์˜ด

2. ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ช…๋ น์„ ์ฝ์–ด CPU์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ด๊ฐ’์„ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ์˜์—ญ์— ๊ธฐ๋กํ•จ

3. ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋“œ๋””์Šคํฌ๋‚˜ SSD๋“ฑ์˜ ์ €์žฅ ์žฅ์น˜์— ๊ธฐ๋ก ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด 
๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋””์Šคํ”Œ๋ ˆ์ด ๋“ฑ์˜ ์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ์—๊ฒŒ ๊ฒฐ๊ด๊ฐ’์„ ๋ณด์—ฌ์คŒ

4. 1๋ฒˆ๋ถ€ํ„ฐ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰

์ด๋Ÿฌํ•œ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ํ•˜๋‚˜์˜ ์ฒ˜๋ฆฌ(๊ธฐ๋Šฅ)๋กœ ์ •๋ฆฌํ•œ ๊ฒƒ์„ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ํ•œ๋‹ค
ใ„ด์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ฏธ๋“ค์›จ์–ด(์›น์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ), OS ๋“ฑ

 

 

ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ๋…              

  • ํ”„๋กœ๊ทธ๋žจ์€ ์ €์žฅ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์‹คํ–‰ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธ
  • ๋Œ€๋ถ€๋ถ„์˜ OS๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ๋‹จ์œ„
  • ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค๋Š” ๊ฒƒ๊ณผ ๋™์‹œ์— ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•จ

 

 


 

PCB(Process Control Block)        

โœ” ํ”„๋กœ์„ธ์Šค = ํ”„๋กœ๊ทธ๋žจ + PCB (ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก)
> ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ OS๋กœ๋ถ€ํ„ฐ PCB๋ฅผ ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ


โœ” ํ”„๋กœ๊ทธ๋žจ = ํ”„๋กœ์„ธ์Šค - PCB (ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก)
> ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น PCB๊ฐ€ ํŽ˜๊ธฐ๋œ๋‹ค๋Š” ์˜๋ฏธ

 

  • ์ผ๋ฐ˜์ ์œผ๋กœ OS ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๋ ˆ๋”” ํ(ready queue)์— ์˜ฌ๋ ค ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง์„ ๊ด€๋ฆฌํ•œ๋‹ค

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

 

 


 

 

ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ       


๋ฉ€ํ‹ฐํƒœ์Šคํ‚น ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋Š” CPU๋ฅผ ์–ป์–ด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์ผ์ด ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์–ธ์ œ๋‚˜ ์ƒ์„ฑ, ์ค€๋น„, ์‹คํ–‰, ๋Œ€๊ธฐ, ์ข…๋ฃŒ ์ค‘ ํ•œ ๊ฐ€์ง€ ์ƒํƒœ์— ๋†“์ด๋ฉฐ, ์ƒ์„ฑ๋˜์„œ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€์˜ ํ•˜๋‚˜์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ง€๋‹ˆ๊ฒŒ ๋œ๋‹ค. ์œ„ ๊ทธ๋ฆผ์€ 5๊ฐ€์ง€ ์ƒํƒœ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ •์˜ํ•œ๋‹ค.

์ด๋ฏธ์ง€์ถœ์ฒ˜: https://kosaf04pyh.tistory.com/

 

ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ

Process
์ƒํƒœ๋ช…  ์ƒํƒœ description
new ( create state )  ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์ค‘
โœ” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์‹คํ–‰ ์ค€๋น„๋ฅผ ์™„๋ฃŒํ•œ ์ƒํƒœ

โœ” PCB๊ฐ€ ์ปค๋„ ๊ณต๊ฐ„์— ์ƒ์„ฑ๋จ
ready (ready state) ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘
โœ” ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์ž์› ํ• ๋‹น์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
โœ” ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ํ• ๋‹น ๋ฐ›์Œ

running (running state) ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘  
โœ” ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์ž์›์„ ํ• ๋‹น๋ฐ›์•„ ์ž‘์—…์„ ์ˆ˜ํ–‰์ค‘์ธ ์ƒํƒœ

โœ” ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ CPU๋ฅผ ์‚ฌ์šฉํ•  ๊ถŒ๋ฆฌ[๊ฐ์ฃผ:1]๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค

โœ” ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์„ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ ๋„ ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ready state๋กœ ๋Œ์•„์™€ ๋‹ค์Œ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค

โœ” ํ”„๋กœ์„ธ์Šค๋Š” ready์™€ running state๋ฅผ ์™”๋‹ค ๊ฐ”๋‹ค ํ•˜๊ฒŒ ๋จ

terminated (exit state) ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ข…๋ฃŒ โœ” PCB๊ฐ€ ์‚ฌ๋ผ์ง„ ์ƒํƒœ๋ฅผ ์˜๋ฏธ
blocked (waiting state) ํ”„๋กœ์„ธ์Šค ๋Œ€๊ธฐ
โœ” running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์„ ๋‹ค ์“ฐ๊ธฐ ์ „์— ์ž…์ถœ๋ ฅ(I/O) ์ž‘์—…์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ ๊นŒ์ง€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ CPU๋ฅผ ๋ฐ˜๋‚ฉํ•˜๊ณ  ์ž…์ถœ๋ ฅ์žฅ์น˜๋ณ„๋กœ ๋งˆ๋ จ๋œ ๋””๋ฐ”์ด์Šคํ์— ๊ฐ€์„œ ์ค„์„ ์„œ๊ณ  ๊ธฐ๋‹ค๋ฆฐ๋‹ค. 

โœ” ์ฆ‰, ๋””๋ฐ”์ด์Šค ํ์— ์†ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ์–ธ์ œ๋‚˜ blocked ์ƒํƒœ์ด๋‹ค

โœ” ์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด ๋””๋ฐ”์ด์Šค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CPU์— ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๊นจ์–ด๋‚  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค[๊ฐ์ฃผ:2]

โœ” ์ดํ›„ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” blocked > ready๋กœ ์ƒํƒœ๊ฐ€ ์ „์ด๋˜๋ฉฐ, ๋””๋ฐ”์ด์Šคํ์—์„œ ๋‚˜์™€ ๋ ˆ๋”” ํ๋กœ ๋“ค์–ด๊ฐ€๊ณ  ์ด์ „๊นŒ์ง€ ํ•œ ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

โ€ป blocked์™€ suspended์˜ ์ฐจ์ด

blocked: ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ ready ์ƒํƒœ๋กœ ๋Œ์•„์˜ด
suspended: ์ •์ง€(suspended a.k.a ์ง‘ํ–‰์œ ์˜ˆ) ์ƒํƒœ๊ฐ€ ๋๋‚˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ์žฌ๊ฐœ์‹œ์ผœ์ค˜์•ผ ๋‹ค์‹œ ready ์ƒํƒœ๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ์Œ

 

  • Blocked Status์˜ ์„ธ๋ถ„ํ™”
    • REPLY-Blocked
    • RECEIVE-Blocked
    • MUTEX-Blocked
    • INTERRUPT-Blocked
    • NANOSLEEP-Blocked

 

โ€ป  ์ธํ„ฐ๋ŸฝํŠธ์™€ ํด๋ง(Difference Between Interrupt and Polling in OS)[๊ฐ์ฃผ:3]

 

์ธํ„ฐ๋ŸฝํŠธ(Interrupt)์™€ ํด๋ง(Polling)์€ CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์žฅ์น˜๋“ค์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด๋‹ค. ์ธํ„ฐ๋ŸฝํŠธ ๋ฐ ํด๋ง์„ ํ†ตํ•ด CPU๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ์ค‘์ง€ํ•˜๊ณ , ๋” ์ค‘์š”ํ•œ ์ž‘์—…์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ์™€ ํด๋ง์€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์ด ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๋น„๊ต ํฌ์ธํŠธ๋Š”, ์ธํ„ฐ๋ŸฝํŠธ๋Š” ๋””๋ฐ”์ด์Šค๊ฐ€ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งŒ CPU์—๊ฒŒ Notify๋ฅผ ๋ณด๋‚ด CPU๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์•Œ๋ฆฌ์ง€๋งŒ, ํด๋ง์€ CPU๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””๋ฐ”์ด์Šค๋ฅผ ํ™•์ธํ•ด CPU๋ฅผ ํ•„์š”๋กœํ•˜๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.  ์ด์— ๋”ฐ๋ผ ์ธํ„ฐ๋ŸฝํŠธ๋Š” ํ•˜๋“œ์›จ์–ด์˜ ๋งค์ปค๋‹ˆ์ฆ˜, ํด๋ง์€ ํ”„๋กœํ† ์ฝœ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

ํด๋ง์€ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋””๋ฐ”์ด์Šค๋ฅผ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๋””๋ฐ”์ด์Šค๊ฐ€ ๋งŽ์€ ์ƒํƒœ์ผ ๋•Œ ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ CPU ์‚ฌ์ดํด์„ ๋‚ญ๋น„ํ•œ๋‹ค. 

 

 

โœ” ์ธํ„ฐ๋ŸฝํŠธ: ์•Œ๋ฆผ์Œ์ด ์šธ๋ฆฌ๋ฉด ์นดํ†ก์„ ํ™•์ธํ•จ
โœ” ํด๋ง: ์นดํ†ก์ด ์˜ค๋Š”์ง€ ์•ˆ์˜ค๋Š”์ง€ ์ผ์ • ์ฃผ๊ธฐ๋กœ ํ•ธ๋“œํฐ ๋ด„

 

 


 

๋ฌธ๋งฅ ๊ตํ™˜ ( Context Switching )  

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

 

๋ฌธ๋งฅ๊ตํ™˜์˜ ๊ฐœ๋…

  • CPU๋ฅผ ์ฐจ์ง€ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‚˜๊ฐ€๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ์ž‘์—…(๋‘ ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์ž‘์—…)
  • ์‹คํ–‰์ƒํƒœ์—์„œ ๋‚˜๊ฐ€๋Š” PCB๋Š” ์ง€๊ธˆ๊นŒ์ง€์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ €์žฅ ( "๋‹ค์Œ์— ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜์„ธ์š”!" )
  • ์‹คํ–‰์ƒํƒœ๋กœ ๋“ค์–ด์˜ค๋Š” PCB์˜ ๋‚ด์šฉ์œผ๋กœ CPU๊ฐ€ ๋‹ค์‹œ ์„ธํŒ…

 

์Šค์œ„์นญ ์ผ€์ด์Šค(Switching Cases)

  • ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น(Multitasking)
    • ์‹คํ–‰์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค P1์ด ํƒ€์ž„์•„์›ƒ๋˜๋ฉด P1-PCB์— ํ˜„์žฌ๊นŒ์ง€์˜ ์ž‘์—… ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜๊ณ , ready ์ƒํƒœ๋กœ ์ซ“๊ฒจ๋‚จ. ๊ทธ๋ฆฌ๊ณ  ready ์ƒํƒœ์— ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค P2๊ฐ€ ์‹คํ–‰์ƒํƒœ๋กœ ๊ฐ€๋ฉด CPU ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ P2-PCB ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ ธ ๋‹ค์Œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋จ
  • ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋ง(Interrupt Handling)
    • ํ•˜๋‚˜์˜ ํ…Œ์Šคํฌ๊ฐ€ I/O์— ์˜ํ•œ ์ธํ„ฐ๋ŸฝํŠธ ๋“ฑ์œผ๋กœ ์ธํ•ด CPU๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ
  • ์œ ์ €๋ชจ๋“œ-์ปค๋„๋ชจ๋“œ ์Šค์œ„์นญ(User and Kernel mode switching)

 

  • System Call ์š”์ฒญ ์‹œ ์œ ์ € ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์œ ์ €๋ชจ๋“œ์—์„œ ์ปค๋„๋ชจ๋“œ๋กœ ์ž ์‹œ ์ „ํ™˜๋˜์—ˆ๋‹ค๊ฐ€, ์ปค๋„๋ชจ๋“œ์—์„œ ์š”์ฒญ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ ๋’ค ์‘๋‹ต์„ ์œ ์ € ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ๋‹ค์‹œ ์œ ์ €๋ชจ๋“œ๋กœ ๋˜๋Œ์•„๊ฐ€๊ฒŒ ๋จ

 


 

ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ           

โ€ป ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ?

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ฝ”๋“œ ์˜์—ญ, ๋ฐ์ดํ„ฐ ์˜์—ญ(์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ์˜์—ญ / ํž™ ์˜์—ญ), ์Šคํƒ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ

  • ์˜ˆ๋ฅผ ๋“ค์–ด ํฌํ† ์ƒต์ด๋ž€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด(ํ”„๋กœ์„ธ์Šค)
    1. ํ”„๋กœ๊ทธ๋žจ์€ ์ฝ”๋“œ์˜์—ญ์— ํƒ‘์žฌ ๋œ๋‹ค = ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณธ๋ฌธ์ด ๊ธฐ์ˆ ๋œ ๊ณณ(a.k.a text area) = ์ฝ๊ธฐ ์ „์šฉ
    2. ํŽธ์ง‘ ์ค‘์ธ ์ด๋ฏธ์ง€๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์— ํƒ‘์žฌ๋œ๋‹ค = ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜, ํŒŒ์ผ ๋“ฑ์˜ ๊ฐ์ข… ๋ฐ์ดํ„ฐ = ์ฝ๊ธฐ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
    3. ์šด์˜์ฒด์ œ๊ฐ€ ํฌํ† ์ƒต์„ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ข… ๋ถ€๊ฐ€ ๋ฐ์ดํ„ฐ๋Š” ์Šคํƒ ์˜์—ญ์—์„œ ๊ด€๋ฆฌ (* ๋‚˜์ค‘์— ๋” ์•Œ์•„๋ณด๊ธฐ ) = ์ˆจ๊น€
  • ex. ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ function call ์‹œ, function ์ˆ˜ํ–‰ ํ›„ ์›๋ž˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ์•„์˜ฌ ์œ„์น˜๋ฅผ ์ด ์˜์—ญ์— ์ €์žฅ
  • ์šด์˜์ฒด์ œ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ง€ํ•˜๋Š” ์˜์—ญ์ด๋ฏ€๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ณด์ด์ง€ ์•Š์Œ

 

โ€ป ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ / ๋ณต์‚ฌ / ์ „ํ™˜?

  • ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ์ƒˆ๋กœ ์ƒ์„ฑ๋จ
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด OS๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ ธ์™€ ์ฝ”๋“œ ์˜์—ญ์— ๋„ฃ๊ณ  PCB ์ƒ์„ฑ
  • ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ ์˜์—ญ๊ณผ ์Šคํƒ ์˜์—ญ์„ ํ™•๋ณดํ•œ ํ›„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰
  • fork(): ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค(Parent)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค(Child)๋กœ ์ƒ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ
    • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ์ž์› ์ƒ์† ๊ฐ€๋Šฅ
  • exec(): ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ๋‚ด์šฉ๋งŒ ๋ฐ”๊พธ๋Š” ์‹œ์Šคํ…œ ์ฝœ. ํ˜„์žฌ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜๋จ
    • ํ”„๋กœ์„ธ์Šค ๊ตฌ์กฐ์ฒด ์žฌํ™œ์šฉ

+ fork()์™€ exec() ๋Š” ๋”ฐ๋กœ ์ •๋ฆฌ

 


 

์Šค๋ ˆ๋“œ            

โšก Point: job > task(process) > thread(operation)

 

  • ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋’ค CPU ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•  ์ผ์„ CPU์— ์ „๋‹ฌํ•œ๋‹ค.
    ์Šค๋ ˆ๋“œ๋ž€, ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๋’ค CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ 'CPU์— ์ „๋‹ฌํ•˜๋Š” ์ผ ํ•˜๋‚˜'๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    ์ฆ‰, ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ์— ์ •์˜๋œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ CPU์— ์ž‘์—… ์š”์ฒญ์„ ํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ๋Š” ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

 

 


 

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

์Šค์ผ€์ค„๋ง์˜ ๊ฐœ์š”

  • CPU ์Šค์ผ€์ค„๋ง์ด๋ž€ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ
    CPU์™€ ์‹œ์Šคํ…œ ์ž์›์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์ •ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

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

  • CPU ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ทœ๋ชจ์— ๋”ฐ๋ฅธ ๊ด€๋ฆฌ์˜ ๋ฒ”์ฃผ๋ฅผ ๋‚˜๋ˆ„์–ด ์Šค์ผ€์ค„๋ง์„ ํ•œ๋‹ค

 

๊ทœ๋ชจ์— ๋”ฐ๋ฅธ ์Šค์ผ€์ค„๋ง์˜ ๋ฒ”์ฃผ

๊ณ ์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง(High Level Scheduling) :
์žฅ๊ธฐ ์Šค์ผ€์ค„๋ง(Long Term Scheduling)


์‹œ์Šคํ…œ ๋‚ด์˜ ์ „์ฒด ์ž‘์—…( OS์—์„œ ๋‹ค๋ฃจ๋Š” ์ผ์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์œ„ ) ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ

์–ด๋–ค ์ž‘์—…์ด ์‹œ์Šคํ…œ์„ ๋ฐ›์•„๋“ค์ผ์ง€ ๋˜๋Š” ๊ฑฐ๋ถ€ํ• ์ง€๋ฅผ ๊ฒฐ์ •
์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ง


์ค‘๊ฐ„ ์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง(Middle Level Scheduling) : ์ค‘๊ฐ„ ์Šค์ผ€์ค„๋ง(Intermediate Scheduling)


์žฅ๊ธฐ ์Šค์ผ€์ค„๋ง, ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋ง ์‚ฌ์ด์— ์ผ์–ด๋‚˜๋Š” ์Šค์ผ€์ค„๋ง

์ค‘์ง€(suspend)์™€ ํ™œ์„ฑํ™”(active)๋กœ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํ™œ์„ฑํ™›๋œ ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ง‰๋Š”๋‹ค


์ €์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง(Low Level Scheduling) : ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋ง(Short Term Scheduling)


ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ๋Œ€๋ถ€๋ถ„ ์ €์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง์— ํ•ด๋‹น(๋Œ€๊ธฐ>์ค€๋น„, ์ค€๋น„>์‹คํ–‰ ๋“ฑ)

์ €์ˆ˜์ค€ ์Šค์ผ€์ค„๋ง์€ ๋Œ€๋ถ€๋ถ„ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„์— ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋ง์ด๋ผ ๋ถ€๋ฆ„

 


 

์Šค์ผ€์ค„๋ง์˜ ๋ชฉ์ 

  • ํŠน์ • ํ”„๋กœ์„ธ์Šค์— ์‹œ์Šคํ…œ ์ž์›์ด ํŽธ์ค‘๋˜์ง€ ์•Š๋„๋ก ์ค‘์š”๋„์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณตํ‰ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์ •ํ•˜๊ธฐ ์œ„ํ•จ
  • CPU ์Šค์ผ€์ค„๋ง์˜ ์›๋ž˜ ๋ชฉ์ ์€ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณตํ‰ํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋จผ์ € ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Š˜ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ผ์ • ๋ถ€๋ถ„ ๊ณตํ‰์„ฑ์„ ํฌ์ƒํ•œ๋‹ค

โ€ป ์‹œ์Šคํ…œ์—๋Š” ๋‹ค์–‘ํ•œ ์šฐ์„ ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์กดํ•˜๋ฉฐ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๋” ๋จผ์ €, ๋” ์˜ค๋ž˜ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค

 

 


 

 

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

 

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

  • ๊ฐœ์š”: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์ผ€์ฅด ๋  ์ˆ˜ ์žˆ์Œ(can be scheduled)

  • ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ running state์—์„œ ready state๋กœ ์ „์ด๋˜๊ฑฐ๋‚˜, waiting(blocked) state ์—์„œ ready state๋กœ ์ „์ด๋  ๋•Œ 
  • ์ œํ•œ๋œ ์‹œ๊ฐ„ ๋™์•ˆ ํ”„๋กœ์„ธ์Šค์— ์ž์›์ด ํ• ๋‹น๋˜์—ˆ๋‹ค๊ฐ€ ์—†์–ด์ง€๊ณ , CPU Burst Time(CPU ๋ช…๋ น ์‹คํ–‰ ์‹œ๊ฐ„=์ž‘์—…์‹œ๊ฐ„)์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๋ ˆ๋”” ํ์— ๋ฐฐ์น˜๋˜์–ด ๋‹ค์Œ ์‹คํ–‰ ๊ธฐํšŒ๊ฐ€ ์žˆ์„ ๋•Œ ๊นŒ์ง€ ready state๋ฅผ ์œ ์ง€ํ•จ

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

  • ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ P0, P1, P2, P3 ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•  ๋•Œ, ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์— ์˜ํ•œ ๋ฐฐ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • P2๊ฐ€ ๋„์ฐฉ์‹œ๊ฐ„ 0์— ๋„์ฐฉ
      • ๋ ˆ๋”” ํ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฏ€๋กœ P2์— CPU๊ฐ€ ํ• ๋‹น๋œ๋‹ค
        • P2๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ, P3๊ฐ€ ๋„์ฐฉ์‹œ๊ฐ„ 1์— ๋„์ฐฉํ•œ๋‹ค. ์ด ์‹œ์ ์—์„œ P2์—๊ฒŒ ๋‚จ์€ burst time=5๋ฐ€๋ฆฌ์ดˆ ์ด๋ฉฐ, P3์˜ burst time(4๋ฐ€๋ฆฌ์ดˆ)์€ P2๋ณด๋‹ค ์งง๊ธฐ ๋•Œ๋ฌธ์— CPU๋Š” P3์— CPU๋ฅผ ํ• ๋‹นํ•œ๋‹ค
          • P3๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ P1์ด ๋„์ฐฉ์‹œ๊ฐ„ 2์— ๋„์ฐฉํ•œ๋‹ค. ์ด ์‹œ์ ์—์„œ P3์—๊ฒŒ ๋‚จ์€ burst time์€ 3์ด๋ฉฐ P1์˜ burst time(4๋ฐ€๋ฆฌ์ดˆ)๋ณด๋‹ค ์งง๊ณ , ์—ฌ์ „ํžˆ P2์˜ burst time(5๋ฐ€๋ฆฌ์ดˆ)๋ณด๋‹ค๋„ ์งง๊ธฐ ๋•Œ๋ฌธ์— P3๊ฐ€ ๊ณ„์† ์‹คํ–‰๋œ๋‹ค
            • P3๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋Š” ๋™์•ˆ P0๊ฐ€ ๋„์ฐฉ์‹œ๊ฐ„ 3์— ๋„์ฐฉํ•œ๋‹ค. ์ด ์‹œ์ ์—์„œ P3 burst time=2๊ณผ P0 burst time=2๋กœ ๋™์ผํ•œ๋ฐ, ์ด ๋•Œ์—๋Š” P3๊ฐ€ ์ž‘์—…์„ ์ง€์†ํ•œ๋‹ค.
              • P3 terminate ์ดํ›„์—” burst time์ด ๊ฐ€์žฅ ์งง์€ P0์ด ์ž์›์„ ํ• ๋‹น ๋ฐ›๊ณ , ์ดํ›„ P1, P2์˜ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋ฐ›๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง(non-preemptive scheduling)

  • ๊ฐœ์š”: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์ผ€์ฅด ๋  ์ˆ˜ ์—†์Œ(can not be scheduled)
    โ€ป์ง€๊ธˆ์€ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค

  • ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ terminate ๋˜๊ฑฐ๋‚˜ running state์—์„œ
    waiting(blocked) state๋กœ ์ „์ด๋  ๋•Œ ์ž์›์„ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์•ž์„  ํ”„๋กœ์„ธ์Šค์˜ Burst Time์ด ๋ชจ๋‘ ์†Œ์ง„๋˜์–ด
    terminate ๋˜๊ฑฐ๋‚˜ waiting(blocked) state๊ฐ€ ๋  ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์Šค์ผ€์ค„๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

Comparision Chart
Basis  Preemptive Non-Preemptive
๊ธฐ๋ณธ ํ•œ์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ํ”„๋กœ์„ธ์Šค์— CPU ํ• ๋‹น ์ผ๋‹จ ์ž์›์ด ํ• ๋‹น๋˜๊ณ  ๋‚˜๋ฉด ์ž‘์—…์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ (๋˜๋Š” blocked ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€) CPU ๋†“์ง€ ์•Š์Œ
์ธํ„ฐ๋ŸฝํŠธ ์‹คํ–‰ ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์— ์ธํ„ฐ๋ŸฝํŠธ ๊ฐ€๋Šฅ ์‹คํ–‰ ์ƒํƒœ์— ์žˆ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ ๋˜๋Š”
blocked ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ์ž‘์—… ๋ถˆ๊ฐ€
Starvation ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ ˆ๋””ํ์— ๋“ค์–ด์˜ค๋Š” ๋นˆ๋„๊ฐ€ ๋†’์•„์ง€๋ฉด, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ„์† ์ž์›์„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ( ๋ฐฐ๊ณ ํ””! ) burst time์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ฉด, ์ƒ๋Œ€์ ์œผ๋กœ busrt time ์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ ( ๋ฐฐ๊ณ ํ””! )
์˜ค๋ฒ„ํ—ค๋“œ ๋ฌธ๋งฅ ๊ตํ™˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งŽ์Œ X
(๋‹จ, ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŽ์•„ ์ฒ˜๋ฆฌ์œจ ๋–จ์–ด์ง)
์œ ์—ฐ์„ฑ O X
์ค‘์š”๋„ ๋†’์Œ ๋‚ฎ์Œ
์‚ฌ์šฉ
์‹œ๋ถ„ํ•  ๋ฐฉ์‹ ์Šค์ผ€์ค„๋Ÿฌ์— ์‚ฌ์šฉ๋จ ์ผ๊ด„ ์ž‘์—… ๋ฐฉ์‹ ์Šค์ผ€์ค„๋Ÿฌ์— ์‚ฌ์šฉ๋จ

 

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

  • ๋ผ์šด๋“œ ๋กœ๋นˆ ์Šค์ผ€์ค„๋ง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์‹œ๊ฐ„(ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค) ๋™์•ˆ ์ž‘์—…์„ ํ•˜๋‹ค๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ ˆ๋”” ํ์˜ ๋งจ ๋’ค๋กœ ๊ฐ€์„œ ์ž๊ธฐ ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํ•ฉํ•ด ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋กœ ๋‚˜๋ˆ„๋ฉด ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง(Priority Scheduling)

  • ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์€ ์„ ์ ํ˜• ๋ฐฉ์‹๊ณผ ๋น„์„ ์ ํ˜• ๋ฐฉ์‹์— ๋ชจ๋‘ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ๋”” ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆœ์„œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค์— ๋จผ์ € CPU๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งค๋ฒˆ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ํšจ์œจ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ์‹œ์Šคํ…œ์˜ ํšจ์œจ์„ฑ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. 

 


 

์ฝ์–ด๋ณผ๋งŒํ•œ ์ž๋ฃŒ       

 

์ž‘์—…์˜ ํฌ๊ธฐ

โšก job > task(process) > thread(operation)

์ž‘์—…์˜ ํฌ๊ธฐ๋ฅผ ์ƒ๋Œ€์ ์ธ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ๋‚˜์—ดํ•˜๋ฉด job > task > operation์ด๊ณ ,
์ด๋ฅผ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ๊ด€๊ณ„์— ๋Œ€์ž…ํ•˜๋ฉด job > task(process) > thread(operation)์ด ๋œ๋‹ค.
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ชจ์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ด๋ฃจ๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ์—ฌ job์ด ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ์•„์„œ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ batch job(์ผ๊ด„ ์ž‘์—…) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 


 

  1. ํƒ€์ž„์Šฌ๋ผ์ด์Šค, ํƒ€์ž„ํ€€ํ…€: ํ”„๋กœ์„ธ์Šค์— ๋ฐฐ๋‹น๋œ ์ž‘์—… ์‹œ๊ฐ„.์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ running state๋กœ ๋“ค์–ด์˜ค๋ฉด, CPU๋Š” ์ผ์ • ์‹œ๊ฐ„(ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค)์ด ํ๋ฅธ ๋’ค ์•Œ๋ ค๋‹ฌ๋ผ๊ณ  ํด๋ก์— ์š”์ฒญํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ๊ณ„์† ๋…์ ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ๋žŒ์„ ๋งž์ถ”์–ด ๋†“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์›๋ฆฌ. ์ผ์ • ์‹œ๊ฐ„์ด ๋‹ค ๋˜๋ฉด ํด๋ก์€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CPU์— ์•Œ๋ ค์ค€๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ Running -> Ready๋กœ์˜ ์ƒํƒœ ๋ณ€ํ™”์‹œ "Timer Interrupt ( =ํƒ€์ž„์•„์›ƒ, ์ธํ„ฐ๋ŸฝํŠธ )" ๋ผ๊ณ  ๋˜์–ด์žˆ๋Š” ๋ถ€๋ถ„์€ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋ฉด ํด๋ก์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. [๋ณธ๋ฌธ์œผ๋กœ]
  2. Wakeup(PID) [๋ณธ๋ฌธ์œผ๋กœ]
  3. https://techdifferences.com/difference-between-interrupt-and-polling-in-os.html [๋ณธ๋ฌธ์œผ๋กœ]
๋ฐ˜์‘ํ˜•