운영체제에서 인터럽트는 CPU가 실행 중이던 작업을 일시 중단하고, 더 긴급한 작업(이벤트) 을 처리하기 위해 제어를 넘기는 메커니즘이다. 하드웨어 또는 소프트웨어가 CPU에게 "잠깐 나 좀 봐줘!"라고 외치는 신호라고 생각하면 된다.

| 구분 | 설명 | 예시 |
|---|---|---|
| 하드웨어 인터럽트 | 외부 장치가 CPU에게 요청하는 인터럽트 | 키보드 입력, 디스크 입출력 완료 등 |
| 소프트웨어 인터럽트 | CPU 내부에서 발생하는 인터럽트 | 시스템 콜, 0으로 나누기, 페이지 폴트 등 |
| 타이머 인터럽트 | 일정 시간마다 발생 → 운영체제가 CPU 제어권을 주기적으로 회수 | 시분할 스케줄링, 문맥 교환 트리거 등 |
💡 소프트웨어 인터럽트는 시스템 콜을 포함한다. 사용자 모드에서 커널 모드로 전환하는 핵심 도구다.
| 비교 항목 | 인터럽트 | 폴링(Polling) |
|---|---|---|
| 처리 방식 | 이벤트 발생 시 CPU에 알려줌 (비동기) | CPU가 계속 장치 상태를 확인 (동기) |
| CPU 사용 효율 | 효율적 (필요할 때만 처리) | 비효율적 (계속 루프를 돌며 대기) |
| 구현 난이도 | 상대적으로 복잡 | 간단함 |
| 사용 예시 | 대부분의 현대 시스템 | 단순한 임베디드 시스템, 실시간 시스템 등 |
CPU는 인터럽트가 발생하면 IVT를 통해 해당 벡터를 찾고, 핸들러로 점프한다.
타이머 인터럽트 또는 I/O 인터럽트가 발생하면 커널은 현재 실행 중인 프로세스의 상태를 저장하고, 다른 프로세스로 전환하는 문맥 교환(context switch) 을 수행한다. 이 덕분에 여러 프로세스가 병렬로 실행되는 것처럼 보이게 된다.
운영체제는 중요한 임계 구역(critical section) 을 보호하기 위해, 다음과 같은 방법으로 인터럽트를 제어한다:
cli: 인터럽트 비활성화 (Clear Interrupt)sti: 인터럽트 활성화 (Set Interrupt)이때 long time disable 은 피해야 하며, 커널은 최대한 빠르게 인터럽트를 재허용해야 한다.
시스템 콜은 소프트웨어 인터럽트를 통해 커널 모드로 진입한다.
예) x86에서 int 0x80 또는 syscall 명령어를 사용하여 커널에 요청
| 단계 | 설명 |
|---|---|
| 사용자 프로그램 | read() 같은 시스템 콜 호출 |
| 소프트웨어 인터럽트 | int 0x80 등으로 커널 진입 |
| 커널 처리 | 시스템 콜 핸들러가 해당 요청 처리 |
| 복귀 | 결과를 반환하고 사용자 프로그램 복귀 |
| 키워드 | 설명 |
|---|---|
| 인터럽트 | CPU에 발생한 비동기적 이벤트를 처리하는 메커니즘 |
| 인터럽트 핸들러 | 인터럽트 발생 시 실행되는 함수 루틴 |
| 인터럽트 벡터 | 인터럽트 번호에 따라 핸들러 주소를 저장한 테이블 |
| 하드웨어 인터럽트 | 외부 장치의 요청 (I/O 등) |
| 소프트웨어 인터럽트 | 시스템 콜, 예외 처리 등 |
| 타이머 인터럽트 | 시분할 처리, 스케줄링의 핵심 |
| 인터럽트 제어 | cli, sti 명령어로 설정 |
인터럽트는 현대 운영체제에서 CPU 자원을 효율적으로 사용하고, 입출력 장치와의 연동을 가능하게 하는 핵심 개념이다. 단순히 중단시키는 것이 아니라, 스케줄링, 동기화, 커널 진입 등 다양한 메커니즘의 기반이 된다.