인터럽트
인터럽트: CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술
인터럽트 필요 이유
프로세스가 러닝 중에 스케쥴러가 중단시키고 다른 프로세스로 교체하기 위해서 필요.
저장메체에서 데이터 처리 완료시, 프로세스를 다시 깨워야 할 때.
예외 상황 핸들링
인터럽트 종류
int main() {
printf("Hello World!\n");
int data;
int divider = 0;
data = 1 / divider; //이 부분에서 발생
return 0;
}
정한 시간주기로 cpu에 인터럽트를 발생시켜 프로세스를 변경할 수 있음.
내부 인터럽트 = 소프트웨어 인터럽트
외부 인터럽트 = 하드웨어 인터럽트
인터럽트 내부 동작
시스템콜 인터럽트
시스템콜도 인터럽트 방식으로 실행된다.
시스템콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어 CPU에게 실행 시켜야 함.
시스템 콜 실제 코드
mov eax, 1
mov ebx, 0
int 0x80 //시스템콜 인터럽트 명령(인텔계열)
eax: 시스템콜 번호 입력
ebx: 시스템콜에 해당하는 인자값 입력
소프트웨어 인터럽트 명령 호출 및 Ox80값 입력
동작 방식
리눅스 예