์ปค๋๋ก์ ์ง์ ์ด ํ์ํ ์์ ์ 3๊ฐ์ง ์กด์ฌํ๋ค.
- Interrupt
- Trap (software interrupt)
- System Call
์ด ์ค์์ ์ธํฐ๋ฝํธ๊ฐ ์ด๋ป๊ฒ ์ปค๋ ์ฝ๋๋ก ๋ค์ด๊ฐ๊ณ ์ด๋ค ์ฒ๋ฆฌ๊ฐ ์ผ์ด๋๋์ง ์์๋ณด์.
์ธํฐ๋ฝํธ๋?
์ธํฐ๋ฝํธ๋ ๋น๋๊ธฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์ฃผ๋ณ์ฅ์น๋ก ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ปํ๋ค. ์ฌ๊ธฐ์ ๋น๋๊ธฐ๋ ์ด๋ฒคํธ๊ฐ ์ธ์ ์ผ์ด๋ ์ง ์ ์ ์๋ค๋ ๋ป์ธ๋ฐ, ์ด๋ ์ฐ๋ฆฌ๊ฐ ํค๋ณด๋๋ฅผ ์ธ์ ๋๋๋ฆด์ง ๋ชจ๋ฅด๋ ๊ฒ๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ์.
๋ฐ๋๋ก ๋๊ธฐ๋ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ์๊ฐ์ด ์ ํด์ ธ ์๋ค๋ ๋ป์ด๋ค.
์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ฅ ๋จผ์ PIC(Programmable Interrupt Controller)์ ์ ํธ๊ฐ ๋์ฐฉํ๋ค. PIC ์นฉ์ ๊ณง์ฅ CPU๋ก ์ ํธ๋ฅผ ์ ๋ฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์น๋ค.
์ด๋ Clock ์ธํฐ๋ฝํธ๋ง ๋ค๋ฅธ ์ธํฐ๋ฝํธ์ ๋ฌ๋ฆฌ PIC๋ฅผ ๊ฑฐ์น์ง ์๊ณ , ๋ฐ๋ก CPU๋ก ์ ํธ๋ฅผ ์ ๋ฌํ๋๋ฐ, ์ด๋ Clock ์ธํฐ๋ฝํธ๊ฐ ๊ต์ฅํ ์์ฃผ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ค์ CPU๋ ๋งค๋ฒ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ ์ง ํ์ธํ๋ค. ๋ง์ฝ ๋ฐ์ํ์ง ์์๋ค๋ฉด ๊ทธ๋๋ก ์ธ์คํธ๋ญ์ ์ ์คํํ์ง๋ง, ๋ฐ์ํ๋ค๋ฉด ์ธํฐ๋ฝํธ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
๋ง์ฝ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด, ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ ๊ณง์ฅ ์ปค๋ ๋ชจ๋๋ก ๋ฐ๊พผ๋ค. ๊ทธ๋ฆฌ๊ณค, ๋ ์ง์คํฐ ๊ฐ๋ค์ ์ปค๋ ์คํ์ ์ ์ฅํ๋๋ฐ, ๋ง์ฝ ์ด๋ฏธ ์ปค๋ ๋ชจ๋ ์ค์ ์๋ค๋ฉด ๊ตณ์ด Mode Change๋ฅผ ์งํํ์ง ์๋๋ค.
์ปค๋ ๋ชจ๋๋ก ๋ฐ๋ ์ดํ, ์ด์ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ(Interrupt Handler)๋ฅผ ์คํํ๋ค. ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ ๋๊ฐ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผฐ๋์ง ํ์ธํ๋ ์ญํ ์ ํ๋ค. ๋ง์ฝ, PIC ์ชฝ์์ ์ฐ๊ฒฐ๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด, PIC๊ฐ ํด๋น ์ธํฐ๋ฝํธ์ ๋ํ ๋ฒํธ๋ฅผ ๋ฐํํ๋ค.
์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ ํด๋น ๋ฒํธ๋ฅผ ๋ฐ์, IDT(Interrupt Descriptor Table) = IVT๋ผ๋ ํ ์ด๋ธ์ ๋ฑ๋ก๋ ํจ์๋ฅผ ์คํํ๋ค. ์ด ํจ์๋ ์ค์ ๋ก ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๊ฐ ๋๋ค. ๋ค๋ฅธ ๋ง๋ก Interrupt Service Routine(ISR)์ด๋ผ๊ณ ๋ ํ๋ค.
์ด์ ์ Time Slice๋ง๋ค, ์ปจํ ์คํธ ์ค์์น๊ฐ ์ผ์ด๋๋ค๋ ๊ฒ์ ๋ฐฐ์ด ์ ์ด ์๋ค. ์ด๋ Time Slice๋ฅผ ํ๋จํ๋ ๊ฒ๋ ์ฌ์ค, Clock Interrupt์ ์ํด ์ํ๋๋ค. Clock Interrupt๊ฐ ๊ฑธ๋ฆด ๋๋ง๋ค IDT์์ time_intr()ํจ์๋ฅผ ํธ์ถํ์ฌ count๊ฐ์ ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ํตํด 1ms๋ง๋ค count๊ฐ์ด 100์ด ๋ ๋๊น์ง ์ฆ๊ฐ์ํค๊ณ , 100๋ฒ์งธ๊ฐ ๋๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ฝํ ์คํธ ์ค์์น ํ ์ ์๋๋ก ํ๋ค.
์ 1ms๊น์ง ๋งค๋ฒ ์ปค๋๋ก ๋ค์ด๊ฐ์ผ ํ ๊น?
์ด์์ฒด์ ๋ก์จ, ๋ฏธ๋ค๋์๋ ์ปค๋์์์ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋๋ฐ, ๋ง์ฝ 100ms๋ง๋ค ์ปค๋๋ก ๋ค์ด๊ฐ๋ค๋ฉด, ๊ทธ ์ฌ์ด์๋ ํ์ธํ ์ ์๋ค. ์ฆ, ํ ๋ฒ ๋ค์ด๊ฐ๋ ์ด์์ฒด์ ์์ ํด์ผ ํ ๋ถ๊ฐ์ ์ธ ์ผ์ ์ฒ๋ฆฌํ๊ณ ๋์ค๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ๋ค์ด๊ฐ์ผ ํ๋ค.
์ธํฐ๋ฝํธ๊ฐ ์ฒ๋ฆฌ๋๋ ๋ถ๋ถ
์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์ฌ์ค ๋ ๋๋ถ์ด๋ค.
์๋ํ๋ฉด, ๊ธํ๊ฒ ์ฒ๋ฆฌ์ผ ํ ๋ถ๋ถ๊ณผ ๋์ค์ ๋ฏธ๋ค๋์๋ ์ข์ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋งค์ฐ ์ค์ํ ์ปค๋ ์์ ์ ์ํํ๋ ๋์ค์ ์ํ ์๊ฐ์ด ๊ธด ์ฅ์น ์ธํฐ๋ฝํธ๊ฐ ๊ฑธ๋ฆฐ๋ค๋ฉด ๊ต์ฅํ ์ํํ ์ํฉ์ด ๋ฐ์ํ ๊ฒ์ด๋ค.
๋ฐ๋ผ์, ISR์ ๊ธํ๊ฒ ๋นจ๋ฆฌ ํด์ผ ํ ์ผ์ ๋น ๋ฅด๊ฒ ์คํํ๊ณ , ๋ฏธ๋ค๋์๋ ์ข์ ๊ฒ์ ๋ค๋ก ๋ฏธ๋ฃฌ๋ค.
์ธํฐ๋ฝํธ ์ค๊ฐ์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด?
์ธํฐ๋ฝํธ ์ค๊ฐ์ ๋ค๋ฅธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋, ์ฆ์ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌํด์ผ ํ ๊ฒ์ ๋ฐ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋๋ฐ ์ด๋ ์๋์ ๊ฐ์ด nested interrupt ํํ๊ฐ ๋๋ค.
์ ๊ทธ๋ฆผ์์ ๋นจ๊ฐ ๋ถ๋ถ์ ์ดํด๋ณด์.
ํด๋น ๋ถ๋ถ์ ์ ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋์๊ฐ๊ธฐ ์ด์ ์ ์ํฉ์ด๋ค. ์ด๋ ๊ณง๋ฐ๋ก ์ ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๋์๊ฐ์ง ์๊ณ , ๋ถ๊ฐ์ ์ธ ์ผ์ ์ํํ๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ๋ถ๊ฐ์ ์ธ ์ผ์ด๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด๋ค.
- ๋ฏธ๋ค๋์ ์ธํฐ๋ฝํธ์ ๋ํ ์ฒ๋ฆฌ
- ์๋ก์ด ์๊ทธ๋์ด ์ค์ง ์์๋์ง ํ์ธ
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋์ฐฉํ์ง ์์๋ ์ง ๋ฑ ํ์ธ
Trap Hanlding
Trap์ด๋ ๋๊ธฐ์ ์ธ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์คํํ๋ค.
์๋ฅผ ๋ค์ด, 0์ผ๋ก ๋๋ ๊ฒฝ์ฐ Divide by Zero ์ค๋ฅ์ ๊ฐ์ ๊ฒ์ด๋, ์ ํจํ์ง ์์ Machine code, Sementation fault(ํ์ฉ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์), protection fault(์ฝ๊ธฐ๋ง ํ์ฉ๋๊ณ ์ธ ์๋ ์์ ๋ ์ฐ๋ ค๊ณ ํ ๊ฒฝ์ฐ), page fault(์คํํด์ผ ํ๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ)๋ฑ์ด ๋ ์ ์๋ค.
์ค์ํ ๊ฒ์ page fault๋ฅผ ์ ์ธํ๊ณ ๋ ์ ๋ถ ํ๋ก๊ทธ๋จ์ ์ค์ง์ํจ๋ค. ์ค์ง page fault๋ง์ด ํ๋ก๊ทธ๋จ์ ์ค์ง์ํค์ง ์๋๋ค.
์ํํธ์จ์ด ์ธํฐ๋ฝํธ์ด์ง๋ง, ์ธํฐ๋ฝํธ๋ฅผ ๊ฑฐ๋ ์ฃผ์ฒด๋ CPU์ด๋ค.
Trap์ด ๊ฑธ๋ฆฌ๋ฉด, ์ผ๋จ ํ๋ก์ธ์ค๋ฅผ ์ค๋จ์ํค๊ณ ์ปค๋๋ก ๋ค์ด๊ฐ์ผ ํ๋ค. ๋ฐ๋ผ์, ์ปค๋ ์คํ์ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํ๊ณ ๋๊ฐ์ด ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ฅผ ์คํ์ํค๋ฉฐ ISR ํจ์๋ฅผ ํตํด ์ธํฐ๋ฝํธ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ค.
System Call
System Call์ด๋ ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์๊ฒ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ ๋งํ๋ค.
์ด๋, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์ธ์๋ System call์ ๋ถ๋ฅด๋ ๊ฒฝ์ฐ๋ ๋ง๋ค.
์ ์ ํ๋ก๊ทธ๋จ์์๋ System Call์ด ๋ถ๋ฌ์ง๋ฉด, ์ฒ์์๋ ์ด์ ๋ธ๋ฆฌ ์ธ์คํธ๋ญ์ ์ ํตํด ๋ช ๋ น์ ์ํํ๋ค. ์ด๋ฌํ ์ด์ ๋ธ๋ฆฌ ์ธ์คํธ๋ญ์ ์ IDT์์์ _0x80_ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์์ ๊ฐ์ ์ํํ๋๋ก ํ๋๋ฐ, ์ฌ๊ธฐ์๋ system call ํจ์๊ฐ ์กด์ฌํ๋ค.
sys call table์ด ์กด์ฌํ๋ ์ด์ ๋ system call์ ์ข ๋ฅ๊ฐ ๊ต์ฅํ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
'๐ Knowledge > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ๋์คํฌ ์ค์ผ์ฅด๋ง(Disk Scheduling)์ ์ด๋ป๊ฒ ์ผ์ด๋ ๊น (0) | 2024.05.13 |
---|---|
[์ด์์ฒด์ ] I/O Control : Polling, Interrupt Driven I/O, DMA๋ฐฉ๋ฒ์ด๋? (0) | 2024.05.13 |
[์ด์์ฒด์ ] ์ /์ถ๋ ฅ ๊ด๋ฆฌ(I/O Management) (0) | 2024.05.06 |
[์ด์์ฒด์ ] ํ์ผ ์์คํ ์ฌ๋ก(Linux) (0) | 2024.05.05 |
[์ด์์ฒด์ ] ๋ฐ์ดํฐ ๋ธ๋ก(Data Block)์ ๊ด๋ฆฌ (0) | 2024.05.05 |