Context Switching

์ž๋ฐ” ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์šด์˜ ์ฒด์ œ ๊ธฐ๋ณธ ์ง€์‹

Context Switching

  • ํ•˜๋‚˜์˜ CPU๋Š” ๋™์ผํ•œ ์‹œ๊ฐ„์— ํ•˜๋‚˜์˜ ์ž‘์—…(Task)๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

  • ํ•˜๋‚˜์˜ CPU ์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์„ ๋ฌธ๋งฅ ๊ตํ™˜(Context Switching) ์ด๋ผ๊ณ  ํ•œ๋‹ค.


๋ฌธ๋งฅ (Context)

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ „ํ™˜์„ ์œ„ํ•ด์„œ๋Š” ์ด์ „์— ์–ด๋””๊นŒ์ง€ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ–ˆ๊ณ , CPU Register์—๋Š” ์–ด๋–ค ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • Context๋Š” CPU๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ด ์ •๋ณด๋“ค์€ ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” PCB ๋ผ๊ณ  ํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๊ณต๊ฐ„์— ์ €์žฅ๋œ๋‹ค.


PCB (Process Control Block)

  • ์šด์˜์ฒด์ œ๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์œ ์ง€ํ•˜๋Š” ์ •๋ณด๋ฅผ ๋‹ด๋Š” ์ปค๋„ ๋‚ด์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค ๊ฐ„ PCB ์ •๋ณด๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์บ์‹œ๋ฅผ ๋น„์šฐ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

img_13.png

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

img_14.png
  • New(์ƒ์„ฑ) : ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋‹จ๊ณ„๋กœ ์ปค๋„ ์˜์—ญ์— PCB๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์ƒํƒœ

  • Ready(์ค€๋น„) : ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ

  • Running(์‹คํ–‰) : ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น ๋ฐ›์•„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ

  • Waiting(๋Œ€๊ธฐ) : ํ”„๋กœ์„ธ์Šค๊ฐ€ I/O ์ž‘์—… ์™„๋ฃŒ ๋˜๋Š” ์‚ฌ๊ฑด ๋ฐœ์ƒ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ

  • Terminated(์ข…๋ฃŒ) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ ์ƒํƒœ

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚˜๋Š” ์กฐ๊ฑด

  • ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์—์„œ I/O ํ˜ธ์ถœ์ด ์ผ์–ด๋‚˜ ํ•ด๋‹น I/O ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๊ฐ€ Running์—์„œ Waiting ์ƒํƒœ๋กœ ์ „์ด๋œ ๊ฒฝ์šฐ

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

img_15.png

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋™์ž‘ ๊ณผ์ •

img_16.png
  1. ์šด์˜์ฒด์ œ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ์„ ์ 

  2. ์„ ์ ๋œ ํ”„๋กœ์„ธ์Šค(Process 1)๋Š” ์‹คํ–‰ ์ƒํƒœ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค(Process 2)๋Š” ์ค€๋น„ ์ƒํƒœ

  3. ์„ ์ ๋œ ํ”„๋กœ์„ธ์Šค์—์„œ ์ฃผ์–ด์ง„ ์‹คํ–‰ ์‹œ๊ฐ„์ด ์ข…๋ฃŒ๋˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฌธ๋งฅ ๊ตํ™˜์ด ๋ฐœ์ƒํ•  ๋•Œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


์Šค๋ ˆ๋“œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ

  • TCB(Thread Control Block)

    • ์Šค๋ ˆ๋“œ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ, PC์™€ Register Set(CPU ์ •๋ณด), ๊ทธ๋ฆฌ๊ณ  PCB๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

    • ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค PCB ๋‚ด์—์„œ TCB๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚˜๋ฉด ๊ธฐ์กด์˜ ์Šค๋ ˆ๋“œ TCB๋ฅผ ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ์˜ TCB๋ฅผ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•œ๋‹ค.

img_17.png

ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ด€๋ จ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฒ˜๋ฆฌ(CPU ์บ์‹œ ์ดˆ๊ธฐํ™”, TLB ์ดˆ๊ธฐํ™”, MMU ์ฃผ์†Œ ์ฒด๊ณ„ ์ˆ˜์ • ๋“ฑ)๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ด€๋ จ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ์—†์–ด ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ž‘์•„์„œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋น ๋ฅด๋‹ค.

  • ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์€ ํฌ๋‹ค. ๋งŽ์€ ์ˆ˜์˜ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋นˆ๋ฒˆํ•œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์œผ๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.


์ด์ „ โ†ฉ๏ธ - ์šด์˜ ์ฒด์ œ ๊ธฐ๋ณธ ์ง€์‹ - ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ

๋ฉ”์ธ โซ

๋‹ค์Œ โ†ช๏ธ - ์šด์˜ ์ฒด์ œ ๊ธฐ๋ณธ ์ง€์‹ - CPU & I/O Bound

Last updated