์๋ฌธ์ด ๋ ์ด์
Context Switch ๊ฐ๋ ์ ๋ํด ๊ณต๋ถํ๋ค๊ฐ ์๋์ ๋ด์ฉ์ ์ ํ๋ค.
User mode์์ Kernel mode๋ก ๊ฐ๋ ๊ฑด Context Switch๊ฐ ์๋์ ์ผ๋ก overhead๊ฐ ์ ์ ์์ ์ด๋ค. Context Switch ์์ด CPU ์ํ ์ ๋ณด ๋ฑ context์ ์ผ๋ถ๋ฅผ PCB(Process Control Block)์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค๋ง, Kernel mode์์ User mode๋ก ๊ฐ ๋ Context Switch ๋ฐ์ ์์๋ ๊ทธ ๋ถ๋ด์ด ํจ์ฌ ํฌ๋ค. Cache Memory๋ฅผ flush ํ ๋ overhead๊ฐ ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
์ Context Switch๊ฐ ๋ฐ์ํ ๋ overhead๊ฐ ํฐ ๊ฒ์ผ๊น?
Context Switch๋?
Context Switch(๋ฌธ๋งฅ ๊ตํ)๋ ์ด์ ์ฒด์ ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ CPU์์ ์คํ๋๋ ๋์ ๋ฐ์ํ๋ ์์ ์ด๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด, CPU๋ฅผ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋๊ฒจ์ฃผ๋ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋จ, ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ์ ์ผ์ด๋๋ ๋ชจ๋ ์ ํ์ Context Switch๋ผ๊ณ ํ์ง ์๋๋ค. ์ด๋๋ Context Switch ์์ด ๋ชจ๋ ์ ํ๋ง ์ผ์ด๋๋ค.
์ฌ๋ด์ด์ง๋ง, ์ด ๊ฐ๋
์ ์ดํดํ๊ธฐ ์ฌ์ด ์ด์ผ๊ธฐ๋ฅผ ํ๋ ํด๋ณด๊ฒ ๋ค. ๊ฐํน ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ์ค๊ฐ๋ ๋๋ด์ผ๋ก "์ ์์ฆ ์ผํ ๋ Context Switch๊ฐ ๋๋ฌด ๋ง์ด ์ผ์ด๋์ ์ ์ ์ด ์์ด์"๋ผ๊ณ ํ๋๋ฐ, ์ด ์๋ฏธ๊ฐ ๋ฐ๋ก ์ผํ๋ ์ค๊ฐ์ ์๋ค ๊ฐ๋ค ํ๋ ๊ฒฝ์ฐ(Context Switch)๊ฐ ๋ง์์ ์ ์ ์ด ์๋ค(Overhead)๋ ์๋ฏธ๋ค. (์ด์ ์๋ ์ฒด ํ๋ฉด์ ๋๋ด์ ํด๋ณด์)
overhead๊ฐ ํฐ ์ด์
Context Switch ๋ฐ์ ์, overhead๊ฐ ํฐ ์ด์ ๋ ์๋์ ๊ฐ์ด ์์ฝํด ๋ณผ ์ ์๋ค. ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ํด์ผ ํ ์ผ์ด ๋๋ฌด ๋ง์์ง๋ค๋ ๊ฒ์ด๋ค.
1. ๋ ์ง์คํฐ(register) ์ํ ์ ์ฅ ๋ฐ ๋ณต์
Context Switch๊ฐ ์ผ์ด๋๋ฉด ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ๋ ์ง์คํฐ์ ์ํ(ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์คํ ํฌ์ธํฐ ๋ฑ)๋ฅผ ์ ์ฅํ๊ณ , ๋ค์์ผ๋ก ์คํ๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ๋ ์ง์คํฐ ์ํ๋ฅผ ๋ณต์ํด์ผ ํ๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด ๋ค์์ ์คํ๋ ํ๋ก์ธ์ค๋ฅผ ์ํด ๋ ์ง์คํฐ๋ฅผ ์ค๋นํด ๋๊ณ '์ค๋น๋์์ต๋๋ค~ ์ด์ ์ค์ธ์~' ํ๋ฉฐ ๋ง์ดํด์ผ ํ๋ค๋ ๊ฒ.
2. ๋ฉ๋ชจ๋ฆฌ ์ํ ์ ํ
ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ ์ ์ฅํ๊ณ , ๋ค์์ผ๋ก ์คํ๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ ๋ก๋ํด์ผ ํ๋ค. ์ด๊ฒ์ ํ์ด์ง ํ ์ด๋ธ๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ตฌ์กฐ์ ์ ํ์ด ํฌํจ๋๋ฉฐ, ์์ฐ์ค๋ฝ๊ฒ overhead๊ฐ ์ปค์ง๊ธฐ ๋ง๋ จ์ด๋ค. ์ด ๋ํ ์ฝ๊ฒ ๋งํ์๋ฉด ๋ค์์ ์คํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ชจ์ ์ฌ ํ ์ด๋ธ ์ข์์ ๋ง๋ค์ด ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
3. ์บ์ ๋ฌดํจํ
CPU ์บ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ก ์ ํ๋ ๋๋ ๋ฌดํจํ๋์ด์ผ ํ๋ค. ์ด๋ '์บ์ ์ผ๊ด์ฑ'์ ์ ์งํ๊ธฐ ์ํ ์์ ์ผ๋ก overhead๋ฅผ ๋ฐ์์ํจ๋ค. ๊ตณ์ด ํ์ง ์์๋ ๋ ์ผ์, ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋ ๋๋ ํด์ผ ํ๋ ์ผ์ด๋ค.
4. ์ค์ผ์ค๋ง ๋น์ฉ
์ด๋ค ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๋ค์์ ์คํ๋ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค. ์ค์ผ์ค๋ง ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํ CPU ์๊ฐ๊ณผ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ค. ์ด ๋ํ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋์ง ์์์ ๋๋ ๊ตณ์ด ํ์ง ์์๋ ๋ ์ผ์ด๋ค.
5. ์
์ถ๋ ฅ ์์
ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ์ ์ถ๋ ฅ ์์ ์ ์ํ ์ค์ผ ๋, I/O(์ ์ถ๋ ฅ) ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๋ก ์ ํํ ์ ์๋ค. ์ ์ถ๋ ฅ ์์ ์ ์ํ ์ปค๋ ํธ์ถ ๋ฐ ์ ์ถ๋ ฅ ์ฅ์น์์ ์ํธ ์์ฉ๋ ์ค๋ฒํค๋๋ก ์์ฉํ ์ ์๋ค.
์์ฝํ์๋ฉด
Context Switch ๋ฐ์ ์, ์์ ๋ชจ๋ ์์ ๋ค์ ์ปค๋ ๋ชจ๋์์ ์ํ๋๋ฉฐ, ์ปค๋ ๋ชจ๋์ ์ฌ์ฉ์ ๋ชจ๋ ๊ฐ์ ์ ํ์ด ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํจ๋ค. ๋ฐ๋ผ์ context Switch๊ฐ ์์ฃผ ๋ฐ์ํ๋ฉด ์์คํ ์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฏ๋ก, ํจ์จ์ ์ธ ์ค์ผ์ค๋ง ๋ฐ ์ปจํ ์คํธ ์ค์์น ๊ด๋ฆฌ๊ฐ ์ค์ํ ๊ฒ์ด๋ค.
๐ References
- [์ดํ์ฌ์๋ํ๊ต] ๋ฐํจ๊ฒฝ: ์ด์์ฒด์ ๊ฐ์
- ๋ ๋ง์ ๋ด์ฉ์ด ๊ถ๊ธํ๋ค๋ฉด ๐ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ TIL
๋๊ธ