CPU가 프로그램을 실행하는 도중에 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것
운영체제는 CPU를 최대한 효율적으로 사용해야한다.
입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문에 CPU가 입출력 처리를 기다리며 쉬는데 연산 결과가 나올 때 까지 다른 일을 못하면 비효율적이다. 그래서 입출력 연산 결과가 나오는 동안에 CPU가 다른 작업을 수행하고 입출력 연산이 완료되면 CPU에게 알리는 것이 인터럽트다.
인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 cpu내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
cpu는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지를 검사한다.
하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생시킨다.
입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
ex) 전원 이상, 기계 착오, 외부 신호, 입출력
Trap이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
ex) 0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우 (Exception)
소프트웨어가 발생시키는 인터럽트이다. 소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅한다.
ex) 예외 상황, system call, 시분할 처리
process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.
만약 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 계속 체크를 해야 한다. (이를 폴링(Polling)이라고 한다)
ISR(Interrupt Service Routine, 인터럽트 핸들러)
실제 인터럽트를 처리하기 위한 루틴.
운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다.
인터럽트 벡터
인터럽드 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.
PCB(Process Control Block)
커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.
인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다.
(수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)
폴링 방식
사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. (하드웨어에 비해 속도 느림)
인터럽트 방식
MCU 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법이다.(실시간 대응)
CPU가 수행하는 명령에는 '일반 명령'과 '특권 명령'이 있다.
일반 명령은 메모리에서 자료를 읽어오고, CPU에서 계산을 하는 등의 명령이고 모든 프로그램이 수행할 수 있는 명령이다.특권 명령은 보안이 필요한 명령으로 입출력 장치, 타이머 등의 장치를 접근하는 명령이다. 특권 명령은 항상 운영체제만이 수행할 수 있다.운영체제는 하드웨어적인 보안을 유지하기 위해 기본적으로 두가지 operation을 지원한다.
kernel mode는 운영체제가 CPU의 제어권을 가지고 명령을 수행하는 모드로 일반 명령과 특권 명령 모두 수행할 수 있다.user mode는 일반 사용자 프로그램이 CPU제어권을 가지고 명령을 수행하는 모드이기 때문에 일반 명령만을 수행할 수 있다.
process A가 프로그램 명령 수행중에 디스크 입출력 명령을 읽은 경우.
사용자 프로그램은 입출력 장치에 접근하는 명령을 수행할 수 없다. user mode에서 특권 명령을 수행할 수 없기 때문이다.
1. 사용자 프로그램은 운영체제에게 시스템 콜을 통해 특권명령을 대신 수행해달라고 요청한다.
2. 시스템 콜은 주소 공간 자체가 다른 곳(커널의 code영역)으로 이동해야 하므로 프로그램이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이루어진다.
시스템 콜은 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다.