Interrupt(인터럽트)
하나의 명령어를 처리하는 정형화된 흐름을 명령어 사이클이라고 하는데, 이 흐름 중 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 작업을 인터럽트라고 한다.
종류
동기 인터럽트: CPU에 의해 발생하는 인터럽트, 명령어를 수행하는 도중 예상치 못한 상황이 발생할 경우 발생(= 예외)
폴트: 예외를 처리한 직후 예외가 발생한 명령어부터 실행을 재개하는 예
트랩: 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외
중단: 실행 중인 프로그램을 강제로 중단시킬 수 밖에 없는 심각한 오류가 발생한 경우
소프트웨어 인터럽트: 시스템 호출이 발생한 경우
비동기 인터럽트: 주로 입출력장치에 의해 발생하는 인터럽트(= 하드웨어 인터럽트)
비동기 인터럽트 처리 순서
비동기 인터럽트 발생 시 입출력장치에서 CPU에 요청을 보내게 되는데, 그 절차는 다음과 같다.
입출력장치에서
인터럽트 요청 신호
전송CPU는 실행 사이클이 끝나고 명령어를 인출하기 전 항상 인터럽트 여부 확인
CPU는 인터럽트 요청을 확인하고
인터럽트 플래그
를 통해 현재 인터럽트를 받아들일 수 있는지 확인받아들일 수 있는 경우 CPU는 현재 실행 중인 작업을 중단하고 백업
CPU는
인터럽트 벡터
를 참조하여인터럽트 서비스 루틴
실행인터럽트 서비스 루틴 실행이 종료되면 CPU는 백업된 작업을 복구하고 다시 실행(4번에서 백업한 작업 다시 진행)
인터럽트 요청 신호
: 인터럽트를 발생시키는 하드웨어 장치가 CPU에게 인터럽트가 발생했음을 알리는 신호인터럽트 플래그
: CPU가 인터럽트를 받아들일 수 있는지 여부를 나타내는 플래그인터럽트 벡터
: 인터럽트 서비스 루틴의 주소를 가지고 있는 테이블로, 인터럽트 서비스 루틴을 식별하기 위한 키 역할인터럽트 서비스 루틴
: 인터럽트가 발생했을 때 실행되는 코드로, 인터럽트를 처리하기 위한 프로그램 역할
위 과정을 요약하면, 인터럽트 서비스 루틴
을 실행하고, 본래 수행하던 작업으로 복귀하는 것으로 정리할 수 있다.
참고자료
Last updated
Was this helpful?