인터럽트(Interrupt) 란?

  • 인터럽트(interrupt)

컴퓨터 작동 중에 예기치 않은 문제가 발생한 경우라도 업무 처리가 계속될 수 있도록 하는 컴퓨터 운영체계의 한 기능. 작동 중인 컴퓨터에 예기치 않은 문제가 발생한 경우 CPU(중앙처리장치:central processing unit) 자체가 하드웨어적으로 상태를 체크하여 변화에 대응하는 것을 말한다.

인터럽트가 발생하면 그 순간 운영체계 내의 제어프로그램에 있는 인터럽트 처리 루틴(routine)이 작동하여 응급사태를 해결하고 인터럽트가 생기기 이전의 상태로 복귀시킨다.

인터럽트가 발생하는 원인으로는 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적인 문제가 발생한 경우(기계검사 인터럽트), 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우(외부 인터럽트), 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우(입출력 인터럽트), 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램의 문제가 발생한 경우(프로그램검사 인터럽트) 등이 있다.

프로그래밍 방식에는 인터럽트 방식과 폴링(polling) 방식이 있는데 인터럽트 방식을 사용하면 두 가지 이상의 프로세서(processor:처리장치)를 동시에 수행할 수 있고, 이상(異常) 현상을 쉽게 파악할 수 있어 훨씬 효율적이다.

  • 인터럽트의 종류

인터럽트는 주변 장치와 커널이 통신하는 방식 중 하나로써 어떠한 Event가 발생하였을 시에 커널에게 그 Event에 대하여 알리는 것이다. Event를 알리는 방식은 크게 2가지가 있는데 폴링 방식과 인터럽트 방식이다.

먼저 폴링 방식은 주기적인 시간을 가지고 Event의 발생 유무를 지속적으로 확인하는 방식이고, 인터럽트 방식은 Event가 발생하였을 시에 그 신호에 의해 Event를 처리하는 방식이다.

예를 들어 폴링 방식은 편의점의 점원이 손님이 오는가를 지속적으로 1분마다 확인 하는 방식이고, 인터럽트 방식은 문에 방울을 달아 손님이 들어왔을 시에만 소리로 신호를 알리는 것인 것이다. 리눅스 커널에서는 Event가 발생하면 interrupt handler가 발생한다.

인터럽트의 종류는 외부 인터럽트와 내부 인터럽트로 나눌 수 있는데 외부 인터럽트는 현재 수행 중인 Task와 관계없이 주변 장치에 의하여 비동기적으로 사건이 발생하는 것이며, 내부 인터럽트는 수행중인 Task와 관련하여 발생하는 동기적 사건이다.

인터럽트가 발생하면 프로그램 카운터 레지스터(program counter resister)의 값이 변경되고 해당 인터럽트 핸들러로 이동하게 된다. 해당 인터럽트 핸들러로 이동하는 방식은 IDT(Intrrupt Discriptor Table)이란 곳에 각 핸들러의 시작 주소가 저장 되어 있는데, 이 주소를 확인하여 해당 핸들러로 점프하게 된다.

Task 중간에 인터럽트가 발생하면 처리 전 수행 중이던 Task의 작업이 인터럽트가 끝난 다음 작업을 하던 중간 위치를 기억해야 함은 당연한 것이다. 인터럽트가 발생하면 Task Save → Interrupt 수행 → task restore의 과정을 통하여 task의 작업 위치로 복귀한다.

  • 인터럽트 시 세부 동작

PIC에서 인터럽트가 발생했을 때의 동작은 다음과 같은 같은 순서로 된다.

인터럽트를 허가하도록 INTCON 레지스터의 GIE비트에
BSF 명령으로 "1"을 세트

인터럽트 발생 이후 다른 인터럽트 금지를 위해
INTCON 레지스터의 GIE 비트를 클리어

실행 중인 명령의 다음 명령 어드레스를 스택에 보존
(다른 레지스터는 보존되지 않음)

강제적으로 프로그램 카운터에 0004H세트 되고
4번지로 점프

인터럽트 처리 프로그램을 개시.
필요하면 직전의 레지스터를 보존

인터럽트의 요인을 조사하기 위해, INTCON 레지스터의
인터럽트 플래그를 조사하여 플래그가 "1"인 요인의 처리를
실행한다. 그리고 그 플래그를 BCF 명령으로 "0 클리어"

복수의 인터럽트 플래그가 "1"로 되어 있으면
모든 관련 인터럽트 처리를 실행한다.

인터럽트 처리 종료. 직전에 끼어들었을 때의 레지스터를
복귀시킨다. 마지막에 RETFIE 명령을 실행

RETFIE 명령의 실행에 의해, 스택에 보존되어 있던
인터럽트시의 어드레스로 점프하여 복귀한다.
동시에 다음 인터럽트를 허가하기 위해
INTCON 레지스터의 GIE 비트가 다시 세트 된다.

운영체제

CISC와 비교했을 때 RISC 방식의 마이크로프로세서의 특징은?

운영체제

Task 들에 대한 스케줄링 방식 중 라운드 로빈 스케줄링에 대해서 설명해보세요.

커뮤니티 Q&A

이론과 관련된 게시글이에요.

이해가 안 되거나 궁금한 점이 있다면 커뮤니티에 질문해 보세요!

게시글 작성하기