Interrupt(인터럽트)
CPU가 프로그램을 실행하는 도중 예기치 않은 상황이나 급한 처리를 요하는 작업이 발생했을 때, 현재 실행 중인 작업을 잠시 중단하고 해당 작업을 먼저 처리한 후 다시 복귀하는 메커니즘이다.
입출력 장치가 작업이 완료되거나 처리가 필요할 때 CPU에 신호를 보내는 방식
운영체제가 멀티태스킹을 지원하고 시스템 자원을 효율적으로 관리하기 위한 필수적인 기능
현대의 거의 모든 컴퓨터 시스템은 인터럽트 방식을 기반으로 동작
종류
발생 주체와 원인에 따라 크게 동기적 인터럽트(예외)와 비동기적 인터럽트(하드웨어 인터럽트)로 구분된다.
동기 인터럽트(Synchronous Interrupt): CPU 내부에서 명령어를 실행하는 과정에서 발생하는 예외 상황
폴트(Fault): 처리가 가능한 오류, 예외 처리 후 예외가 발생한 명령어부터 다시 실행
예시 - 페이지 폴트(Page Fault): 메모리에 없는 페이지 접근 시 디스크에서 가져온 후 다시 접근 시도
트랩(Trap): 의도적으로 발생시키는 예외, 예외 처리 후 다음 명령어부터 실행
예시 - 시스템 호출(System Call): 디버깅 중 브레이크 포인트
중단(Abort): 복구할 수 없는 심각한 하드웨어 오류, 해당 프로세스를 강제로 종료
비동기 인터럽트(Asynchronous Interrupt): CPU 외부의 하드웨어 장치에 의해 발생하는 인터럽트(일반적으로 통칭하는 인터럽트)
마스크 가능 인터럽트(Maskable Interrupt): 인터럽트 플래그(IF)를 통해 CPU가 무시할 수 있는 인터럽트
예시: 일반적인 입출력 장치(키보드, 마우스 등)의 요청
마스크 불가능 인터럽트(Non-Maskable Interrupt, NMI): 중요도가 매우 높아 CPU가 무시할 수 없는 인터럽트
예시: 정전 위기(Power Fail), 하드웨어 고장 등
인터럽트 처리 과정
CPU는 명령어 사이클의 마지막 단계에서 항상 인터럽트 여부를 확인하며, 인터럽트가 감지되면 다음과 같은 흐름으로 처리한다.
인터럽트 요청 신호(IRQ): 하드웨어가 CPU에 보내는 신호
인터럽트 플래그(Interrupt Flag): CPU 상태 레지스터 내에 존재하며, 현재 인터럽트를 받아들일지 말지를 결정하는 비트
인터럽트 벡터(Interrupt Vector): 여러 종류의 인터럽트를 구분하기 위한 번호. 이 번호를 통해 메모리 상의 인터럽트 처리 루틴 주소를 찾음
인터럽트 벡터 테이블(IVT): 인터럽트 벡터와 해당 서비스 루틴의 시작 주소가 매핑된 테이블
인터럽트 서비스 루틴(ISR): 실제 인터럽트를 처리하는 커널 내부의 코드 함수
참고자료
Last updated