CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술
선점형 스케쥴러 구현
프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해 현재 프로세스 실행을 중단 시킴. 그럴려면 스케쥴러 코드가 실행이 되서, 현 프로세스 실행을 중지시켜야 함.
IO device와의 커뮤니케이션
저장매체에서 데이터 처리 완료 시, 프로세스를 깨워야함(block state → ready state)
예외 상황 핸들링
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생할 경우, CPU가 해당 처리를 할 수 있도록 CPU에 알려줘야 함
계산하는 코드에서 0으로 나누는 코드 실행 시 (Divide-by-Zero Interrupt)
# include <stdio.h>
int main()
{
printf("Hello World!\n");
int data;
int divider = 0;
data = 1 / divider; // 이 부분에서 인터럽트 발생
return 0;
}
타이머 인터럽트
선점형 스케쥴러를 위해 필요
입출력(IO) 인터럽트
프린터, 키보드, 마우스, 저장매체(SSD 등) ...
내부 인터럽트
주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용 시 발생, 소프트웨어 인터럽트라고도 함
외부 인터럽트
주로 하드웨어에서 발생되는 이벤트(프로그램 외부), 하드웨어 인터럽트라고도 함.
시스템콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 한다.
시스템콜 실제 코드
mov eax, 1
mov ebx, 0
int 0x80 // 소프트웨어 인터럽트 명령
// int : CPU op code
// 0x80 : 인터럽트 번호(시스템콜 -> 0x80)시스템콜은 무조건 0x80
// 시스템콜 예
open('data.txt', O_RDONLY)
시스템콜 인터럽트 명령을 호출하면서 0x80값을 넘겨줌