인터럽트라는 용어에 대해서 알아보자.
인터럽트란 CPU가 프로그램을 실행할 때, 입출력 하드웨어 등의 장치나 예외 상황이(이벤트) 발생하여 이에 대한 처리가 필요할 경우, CPU에 알려서 처리하는 기술을 말한다.
프로그램에서 가장 중요한 CPU 레지스터
- PC(Program Counter)
- SP(Stack Pointer)
인터럽트가 필요한 이유
- 선점형 스케쥴러 구현 시
- 프로세스 running 상태 중에 스케쥴러가 이를 중단시키고 다른 프로세스로 교체하기 위해서 현재 프로세스를 중단
- 스케쥴러 코드가 실행되어 현 프로세스 실행을 중지하는 과정이 필요
- IO Device와의 커뮤니케이션
- 저장 매체에서 데이터 처리 완료 시, 프로세스의 상태를 변경해야함
- 예외 상황(이벤트) 핸들링
- CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치나 예외 상황이 발생할 경우 CPU가 해당 처리를 할 수 있도록 CPU에 전달
- CPU는 프로세스 처리에 집중하고 있으므로 외부 상황에 대해서 인지하지 못함
- 어떤 한 줄의 코드에서 오류가 발생하게 되면 CPU는 다음 코드를 실행하지 못함
인터럽트 처리의 예
- CPU가 프로그램을 실행하고 있을 때
- 입출력 하드웨어 등의 장치 이슈 발생
- 파일 처리가 끝났다는 것을 운영체제에 알려주기
- 운영체제는 해당 프로세스의 상태를 block에서 ready로 변경
- 예외 상황 발생
- 0으로 나누는 계산이 발생해서 예외 발생을 운영체제에 알려주기
- 운영체제가 해당 프로세스를 실행 중지하고 에러 표시
이벤트와 인터럽트
인터럽트를 하나의 이벤트라고 생각할 수 있고 이를 운영체제가 처리한다.
주요 인터럽트
#include <stdio.h>
int main()
{
printf("Hello World!\n");
int data;
int divider = 0;
data = 1 / divider;
return 0;
}
-
타이머 인터럽트
- 선점형 스케쥴러를 위해서 필요
- 하드웨어로부터 일정 시간마다 타이머 인터럽트를 운영체제에 알려줌
-
입출력(IO) 인터럽트
- 프린터
- 키보드: 키보드의 키 하나에 대한 인터럽트
- 마우스: 마우스 클릭 동작에 대한 인터럽트
- 저장매체
인터럽트 종류
- 내부 인터럽트(소프트웨어 인터럽트)
- 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용 시 발생
- 0으로 나누기
- 사용자 모드에서 허용되지 않은 명령 또는 공간 접근
- 계산 결과가 Overflow / Underflow 발생 시
- 외부 인터럽트(하드웨어 인터럽트)
- 주로 하드웨어에서 발생되는 이벤트 (프로그램 외부)
- 전원 이상
- 기계 문제
- 키보드 등 IO 관련 이벤트
- Timer 이벤트