본문 바로가기

CS

[CS] 인터럽트 총정리

 

매번 헷갈리는 운영체제의 실행 모드, 인터럽트, 스케줄링, 그리고 시스템 콜의 관계를 하나의 흐름으로 정리해보겠습니다.

 

1. 두 가지 실행 모드 (보호 체계)

운영체제는 시스템을 보호하기 위해 CPU 실행 권한을 나눕니다.

 

  • 사용자 모드 (User Mode): 일반 앱 실행. 하드웨어 직접 접근 불가.
  • 커널 모드 (Kernel Mode): OS 실행. 모든 자원 접근 및 제어 가능.
  • 전환 도구: 사용자 모드에서 커널 모드로 가기 위한 유일한 통로가 바로 인터럽트(Interrupt)입니다.

 

2. 인터럽트의 분류 (발생 원인과 시점)

인터럽트는 누가, 언제 일으키느냐에 따라 크게 두 축으로 나뉩니다.

 

분류 비동기 인터럽트 (Asynchronous) 동기 인터럽트 (Synchronous)
다른 이름 하드웨어 인터럽트 소프트웨어 인터럽트 (Trap/Exception)
주체 하드웨어 장치 (타이머, 디스크, 키보드) CPU 내부 (잘못된 명령어, 시스템 콜 호출)
특징 언제 터질지 모름 (외부 신호) 명령어를 실행하는 순간 발생 (예측 가능)
예시 타이머 인터럽트, I/O 완료 알림 시스템 , 0으로 나누기, 메모리 오류

 

3. 핵심 메커니즘: 시스템 콜 (System Call)

 

사용자 프로그램이 하드웨어 자원이 필요할 때 사용하는 공식 창구입니다.

 

  • 관계: 시스템 콜은 소프트웨어 인터럽트 메커니즘을 이용하여 구현됩니다.
  • 과정: read() 호출 → 소프트웨어 인터럽트 발생 → 커널 모드 전환 → OS가 대신 작업 → 사용자 모드 복귀

 

4. CPU 스케줄링과의 연결고리

스케줄링은 CPU 제어권이 커널 모드로 넘어갔을 때(즉, 인터럽트가 발생했을 때) 일어납니다.

 

  1. 타이머 인터럽트 (비동기/하드웨어):
    • 정해진 시간이 다 되면 하드웨어가 신호를 줌.
    • OS가 개입하여 강제로 현재 프로그램을 멈추고 다음 프로그램으로 교체 (선점형 스케줄링).
  2. I/O 요청 (동기/소프트웨어):
    • 프로그램이 시스템 콜로 I/O를 요청함.
    • 데이터가 올 때까지 기다려야 하므로, OS가 이 프로그램을 쉬게 하고 다른 프로그램을 실행함.
  3. I/O 완료 (비동기/하드웨어):
    • 하드웨어가 일을 다 끝냈다고 신호를 줌.
    • OS는 쉬고 있던 프로그램을 다시 실행 대기 큐(Ready Queue)에 올림.

 

5. 최종 요약 흐름도

사용자 프로그램 실행 (사용자 모드)

 ↓

인터럽트 발생 (타이머 시간 초과 혹은 시스템 콜 호출)

 ↓

커널 모드 전환 (CPU 제어권이 OS로 이동)

 ↓

OS 서비스 처리 혹은 스케줄링 수행 (Context Switching 발생 가능)

 ↓

사용자 모드 복귀 (새로운 혹은 기존 프로그램 실행)

 

 

이 일련의 과정이 초당 수백, 수천 번 반복되면서 우리가 여러 앱을 동시에 부드럽게 사용하는 것처럼 느끼게 됩니다.