Interrupt

June·2022년 1월 22일
0
post-thumbnail

Interrupt(인터럽트)란?

사전적 의미로는 '끼어들다', '중단시키다' 정도의 의미를 가진 말로 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것을 말한다.
예를 들면 '안녕하세요'에서 이영자씨가 막 진행을 하면서 얘기를 하고 있는데 그때 신동엽씨가 갑자기 "아니! 아니 ! 잠깐만!!"

이라고 이영자씨의 말을 중간에 끊어버렸다. 그러면 이영자씨는 하던 말을 잠깐 멈추고, 신동엽씨의 얘기를 들어본 후 다시 토크를 진행하게 될 것이다. 이때 이영자씨가 바로 "CPU"라고 했을때, 신동엽씨가 한 행동을 "인터럽트"라고 할 수 있다.

Interrupt의 종류

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

외부 인터럽트

  • 전원 이상 인터럽트(Power fail interrupt) : 말그대로 정전, 파워 이상 등
  • 기계 착오 인터럽트(Machine check interrupt) : CPU의 기능적인 오류
  • 외부 신호 인터럽트(External interrupt)
    • 타이머에 의한 인터럽트 : Preemptive개념을 생각하면 된다. 자원이 할당된 시간이 다 끝난 경우
    • 키보드로 인터럽트 키를 누른 경우 : 대표적으로 Control + Alt + Delete
    • 외부장치로부터 인터럽트 요청이 있는 경우 : I/O 인터럽트 아님!! 다른 개념이다
  • 입출력 인터럽트(I/O Interrupt)
    • 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
    • 입출력 데이터에 이상이 있는 경우

내부 인터럽트

  • 잘못된 명령이나 잘못된 데이터를 사용할때 발생하며 Trap이라 부른다.
  • 프로그램 검사 인터럽트(Program check interrupt)
    • Division by zero
    • Overflow/Underflow
    • 기타 Exception
  • 소프트웨어적이 내용이나 분류상 인터럽트가 아니다!

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

  • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
  • 소프트웨어 이용중 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 등의 동작이 수행된다.

Interrupt 동작 순서

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

Interrupt 우선순위

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

전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)

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

우선순위 판별방법

  • 폴링 방식
    - 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
    - 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. (하드웨어에 비해 속도 느림)

  • 인터럽트 방식
    - MCU 자체가 하드웨적으로 변화를 체크하여 변화 시에만 일정한 동작을 하는 방식

    • Daisy Chain
    • 병렬 우선순위 부여

인터럽트 방식은 하드웨어로 지원을 받아야 하는 제약이 있지만, 폴링에 비해 신속하게 대응하는 것이 가능하다. 따라서 실시간 대응이 필요할 때는 필수적인 기능이다.

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

참고자료(출처)

  1. https://gyoogle.dev/blog/computer-science/operating-system/Interrupt.html
  2. https://whatisthenext.tistory.com/147
  3. https://raisonde.tistory.com/entry/인터럽트Interrupt의-개념과-종류 [지식잡식]
profile
회사와 “함께” 성장하는 개발자

0개의 댓글