CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어등의 장치나 예외상황이 발생하여 처리가 필요할 경우에
마이크로프로세서에게 알려 처리할 수 있도록 하는 것.
인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눈다.
하드웨어가 발생시키는 인터럽트
CPU가 아닌 다른 하드웨어 장치가 CPU에 어떤 사실을 알려주거나, CPU 서비스를 요청해야 할 경우 발생시킨다.
비동기 방식으로 작동한다.
소프트웨어가 발생시키는 인터럽트
인터럽트를 발생시키기위해 하드웨어/소프트웨어는 CPU내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
CPU는 매번 명령을 수행하기 전에 인터럽트 라인이 세팅되어 있는지를 검사한다.
동기화 방식으로 작동한다.
종류로는 system call, 예외상황(Exception) 발생등이 있다.
Process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.
System Call을 통해 인터럽트를 발생시킨다.간략하게 요약하면
CPU가 수행하는 명령에는 일반 명령과 특권 명령이 존재한다.
메모리에서 자료를 읽어오고, CPU에서 계산을 하는 등 명령이고, 모든 프로그램이 수행할 수 있는 명령이다.
보안이 필요한 명령이다. 입출력 장치, 타이머등의 장치를 접근하는 명령이다. 특권 명령은 항상 운영체제만이 수행가능하다.
운영체제는 하드웨어적인 보안을 유지하기 위해 기본적으로 두가지 operation을 지원한다.
운영체제가 cpu가 제어권을 가지고 명령을 수행하는 모드이다.
일반 명령과 특권 명령을 수행 가능하다.
일반 사용자 프로그램이 cpu 제어권을 가지고 명령을 수행하는 모드이다.
일반 명령만을 수행할 수 있다.
Process A가 명령 수행중에 디스크 입출력 명령을 읽은 경우이다.
사용자 프로그램은 입출력 장치에 접근하라는 명령을 수행할 수 없다.
user mode이기 때문이다.
이런 경우에 사용자 프로그램은 운영체제에 시스템 콜을 통해 특권 명령을 대신 수행해달라고 요청한다.
시스템 콜은 주소 공간 자체가 다른 곳(커널 영역)으로 이동해야하므로
프로그램이 CPU내부의 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이뤄진다.
시스템 콜은
커널 영역의 기능을사용자 모드가 사용 가능하게 한다.
즉 프로세스가 하드웨어에 직접 접근하여 필요한 기능을 사용할 수 있게 해준다.
CPU가 인터럽트 라인을 검사하고 인터럽트가 발생한 것을 감지하게 된다.
현재 수행중인 사용자 프로그램을 잠시 멈추고 CPU의 제어권을 운영체제에게 양도한다.(kernel mode)
그리고 이 때 하드웨어적으로 모드 비트가 1에서 0으로 자동으로 세팅되어 특권 명령을 수행할 수 있게 된다.


실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴(ISR)이라고 한다.
운영체제의 코드 영역에는 인터럽트 별로 처리해야 할 내용이 이미 프로그램 되어 있다.
인터럽트 발생시 처리해야 할 인터럽트 핸들러(ISR)의 주소를 인터럽트 별로 보관하고 있는 테이블이다.