CS/운영체제

[운영체제] 인터럽트가 무엇일까?

mhko411 2021. 9. 29. 21:52
728x90

인터럽트는 끼어들기라고 생각하면 쉽게 이해할 수 있다. 이미 진행하고 있는 일을 중간에 끼어들어 가로채서 다른 사람이 그 일을 진행하는 것이라고 일단 생각해보자. 그리고 인터럽트의 정의와 종류, 처리 과정을 알아보면서 이해해보자.


개념

CPU는 매번 프로그램 카운터가 가리키는 곳의 명령을 수행한 후에 다음 명령을 수행하기 직전에 인터럽트 라인을 확인한다. 이때 인터럽트 라인에 인터럽트가 발생했을 때는 지금까지 수행하던 일을 PCB에 저장하고 인터럽트를 수행한다.

 

만약 인터럽트를 처리하는 중에 또 다른 인터럽트가 들어온다면 어떻게 할까? 결론적으로 인터럽트 처리 중에 다른 인터럽트를 허용하지 않는다. 왜냐하면 A라는 인터럽트가 어떤 데이터를 변경을 하고 있는데 B라는 인터럽트가 들어왔다고 가정해보자. B라는 인터럽트는 A가 변경한 데이터를 활용해야 하는데 기존에 예상했던 값과 다른 값을 가지고 일을 수행할 수 있기 때문이다.

하지만 인터럽트마다 중요도가 부여되고 현재 처리 중인 인터럽트보다 중요도가 높은 인터럽트가 들어온다면 중요도가 높은 인터럽트를 수행한다.

 

인터럽트의 종류

인터럽트는 외부 인터럽트, 내부 인터럽트, 스프트웨어 인터럽트로 나눌 수 있다.

 

외부 인터럽트

외부 인터럽트는 입출력 장치(키보드, 마우스) 등과 같이 외부적인 요인에 의해 발생하는 인터럽트이다. 예를 들어 키보드를 입력했을 때 데이터 전송을 요청하고 전송이 끝났을 때 알림을 요청한다. 또한 CPU가 독점되는 것을 방지하기 위한 타이머가 이에 해당된다.

 

내부 인터럽트

내부 인터럽트는 잘못된 명령과 같은 트랩에 의해 발생하는 인터럽트이다. 예를 들어 0으로 나누거나 Overflow가 발생했을 때 내부 인터럽트가 발생한다.

 

소프트웨어 인터럽트

소프트웨어 인터럽트는 소프트웨어가 발생시키는 인터럽트이다. 프로그램이 잘못된 연산을 수행할 때 이를 처리하기 위해 사용되는 예외 상황 처리와 시스템 콜이 소프트웨어 인터럽트에 해당된다.

 

인터럽트 처리 과정

  1. 인터럽트가 발생했다.
  2. 현재 수행 중인 프로세스의 상태 정보를 PCB에 저장한다.
  3. 프로그램 카운터에 다음에 수행할 명령의 주소를 저장한다.
  4. 인터럽트의 ISR(Intrrupt Service Routine)를 얻어 해당 주소로 이동하여 루틴을 처리한다.
  5. 프로그램 카운터의 값을 통해 인터럽트 이전에 수행하던 프로세스를 실행한다.