junghyunlyoo contextSwitching - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

cpu์™€ ํ”„๋กœ์„ธ์Šค

cpu๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ cpu๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ์—, ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ

์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘ ์–ด๋Š ํ”„๋กœ์„ธ์Šค์— cpu๋ฅผ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ด ์ž‘์—…์„ ์Šค์ผ€์ค„๋ง์ด๋ผ ํ•œ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ cpu๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•œ๋‹ค.

(ํ”„๋กœ์„ธ์Šค์—๊ฒŒ cpu๊ฐ€ ํ• ๋‹น๋œ๋‹ค๋Š” ๊ฒƒ์€ cpu๊ฐ€ ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.)

cpu๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ ๊ต์ฒด๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๋“ฏํ•œ ๋Š๋‚Œ์„ ๋ฐ›๋Š”๋‹ค.

Context Switching

ํ”„๋กœ์„ธ์Šค๋“ค์€ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด cpu๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ๋„ ํ•˜๊ณ  cpu๋ฅผ ํšŒ์ˆ˜๋‹นํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋Š” new ์ƒํƒœ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์€ cpu๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•˜๋Š” ready ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ๋Š” ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ cpu๋ฅผ ํ• ๋‹นํ•œ๋‹ค. cpu๋ฅผ ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๋Š” running ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

running ์ƒํƒœ์ธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋„์ค‘, ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ cpu๊ฐ€ ํ• ๋‹น๋˜๋Š” interrupt๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

running ์ƒํƒœ์ด๋˜ ํ”„๋กœ์„ธ์Šค๋Š” ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด cpu๋ฅผ ํšŒ์ˆ˜๋‹นํ•˜๊ณ , ์Šค์ผ€์ค„๋Ÿฌ๋Š” ํšŒ์ˆ˜ํ•œ cpu๋ฅผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ํ• ๋‹นํ•œ๋‹ค.

cpu ์ž…์žฅ์—์„œ๋Š” ์ž์‹ ์ด ์‹คํ–‰์‹œ์ผœ์•ผ ํ•  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ Context Switching ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Context Switching ์˜ค๋ฒ„ํ—ค๋“œ

cpu๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๋ ˆ์ง€์Šคํ„ฐ๋ผ๊ณ  ํ•˜๋Š” cpu ๋‚ด๋ถ€ ๊ณต๊ฐ„์— ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ Context Switching์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋น„์›Œ์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ cpu ์ ์œ ๊ฐ€ ๋๋‚˜๋ฉด ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์— ๋‹ค์‹œ cpu๋ฅผ ํ• ๋‹นํ•ด์ค˜์•ผ(Context Switching) ํ•˜๋ฏ€๋กœ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ด๋’€๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ OS๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์ธ PCB(Process Control Block)์— ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด๋†“๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ PCB๋กœ๋ถ€ํ„ฐ ์ฝ๊ณ  cpu ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์˜ฎ๊ธด๋‹ค. (PCB์—” ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค.)

๊ทธ๋Ÿฐ๋ฐ PCB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ €์žฅํ•  ๋• CPU๊ฐ€ ์•„๋ฌด๋Ÿฐ ์ผ๋„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— Context Switching์ด ์žฆ์œผ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

https://philip1994.tistory.com/45

https://hoony-gunputer.tistory.com/entry/Thread-Context-Switching-vs-Process-Context-Switching

https://hoony-gunputer.tistory.com/entry/Thread-process

https://www.crocus.co.kr/1364

https://agh2o.tistory.com/12

https://jhnyang.tistory.com/7

https://velog.io/@adam2/2020-01-08-2301-%EC%9E%91%EC%84%B1%EB%90%A8-huk55f3cic