H/W 인터럽트
하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생한다.
ex) I/O 작업이 완료됐을 때, 오퍼레이터나 타이머에 의해 프로그램이 종료됐을 때, 정전, 하드웨어 고장
S/W 인터럽트
예외 or 트랩에 의해 발생하는 인터럽트
ex) 0으로 나눴을 때, 유효하지 않은 메모리 접근, 시스템 콜
① 입출력 장치는 데이터 버스를 통해 CPU에게 인터럽트 요청 신호를 보낸다. (이때, 인터럽트 벡터도 같이 보내짐)
② CPU는 인터럽트 플래그를 통해 현재 인터럽트를 받아드릴 수 있는지 확인한다.
③ OS가 인터럽트를 받아드릴 수 있다면 CPU는 처리중이었던 프로세스를 중단하고 현재 CPU 상태를 PCB에 저장한다.
④ 그 후, 인터럽트 컨트롤러가 실행된다.
** Context: CPU 상태를 의미한다.
** Context Switching: Context 저장 후, 인터럽트 서비스를 수행하는 것을 의미한다.
① 중요한 인터럽트부터 처리되도록 순서를 결정한다.
② 인터럽트 벡터는 각각의 인터럽트를 구분하기 위한 정보로 모든 ISR의 시작 주소를 갖고 있다.
③ 인터럽트는 인터럽트 벡터를 참조하여 ISR로 제어를 넘기고 ISR은 미리 정의된 함수를 실행하여 인터럽트를 처리한다.
④ ISR 실행이 끝나면 원래 수행하던 프로그램으로 Return하여 실행을 재개한다.
** ISR(Interrupts Service Rountine): 인터럽트 처리를 위해 미리 처리된 함수를 말한다.
❓인터럽트 서비스 루틴(ISR)과 인터럽트 핸들러의 차이점?
① 인터럽트 발생
② 해당 주소 명령 저장 (save pc = 5)
③ 인터럽트 처리 위해 PC=ISR 넣음
④ 인터럽트 처리가 끝난 후 저장한 위치로 되돌아감
인터럽트가 처리되고 있는 동안에는 인터럽트의 유실을 방지하기 위해 다른 인터럽트는 억제된다.