[Operating System] 인터럽트

권영태·2025년 4월 16일

Operating System

목록 보기
4/20

인터럽트

프로세서가 어떤 작업을 수행 중(=어떤 프로세스를 실행 중)일 때, 하드웨어나 소프트웨어로부터 오는 비동기적 신호로, 커널 루틴을 트리거하는데 사용하는 신호를 말한다. 예를들어, 사용자가 키보드를 통해 키를 눌러 입력하거나 디스크에서 데이터가 준비되면 프로세서는 그 사실을 인지하고 즉시 해당 작업을 처리한다.

인터럽트 처리

하드웨어나 소프트웨어가 인터럽트를 발생시켜 프로세서에게 전달하면 프로세서는 이를 감지하여 유저 모드에서 커널 모드로 전환하고, 해당 프로세스의 커널 스택에는 PC, 레지스터 등 실행 정보를하고 PCB에는 프로세스의 상태 정보, 우선순위 등을 저장한다. 이후 프로세서는 고정된 위치에 존재하며 인터럽트 번호를 매핑시켜놓은 인터럽트 벡터(Interrupt Vector)를 통해서 발생된 인터럽트 번호와 매핑되는 인터럽트 서비스 루틴(ISR, Interrupt Service Routine)을 주소를 얻어 실행한다. ISR에서 인터럽트 작업을 완료한 후에는 원래 실행 중이던 프로세스 또는 준비 상태에 있는 새로운 프로세스를 실행시킨다.

동시에 N개의 인터럽트 처리

운영체제는 한 번에 한 개의 인터럽트만 처리할 수 있다.
인터럽트는 각 인터럽트에 따른 우선순위를 가집니다. 그래서 높은 우선순위를 가진 인터럽트를 먼저 처리하는 우선순위 기반 처리방식을 사용합니다.

  • 마스킹 방식: 현재 실행중인 인터럽트보다 우선순위가 낮은 인터럽트들을 비활성화 시켜서, 현재 또는 더 높은 우선순위의 인터럽트를 우선 처리시키는 방식이다. 컨텍스트 스위칭이 일어나지 않기 때문에 오버헤드가 거의 발생하지 않는다는 장점이 있지만, 마스킹 된 인터럽트가 무한정 대기가 일어날 수 있다는 단점이 있다.
  • 중첩 인터럽트 방식: 현재 처리중인 인터럽트의 우선순위보다 더 높은 우선순위의 인터럽트가 발생하면 현재 인터럽트의 정보를 스택에 저장시킨 후 더 높은 우선순위의 인터럽트를 먼저 처리하는 방식이다. 우선순위가 높은 인터럽트를 빠르게 처리할 수 있다는 장점이 있지만, 스택을 활용해 상태를 여러 번 저장하고 이를 복구하는 오버헤드가 발생하는 단점이 있다.

인터럽트의 유형

인터럽트는 크게 HW 인터럽트와 SW 인터럽트로 구분한다.

  • I/O 장치와 같은 하드웨어 장치에서 프로세서로 보내는 인터럽트로 키보드 입력이나 마우스 클릭이 HW 인터럽트의 대표적인 예시다.
  • 프로세스가 시스템 콜을 요청할 때 발생하는 인터럽트로 read(), write()가 SW 인터럽트의 대표적인 예시다.
    • read(), write()는 C 라이브러리 함수로, 실제로는 함수 내부에서 소프트웨어 인터럽트 명령어 등을 실행해 커널에 시스템 콜을 요청한다.

Polling 방식

인터럽트와 다르게 비동기적 신호가 오지 않고, 프로세서가 주기적으로 I/O 같은 장치들을 직접 확인해서 작업 완료 여부를 감지하는 방식이다. 인터럽트에 비해 구현 자체가 단순하지만, 프로세서가 주기적으로 장치를 확인해야해 비효율적인 방식이다.

학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.

profile
GitHub : https://github.com/dudxo

0개의 댓글