CS/운영체제

[운영체제] 인터럽트(Interrupt)

ummchicken 2023. 1. 26. 11:53

주변장치와 입출력 장치는 CPU나 메모리와 달리 인터럽트는 메커니즘을 통해 관리된다.

 

인터럽트란?

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우, 
현재 실행 중인 작업을 즉시 중단하고, 
발생된 상황을 처리한 후 다시 실행 중인 작업으로 복귀하는 것이다.

즉, 현재 실행 중인 프로그램을 중단하고, 다른 프로그램의 실행을 요구하는 명령어다.
(※ 인터럽트 : 끼어들다)

 

※ 지금 수행 중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면, 

그 일을 먼저 처리하고 나서 하던 일을 계속해야 한다.

 

 

 

 

 

 

그래서 인터럽트, 왜 하는 건가?

입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문.

 

 


 

인터럽트의 종류

 

인터럽트의 종류는 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 나뉠 수 있다.

 

 

외부 인터럽트

입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
  • 전원 이상 인터럽트(Power fail interrupt) : 말그대로 정전, 파워 이상 등
  • 기계 착오 인터럽트(Machine check interrupt) : CPU의 기능적인 오류
  • 외부 신호 인터럽트(External interrupt)
    • 타이머에 의한 인터럽트 : 자원이 할당된 시간이 다 끝난 경우
    • 키보드로 인터럽트 키를 누른 경우 : 대표적으로 Control + Alt + Delete
    • 외부 장치로부터 인터럽트 요청이 있는 경우 : I/O 인터럽트 아님!! 다른 개념이다.

 

  • 입출력 인터럽트(I/O Interrupt) 
    • 입출력장치가 데이터 전송을 요구하거나, 전송이 끝나 다음 동작이 수행되어야 할 경우
    • 입출력 데이ㅣ터에 이상이 있는 경우

 

 

 

내부 인터럽트

Trap이라고 불림. 잘못된 명령이나 데이터를 사용할 때 발생
  • 프로그램 검사 인터럽트(Program check interrupt)
    • Division by zero : 0으로 나누기가 발생
    • Overflow/Underflow : 오버플로우
    • 기타 Exception : 명령어를 잘못 사용한 경우

 

 

 

소프트웨어 인터럽트 (SVC : SuperVisor Call)

소프트웨어가 발생시키는 인터럽트.
소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅함
  • 프로그램 처리 중 명령의 요청에 의해 발생
  • 대표적인 형태는 프로그램에서 감시 프로그램 호출(SVC) 호출
  • 시스템 콜(system call)로써 구현됨
※ SVC (SuperVisor Call)
- 명령어 수행시 문제가 생겼을 때,
프로세서에게 컴퓨터의 제어권을 OS의 감시자(supervisor)에게 넘기라는 명령

- 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우

- 복잡한 입출력 처리를 하는 경우

- system call
※ 시스템 콜(system call)이 무엇인가?
응용프로그램에서 시스템 커널에 어떠한 기능을 수행해 달라고 요청하는 것을 말한다.

사용자가 직접 커널에 접근할 수는 없기 때문에, 이를 시스템 콜을 통해 대신하는 것.

(리눅스의 프로세스 정지 명령어나 fork 명령어, 파일을 오픈, 클로즈 하거나 읽는 등
open, read, close 등의 명령들도 모두 시스템 콜에 해당이 된다.)

 

 

 

 


 

인터럽트 동작 순서

 

  1. 인터럽트 요청
  2. 프로그램 실행 중단 : 현재 실행 중이던 Micro operation까지 수행한다.
  3. 현재의 프로그램 상태 보존 : PCB(Process Control Block), PC(Program Counter) 등
  4. 인터럽트 처리루틴 실행 : 인터럽트를 요청한 장치를 식별한다.
  5. 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실직적인 작업을 수행한다. 처리기 레지스터 상태를 보존한다. 서비스 루틴 수행 중 우선순위가 더 높은 인터럽트가 발생하면 또 재귀적으로 1~5를 수행한다.
  6. 상태 복구 : 인터럽트 발생 시 저장해둔 PC(Program counter)를 다시 복구한다.
  7. 중단된 프로그램 실행 재개 : PC의 값을 이용하여 이전에 수행중이던 프로그램을 재개한다.
※ 요약
- 인터럽트가 발생하면, 현재 실행 중이었던 프로세스의 상태 정보를 PCB에 저장해 둔다.
이후 인터럽트 서비스 루틴이 인터럽트를 처리하고,
처리가 모두 끝나면 다시 이전 작업 상태 정보를 복구하여 재개한다.

 

 

 


 

인터럽트 우선순위

여러 장치에서 인터럽트가 동시에 발생하거나,
인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우
우선순위를 따져서 처리한다.

 

  1. 전원 이상
  2. 기계착오
  3. 외부 신호
  4. 입출력
  5. 명령어 잘못
  6. 프로그램 검사
  7. SVC(SuperVisor Call)

 

일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 높고,

내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다.

 

 


 

인터럽트 우선순위 판별 방법

 

폴링(Polling) 방식 (소프트웨어적인 방법)

사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
  • 속도가 따른 장치에 높은 등급을 부여한다.
  • 우선순위 변경이 쉽다.
  • 많은 인터럽트가 있을 경우, 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다.
  • 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다.

 

 

 

Vectored Interrupt, 인터럽트 방식 (하드웨어적인 방법)

MCU(마이크로 컨트롤러) 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식
  • 인터럽트 벡터는 인터럽트를 발생한 장치가 분기할 곳에 대한 정보이다.
  • 소프트웨어적인 방법에 비해 비경제적이다.
  • 회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠르다.

 

하드웨어적인 방법은 아래 2가지로 나뉜다.

 

1. Daisy Chain★

  • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
  • 우선순위가 높은 장치를 상위에 두고 우선순위를 배치한다.

 

2. 병렬(Parallel) 우선순위 부여 방식

  • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
  • 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다.
  • Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다.
  • 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다.

 

 

인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능하다.

따라서 '실시간 대응'이 필요할 때는 필수적인 기능이다.

 

즉, 인터럽트는 발생시기를 예측하기 힘든 경우에 컨트롤러가 가장 빠르게 대응할 수 있는 방법이다.

※ 요약 겸 예상 질문
Q. 컨트롤러가 입력을 받는 방법에 대해 설명하시오.

A. 컨트롤러가 입력을 받는 방법은 두 가지가 있다.
첫 번쨰, 폴링 방식이다.
폴링 방식은 사용자가 명령어를 입력하여 입력핀의 값을 계속 읽어 변화를 알아내는 방식이다.

두 번째, 인터럽트 방식이다.
인터럽트는 MCU 자체가 하드웨어적으로 그 변화를 체크하여, 변화시에만 일정한 동작을 하는 방식이다.


+ 추가 질문
Q. 폴링 방식에 비해 인터럽트 방식이 갖는 장점을 설명하시오.
A. 인터럽트 방식으로 입력을 받을 경우, 폴링 방식에 비해 신속하게 대응할 수 있으며, 
컨트롤러는 주기적으로 핀의 값을 읽지 않아도 되기 때문에 원리 일에 집중할 수 있다.

 

 

 

 

 


출처