Interrupt

인터럽트와 비동기 신호

인터럽트는 현재 실행을 잠시 멈추고 커널 handler로 제어를 넘긴다. 장치 완료, timer tick, 예외 처리가 모두 실행 흐름을 다시 조정한다.

01

현재 문맥을 저장한다

CPU는 실행 중이던 register와 위치를 보존해야 handler 이후 원래 흐름으로 돌아갈 수 있다.

02

원인을 식별한다

interrupt controller와 vector table을 통해 어떤 장치나 예외가 들어왔는지 구분한다.

03

후속 작업을 예약한다

handler는 짧게 끝내고 무거운 처리는 bottom half, tasklet, worker 같은 경로로 미룰 수 있다.

Async
외부 신호 키보드, 디스크, 네트워크 장치가 CPU 흐름과 무관하게 알린다.
polling 낭비를 줄인다.
Sync
명령 실행 결과 page fault, divide by zero처럼 현재 명령 때문에 발생한다.
exception이라고 부르는 경우가 많다.
Mask
일시 차단 중요 구간에서 특정 interrupt를 잠시 막을 수 있다.
너무 오래 막으면 지연이 커진다.
Preemption
스케줄링 계기 timer interrupt가 현재 프로세스를 멈추고 다른 실행 흐름으로 바꿀 기회를 만든다.
time slice와 연결된다.

원인 · 문맥 · 지연 점검

원인 인터럽트와 예외를 발생 시점과 원인 기준으로 구분할 수 있는가.
문맥 handler 진입 전후 어떤 CPU 상태를 보존해야 하는가.
지연 handler에서 오래 걸리는 일을 직접 처리하면 어떤 문제가 생기는가.

인터럽트 처리 순서

device raises IRQ -> CPU saves context -> kernel handler runs -> scheduler may run -> return