CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치나 또는 예외 상황이 발생하여 처리가 필요할 경우 CPU에 알려 처리하는 기술을 말한다.
인터럽트가 필요한 이유는 3가지 정도로 정리할 수 있다.
이전에 본 선점형 스케쥴러를 구현할 때 running 상태인 프로세스를 강제로 ready 상태로 변경하기 위해 interrupt가 필요한 것을 알 수 있다. 또한 IO Device와의 커뮤니케이션을 진행할 때에도 처리 완료 시 프로세스를 block 상태에서 ready 상태로 인터럽트를 통해 전환할 필요가 있다. 예외 상황이 발생한 경우에도 CPU가 해당 처리를 할 수 있도록 알려줘야 한다.
입출력 하드웨어 장치 이슈 발생
예외 발생
예외 처리
타이머 인터럽트(선점형 스케쥴러)
입출력 인터럽트
인터럽트는 크게 두가지로 나눌 수 있다.
주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용 시 발생하며 주로 프로그램 내부에서 발생하므로 소프트웨어 인터럽트라고도 한다.
주로 하드웨어에서 발생하는 이벤트로 하드웨어 인터럽트라고도 부른다.
시스템 콜도 일종의 인터럽트이며 시스템 콜을 실행하기 위해서 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행히켜야 한다. 아래는 시스템 콜 실제 코드이다.
일련의 과정을 보면 시스템 콜 인터럽트 명령을 호출하는 것은 다음과 같은 절차를 따른다.
위에서 본 것 같이 시스템 콜 인터럽트 명령 호출 시 모드가 전환되는 것을 알 수 있다. 모드 전환에 대한 개략적인 구조도는 다음과 같다.
인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있다.
리눅스 예시
인터럽트가 발생하는 일련의 과정을 다시 정리하면 다음과 같다.