컴퓨터 시스템에서 하드웨어와 소프트웨어의 다양한 장치들이 원활하게 상호작용하기 위해서는 서로의 상태를 적절히 파악하고, 필요한 작업을 즉시 처리할 수 있는 메커니즘이 필요하다. 이때, 가장 중요한 역할을 하는 것이 인터럽트(Interrupt)이다.
이 글에서는 인터럽트의 정의와 종류, 그리고 구체적인 동작 방식에 대해 설명하며, 더불어 폴링과의 차이점도 함께 다루어볼 것이다. 이를 통해 시스템 내에서 인터럽트가 어떤 방식으로 작동하며, 왜 중요한지를 명확히 이해해보자.
OS는 서로 다른 일을 하는 수많은 하드웨어를 사용한다.
이런 장치들은 동기적으로 구동되는데, 이는 각각 동작이 완료될 때까지 기다려야 하므로 “아무것도 하지 않으면서 바쁜 상태”로 많은 시간을 소비하게 된다.
이때, 인터럽트를 사용하여 한 번에 하나의 명령만 수행할 수 있는 CPU의 한계를 보완할 수 있다.
CPU 코어 외부에서 발생한 이벤트를 전기적 신호로 CPU에 알리는 인터럽트
CPU 내부에서 발생하는 하드웨어적 예외 상황이나 오류로 인해 발생하는 인터럽트
프로그램 실행 중 특정 동작이나 시스템 호출에 의해 발생하는 인터럽트
💡 우선순위
정전·전원 이상 인터럽트 > 기계고장 인터럽트 > 외부 인터럽트 > 입출력 인터럽트 > 프로그램 검사 인터럽트 > SVC(SuperVisor Call)
요청 → 중단 → 보관 → 처리 → 재개
CPU에서 인터럽트가 발생했을 때 그 인터럽트를 처리하는 코드
실행 중이던 레지스터와 PC를 보관함으로써 CPU의 상태를 보존한다.
인터럽트가 핸들링이 완료되면 이전의 상태로 복귀된다.
인터럽트 요청이 발생했을 때, CPU는 인터럽트 소스가 무엇이며, 해당 인터럽트 ISR이 어디에 적재되어 있는지 확인해야 한다. 이때, CPU는 인터럽트 벡터를 활용한다.
🤔 인터럽트 vs 폴링
폴링(Polling)
CPU가 주기적으로 주변 장치나 시스템의 상태를 검사하여 이벤트 발생 여부를 확인하는 방법
cf) 인터럽트는 CPU에 이벤트를 알리는 신호비교 요약
- 인터럽트와 폴링 모두 외부 장치와 CPU 간의 상호작용을 통해 이벤트를 감지하고 처리하는 메커니즘으로, CPU 자원을 사용하여 장치의 상태를 확인하고 이에 대응하는 작업을 수행한다.
- 인터럽트는 이벤트가 발생했을 때 CPU가 즉시 처리하도록 하는 방식으로, 실시간성이 뛰어나고 자원 효율이 높으나, 복잡한 구현과 오버헤드가 있을 수 있다.
- 폴링은 CPU가 주기적으로 상태를 검사하여 이벤트를 처리하는 방식으로, 구현이 간단하고 제어가 용이하지만, 비효율적인 자원 사용과 실시간성이 부족하다.
컴퓨터 시스템에서 인터럽트는 보이지 않지만 굉장히 중요한 역할을 담당한다. 다양한 작업이 동시에 이루어지는 현대의 컴퓨팅 환경에서는, 예기치 않은 사건이나 중요한 요청이 발생할 때 시스템이 즉각적으로 대응할 수 있어야 한다. 이때, 인터럽트는 프로그램의 흐름을 중단시키고 필요한 작업을 우선 처리함으로써 시스템의 유연성과 효율성을 보장해준다.
오늘 배운 인터럽트 처리 메커니즘을 통해 컴퓨터가 복잡한 작업들을 어떻게 유연하게 관리하는지 다시금 깨달았다. 앞으로 개발을 할 때 이런 개념을 염두에 두고 시스템의 효율성과 반응성을 높이는 방법을 고민해봐야겠다는 생각이 들었다.
Reference