๋ค์ด๊ฐ๋ฉฐ
๋ฉด์ ์์ ๋ฐ์๋ ์ง๋ฌธ์ ๋ํด ์ ๋ฆฌํ๊ณ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ์๊ธฐ ์ํด ์์ฑํฉ๋๋ค.
์ 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 ์์ญ๋ง ๋ณ๊ฒฝ์ ์งํํ๋ฉด ๋ฉ๋๋ค.