본문 바로가기
CS 공부/운영체제

인터럽트(Interrupt)

by 횰쓰 2022. 6. 12.

정의

 

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것이다. 
지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면 그 일을 먼저 처리하고 나서 하던 일을 계속해야한다.
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.

인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다.

 

하드웨어 인터럽트 (외부 인터럽트)는 CPU의 하드웨어 신호에 의해 발생하고, 

소프트웨어 인터럽트 (내부 인터럽트)는 명령어의 수행에 의해 발생한다. 

 

 

하드웨어 인터럽트 (외부 인터럽트)

입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생한다.  (전원 이상, 기계 착오, 외부 신호, 입출력)

 

소프트웨어 인터럽트 (내부 인터럽트)

Trap이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생한다. (0으로 나누기가 발생, 오버플로우, 명령어를 잘못 사용한 경우 (Exception))

 


인터럽트 과정

 

process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.

  • process A는 system call을 통해 인터럽트를 발생시킨다.
  • CPU는 현재 진행 중인 기계어 코드를 완료한다.
  • 현재까지 수행중이었던 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등...)
  • PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
  • 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
  • 해당 코드를 실행한다.
  • 해당 일을 다 처리하면, 대피시킨 레지스터를 복원한다.
  • ISR의 끝에 IRET 명령어에 의해 인터럽트가 해제 된다.
  • IRET 명령어가 실행되면, 대피시킨 PC 값을 복원하여 이전 실행 위치로 복원한다.

관련 용어

 

인터럽트 핸들러

1. 실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴이라고도 한다.
2. 운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다.

 

인터럽트 벡터

인터럽트 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.

 

PCB(Process Control Block)

1. 커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.
2. 인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다. (수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)

댓글