프로그램을 실행하는 도중에, 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것이다.
지금 수행중인 일보다 더 중요한 일(ex. 입출력, 우선순위연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다.
입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
전원 이상, 기계 착오, 외부 신호, 입출력
Trap이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
- Division by zero, Overflow/Underflow, 기타 Exception
프로그램 처리 중 명령의 요청에 의해 발생한 것 (SVC 인터럽트 : SuperVisor Call)
사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
소프트웨어 이용중 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 등의 동작이 수행된다.
인터럽트 백터(Interrupt vector) : 인터럽트가 발생했을 때, 그 인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 공간이다.
시나리오
주 프로그램이 실행되다가 인터럽트가 발생했다.
현재 수행 중인 프로그램을 멈추고, 상태 레지스터와 PC 등을 스택에 저장한 뒤에 인터럽트 서비스 루틴으로 간다.
-> 잠시 저장하는 이유는 인터럽트 서비스 루틴이 끝난 뒤 다시 원래 작업으로 돌아와야 하기 때문
만약 인터럽트가 없다면 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야 한다. (== 폴링(Polling))
폴링을 하는 시간에는 원래 하던 일에 집중할 수가 없게 되어 많은 기능을 제대로 수행하지 못하는 단점이 있었다.
컨트롤러가 입력을 받아들이는 방법(우선순위 판별방법)에는 두가지가 있다.
인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다.
속도가 빠른 장치에 높은 등급을 부여한다.
우선순위 변경이 쉽다.
많은 인터럽트가 있을 경우 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다.
회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다.
인터럽트를 요청할 수 있는 장치와 CPU사이에 장치번호를 식별할 수 있는 버스를 직렬/병렬로 연결한다.
인터럽트 벡터는 인터럽트를 발생한 장치가 분기할 곳에 대한 정보이다.
소프트웨어적인 방법에 비해 비경제적이다.
회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠르다.
하드웨어적인 방법은 아래 2가지로 나뉜다.
1) Daisy Chain
인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다.
2) 병렬(Parallel) 우선순위 부여 방식
인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다.
Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다.
반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다.
인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능하다. 따라서 실시간 대응이 필요할 때는 필수적인 기능이다.
즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법이다.