인터럽트란 하드웨어 장치가 CPU에게 어떠한 이벤트를 전달하거나 어떠한 수행을 요구할 때에 CPU의 인터럽트 라인을 세팅하여 발생시킨다.
CPU는 PC(Program Counter)가 가리키고 있는 작업을 계속해서 수행하는데, 이렇게 다음 작업을 수행하기 전에 인터럽트 라인을 확인하여 인터럽트가 들어왔는지 확인한다.
이때 인터럽트 라인이 세팅되어 있을 경우, CPU는 수행 중이던 프로세스를 멈추고, OS의 인터럽트 처리 루틴으로 이동하여 인터럽트를 처리한다.
일반적인 인터럽트로, 하드웨어 컨트롤러가 CPU의 서비스를 요청하기 위해 발생시키는 인터럽트이다.
그림과 같이 하드웨어 장치의 컨트롤러가 CPU로 인터럽트를 요청한다.
0으로 나누는 연산이나 주소 공간을 넘어 메모리를 참조하려는 등의 프로그램이 허용하지 않는 연산을 수행하려고 할 때, 자동적으로 발생한다. OS는 예외상황이 발생했을 때, CPU의 제어권을 획득하여 조치를 취한다.
예외상황에 대한 처리 루틴은 코드 영역에서 관리한다.
사용자 프로세스가 OS의 서비스를 요청하기 위해 커널의 함수를 호출하는 것으로, 사용자 프로세스가 직접 특권 명령을 수행할 수 없기 때문에 이를 OS에 요청하는 System Call을 사용한다.
(사용자 프로세스 - OS - 커널
의 구조를 가지기 때문에 사용자 프로세스는 커널의 함수를 직접적으로 호출할 수 없다. 커널은 OS에 의해 보호되고 있다고 생각할 수 있다.)
Exception이나 System Call 모두 사용자 프로세스가 CPU의 제어권을 OS에 넘겨주어 이를 OS가 처리한다. 이 과정에서 인터럽트 라인을 세팅하여 인터럽트를 발생시키고 난 후에 제어권이 넘어가기 때문에 이 역시 인터럽트 범주 안에 포함된다. 인터럽트의 발생 주체가 하드웨어라면 Hardware Interrupt가 되는 것이고, 소프트웨어라면 Software Interrupt가 되는 것이다.
인터럽트가 발생하면 CPU는 수행 중이던 프로세스를 중단하고 인터럽트를 처리하게 된다. 이때 프로세스의 수행 정보를 따로 저장해 두고, 인터럽트를 모두 처리하고 난 후에 그 지점부터 다시 프로세스를 수행한다.
프로세스의 수행 정보는 PCB(Process Controll Block)에 저장된다. PCB는 프로세스 하나 당 하나씩 할당되고, 해당 프로세스의 다양한 정보를 저장하고 있다. 이름 그대로 프로세스를 제어하는 블록이라고 할 수 있다.