CS
[OS] Interrupt 인터럽트란?
D0HAN.
2021. 8. 15. 23:45
인터럽트란?
- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것
- 우선적으로 처리해야할 일이 발생하였을 때 그것을 처리하고 원래 동작으로 돌아옴
- 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나눔
하드웨어 인터럽트
- 일반적으로 인터럽트를 이르는 말
- CPU외부로부터의 인터럽트 요구 신호에 의해 발생되는 인터럽트
- Maskable interrupt, Non-maskable interrupt 가 있다. (Interrunpt Mask가 가능)
- Maskable interrupt
- Interrupt Mask(인터럽트가 발생하였을 때 요구를 받아들일지 말지 지정하는 것)가 가능
- 인텔CPU 에서 INTR pin으로 신호가 들어옴 - Non Maskable interrupt
- Interrupt Mask가 불가능
- 거부, 무시할 수 없음 (매우 중요함)
- 정전, 하드웨어 고장 등 어쩔수없는 오류
- 인텔 CPU에서 NMI pin으로 신호가 들어옴
- Maskable interrupt
하드웨어 인터럽트 종류
- 입출력 인터럽트 (I/O interrupt) - 입출력 작업의 종료나 입출력 오류에 의해 CPU의 기능이 요청됨
- 정전,전원 이상 인터럽트(Power fail interrupt) - 전원 공급의 이상
- 기계 착오 인터럽트(Machine check interrupt) - CPU의 기능적인 오류
- 외부 신호 인터럽트(External interrupt) - I/O 장치가 아닌 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
소프트웨어 인터럽트
- CPU내부에서 자신이 실행한 명령이나 CPU의 명령 실행에 관련된 모듈이 변화하는 경우 발생
- trap 또는 exception 이라고도 함
- 프로그램의 오류에 의해 생기는 인터럽트
소프트웨어 인터럽트 종류
- 프로그램 검사 인터럽트 (Program check interrupt)
- 0으로 나누는 경우
- OverFlow/UnderFlow
- 페이지 부재
- 부당한 기억장소의 참조
- 등등...
- SVC(Supervisor Call: 감시프로그램 호출)인터럽트
- 사용자가 프로그램을 실행시키거나 supervisior을 호출하는 동작을 수행하는 경우
- 프로그래머에 의해 코드로 짜인 감시 프로그램을 호출하는 방식
인터럽트 우선순위
인터럽트 벡터 Interrupt Vector
- 여러가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴(ISR)의 주소를 보관하고 있는 공간
- 대부분의 CPU들은 인터럽트 벡터 테이블을 가지고 있음
- 인텔x86에서는 이를 IDT(Interrupt Descriptor Table)이라고 한다.
인터럽트 서비스 루틴 Interrupt Service Routine(ISR)
- 인터럽트 핸들러 Interrupt handler 라고도 함
- 인터럽트가 접수되면 각각의 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴(커널이 실행)
- ex) 키보드 자판을 눌러 키보드 인터럽트가 발생하면 이에 해당하는 인터럽트 서비스 루틴이 실행됨
인터럽트 과정
>> 프로세스 A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았을 때
- 프로세스 A는 system call을 통해 인터럽트를 발생시킴
- CPU는 현재 진행중인 기계어 코드를 완료
- 현재까지 수행중이었던 상태를 해당 프로세스의 PCB(Process Control Block)에 저장
(수행중이던 메모리 주소, 레지스터 값 등등) - PC(Program Counter, IP)에 다음 실행할 명령의 주소 저장
- 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(interrupt Service Routine)으로 점프하여 루틴을 실행
- 해당 코드 실행
- 해당 일을 다 처리하면 저장했던 프로세스 상태 복구
- ISR의 끝에 IRET명령어에 의해 인터럽트가 해제
- IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행위치로 복원
* IRET(Interrupt Return) 명령어: 이전 태스크로 다시 돌아가는 어셈블리 명령어. ISR의 마지막 명령어.
참고
https://huistorage.tistory.com/111
https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8
https://otakuking.tistory.com/70
https://docs.oracle.com/cd/E19455-01/806-3773/instructionset-75/index.html