[Computer Science][Operating System] ๐Ÿš€ ์ธํ„ฐ๋ŸฝํŠธ(Interrupt) ์ดํ•ดํ•˜๊ธฐ

๊น€์ƒ์šฑยท2024๋…„ 8์›” 11์ผ
post-thumbnail

์‹œ์Šคํ…œ ๋‚ด์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ž‘์—…์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ˆ˜ํ–‰ ์ค‘์ธ ์ผ๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ์ผ(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๋ฅผ ํฌํ•จํ•˜๋Š” ์†Œํ˜• ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ์นฉ) ์ž์ฒด๊ฐ€ ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋ณ€ํ™”๋ฅผ ์ฒดํฌํ•˜์—ฌ ๋ณ€ํ™” ์‹œ์—๋งŒ ์ผ์ •ํ•œ ๋™์ž‘์„ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • Daisy Chain: ์ธํ„ฐ๋ŸฝํŠธ๋“ค์ด ์ฒด์ธ์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ธํ„ฐ๋ŸฝํŠธ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋ณ‘๋ ฌ ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ: ๊ฐ ์ธํ„ฐ๋ŸฝํŠธ์— ๋Œ€ํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•ด ๋‘๊ณ , ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹์€ ํ•˜๋“œ์›จ์–ด๋กœ ์ง€์›์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ œ์•ฝ(์ฆ‰, 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)

0๊ฐœ์˜ ๋Œ“๊ธ€