연습문제 1
Q. 전원 이상이거나 기계적인 오류 때문에 발생하는 인터럽트는 무엇인가?
A. 외부 인터럽트
연습문제 2
Q. 숫자를 0으로 나누거나 자신의 주소 공간을 벗어나서 작업을 하는 것과 같이 프로세스의 오류와 관련된 인터럽트는 무엇인가?
A. 내부 인터럽트
연습문제 3
Q. 자발적 인터럽트로서 사용자의 의지로 발생시키는 인터럽트는 무엇인가?
A. 시그널
인터럽트
•
입출력 제어기 + DMA 의 작업이 완료되면 CPU에 인터럽트를 보냄
•
주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 역할을 하는 신호
◦
ex. CPU가 요청한 작업을 완료했을 때, 키보드로 데이터를 입력받았을 때, 하드웨어에 이상이 발생했을 때 등 다양한 경우에 인터럽트가 발생
•
다양한 종류의 장치가 있으므로, 인터럽트를 구분할 무언가가 필요함
◦
IRQ 로 인터럽트를 구분 (고유 인터럽트 번호)
◦
인터럽트가 발생하면 CPU는 IRQ를 보고 인터럽트가 발생한 장치를 파악
외부 인터럽트
•
입출력장치로부터 오는 인터럽트 + 전원 이상 + 기계적인 오류 때문에 발생하는 인터럽트
•
하드웨어의 상태 변화로 인해 발생
•
외부 인터럽트를 구분하기 위해 IRQ번호를 배정한다
◦
IRQ 번호와 인터럽트 번호는 일대일로 대응
◦
ex. IRQ 0번은 인터럽트 번호 32번, IRQ 15번은 인터럽트 번호 47번
•
하드웨어 인터럽트라고 부른다
내부 인터럽트
•
프로세스의 오류와 관련된 인터럽트
•
숫자를 0으로 나누거나, 자신의 주소 공간을 벗어나서 작업하는 경우 발생하는 인터럽트
•
예외 상황 인터럽트, Trap 이라고 부른다
•
프로세스의 잘못된 연산으로 인해 발생하므로 인터럽트가 발생하면 해당 프로세스가 즉시 종료된다.
시그널(자발적 인터럽트)
•
사용자가 직접 발생시키는 인터럽트
•
프로세스를 끝내기 위해 ctrl + c 하거나 kill 명령어를 사용하는 경우
•
종류가 다양하다
•
모든 시그널에 인터럽트 번호 128번을 할당 후 세부 시그널 번호를 따로 명시
•
시그널이라고 부름
인터럽트 번호
종류 | 인터럽트 번호 | 비고 |
내부 인터럽트 | 0 ~ 31 | 20 ~ 31 번은 정의되지 않았다 |
외부 인터럽트 | 32 ~ 47 | 주변장치의 수에 따라 유동적으로 할당한다 |
시그널 | 128 | 시그널 번호를 따로 기재한다 |
인터럽트 관련 정리 글
연습문제 4
Q. 인터럽트의 처리 방법을 함수로 만들어놓은 것을 무엇이라 하는가?
A. 인터럽트 핸들러
인터럽트 핸들러
인터럽트 벡터
•
여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하기 위해 사용하는 자료 구조
•
인터럽트 벡터가 1이면 인터럽트가 발생했다는 의미
인터럽트 핸들러
•
인터럽트의 처리 방법을 함수 형태로 만들어 놓은 것
•
인터럽트가 발생하면 운영체제가 인터럽트 핸들러를 호출해 작업한다
•
인터럽트 벡터에는 해당 인터럽트 핸들러를 호출할 수 있도록 인터럽트 핸들러가 저장된 메모리의 주소가 포인터 형태로 등록되어 있다
•
시그널의 경우 자신이 만든 인터럽트 핸들러를 등록할 수 있다
◦
시그널 발생 시 기존 인터럽트 핸들러가 아닌 새로 만든 인터럽트 핸들러를 사용
◦
ex. ctrl + c 를 누르면 해당 프로세스를 종료하지 않고, 종료 여부를 물어보거나 지금까지 작업한 내용을 저장하도록 할 수 있다