ํ์จ์ด ์์ง๋์ด์๊ฒ ์ธํฐ๋ฝํธ๋?
์๋ฒ ๋๋ ์์คํ ์์ CPU๋ ์ฃผ๋ณ ์ฅ์น(์ผ์, ๋ฒํผ, ํต์ ๋ชจ๋ ๋ฑ)์ ๋์์์ด ์ํธ์์ฉํฉ๋๋ค. ์ด๋ CPU๊ฐ ์ฃผ๋ณ ์ฅ์น์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ๊ณ์ ๊ธฐ๋ค๋ฆด ๊ฒ์ธ์ง, ์๋๋ฉด ๋ค๋ฅธ ์ผ์ ํ๋ค๊ฐ ์ ํธ๊ฐ ์์ ๋๋ง ๋ฐ์ํ ๊ฒ์ธ์ง๋ ์์คํ ์ ํจ์จ์ฑ์ ๊ฒฐ์ ์ง๋ ๋งค์ฐ ์ค์ํ ๋ฌธ์ ์ ๋๋ค.
์ธํฐ๋ฝํธ๋ ๋ง ๊ทธ๋๋ก CPU์ ์ ์์ ์ธ ์คํ ํ๋ฆ์ '๋ฐฉํด(Interrupt)'ํ์ฌ ๊ธด๊ธํ ์ผ์ ๋จผ์ ์ฒ๋ฆฌํ๊ฒ ๋ง๋๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ํ์จ์ด ์ฝ๋ฉ์ ์ ๋ฐ์ ์ธํฐ๋ฝํธ๋ฅผ ์ ์ ํ ์ค์ ํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋๋ค. ๋ณธ ํฌ์คํ ์์๋ ์ธํฐ๋ฝํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๋ด๋ถ ๋์ ๋ฉ์ปค๋์ฆ, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด ์ ์ฉ ์ ์ฃผ์์ฌํญ๊น์ง ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
1. ์ธํฐ๋ฝํธ(Interrupt) vs ํด๋ง(Polling)
์ธํฐ๋ฝํธ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ๋น๊ตํด์ผ ํ ๊ฐ๋ ์ด 'ํด๋ง'์ ๋๋ค.
1.1. ํด๋ง(Polling): ๋ฌดํ ๋๊ธฐ ๋ฐฉ์
ํด๋ง์ CPU๊ฐ ์ง์ ๋ฃจํ๋ฅผ ๋๋ฉฐ ์ฃผ๋ณ ์ฅ์น์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํ๋ ๋ฐฉ์์ ๋๋ค.
- ๋น์ : ํ๋ฐฐ๊ฐ ์ฌ ๋๊น์ง 5๋ถ๋ง๋ค ํ๊ด๋ฌธ์ ์ด์ด ํ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ๋จ์ : ์ํ๊ฐ ๋ณํ์ง ์์์์๋ CPU ์์์ ๊ณ์ ์๋ชจํ๋ฏ๋ก ์ ๋ ฅ ํจ์จ์ด ๋ฎ๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ๊ธฐ ์ด๋ ต์ต๋๋ค.
1.2. ์ธํฐ๋ฝํธ(Interrupt): ์ด๋ฒคํธ ์๋ฆผ ๋ฐฉ์
์ธํฐ๋ฝํธ๋ ์ฃผ๋ณ ์ฅ์น๊ฐ CPU์๊ฒ "๋ ๋ฐ์ดํฐ ์ค๋น๋์ด!"๋ผ๊ณ ์ ํธ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ ๋๋ค.
- ๋น์ : ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์ด์ธ์ข ์ ๋๋ฅผ ๋๊น์ง ๋ฐฉ์์ ๊ณต๋ถ(๋ค๋ฅธ ์์ )๋ฅผ ํ๋ค๊ฐ, ๋ฒจ์ด ์ธ๋ฆฌ๋ฉด ๋๊ฐ์ ํ๋ฐฐ๋ฅผ ๋ฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์ : CPU ํจ์จ๊ณผ ์๋ต ์๋๊ฐ ๋น์ฝ์ ์ผ๋ก ํฅ์๋ฉ๋๋ค.
2. ์ธํฐ๋ฝํธ์ ๋ด๋ถ ๋์ ๊ณผ์ (Step-by-Step)
CPU๊ฐ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ๋ฐ์์ ๋, ๋ด๋ถ์ ์ผ๋ก๋ ๋งค์ฐ ์ ๊ตํ ๊ณผ์ ์ด ์ผ์ด๋ฉ๋๋ค.
Step 1. ์ธํฐ๋ฝํธ ์์ฒญ(IRQ) ๋ฐ์
์ธ๋ถ ๋ฒํผ ํด๋ฆญ์ด๋ ํ์ด๋จธ ์๋ฃ ๋ฑ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํ๋์จ์ด ๋ผ์ธ์ ํตํด CPU์ ์ธํฐ๋ฝํธ ์์ฒญ ์ ํธ๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
Step 2. ์ปจํ ์คํธ ์ ์ฅ(Context Save)
CPU๋ ํ์ฌ ์ํ ์ค์ด๋ ์์ ์ผ๋ก ๋์ค์ ๋ค์ ๋์์์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ์ ๋ ์ง์คํฐ ๊ฐ(PC, ์ํ ๋ ์ง์คํฐ ๋ฑ)์ ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ์ ์์ ํ๊ฒ ์ ์ฅํฉ๋๋ค. ์ด๋ฅผ '์ปจํ ์คํธ ๋ฐฑ์ '์ด๋ผ๊ณ ํฉ๋๋ค.
Step 3. ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ(IVT) ์ฐธ์กฐ
CPU๋ ๋ฐ์ํ ์ธํฐ๋ฝํธ๊ฐ ์ด๋ค ์ข ๋ฅ์ธ์ง ํ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ์ ์๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ์ฐพ์๊ฐ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ํจ์์ ์ฃผ์(Pointer)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
Step 4. ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR) ์คํ
์ค์ ์ด๋ฒคํธ์ ๋์ํ๋ ์ฝ๋์ธ ISR์ด ์คํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด "๋ฒํผ์ด ๋๋ ธ์ผ๋ LED๋ฅผ ์ผ๋ผ"๋ ์ฝ๋๊ฐ ์ฌ๊ธฐ์ ์ํ๋ฉ๋๋ค.
Step 5. ์ปจํ ์คํธ ๋ณต์ ๋ฐ ๋ณต๊ท(Context Restore)
ISR์ด ์ข ๋ฃ๋๋ฉด ์คํ์ ์ ์ฅํด๋์๋ ์ด์ ๋ ์ง์คํฐ ๊ฐ๋ค์ ๋ค์ ๋ถ๋ฌ์ต๋๋ค. CPU๋ ๋ฐฉํด๋ฐ๊ธฐ ์ ์ ์์ ์ง์ ์ผ๋ก ๋์๊ฐ ์๋ฌด ์ผ๋ ์์๋ค๋ ๋ฏ์ด ์๋ ์์ ์ ์ด์ด๊ฐ๋๋ค.
3. ์ธํฐ๋ฝํธ์ ์ข ๋ฅ: ํ๋์จ์ด vs ์ํํธ์จ์ด
- ํ๋์จ์ด ์ธํฐ๋ฝํธ: ์ธ๋ถ ํ์ ์ ๊ธฐ ์ ํธ๊ฐ ๋ค์ด์ค๊ฑฐ๋(External), ํ์ด๋จธ/UART ๊ฐ์ ๋ด๋ถ ์ฃผ๋ณ ์ฅ์น์์ ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ์ ๋๋ค.
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ: ํ๋ก๊ทธ๋จ ์คํ ์ค ์์ธ ์ํฉ(0์ผ๋ก ๋๋๊ธฐ, ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ)์ด ๋ฐ์ํ๊ฑฐ๋, ์์คํ ์ฝ(System Call)์ ํธ์ถํ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํํ ํธ๋ฉ(Trap) ๋๋ ์์ธ(Exception)๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
4. ์ค๋ฌด ํ์จ์ด ๊ฐ๋ฐ ์ ๊ณ ๋ คํด์ผ ํ ํต์ฌ ํฌ์ธํธ
ํ์ฌ์์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ค์ ์์น์ ์งํค์ง ์์ผ๋ฉด ์์คํ ์ด ๋ฉ์ถ๊ฑฐ๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
4.1. ISR์ ์ต๋ํ ์งง๊ณ ๊ฐ๊ฒฐํ๊ฒ!
ISR์ด ์คํ๋๋ ๋์์๋ (์ฐ์ ์์์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง) ๋ค๋ฅธ ์ธํฐ๋ฝํธ๊ฐ ์ฐจ๋จ๋ ์ ์์ต๋๋ค. ISR ๋ด๋ถ์์ printf๋ฅผ ์ฐ๊ฑฐ๋ ๊ธด ๋ฃจํ๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ ๊ธ๋ฌผ์ ๋๋ค. ์ค์ํ ๋ฐ์ดํฐ๋ง ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋กํ๊ณ , ์ค์ ๋ณต์กํ ์ฒ๋ฆฌ๋ ๋ฉ์ธ ๋ฃจํ์์ ํ๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค.
4.2. ์ฌ์ง์ ์ฑ(Reentrancy)๊ณผ ์์์ฑ(Atomicity)
๋ฉ์ธ ๋ฃจํ์ ISR์ด ๊ฐ์ ๋ณ์๋ฅผ ๊ณต์ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด 32๋นํธ ๋ณ์๊ฐ์ ์ฝ๋ ๋์ค์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด ๊ฐ์ด ๋ณํด๋ฒ๋ฆฌ๋ฉด ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ธํฐ๋ฝํธ๋ฅผ ์ ์ ๋๊ฑฐ๋(Critical Section) volatile ํค์๋๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
4.3. ์ธํฐ๋ฝํธ ์ฐ์ ์์(Priority) ์ค๊ณ
์ฌ๋ฌ ์ธํฐ๋ฝํธ๊ฐ ๋์์ ํฐ์ง ๋ ๋ฌด์์ ๋จผ์ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๊ธด๊ธํ ์์ ์ฅ์น ์ธํฐ๋ฝํธ๋ ํต์ ์ธํฐ๋ฝํธ๋ณด๋ค ๋์ ์์๋ฅผ ์ฃผ์ด์ผ ํฉ๋๋ค.
ํ๋์จ์ด ์ ์ด์ ์ง์ ํ ์์
์ธํฐ๋ฝํธ๋ฅผ ์๋ฒฝํ ์ดํดํ๊ณ ์ ์ดํ ์ ์๊ฒ ๋๋ฉด, ์ฌ๋ฌ๋ถ์ ๋จ์ํ ์ฝ๋๋ฅผ ๋์ด ์์คํ ์ ์ฒด์ ํ๋ฆ์ ์ค๊ณํ๋ ํ์จ์ด ์์ง๋์ด๋ก ์ฑ์ฅํ๊ฒ ๋ฉ๋๋ค. ์ค๋ฌด ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ ์ํธ์ 'Interrupt Controller' ์น์ ์ ๊ฐ์ฅ ๋จผ์ ๋ถ์ํ๋ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ค์ ํฌ์คํ ์์๋ ์ธํฐ๋ฝํธ์ ์ฐฐ๋ก๊ถํฉ์ธ 'ํต์ ํ๋กํ ์ฝ(UART, I2C, SPI)'์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
'๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| GPU์ ๋์ ์๋ฆฌ (0) | 2026.05.07 |
|---|---|
| Git Branch์ ๋์ ์๋ฆฌ์ ํจ์จ์ ์ธ ํ์ ์ ๋ต (Git-flow) (1) | 2026.05.06 |
| CPU์ ๋์ ์๋ฆฌ (0) | 2026.05.06 |
| ๋ฐ๋์ฒด ์๋ฆฌ์ 8๋ ๊ณต์ (0) | 2026.05.02 |