하드웨어 인터럽트

CPU 외부의 하드웨어 장치가 비동기적으로 CPU에 신호를 보내 현재 작업을 중단시키고 긴급한 이벤트를 처리하게 하는 메커니즘입니다.

핵심 특징

항목내용
발생 주체CPU 외부 하드웨어 장치 (키보드, 디스크, NIC 등)
동기/비동기비동기적 — 현재 실행 중인 프로그램과 무관하게 발생
전달 경로장치 → 인터럽트 컨트롤러(PIC/APIC) → CPU
의도성비의도적 — 프로그램이 요청한 것이 아님
처리 주체ISR (Interrupt Service Routine)

하드웨어 인터럽트 처리 흐름

① 하드웨어 장치에서 이벤트 발생 (예: 키보드 키 입력)
② 장치가 인터럽트 컨트롤러(PIC/APIC)에 IRQ 신호 전달
③ 인터럽트 컨트롤러가 우선순위 판단 후 CPU의 INTR 핀에 신호
④ CPU가 현재 명령어 실행 완료
⑤ CPU가 인터럽트 플래그(IF) 확인 — 비활성이면 무시
⑥ 현재 상태 저장 (PC, 레지스터, 플래그 → 스택)
⑦ IDT에서 IRQ 번호에 해당하는 ISR 주소 조회
⑧ 커널 모드로 전환 후 ISR 실행
⑨ ISR 완료 후 인터럽트 컨트롤러에 EOI(End of Interrupt) 전송
⑩ 상태 복원 후 원래 프로그램으로 복귀 (iret)

** IDT

  하드웨어 장치          인터럽트 컨트롤러          CPU
  ┌─────────┐         ┌──────────────┐       ┌──────────┐
  │ 키보드   │──IRQ1──→│              │       │          │
  │ 디스크   │──IRQ14─→│  PIC / APIC  │─INTR─→│  CPU     │
  │ NIC     │──IRQ11─→│  (우선순위    │       │  (IDT    │
  │ 타이머   │──IRQ0──→│   판단)      │       │   조회)  │
  └─────────┘         └──────────────┘       └──────────┘

IRQ (Interrupt Request) 번호

전통적인 x86 PIC 기준의 IRQ 할당입니다.

IRQ장치설명
0타이머 (PIT)프로세스 스케줄링, 시간 관리
1키보드키 입력 감지
2캐스케이드슬레이브 PIC 연결용
6플로피 디스크플로피 I/O (레거시)
8RTC실시간 시계
11NIC네트워크 패킷 수신
12PS/2 마우스마우스 입력
14Primary IDE하드디스크 I/O
15Secondary IDE보조 하드디스크 I/O

인터럽트 컨트롤러: PIC vs APIC

항목PIC (8259A)APIC
지원 IRQ 수15개 (마스터 8 + 슬레이브 8)수백 개 이상
멀티코어 지원불가가능 (각 코어에 Local APIC)
우선순위 관리고정 우선순위프로그래밍 가능
사용 환경레거시 시스템현대 멀티코어 시스템
[PIC 구조]                      [APIC 구조]
장치 → 슬레이브 PIC              장치 → I/O APIC
          ↓                              ↓
       마스터 PIC → CPU           Local APIC (코어0)
                                  Local APIC (코어1)
                                  Local APIC (코어2)
                                  Local APIC (코어3)

마스커블 vs 논마스커블 인터럽트

항목마스커블(Maskable)논마스커블(NMI)
비활성화 가능가능 (cli 명령)불가능
용도일반 I/O 장치치명적 오류
예시키보드, 디스크, NIC메모리 패리티 오류, 전원 이상
CPU 핀INTRNMI

인터럽트 처리 중 또 다른 인터럽트가 오면?

방식설명
인터럽트 비활성화ISR 실행 중 같은 레벨 인터럽트를 막음 (IF 플래그 클리어)
중첩 인터럽트더 높은 우선순위의 인터럽트는 현재 ISR을 선점 가능
ISR(IRQ1 - 키보드) 실행 중
    │
    ├── IRQ14(디스크, 높은 우선순위) 발생 → ISR 선점, 디스크 먼저 처리
    │
    └── IRQ12(마우스, 낮은 우선순위) 발생 → 대기, 키보드 ISR 완료 후 처리

Java에서 하드웨어 인터럽트가 발생하는 상황

// Java 코드 자체가 하드웨어 인터럽트를 발생시키는 것은 아니지만,
// 아래 작업들은 하드웨어 이벤트를 통해 완료 통보를 받음

// 1. 키보드 입력 → IRQ1 (키보드 인터럽트)
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();

// 2. 파일 읽기 → IRQ14 (디스크 인터럽트)
// DMA가 데이터 전송 완료 후 인터럽트로 CPU에 알림
byte[] data = Files.readAllBytes(Path.of("large_file.dat"));

// 3. 네트워크 수신 → IRQ11 (NIC 인터럽트)
ServerSocket server = new ServerSocket(8080);
Socket client = server.accept();  // 패킷 도착 시 NIC가 인터럽트 발생

// 4. Thread.sleep() → IRQ0 (타이머 인터럽트)
Thread.sleep(1000);  // 타이머 인터럽트로 시간 경과 감지

CSLOG에서 보기