๐ 6์ฅ. ์ ํ์ ์ง์ ์คํ ์๋ฆฌ
ํต์ฌ ์ฃผ์ : OS๊ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ง์ ์คํํ๋, ์ ํ๋ ๋ฐฉ์์ผ๋ก ์คํ์ํค๋ ์๋ฆฌ.
- 6.1 ์ ํ์ ์ง์ ์คํ:
CPU๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ง์ ์คํํ์ง๋ง, ์ ํ๋ ์ํฉ์์๋ง ์คํ๋๋๋ก ํ๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก๊ทธ๋จ์ด ์์คํ ์์์ ์ ๊ทผํ๋ ค ํ ๋๋ ์ปค๋๋ก ์ ํ๋์ด์ผ ํจ. - 6.2 ๋ฌธ์ ์ : ์ ํ๋ ์ฐ์ฐ:
์ผ๋ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ **ํน์ ๋ช ๋ น์ด(CPU ๋ช ๋ น์ด)**๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์: ์ ์ถ๋ ฅ ๋ช ๋ น์ด, privileged instruction ๋ฑ. - 6.3 ๋ฌธ์ ์ : ํ๋ก์ธ์ ๊ฐ ์ ํ:
ํ๋ก๊ทธ๋จ ์คํ ์ค ์์คํ ํธ์ถ(syscall)์ด๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ปค๋ ๋ชจ๋๋ก ์ ํํด์ผ ํ๋ค. - 6.4 ๋ณํ์ฑ ๊ฑฑ์ :
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ฉด ์์ ์ถฉ๋ ๋ฌธ์ ๊ฐ ๋ฐ์. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ณํ ์ ์ด๊ฐ ํ์.-> ๋ฝ(lock) ๊ธฐ๋ฒ - 6.5 ์์ฝ:
์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ง์ ์คํํ๋, ์ ์ด๊ถ์ ํญ์ OS์ ์์. ํต์ฌ์ ์ ํ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๊ฒ ์คํํ๋ค๋ ๊ฒ.
์ด์์ฒด์ ๋ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก CPU๋ฅผ ๊ฐ์ํํ์ง๋ง ์์คํ ์ ๋ํ ์ ์ด๋ฅผ ์์ง ์๋๋ค.
์ ์ด๊ถ์ ์์ง ์๊ธฐ ์ํด์ ํ๋์จ์ด์ ์ด์์ฒด์ ์ ์ง์์ด ํ์์ ์ด๋ค.
์ด์์ฒด์ ๋ ์์ ์ ํจ๊ณผ์ ์ผ๋ก ์ํํ๊ธฐ ์ํ์ฌ ํ๋์จ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ์ฌ์ฉํ๋ค
CPU ์๊ฐ์ ๋๋์ด ์
CPU๋ฅผ ๊ฐ์ํํ๊ธฐ ์ํด์ ์ด์์ฒด์ ๋ ์ฌ๋ฌ ์์ ๋ค์ด ๋์์ ์คํ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋๋ก ๋ฌผ๋ฆฌ์ ์ธ CPU๋ฅผ ๊ณต์ ํ๋ค
ํ ํ๋ก์ธ์ค๋ฅผ ์ ์ ๋์ ์คํํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๋ ์ ๊น ์คํํ๊ณ , ์ด๋ฐ ์์ผ๋ก ๊ณ์ํด์ ์ ๊น์ฉ ์คํ์ํค๋ฉด ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ฒ๋ผ CPU ์๊ฐ์ ๋๋์ด ์์ผ๋ก์จ ๊ฐ์ํ๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ด์์ฒด์ ์ ๋ชฉํ
์ ์ด๊ถ์ ์ ์งํ๋ฉด์ ์ฑ๋ฅ ์ ํ๊ฐ ์๋๋ก ํ๋ ๊ฒ
1) ์ฑ๋ฅ ์ ํ
์์คํ ์ ๊ณผ์คํ ์ค๋ฒํค๋๋ฅผ ์ฃผ์ง ์์ผ๋ฉด์ ๊ฐ์ํ๋ฅผ ๊ตฌํํ ์ ์์๊น?
2) ์ ์ด ๋ฌธ์
CPU์ ๋ํ ํต์ ๋ฅผ ์ ์งํ๋ฉด์ ํ๋ก์ธ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์คํ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ?
์ด์์ฒด์ ์ ์ ์ฅ: ์์ ๊ด๋ฆฌ์ ์ฑ ์์
์ด์์ฒด์ ๊ฐ ์ ์ด๊ถ์ ์์คํ๋ฉด, ํ๋ก์ธ์๋
- ์์ํ ์คํ์ ๊ณ์ํ ์ ์๊ณ
- ์ปดํจํฐ๋ฅผ ์ฅ์ ํ๊ฑฐ๋
- ์ ๊ทผํด์๋ ์ ๋๋ ์ ๋ณด์ ์ ๊ทผํ๊ฒ ๋๋ค
6.1 ์ ํ์ ์ง์ ์คํ: Limited Direct Execution
์ง์ ์คํ: ํ๋ก๊ทธ๋จ์ CPU ์์์ ๊ทธ๋ฅ ์ง์ ์คํ
์ง์ ์คํ์ ์ฅ์ : ๋น ๋ฅด๊ฒ ์คํ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ํ๋์จ์ด CPU ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.

์ด์์ฒด์ ๊ฐ ํ๋ก๊ทธ๋จ์ ์ง์ ์คํ ํ๋ ๋ฐฉ๋ฒ
- ํ๋ก์ธ์ค ๋ชฉ๋ก์ ํด๋น ํ๋ก์ธ์ค ํญ๋ชฉ์ ๋ง๋ค๊ณ
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ฉฐ
- ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๋์คํฌ์์ ํ์ฌํ๊ณ
- ์ง์ ์ (main)์ ์ฐพ์ ๊ทธ ์ง์ ์ผ๋ก ๋ถ๊ธฐํ์ฌ
- ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์ง์ ์คํ
CPU์์ ์ง์ ์คํ์ํค๋ฉด ์๋ก์ด ๋ฌธ์ ๊ฐ ๋ฐ์
1) ์ด์์ฒด์ ๊ฐ ์์น์๋ ํ๋ก์ธ์ค๋ฅผ ์ด๋ป๊ฒ ๋ง๋๊ฐ? ์ด๋ป๊ฒ ๋ณด์ฅํ ์ ์๋๊ฐ?
2) ํ๋ก์ธ์ค ์คํ ์, ์ด์์ฒด์ ๋ ์ด๋ป๊ฒ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ค๋จํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํ๋๊ฐ?
6.2 ๋ฌธ์ ์ : ์ ํ๋ ์ฐ์ฐ
ํ๋ก์ธ์ค๊ฐ ํน์ํ ์ข ๋ฅ์ ์ฐ์ฐ์ ์ํํ๊ธธ ์ํ๋ค๋ฉด?
- ๋์คํฌ ์ ์ถ๋ ฅ ์์ฒญ
- CPU ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์์คํ ์์์ ๋ํ ์ถ๊ฐํ ๋น ์์ฒญ
์) ํ์ผ์ ๋ํ ์ ๊ทผ์ ํ์ฉํ๊ธฐ ์ ์ ์ ๊ทผ ๊ถํ์ ๊ฒ์ฌํ๋ ํ์ผ ์์คํ ์ ๊ตฌํ
ํ๋ก์ธ์ค๊ฐ ๋์คํฌ์ ๋ํ์ฌ ์ ์ถ๋ ฅํ๋ ์ผ์ ์ ํํ์ง ์์ผ๋ฉด
ํ๋ก์ธ์ค๋ ์ ์ฒด ๋์คํฌ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๊ธฐ ๋๋ฌธ์ -> ์ ๊ทผ ๊ถํ์ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ์ด ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ค.
ํน์ ์ฐ์ฐ ์ ํ ํ๋ ๋ฐฉ๋ฒ: ๋ชจ๋์ ๋ถ๋ฆฌ
1) ์ฌ์ฉ์ ๋ชจ๋(user mode)
์ฌ์ฉ์ ๋ชจ๋์์ ์คํ๋๋ ์ฝ๋๋ ํ ์ ์๋ ์ผ์ด ์ ํ๋๋ค.
ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ์ ๋ชจ๋์์ ์คํ ์ค์ด๋ฉด -> ์ ์ถ๋ ฅ ์์ฒญ์ ํ ์ ์๋๋ก ์ค์ ํ๋ค.
์ ์ถ๋ ฅ ์์ฒญ์ ํ๋ฉด ํ๋ก์ธ์๊ฐ ์์ธ๋ฅผ ๋ฐ์์ํค๊ณ , ์ด์์ฒด์ ๋ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ ๊ฑฐํ๋ค
2) ์ปค๋ ๋ชจ๋(kernel mode)
์ฌ์ฉ์ ๋ชจ๋์ ๋๋น๋๋ ๋ชจ๋๋ก์ ์ด์์ฒด์ ์ ์ค์ํ ์ฝ๋๋ค์ด ์คํ๋๋ค.
์ด ๋ชจ๋์์ ์คํ๋๋ ์ฝ๋๋ ๋ชจ๋ ํน์ํ ๋ช ๋ น์ด๋ฅผ ํฌํจํ์ฌ ์ํ๋ ๋ชจ๋ ์์ ์ ์ํํ ์ ์๋ค.
์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ๋์คํฌ๋ฅผ ์ฝ๊ธฐ์ ๊ฐ์ ํน๊ถ ๋ช ๋ น์ด๋ฅผ ์คํํด์ผ ํ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ?
์ด๋ฐ ์ ํ ์์ ์ ์คํ์ ํ์ฉํ๊ธฐ ์ํ์ฌ ๊ฑฐ์ ๋ชจ๋ ํ๋ ํ๋์จ์ด๋ ์ฌ์ฉ์ ํ๋ก์ธ์ค์๊ฒ ์์คํ ์ฝ์ ์ ๊ณตํ๋ค
์ด์์ฒด์ ๋ ์๋ฐฑ ๊ฐ์ ์์คํ ์ฝ์ ์ ๊ณตํ๋ค
์์คํ ์ฝ
- ํ์ผ ์์คํ ์ ๊ทผ
- ํ๋ก ์ธ์ค ์์ฑ ๋ฐ ์ ๊ฑฐ
- ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ํต์
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น
ํ๋ก๊ทธ๋จ์ด ์์คํ ์ฝ์ ์คํํ๋๋ฒ : trap
1.trap
trap: ์ฌ์ฉ์ ๋ชจ๋ -> ์ปค๋ ๋ชจ๋๋ก ๋ณ๊ฒฝ
์ปค๋ ์์ผ๋ก ๋ถ๊ธฐ, ๋์์ ํน๊ถ ์์ค์ ์ปค๋ ๋ชจ๋๋ก ์ํฅ ์กฐ์ ํ๋ค.
์ปค๋ ๋ชจ๋๋ก ์ง์ ํ๋ฉด ์ด์์ฒด์ ๋ ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๊ณ ์ด๋ฅผ ํตํ์ฌ ํ๋ก์ธ์ค๊ฐ ์์ฒญํ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
2. ๊ฐ ํ๋ก์ธ์ค์ ์ปค๋ ์คํ(kernel stack) ์ ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ ๋ ์ง์คํฐ
- ํ๋๊ทธ ๋ ์ง์คํฐ
3. return-from-trap
์ปค๋ ๋ชจ๋ -> ์ฌ์ฉ์ ๋ชจ๋ ๋ก ๋ณ๊ฒฝ
์๋ฃ๋๋ฉด ์ด์์ฒด์ ๋ return-from-trap ํน์ ๋ช ๋ น์ด์ ํธ์ถ
ํน๊ถ ์์ค์ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ค์ ํํฅ ์กฐ์ ํ๋ฉด์ ํธ์ถํ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฆฌํดํ๋ค.
ํธ์ถํ ํ๋ก์ธ์ค์ ํ์ํ ๋ ์ง์คํฐ๋ค์ ์ ์ฅํด์ผ ํ๋ค.
์ด์์ฒด์ ๊ฐ return-from-trap ๋ช ๋ น์ด ์คํ ์
์ปค๋ ์คํ(kernel stack)์์ ํ (pop) -> ์ฌ์ฉ์ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ค์ ์์ํ๋ค
์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก ๋ฆฌํดํ๋ค
trap์ด ์ด์์ฒด์ ์ฝ๋์ ์ด๋๋ฅผ ์คํํ ์ง ์ด๋ป๊ฒ ์๋๋?
ํธ์ถํ ํ๋ก์ธ์ค๋ ๋ถ๊ธฐํ ์ฃผ์๋ฅผ ๋ช ์ํ ์ ์๋ค.
์ฃผ์๋ฅผ ๋ช ์ํ๋ค -> ์ปค๋ ๋ด๋ถ์ ์ํ๋ ์ง์ ์ ์ ๊ทผํ ์ ์๋ค
์ปค๋์ด ์์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ์ ๊ทผ ๊ถํ ๊ฒ์ฌ๊ฐ ๋๋ ํ ๋ถ๊ธฐํด์ผ ํ๋ค
์ปค๋์ ๋ถํ ์์ ํธ๋ฉ ํ ์ด๋ธ(trap table) ์ ๋ง๋ค๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ์์คํ ์ ํต์ ํ๋ค
์ปดํจํฐ๊ฐ ๋ถํธ๋ ๋๋ ์ปค๋ ๋ชจ๋์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ํ๋์จ์ด๋ฅผ ์ํ๋ ๋๋ก ์ ์ดํ ์ ์๋ค.
- ํ๋ ๋์คํฌ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด
- ํค๋ณด๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด
- ํ๋ก๊ทธ๋จ์ด ์์คํ ์ฝ์ ํธ์ถํ๋ฉด
์ด์์ฒด์ ๋ ํน์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์จ์ด์๊ฒ ํธ๋ฉ ํ ์ด๋ธ(trap table)์ ์์น๋ฅผ ์๋ ค์ค๋ค.
ํธ๋ฉ ํ ์ด๋ธ(trap table)์๋ ํ๋์จ์ด๋ ์ด๋ค ์์ ์ ํด์ผ ํ ์ง (์ฆ, ์ด๋ ์ฝ๋๋ก ๋ถ๊ธฐํ์ฌ ์คํํ ์ง) ์ ์ ์๋ค
์ด์์ฒด์ ๊ฐ ํ๋ ์ด๊ธฐ ์์ ์ค ํ๋๋ ํ๋์จ์ด์๊ฒ ์์ธ ์ฌ๊ฑด์ด ์ผ์ด๋ฌ์ ๋ ์ด๋ค ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ์ผ์ด๋ค.

ํ๋ก์ธ์ค๋ ์ปค๋ ์คํ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค.
ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ง์ ํ ๋
ํ๋์จ์ด์ ์ํด ํ๋ก๊ทธ๋จ ์นด์ดํฐ์ ๋ฒ์ฉ ๋ ์ง์คํฐ ๋ฑ์ ๋ ์ง์คํฐ๊ฐ ์ปคํธ ์คํ์ ์ ์ฅ๋๊ณ ๋ณต์๋๋ค.
1-1) ๋ถํ ์: ์ปค๋ ๋ชจ๋
์ปค๋์ ํธ๋ฉ ํ ์ด๋ธ์ ์ด๊ธฐํํ๊ณ CPU๋ ๋์ค์ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ํ ์ด๋ธ์ ์์น๋ฅผ ๊ธฐ์ตํ๋ค.
์ปค๋์ ์ด๋ฌํ ์์ ์ ์ปค๋ ๋ชจ๋์์๋ง ์ฌ์ฉํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ์ํํ๋ค
1-2) ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ : ์ปค๋ ๋ชจ๋
์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์ํ ๋ ธ๋๋ฅผ ํ ๋นํ์ฌ ํ๋ก์ธ์ค ๋ฆฌ์คํธ์ ์ฝ์
๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น
2) ํ๋์จ์ด(์ปค๋ ๋ชจ๋-> ์ฌ์ฉ์ ๋ชจ๋)
์ปค๋ ์คํ์ผ๋ก ๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ก ๋ ์ง์คํฐ ๋ณต์
์ฌ์ฉ์ ๋ชจ๋๋ก ์ด๋
3) ์ฌ์ฉ์ ๋ชจ๋: trap ์์คํ ์ฝ ํธ์ถ
CPU๋ฅผ ์ฌ์ฉ์ ๋ชจ๋๋ก ์ ํํ๊ณ ํ๋ก์ธ์ค ์คํ์ ์์
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํธ์ถํ๋ฉด ์ด์์ฒด์ ๋ก ๋ค์ trap: ์ฌ์ฉ์ ๋ชจ๋ -> ์ปค๋ ๋ชจ๋๋ก ๋ณ๊ฒฝ
4) ํ๋์จ์ด(์ฌ์ฉ์ ๋ชจ๋ -> ์ปค๋ ๋ชจ๋)
์ปค๋ ์คํ์ ๋ ์ง์คํฐ ์ ๋ณด ์ ์ฅ
trap ํธ๋ค๋ฌ๋ก ๋ถ๊ธฐ
5) ์ปค๋๋ชจ๋
์ด์์ฒด์ ๋ ์์คํ ์ฝ์ ์ฒ๋ฆฌ
return-from-trap ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์ ์ด๋ฅผ ํ๋ก์ธ์ค์๊ฒ ๋๊ธด๋ค.
6) ํ๋์จ์ด(์ปค๋ ๋ชจ๋-> ์ฌ์ฉ์ ๋ชจ๋)
์ปค๋ ์คํ์ผ๋ก ๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ก ๋ ์ง์คํฐ ๋ณต์
์ฌ์ฉ์ ๋ชจ๋๋ก ์ด๋
7) ์ฌ์ฉ์ ๋ชจ๋: ํ๋ก์ธ์ค ์ข ๋ฃ
ํ๋ก์ธ์ค๋ ์ดํ ์์ ์ ํ ์ผ์ ๋คํ๋ฉด main()์์ ๋ฆฌํดํ๋ค.
ํ๋ก์ธ์ค ์ข ๋ฃ์ํฌ ๋ exit() ->trap: ์ฌ์ฉ์ ๋ชจ๋ -> ์ปค๋ ๋ชจ๋๋ก ๋ณ๊ฒฝ
8) ์ปค๋ ๋ชจ๋
ํ๋ก์ธ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐํ
ํ๋ก์ธ์ ๋ชฉ๋ก ์ ๊ฑฐ
6.3 ๋ฌธ์ ์ : ํ๋ก์ธ์ ๊ฐ ์ ํ
์ด์์ฒด์ ๋ ์ด๋ป๊ฒ CPU๋ฅผ ๋ค์ ํ๋ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ ํํ ์ ์๋๊ฐ?
์ด์์ฒด์ ๋ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์คํํ ์ผ์ธ์ง, ๋ฉ์ถ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ผ์ธ์ง๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค.
CPU์์ ํ๋ก์ธ์ค๊ฐ ์คํ ์ค == ์ด์์ฒด์ ๋ ๋ฉ์ถฐ์๋ค.
1) ํ์กฐ ๋ฐฉ์ : ์์คํ ์ฝ ๊ธฐ๋ค๋ฆฌ๊ธฐ
2) ๋นํ์กฐ ๋ฐฉ์ : ์ด์์ฒด์ ๊ฐ ์ ๊ถ์ ํ์ฌ
ํ์กฐ ๋ฐฉ์ : ์์คํ ์ฝ ๊ธฐ๋ค๋ฆฌ๊ธฐ(yield ์์คํ ์ฝ)
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ค์ด ํฉ๋ฆฌ์ ์ผ๋ก ํ๋ํ ๊ฒ์ผ๋ก ์ ๋ขฐํ๋ค.
์ด์์ฒด์ ๊ฐ ๋ค๋ฅธ ์์ ์ ์คํํ ๊ฒฐ์ ์ ํ ์ ์๋๋ก,
์ค๋ซ๋์ ์คํํ ๊ฐ๋ฅ์ฑ์ด ์๋ ํ๋ก์ธ์ค๊ฐ์ฃผ๊ธฐ์ ์ผ๋ก CPU๋ฅผ ํฌ๊ธฐํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
- ์์คํ ์ฝ์ด ํธ์ถ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค
- ๋ถ๋ฒ์ ์ธ ์ฐ์ฐ์ด ์ผ์ด๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค -> trap ํธ์ถ
- CPU์ ์ ์ด๊ถ์ ๋ค์ ํ๋ํ๋ค.
ํ๋ก์ธ์ค๋ ์ด๋ป๊ฒ CPU๋ฅผ ํฌ๊ธฐํ ์ ์์๊น?
ํ๋ก์ธ์ค๋ ์์ฃผ ์์คํ ์ฝ์ ํธ์ถํ์ฌ CPU์ ์ ์ด๊ถ์ ์ด์์ฒด์ ์๊ฒ ๋๊ฒจ์ค๋ค.
yield ์์คํ ์ฝ: ์ด์์ฒด์ ์๊ฒ ์ ์ด๋ฅผ ๋๊ฒจ ์ด์์ฒด์ ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ค.
์ค๋ ๊ฑธ๋ฆฌ๋ ํ๋ก์ธ์ค ์์
- ํ์ผ์ ์ด๊ณ ์ฝ๋ ์์
- ๋ค๋ฅธ ์ปดํจํฐ์๊ฒ ๋ฉ์์ง๋ฅผ ์ก์
- ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑ
๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฒ์ ์ผ๋ก ์ ๊ทผํ๊ฑฐ๋ ๋ถ๋ฒ์ ์ธ ๋ช ๋ น์ด๋ฅผ ์คํํ ๋ ์ด์์ฒด์ ๊ฐ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
์์ฉ ํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ธ ํ์๋ฅผ ํ๊ฒ ๋๋ฉด ์ด์์ฒด์ ์๊ฒ ์ ์ด๊ฐ ๋์ด๊ฐ๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด
- ์ด๋ค ์๋ฅผ 0์ผ๋ก ๋๋๋ ์ฐ์ฐ์ ์คํํ๊ฑฐ๋
- ์ ๊ทผํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด
์ด์์ฒด์ ๋ก์ trap: ์ฌ์ฉ์ ๋ชจ๋ -> ์ปค๋ ๋ชจ๋๋ก ๋ณ๊ฒฝ
์ด์์ฒด์ ๋ ๋ค์ CPU๋ฅผ ํ๋ํ์ฌ ํด๋น ํ์๋ฅผ ํ๋ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ ์ ์๋ค.
๋นํ์กฐ ๋ฐฉ์ : ์ด์์ฒด์ ๊ฐ ์ ๊ถ์ ํ์ฌ -> ํ์ด๋จธ ์ธํฐ๋ฝํธ(timer interrupt)
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํธ์ถํ๊ธฐ๋ฅผ ๊ฑฐ๋ถํ๊ฑฐ๋
์ค์๋ก ํธ์ถํ์ง ์์ ์ด์์ฒด์ ์๊ฒ ์ ์ด๋ฅผ ๋๊ธฐ์ง ์์ ๊ฒฝ์ฐ
ํ๋์จ์ด์ ์ถ๊ฐ์ ์ธ ๋์ ์์ด๋ ์ด์์ฒด์ ๊ฐ ํ ์ ์๋ ์ผ์ ๊ฑฐ์ ์๋ค.
ํ์ด๋จธ ์ธํฐ๋ฝํธ(timer interrupt)
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ํ์ฌ ์ํ ์ค์ธ ํ๋ก์ธ์ค๋ ์ค๋จ๋๊ณ
๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ ์ด์ ์ฒด์ ์ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ(interrupt handler)๊ฐ ์คํ๋๋ค.
์ด์์ฒด์ ๋ CPU ์ ์ด๊ถ์ ๋ค์ ์ป๊ฒ ๋๊ณ ์์ ์ด ์ํ๋ ์ผ์ ํ ์ ์๋ค.
ํ์ฌ์ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํค๋ ์์ ๋ฑ์ด ํด๋น๋๋ค.
๋ถํ ๊ณผ์ ์งํ ์ค์ ์ด์์ฒด์ ๋ ํ์ด๋จธ๋ฅผ ์์ํ๋ค.
ํ์ด๋จธ๊ฐ ์์๋๋ฉด ์ด์์ฒด์ ๋ ์์ ์๊ฒ ์ ์ด๊ฐ ๋์์ฌ ๊ฑฐ๋ผ๋ ๊ฒ์ ์๋ค.
๋ถ๋ด ์์ด ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค.
ํ์ด๋จธ๋ ํน์ ๋ช ๋ น์ด๋ฅผ ์ํํ์ฌ ๋ ์๋ ์๋ค.
์ธํฐ๋ฝํธ ๋ฐ์ ์ ํ๋์จ์ด ์ญํ
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ ์ค์ด๋ ํ๋ก๊ทธ๋จ์ ์ํ๋ฅผ ์ ์ฅ
return-from-trap ๋ช ๋ น์ด๊ฐ ํ๋ก๊ทธ๋จ์ ๋ค์ ์์ํ ์ ์๋๋ก ํด์ผ ํ๋ค.
๋ค์ํ ๋ ์ง์คํฐ๊ฐ ์ปค๋ ์คํ์ ์ ์ฅ๋๊ณ
return-from-trap ๋ช ๋ น์ด๋ฅผ ํตํ์ฌ ๋ณต์๋๋ค
1) ์ค์ผ์ค๋ฌ(scheduler)
ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์คํํ ์ง, ์๋๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํ ์ง๋ฅผ ๊ฒฐ์
2) ๋ฌธ๋งฅ ๊ตํ(context switch)
๋ค๋ฅธ ํ๋ก์ธ์๋ก ์ ํํ๊ธฐ

(1) ์ปค๋ ์คํ์ ์ ์ฅ
์ด์์ฒด์ ๋ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋ ์ง์คํฐ ๊ฐ์ ์ปค๋ ์คํ์ ์ ์ฅ
์ ์์ค ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ
- ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ๋ฒ์ฉ ๋ ์ง์คํฐ ์ ์ฅ
- PC ์ ์ฅ
- ํ์ฌ ์ปค๋ ์คํ ํฌ์ธํฐ ์ ์ฅ
(2) ์คํํ ํ๋ก์ธ์ ๋ฐ์ดํฐ ์ค๋น
์ด์์ฒด์ ๋ ๊ณง ์คํ๋ ํ๋ก์ธ์ค์ ์ปค๋ ์คํ์ผ๋ก๋ถํฐ ๋ ์ง์คํฐ ๊ฐ์ ๋ณต์
- ๊ณง ์คํ๋ ํ๋ก์ธ์ค ๋ฒ์ฉ ๋ ์ง์คํฐ
- ๊ณง ์คํ๋ ํ๋ก์ธ์ค PC๋ฅผ ๋ณต์
- ์ปค๋ ์คํ์ ๊ณง ์คํ๋ ํ๋ก์ธ์ค์ ์ปค๋ ์คํ์ผ๋ก ์ ํ
(3) context switch
์ด์์ฒด์ ๋ ์ธํฐ๋ฝํธ๋ ํ๋ก์ธ์ค ๋ฌธ๋งฅ์์ ์ ํ ์ฝ๋๋ฅผ ํธ์ถํ๊ณ , ์คํ๋ ํ๋ก์ธ์ค ๋ฌธ๋งฅ์ผ๋ก ๋ฆฌํดํ ์ ์๋ค
(4) return-from-trap ๋ช ๋ น์ด
์ด์์ฒด์ ๊ฐ ๋ง์ง๋ง์ผ๋ก return-from-trap ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด -> ์คํ๋ ํ๋ก์ธ์ค๊ฐ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๋ค.
๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋ฆฌํดํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ ์คํ์ ๋ค์ ์์

6.4 ๋ณํ์ฑ ๊ฑฑ์
๋ง์ฝ ์์คํ ์ฝ์ ์ฒ๋ฆฌํ๋ ๋์ค์ ํ์ด๋จธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ๋๊ฐ?
ํ๋์ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ ๋ ๋ค๋ฅธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ค ์ผ์ด ์๊ธฐ๋๊ฐ?
์ปค๋์์ ์ฒ๋ฆฌํ๊ธฐ ๋ ์ด๋ ค์์ง๋ ์์ ์๋๊ฐ?
๋ฝ(lock) ๊ธฐ๋ฒ
->ํด๊ฒฐ ๋ฐฉ๋ฒ: ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ์ธํฐ๋ฝํธ๋ฅผ ๋ถ๋ฅํ
6.5 ์์ฝ
CPU ์์ ์คํํ๊ณ ์ถ์ ํ๋ก๊ทธ๋จ์ ์คํ์ํจ๋ค.
์ด์์ฒด์ ๊ฐ CPU๋ฅผ ์ฌ์ฉํ์ง ๋ชปํด๋,
์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์์ ์ ์ ํํ ์ ์๋๋ก ํ๋์จ์ด๋ฅผ ์ ํ ํด์ผ ํ๋ค
ํน๋ณํ ์ฐ์ฐ์ ์ํํ ๋, ์ฆ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ๋ ์ ํ๊ฑฐ๋, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํด์ผ ํ ๋๋ง ์ด์์ฒด์ ๊ฐ ๊ฐ์ ํ๋ค.
1. ๋ถํ ํ ๋ ํธ๋ฉ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ ํ
2. ์ธํฐ๋ฝํธ ํ์ด๋จธ๋ฅผ ์์์ํด
3. ์ ํ๋ ๋ชจ๋์์๋ง ํ๋ก์ธ์ค๊ฐ ์คํ๋๋๋ก ํจ
'ํ์ต ๊ธฐ๋ก (Learning Logs) > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MQTT (0) | 2025.04.01 |
---|---|
7์ฅ ์ค์ผ์ฅด๋ง (0) | 2025.03.31 |
๊ฐ์ธ ์ฑํ , ๋จ์ฒด ์ฑํ : ํ ์ด๋ธ ์ค๊ณ์ Kafka ํ ํฝ ์ค๊ณ (0) | 2025.03.27 |
์ ๋ ฌ (0) | 2025.03.26 |
์์์ฑ (0) | 2025.03.25 |