๋“ค์–ด๊ฐ€๋ฉฐ

๋ฉด์ ‘์—์„œ ๋ฐ›์•˜๋˜ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ณ  ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์™œ Context Switching์ด ํ•„์š”ํ•œ๊ฐ€?

Computer๊ฐ€ ๋งค๋ฒˆ ํ•˜๋‚˜์˜ Task๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด?

  • ํ•ด๋‹น Task๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๋‹ค์Œ Task๋Š” ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.
  • ๋˜ํ•œ ๋ฐ˜์‘์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•˜๊ธฐ ์œ„ํ•ด์„ ?

  • Computer multitasking์„ ํ†ตํ•ด ๋น ๋ฅธ ๋ฐ˜์‘์†๋„๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น ๋ฅธ ์†๋„๋กœ Task๋ฅผ ๋ฐ”๊ฟ” ๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ์˜ ๋ˆˆ์œผ๋ก  ์‹ค์‹œ๊ฐ„์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋˜๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • CPU๊ฐ€ Task๋ฅผ ๋ฐ”๊ฟ” ๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Context Switching์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Context Switching์ด๋ž€?

  • ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” Task(Process, Thread)์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ์ง„ํ–‰ํ•  Task์˜ ์ƒํƒœ ๊ฐ’์„ ์ฝ์–ด ์ ์šฉํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ Context Switching์€ ์ง„ํ–‰๋ ๊นŒ์š”?

  • Task์˜ ๋Œ€๋ถ€๋ถ„ ์ •๋ณด๋Š” Register์— ์ €์žฅ๋˜๊ณ  PCB(Process Control Block)๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” Task์˜ PCB ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (Process Stack, Ready Queue)
  • ๋‹ค์Œ ์‹คํ–‰ํ•  Task์˜ PCB ์ •๋ณด๋ฅผ ์ฝ์–ด Register์— ์ ์žฌํ•˜๊ณ  CPU๊ฐ€ ์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ ๊ณผ์ •์„ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PCB(Process Control block) ๊ตฌ์กฐ

  • Process State : ํ”„๋กœ์„ธ์Šค ์ƒํƒœ(Create, Ready, Running, waiting, terminated)
  • Process Counter : ๋‹ค์Œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๊ฐ’
  • CPU Registers: accumulator, index register, stack pointers, general purpose registers.

Example

  • i์— 10์„ ๋„ฃ๊ณ  Context Switching์„ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  20๋„ฃ๊ณ  Context Switching์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

  • yield()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ CPU๋ฅผ ์–‘๋ณดํ•˜์—ฌ Context Switching์ด ๋ฐœ์ƒํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

  • Context Switching์„ ์œ„ํ•ด PC, SP๊ฐ’์„ Stack์— ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ํ˜„์žฌ PC๊ฐ’๊ณผ SP๊ฐ’์„ System Call yield()๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • context Switching์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด PC๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ „์˜ Task์˜ PC๊ฐ’๊ณผ SP๊ฐ’์„ PCB์— ๋‹ด์•„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • Context ์ €์žฅ์„ ์™„๋ฃŒํ•œ ๋‹ค์Œ Process X๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • Process X๊ฐ€ ์ง„ํ–‰์ด ์™„๋ฃŒ๋˜๊ณ  ๋‹ค์‹œ Context Switch๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ด์ „ Process๋กœ ๋Œ์•„์˜ฌ ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

  • Stack์— ๋‹ด๊ธด PC, SP๋ฅผ ์ฝ์–ด ๋‹ค์‹œ CPU์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹ค์‹œ ๋Œ์•„์˜จ Context์ง€๋งŒ ๋‹ค์‹œ yield()๋ฅผ ๋ฐœ์ƒ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ๊ณผ์ •์„ ๋‹ค์‹œ ๋ฐ˜๋ณต์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Context Switching Cost

  • Context Switching์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉด ๋งŽ์€ Cost๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
    • Cache ์ดˆ๊ธฐํ™”
    • Memory Mapping ์ดˆ๊ธฐํ™”
    • Kernel์€ ํ•ญ์ƒ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ์˜ ์ ‘๊ทผ์„ ์œ„ํ•ด์„œ..)

Process vs Thread

  • Context Switching ๋น„์šฉ์€ Process๊ฐ€ Thread๋ณด๋‹ค ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.
    • Thread๋Š” Stack ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    • Context Switching ๋ฐœ์ƒ์‹œ Stack ์˜์—ญ๋งŒ ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Reference