배움과 기록의 장
[운영체제] 인터럽트(Interrupt) 본문
🚨 인터럽트(Interrupt)란?
시스템의 내부나 외부에서 예기치 못한 이벤트가 발생한 경우, 현재 CPU가 수행 중인 작업을 일시 중단하고 해당 이벤트를 먼저 처리하도록 신호를 보내는 메커니즘을 인터럽트라고 한다. 예를 들어, 키보드를 누르거나 네트워크 패킷이 도착했을 때 인터럽트를 통해 CPU에게 이를 알리는 것을 말한다.
인터럽트는 크게 '하드웨어 인터럽트'와 '소프트웨어 인터럽트'로 구분된다.
구분 | 하드웨어 인터럽트 (HW Interrupt) | 소프트웨어 인터럽트 (SW Interrupt) |
발생 원인 | 외부 장치 (키보드, 마우스, 타이머 등) | 프로그램 내부 (시스템 콜, 예외 발생 등) |
예시 | 디스크 I/O 완료, 타이머 알림 등 | int 0x80 호출, 0으로 나누기 등 |
목적 | 외부 이벤트 처리 | 시스템 서비스 요청, 예외 처리 |
🔁 인터럽트 처리 과정
1️⃣ CPU에서 프로그램A를 실행 중이다.
2️⃣ 하드웨어 또는 소프트웨어에서 이벤트(예: 키보드입력, 0으로 나누기 등)가 발생하여 CPU에 인터럽트 신호를 보낸다.
3️⃣ CPU는 현재 실행 중인 프로그램 A를 중단하고, 프로그램의 현재 상태를 PCB(Process Control Block)에 담아 메모리에 저장한다.
4️⃣ 인터럽트에 대응하는 인터럽트 핸들러를 실행한다. 이는 인터럽트 서비스 루틴(ISR: Interrupt Service Routine)이라고도 한다.
5️⃣ ISR 실행이 끝나면 저장해 두었던 상태를 복구한 후, 프로그램 A의 작업을 다시 이어서 수행한다.
🔸 PCB (Process Control Block)란?
: 프로세스의 상태 정보를 저장하는 자료구조로, 레지스터 값, 프로그램 카운터, 메모리 정보, 프로세스 상태 등이 포함된다. 현재 프로세스의 상태를 PCB에 저장하고, 다른 프로세스를 불러오는 과정을 '컨텍스트 스위칭(Context Switching)'이라고 한다.
✅ 동시에 여러 개의 인터럽트가 발생한다면 어떻게 처리할까?
인터럽트 처리 메커니즘은 운영 체제에 따라 동작 방식이 다를 수 있지만, 일반적으로 사용되는 방식은 다음과 같다.
- 우선순위 기반 처리
각 인터럽트에 우선순위(priority)를 부여하여 높은 우선순위의 인터럽트를 먼저 처리하고, 낮은 우선순위의 인터럽트는 대기하게 하는 방식이다. 중첩 인터럽트를 허용하는 경우, 우선순위가 높은 인터럽트가 실행 중일 때 더 높은 우선순위의 인터럽트가 발생하면 현재 ISR(인터럽트 서비스 루틴)을 중단하고 새로운 인터럽트를 처리한 후, 원래의 ISR로 돌아가서 실행을 계속한다. 보통 우선순위는 CPU나 운영체제가 정한다. - 인터럽트 마스킹
인터럽트 처리 중에 발생한 다른 인터럽트를 무시하거나 비활성화하여, 다른 인터럽트가 우선순위를 선점하지 못하도록 방지하는 방식이다. 이 방식은 인터럽트가 연속적으로 발생할 때, 다른 인터럽트가 제어를 가져가지 못하게 하여 우선 처리 중인 인터럽트를 완수할 수 있도록 보장한다. - 인터럽트 큐 동시에 발생한 인터럽트들을 큐에 저장하고 순서대로 처리한다.
🆚 Polling 방식이란?
인터럽트와는 반대되는 개념으로, CPU가 주기적으로 장치의 상태를 직접 확인하여 이벤트가 발생했는지 검사하는 방식이다. 장치의 상태 변화를 루프를 돌며 반복적으로 확인하거나 쿼리한다.
장점: 구조가 단순해 구현이 쉽고, 예측 가능하다.
단점: 이벤트가 발생하지 않더라도 계속해서 상태를 확인하므로 CPU 자원을 낭비하게 된다. 이러한 상태를 busy waiting이라고 하며, 상대적으로 응답속도가 느리고 비효율적이다.
📍 참고 자료
- CS 문제
https://github.com/VSFe/Tech-Interview.git
'cs study > 운영체제' 카테고리의 다른 글
[운영체제] 시스템 콜(System Call)이란? (0) | 2025.04.12 |
---|