Interrupt(인터럽트)

하나의 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 하는데, 이 흐름 중 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업을 인터럽트라고 한다.

종류

  • 동기 인터럽트: CPU에 의해 발생하는 인터럽트, 명령어를 수행하는 도중 예상치 못한 상황이 발생할 경우 발생(= 예외)

    • 폴트: 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예

    • 트랩: 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외

    • 중단: 실행 중인 프로그램을 강제로 중단시킬 수 밖에 없는 심각한 오류가 발생한 경우

    • 소프트웨어 인터럽트: 시스템 호출이 발생한 경우

  • 비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트(= 하드웨어 인터럽트)

비동기 인터럽트 처리 순서

비동기 인터럽트 발생 시 입출력장치에서 CPU에 요청을 보내게 되는데, 그 절차는 다음과 같다.

  1. 입출력장치에서 인터럽트 요청 신호 전송

  2. CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부 확인

  3. CPU는 인터럽트 요청을 확인하고 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인

  4. 받아들일 수 있는 경우 CPU는 현재 실행 중인 작업을 중단하고 백업

  5. CPU는 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴 실행

  6. 인터럽트 서비스 루틴 실행이 종료되면 CPU는 백업된 작업을 복구하고 다시 실행(4번에서 백업한 작업 다시 진행)

  • 인터럽트 요청 신호: 인터럽트를 발생시키는 하드웨어 장치가 CPU에게 인터럽트가 발생했음을 알리는 신호

  • 인터럽트 플래그: CPU가 인터럽트를 받아들일 수 있는지 여부를 나타내는 플래그

  • 인터럽트 벡터: 인터럽트 서비스 루틴의 주소를 가지고 있는 테이블로, 인터럽트 서비스 루틴을 식별하기 위한 키 역할

  • 인터럽트 서비스 루틴: 인터럽트가 발생했을 때 실행되는 코드로, 인터럽트를 처리하기 위한 프로그램 역할

위 과정을 요약하면, 인터럽트 서비스 루틴을 실행하고, 본래 수행하던 작업으로 복귀하는 것으로 정리할 수 있다.

참고자료

Last updated