[CS/OS] 인터럽트란?(Interrupt)

Intro

인터럽트에 대해 정리한다.

인터럽트(Interrupt)

인터럽트란, 프로세스 실행 도중 예기치 않은 상황이 발생할 때 발생한 상황을 처리한 후 실행 중인 작업으로 복귀하는 것을 말한다. 부가적으로 설명하자면 인터럽트는 CPU가 프로그램 실행할 때 입출력이나 하드웨어 장치에 대한 예외상황이 발생하여 처리가 필요할 경우 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 의미한다.

인터럽트 종류

  1. 내부 인터럽트(비동기 인터럽트)
    • 하드웨어 고장, 실행할 수 없는 명령어, 명령어 실행 오류, 권한 위배
  2. 외부 인터럽트(동기 인터럽트)
    • 입출력장치에 의해 발생.

인터럽트 처리과정

  1. 명령어 사이클(인출 & 실행)을 반복하여 수행한다.
  2. 인터럽트가 만약 요청이 들어오면 바로 처리하는 것이 아니라 명령어의 N의 실행 단계를 마쳐야 한다.(즉, 인출하기 전에 항상 인터럽트 여부를 확인한다.)
  3. 인터럽트 플래그를 통해서 인터럽트를 받아들일 수 있는지 여부를 확인한다.
  4. 받아들일 수 있으면 CPU는 지금까지의 작업을 백업 한다
  5. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행한다.
  6. 루틴 실행 후 백업한 작업을 복구하여 실행 재개.

인터럽트 구성요소

  1. 인터럽트 플래그
    • 2진수 형태로 인터럽트를 받아들일 수 있는지를 판별.
    • 받아들일 수 있으면 인터럽트 승인
    • 모든 인터럽트를 막을 수 없다.
  2. 인터럽트 서비스 루틴
    • 인터럽트 발생 시 해당 인터럽트를 어떻게 처리하기 위한 프로그램.
    • 메모리에 저장된다.(프로그램이기 때문.)
  3. 인터럽트 벡터
    • 인터럽트를 구분하기 위한 정보
    • 인터럽트의 시작 주소는 벡터를 통해 알 수 있다.