소년코딩

인터럽트(Interrupt)

입터럽트란 현재 무엇인가를 처리 중인 CPU에게 어떤 사건이 발생했음을 알리는 행위를 말하고, CPU와 연결된 선을 통하여 전달된다.

  • 입터럽트란 CPU에 전달되는 사건 신호(Event Signal)로서, 주로 전용 회선으로 전달된다.

1. 인터럽트 서비스 루틴

인터럽트 개념 자체가 긴급한 사건의 발생에 대한 주목을 요청하는 의미로, 인터럽트를 인지한 CPU는 현재 처리 중인 일을 일시 중지하고, 그 인터럽트가 어떤 사건인지를 식별하여 처리한 후, 다시 원래의 처리하던 일을 계속한다.

여기서, 어떤 사건인지를 식별하여 처리한다는 건 전달된 인터럽트 번호에 대응되는 처리 루틴(함수 혹은 프로그램 형태)을 찾아 실행시켜줌을 의미하는데, 이를 인터럽트 서비스 루틴(Interrupt Service Routine: ISR) 혹은 인터럽트 핸들러라고 부른다.

예를 들어, 키보드에서 키가 눌렸을 때 발생하는 인터럽트의 번호를 몇 번으로 할 것인가는 하드웨어 설계 시 결정되고, 이를 바탕으로 유닉스 등의 운영체제 개발자는 해당하는 인터럽트 서비스 루틴에 키보드에서 문자 하나를 읽어 운영체제 내 버퍼에 저장하는 코드를 구현한다.

2. 인터럽트 벡터

인터럽트 번호와 인터럽트 서비스 루틴의 위치는 어떤 메커니즘으로 대응될까? 인터럽트 서비스 루틴들을 임의의 장소에 두고, 그들의 위치를 인터럽트 번호와 대응되는 특정 위치에 기록해 두는 방법을 사용한다. 이들 저장 위치는 테이블 형태로 존재하며 이를 인터럽트 벡터(Interrupt Vector)라고 부른다.

3. 인터럽트 우선순위

인터럽트들은 상대적 우선순위를 가지고 있어서 높은 우선순위의 인터럽트 서비스가 먼저 처리된다.

즉, 처리 중인 인터럽트보다 높은 우선순위의 인터럽트가 발생하면 진행 중이던 인터럽트 서비스를 잠시 중단하고 새로운 인터럽트에 대한 서비스를 먼저 처리한 다음 이전의 인터럽트 서비스 처리를 계속한다.

4. 인터럽트 사이클

CPU가 인터럽트 발생 여부를 체크하는 주기를 인터럽트 사이클(Interrupt Cycle)이라고 한다.

일반적으로 인터럽트 체크는 CPU가 하나의 기계 명령어 처리를 마칠 때마다 이루어진다. 즉, 인터럽트 사이클은 기계 사이클의 맨 마지막 단계로 추가된다.

5. 인터럽트 유형

인터럽트는 크게 디바이스 인터럽트, 오류 인터럽트, 소프트웨어 인터럽트 등 세 가지로 분류할 수 있다.

- 디바이스 인터럽트(Device Interrupt)

디바이스 인터럽트는 입 • 출력 장치 등과 같이 CPU 외부 하드웨어로부터 발생하기 때문에 하드웨어 인터럽트라고 부르기도 하며, 대부분 인터럽트가 여기에 해당한다.

- 오류 인터럽트(Error Interrupt)

CPU가 기계 명령어를 처리하는 도중 발생하는 인터럽트를 오류 인터럽트라고 한다. 실행 중인 프로그램에 해당 CPU의 기계 명령어 포맷에 어긋나는 명령어가 포함되어 있으면 CPU는 더이상 진행할 수 없으므로 스스로 인터럽트를 발생시켜 이에 대한 오류 메시지를 출력하고, 다른 프로그램의 실행을 계속하도록 한다.

오류 사항은 예상 못 한 예외 사건이 발생한 경우이므로 오류 인터럽트를 예외(Exception)라 부르기도 한다.

- 소프트웨어 인터럽트(Software Interrupt)

기계 명령에 의해 프로그램에서 인위적으로 발생하는 인터럽트를 소프트웨어 인터럽트라고 한다. 소프트웨어 인터럽트는 주로 운영체제 개발 과정에서 인터럽트 서비스 루틴에 대한 테스트 용도로 사용되나, 일반 사용자 프로그램이 운영체제 내의 서비스 루틴을 호출할 수 있도록 하는 시스템 호출 메커니즘으로 활용되기도 한다.

소프트웨어 인터럽트는 프로그램의 흐름을 잠시 특별한 부분으로 빠져들게 하는 효과가 있으므로 트랩(Trap)이라 부르기도 한다.


trap

'컴구 이야기' 카테고리의 다른 글

5. 훑어보는 프로세스와 스레드  (0) 2020.09.21
4. 훑어보는 입/출력 장치  (0) 2020.09.02
2. 훑어보는 컴퓨터 시스템 구조  (1) 2020.08.28
1. 훑어보는 운영체제  (0) 2020.08.16
정수의 표시  (0) 2019.02.16
댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기