
์์คํ ๋ด์์ ์ฐ์ ์์๊ฐ ๋์ ์์ ์ด ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ฌ ์งํ ์ค์ธ ์์ ์ ๋ฉ์ถ๊ณ ํด๋น ์์ ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ง๊ธ ์ํ ์ค์ธ ์ผ๋ณด๋ค ๋ ์ค์ํ ์ผ(ex. ์ ์ถ๋ ฅ, ์ฐ์ ์์ ์ฐ์ฐ ๋ฑ)์ด ๋ฐ์ํ๋ฉด ๊ทธ ์ผ์ ์ฒ๋ฆฌํ๊ณ ๋์ ํ๋ ์ผ์ ๊ณ์ํด์ผ ํฉ๋๋ค.
์ธํฐ๋ฝํธ๋ CPU์ ํจ์จ์ ์ธ ์์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ค์ํ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ธ๋ถ ๋ฐ ๋ด๋ถ ์ธํฐ๋ฝํธ๋ CPU์ ํ๋์จ์ด ์ ํธ์ ์ํด ๋ฐ์ํฉ๋๋ค.
์
์ถ๋ ฅ ์ฅ์น, ํ์ด๋ฐ ์ฅ์น, ์ ์ ๋ฑ ํ๋์จ์ด๊ฐ ์ ํธ๋ฅผ ๋ณด๋ด๋ ์ธ๋ถ์ ์ธ ์์ธ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
์: ์ ์ ์ด์, ๊ธฐ๊ณ ์ฐฉ์ค, ์ธ๋ถ ์ ํธ, ์
์ถ๋ ฅ
Trap์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, CPU ๋ด๋ถ์์ ๋ฐ์ํ๋ ์์ธ ์ํฉ์ ์ํด ๋ฐ์ํฉ๋๋ค. ์๋ชป๋ ๋ช
๋ น์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ฉฐ, ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ํ๋ ์ค๋ฅ๋ ์์ธ ์ํฉ(Exception Handling)์ ํฌํจํฉ๋๋ค.
์: 0์ผ๋ก ๋๋๊ธฐ, ์ค๋ฒํ๋ก์ฐ, ์๋ชป๋ ๋ช
๋ น์ด ์ฌ์ฉ
ํ๋ก๊ทธ๋จ ์ฒ๋ฆฌ ์ค ๋ช ๋ น์ ์์ฒญ์ ์ํด ๋ฐ์ํ ๊ฒ(SVC ์ธํฐ๋ฝํธ : Supervisor Call, ์์คํ ํธ์ถ์ด ๋ฐ์ํ ๋ ์ํํธ์จ์ด์ ์ผ๋ก ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ)์ ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์ด์์ฒด์ ์ ํน์ ์๋น์ค๋ฅผ ์์ฒญํ ๋ ๋ฐ์ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์์คํ ํธ์ถ(System Call : ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํธ์ถํ๋ ์ธํฐํ์ด์ค) ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
์: ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ํ์ผ์ ์ด๊ฑฐ๋ ๋ซ๊ธฐ ์ํด ์ด์์ฒด์ ์ ์๋น์ค๋ฅผ ์์ฒญํ ๋ ๋ฐ์ํ๋ ์ธํฐ๋ฝํธ์ ๋๋ค.
์ฃผ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด, ํ์ฌ ์ํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋ฉ์ถ๊ณ ์ํ ๋ ์ง์คํฐ์ PC(Program Counter) ๋ฑ์ ํ์ฌ ์ํ๋ฅผ ์คํ์ ์ ์ ์ ์ฅํฉ๋๋ค. CPU๋ ์ธํฐ๋ฝํธ ๋ฒกํฐ ํ ์ด๋ธ(Interrupt Vector Table)์ ์ฐธ์กฐํ์ฌ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR)์ ์คํํฉ๋๋ค. ISR์ ํด๋น ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ก, ์ ์ ์ ์ฅํ๋ ์ด์ ๋ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด์ด ๋๋ ๋ค ๋ค์ ์๋ ์์ ์ผ๋ก ๋์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ง์ฝ ์ธํฐ๋ฝํธ ๊ธฐ๋ฅ์ด ์์๋ค๋ฉด, CPU๊ฐ ์ธ๋ถ ์ฅ์น์ ํน์ ํ ์ด๋ค ์ผ์ ํ ์๊ธฐ๋ฅผ ์๊ธฐ ์ํด ๊ณ์ ์ฒดํฌํด์ผ ํ์ต๋๋ค(์ด๋ฅผ ํด๋ง(Polling)์ด๋ผ๊ณ ํฉ๋๋ค).
ํด๋ง์ ํ๋ ๋์์๋ CPU๊ฐ ์ง์์ ์ผ๋ก ์ฒดํฌ๋ฅผ ์ํด ํ ๋น๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์์ ๋ญ๋น๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฆ, CPU๊ฐ ์ธ๋ถ ์ฅ์น์ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ(์ฐ์ ์์ ํ๋ณ ๋ฐฉ๋ฒ)์๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ ํ์ ๊ฐ์ ๊ณ์ ์ฝ์ด ๋ณํ๋ฅผ ์์๋ด๋ ๋ฐฉ์์ ๋๋ค.
ํด๋ง ์์๋ ๋ฏธ๋ฆฌ ์ ํด์ง ์ฐ์ ์์(์ฆ, ์ค์ํ ์ฅ์น)์ ๋ฐ๋ผ ๊ฒฐ์ ๋์ด ๋์ ์ฐ์ ์์๋ถํฐ ๋จผ์ ํด๋งํ๊ณ ๋ฎ์ ์ฐ์ ์์๋ก ๋์ด๊ฐ๋๋ค. ๊ฐ ์ฅ์น์๋ ์ธํฐ๋ฝํธ ์์ฒญ ํ๋๊ทธ๋ค์ด ์์ด ์ด ํ๋๊ทธ๋ฅผ ํ์ธํด์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ํ๋๊ทธ๊ฐ ํ์ฑํ๋์ด ์๋์ง๋ฅผ ํ์ธํ๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด ๊ณผ์ ์ ํด๋ง ์ฃผ๊ธฐ๋ง๋ค ๋ฐ๋ณต๋ฉ๋๋ค.
์ธํฐ๋ฝํธ ์์ฒญ ํ๋๊ทธ๋ฅผ ์ฐจ๋ก๋ก ๋น๊ตํ์ฌ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์ธํฐ๋ฝํธ ์์์ ์ฐพ์ ์ด์ ๋ง๋ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด์ ์ํํฉ๋๋ค (ํ๋์จ์ด์ ๋นํด ์๋๊ฐ ๋๋ฆผ).
MCU(Microcontroller Unit : CPU๋ฅผ ํฌํจํ๋ ์ํ ์ปดํจํฐ ์์คํ ์นฉ) ์์ฒด๊ฐ ํ๋์จ์ด์ ์ผ๋ก ๋ณํ๋ฅผ ์ฒดํฌํ์ฌ ๋ณํ ์์๋ง ์ผ์ ํ ๋์์ ํ๋ ๋ฐฉ์์ ๋๋ค.
์ธํฐ๋ฝํธ ๋ฐฉ์์ ํ๋์จ์ด๋ก ์ง์์ ๋ฐ์์ผ ํ๋ ์ ์ฝ(์ฆ, MCU๊ฐ ์ธํฐ๋ฝํธ ๊ธฐ๋ฅ์ ์ง์ํด์ผ ํ๋ฉฐ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ๊ธฐ๋ฅ ํ์)์ด ์์ง๋ง, ํด๋ง์ ๋นํด ์ ์ํ๊ฒ ๋์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.(ํด๋ง์ ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์ฒดํฌํ์ง๋ง ์ธํฐ๋ฝํธ๋ ์ ํธ๋ฅผ ๋ฐ๋ ์๊ฐ ๋์) ๋ฐ๋ผ์ ์ค์๊ฐ ๋์์ด ํ์ํ ๋๋ ํ์์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ธํฐ๋ฝํธ๋ ๋ฐ์ ์๊ธฐ๋ฅผ ์์ธกํ๊ธฐ ํ๋ ๊ฒฝ์ฐ์ ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
[1] velog - Interrupt (์ธํฐ๋ฝํธ) (https://velog.io/@yuseogi0218/Interrupt-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8)
[2] ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ - [์ ๋ณด์ฒ๋ฆฌ][EC๊ตฌ์กฐ] 31. ์ธํฐ๋ฝํธ Interrupt - ๋ค์ด๋ฒ ๋ธ๋ก๊ทธ (https://m.blog.naver.com/syunjae21/222065512231)
[3] ๋ญ๊ฒ๋ญ๊ฒ ํด๋ผ์ฐ๋ - [์ด์์ฒด์ ] ์ธํฐ๋ฝํธ(Interrupt) (https://nice-engineer.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt)
[4] velog - ์ธํฐ๋ฝํธ(Interrupt) (https://velog.io/@hoyun7443/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt)