
์ธํฐ๋ฝํธ(Interrupt)
- ์ปดํจํฐ ์์คํ ์์ CPU๊ฐ ์คํ ์ค์ธ ์์ ์ ์ผ์ ์ค์งํ๊ณ , ์ค์ํ ์์ ์ ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฐ์์ํค๋ ์ ํธ์ ๋๋ค.
- ์ธํฐ๋ฝํธ๋ ํ๋์จ์ด๋ ์ํํธ์จ์ด์์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด CPU์ ์ฃผ์๋ฅผ ๋์ด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ธํฐ๋ฝํธ์ ์ฃผ์ ๊ฐ๋
- ์์
์ค๋จ๊ณผ ์ฆ์ ์ฒ๋ฆฌ:
- ์ธํฐ๋ฝํธ๋ CPU๊ฐ ํ์ฌ ์ํ ์ค์ธ ์์ ์ ์ผ์ ์ค๋จํ๊ณ ์ฐ์ ์ ์ผ๋ก ๊ธด๊ธํ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํค๋ณด๋๋ฅผ ๋๋ฅผ ๋๋ง๋ค ๋ฐ์ํ๋ ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ํตํด, CPU๋ ํค๋ณด๋ ์ ๋ ฅ์ ์ฆ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ๋์จ์ด์ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ:
- ํ๋์จ์ด ์ธํฐ๋ฝํธ: ํค๋ณด๋ ์ ๋ ฅ, ๋ง์ฐ์ค ํด๋ฆญ, ๋คํธ์ํฌ ๋ฐ์ดํฐ ์์ , ํ์ด๋จธ ๋ฑ ํ๋์จ์ด ์ฅ์น์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๊ฐ CPU์ ์ฃผ์๋ฅผ ๋์ด์ผ ํ ๋ ๋ฐ์ํฉ๋๋ค.
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ: ํ๋ก๊ทธ๋จ์ด ์์ฒญํ ์์คํ ํธ์ถ ๋๋ ์๋ฌ ๋ฐ์ ์ ๋ฐ์ํ๋ฉฐ, ์๋ฅผ ๋ค์ด divide by zero์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ CPU๊ฐ ์ด๋ฅผ ์ธ์ํ๊ณ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ
์ด๋ธ:
- ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ์ฐธ์กฐํ์ฌ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ํธ๋ค๋ฌ(Interrupt Handler)์ ์ฃผ์๋ฅผ ์ฐพ์ต๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ๊ฐ ์ธํฐ๋ฝํธ ๋ฒํธ์ ๋ง๋ ํธ๋ค๋ฌ ์ฃผ์๋ฅผ ์ ์ฅํด ๋์ ํ ์ด๋ธ๋ก, ์์คํ ์ด๊ธฐํ ์ ์ค์ ๋ฉ๋๋ค.
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๊ณผ์ (์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด, ISR):
- ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด CPU๋ **์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR)**์ ํธ์ถํ์ฌ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ISR์ ๊ฐ ์ธํฐ๋ฝํธ์ ๋ง๋ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ฉฐ, ์ฒ๋ฆฌ ์๋ฃ ํ CPU๋ ๋ค์ ์๋ ์์ ์ผ๋ก ๋ณต๊ทํฉ๋๋ค.
์ธํฐ๋ฝํธ์ ๋์ ๊ณผ์
- ์ธํฐ๋ฝํธ ๋ฐ์:
- ํ๋์จ์ด๋ ์ํํธ์จ์ด๊ฐ ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ CPU์ ์ ๋ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋คํธ์ํฌ ์นด๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉด CPU์ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ํ์ฌ ์์
์ค๋จ ๋ฐ ์ํ ์ ์ฅ:
- CPU๋ ํ์ฌ ์คํ ์ค์ธ ์์ ์ ์ํ(๋ ์ง์คํฐ ๊ฐ, ํ๋ก๊ทธ๋จ ์นด์ดํฐ)๋ฅผ ์ ์ฅํ์ฌ, ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ํ ์๋ ์์ ์ผ๋ก ๋์์ฌ ์ ์๋๋ก ํฉ๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ
์ด๋ธ ์ฐธ์กฐ:
- CPU๋ ์ธํฐ๋ฝํธ ๋ฒํธ์ ๋ง๋ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR) ์ฃผ์๋ฅผ ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์์ ์ฐพ์ ISR์ ์คํํฉ๋๋ค.
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ:
- ISR์ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํค๋ณด๋ ์ ๋ ฅ์ด๋ผ๋ฉด ISR์ ์ ๋ ฅ๋ ํค๋ฅผ ์ฝ์ด์ต๋๋ค.
- ์ ์ฅ๋ ์ํ ๋ณต์ ๋ฐ ์์
๋ณต๊ท:
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด CPU๋ ์ ์ฅ๋ ์ํ๋ฅผ ๋ณต์ํ๊ณ , ์ค๋จํ๋ ์์ ์ ์ด์ด์ ์คํํฉ๋๋ค.
์ธํฐ๋ฝํธ์ ์ข ๋ฅ
- ํ๋์จ์ด ์ธํฐ๋ฝํธ
- ํค๋ณด๋, ๋ง์ฐ์ค, ๋คํธ์ํฌ ์นด๋, ํ๋ ๋๋ผ์ด๋ธ ๋ฑ ํ๋์จ์ด ์ฅ์น์์ ๋ฐ์ํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ฅ์น๊ฐ ์์ ์ ์๋ฃํ๊ฑฐ๋, ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์์ CPU์ ์๋ ค์ผ ํ ๋ ๋ฐ์ํฉ๋๋ค.
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- ํ๋ก๊ทธ๋จ์ ์ํด ๋ฐ์ํ๋ฉฐ, ์์คํ ํธ์ถ ๋๋ ์์ธ ์ํฉ์์ ์ฃผ๋ก ๋ฐ์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ํ์ผ์ ์ด๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ์์คํ ํธ์ถ, divide by zero์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํ์ด๋จธ ์ธํฐ๋ฝํธ
- ์ด์์ฒด์ ๊ฐ CPU ์๊ฐ์ ๊ฐ ํ๋ก์ธ์ค์ ํ ๋นํ๊ณ , ๋ค์ค ์์ ์ ๊ตฌํํ๊ธฐ ์ํด ์ผ์ ์ฃผ๊ธฐ๋ก ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ์ ๋๋ค.
- ํ์ด๋จธ ์ธํฐ๋ฝํธ๋ ์๋ถํ ์์คํ ์์ CPU ์ค์ผ์ค๋ง์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์ธํฐ๋ฝํธ์ ์ค์์ฑ
- ์ค์๊ฐ ์ฒ๋ฆฌ:
- ์ธํฐ๋ฝํธ๋ฅผ ํตํด CPU๋ ์ค์ํ ์์ ์ด ๋ฐ์ํ์ ๋ ์ด๋ฅผ ์ฆ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํค๋ณด๋ ์ ๋ ฅ์ ์ฆ์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
- CPU ํจ์จ์ฑ ํฅ์:
- CPU๋ ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํด ์์ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ , ํ์ํ ์์ ์ ์ฆ์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ๋๋ผ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด ์ธํฐ๋ฝํธ๋ก ์๋ ค์ค๋๋ค.
- ์์คํ
์์ ์ฑ:
- ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ํตํด ์ค๋ฅ๋ ์์ธ ์ํฉ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ฐ์ํ ๋ ์ด๋ฅผ ์ฆ์ ๊ฐ์งํ๊ณ ์ฒ๋ฆฌํจ์ผ๋ก์จ ์์คํ ์ถฉ๋์ ์๋ฐฉํ ์ ์์ต๋๋ค.
Extra 1
์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ(Interrupt Vector Table)
- ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ ํน์ ์ธํฐ๋ฝํธ ์์ฒญ(Interrupt Request, IRQ)์ ๋ํด ์ ์ ํ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(Interrupt Service Routine, ISR)์ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํ ์ด๋ธ์ ๋๋ค.
- ๊ฐ ์ธํฐ๋ฝํธ์๋ ๊ณ ์ ์ ๋ฒํธ(์ธํฐ๋ฝํธ ๋ฒกํฐ ๋ฒํธ)๊ฐ ํ ๋น๋๋ฉฐ, ํด๋น ๋ฒํธ์ ๋์๋๋ ISR์ ์์ ์ฃผ์๊ฐ ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค.
์ธํฐ๋ฝํธ ๋ฒกํฐ์ ์ฃผ์ ํน์ง
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ
์ด๋ธ (Interrupt Vector Table, IVT)
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ณ ์ ๋ ์์น์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก, ๊ฐ ์ํธ๋ฆฌ๋ ISR์ ์ฃผ์๋ฅผ ๊ฐ์ง๋๋ค.
- CPU๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ธํฐ๋ฝํธ ๋ฒํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ์ ์ฐธ์กฐํ์ฌ ISR์ ์คํํฉ๋๋ค.
- ๊ณ ์ ํฌ๊ธฐ
- ์ผ๋ฐ์ ์ผ๋ก, ๊ฐ ์ธํฐ๋ฝํธ ๋ฒกํฐ ์ํธ๋ฆฌ๋ ๋์ผํ ํฌ๊ธฐ(์: 4๋ฐ์ดํธ ๋๋ 8๋ฐ์ดํธ)๋ก ์ ์ฅ๋ฉ๋๋ค.
- ํ ์ด๋ธ ํฌ๊ธฐ๋ ์ง์๋๋ ์ธํฐ๋ฝํธ์ ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
- ์ด์์ฒด์ ๋ฐ ํ๋์จ์ด ์์กด
- ์ธํฐ๋ฝํธ ๋ฒกํฐ๋ ํ๋์จ์ด ๋ฐ ์ด์์ฒด์ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ฉ๋๋ค.
- x86 ์ํคํ ์ฒ์์๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ **IDT(Interrupt Descriptor Table)**๋ผ๊ณ ํฉ๋๋ค.
์ธํฐ๋ฝํธ ๋ฒกํฐ์ ๋์ ๊ณผ์
- ์ธํฐ๋ฝํธ ๋ฐ์
- ํ๋์จ์ด ๋๋ ์ํํธ์จ์ด๊ฐ CPU์ ์ธํฐ๋ฝํธ๋ฅผ ์์ฒญํฉ๋๋ค.
- ์ธํฐ๋ฝํธ๋ ์ธํฐ๋ฝํธ ์ปจํธ๋กค๋ฌ(์: PIC, APIC)์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฒกํฐ ๋ฒํธ ํ์ธ
- CPU๋ ์ธํฐ๋ฝํธ ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ์ธํฐ๋ฝํธ ๋ฒกํฐ ๋ฒํธ๋ฅผ ์์ ํฉ๋๋ค.
- ISR ์ฃผ์ ํ์ธ
- CPU๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ ๋ฒํธ๋ฅผ ์ฌ์ฉํด ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์์ ํด๋น ISR์ ์์ ์ฃผ์๋ฅผ ์ฐพ์ต๋๋ค.
- ISR ์คํ
- CPU๋ ํด๋น ISR๋ก ์ ํํ์ฌ ์ธํฐ๋ฝํธ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ณต๊ท
- ISR ์คํ์ด ์๋ฃ๋๋ฉด CPU๋ ์ด์ ์ํ๋ก ๋ณต๊ทํ์ฌ ์ค๋จ๋ ์์ ์ ์ด์ด๊ฐ๋๋ค.

์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ์ ๊ตฌ์กฐ
| ์ธํฐ๋ฝํธ ๋ฒํธ | ISR ์ฃผ์ (์ํธ๋ฆฌ ๊ฐ) |
| 0 | ISR_0 ์ฃผ์ (์: 0x00000010) |
| 1 | ISR_1 ์ฃผ์ (์: 0x00000020) |
| 2 | ISR_2 ์ฃผ์ (์: 0x00000030) |
| ... | ... |
| 255 | ISR_255 ์ฃผ์ (์: 0x0000FFF0) |
'๐ซ Krafton Jungle > PintOS Project2 _ User Programs' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Pintos] Project2_User Programs | ํ๋ก์ ํธ ์งํ ๋ฐฉํฅ ๋ฐ ์์ (3) | 2024.11.28 |
|---|---|
| [Pintos] Project02 _ User Programs | Keyword | Segmentation Fault (1) | 2024.11.28 |
| ์์ ๋ฐ ๋ณด์ ํ์ - rax register (1) | 2024.11.28 |
| ์์ ๋ฐ ๋ณด์ ํ์ - Atomic Operation (0) | 2024.11.28 |
| ์์ ๋ฐ ๋ณด์ ํ์ - File Descriptor (1) | 2024.11.28 |