Interrupt (인터럽트)

이유석·2022년 1월 25일
0

CS - Operating System

목록 보기
2/20

Interrupt (인터럽트)

정의

  • 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는것

  • 지금 수행중인 일보다 더 중요한 일(ex. 입출력, 우선 순위 연산 등)이 발생하면, 그 일을 먼저 처리하고 나서 하던 일을 계속 해야한다.
    ex) CPU 연산 수행 도중에 I/O 연산 필요 시, interrupt에 의해 수행 흐름 변경

  • 인터럽트는 interrupted instruction의 주소를 PCB에 저장하여야 한다. (해당 프로그램을 재시작하기 위해서)

종류

외부/내부 인터럽트는 CPU의 하드웨어 신호에 의해 발생
소프트웨어 인터럽트는 명령어의 수행에 의해 발생

  • 외부 인터럽트
    입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생

    ex) 전원 이상, 기계 착오, 외부 신호, 입출력

  • 내부 인터럽트
    Trap 또는 Exception 이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생

    ex) Division by Zero, Overflow/Underflow, 기타 Execption(명령어를 잘못 사용)

  • 소프트웨어 인터럽트
    SVC(SuperVisor Call) 인터럽트
    프로그램 처리 중 명령의 요청에 의해 발생한것

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


인터럽트 발생 및 처리 과정

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

인터럽트 우선순위

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

  • 전원 이상(Power fail) > 기계 착오(Machine Check) > 외부 신호(External) > 입출력(I/O) > 명령어 잘못 > 프로그램 검사(Program Check) > SVC(SuperVisor Call)
  • 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선순위가 높다.
  • 또한, 내부 인터럽트 보다 외부 인터럽트가 우선순위가 높다.

우선순위 판별방법 (인터럽트 컨트롤러가 입력을 받아들이는 방법)

  • 폴링(Polling)

    • 소프트웨어적인 방법
    • 주기적으로 인터럽트가 있는지 확인한다. → 비효율적, 값 싸게 사용
    • 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
    • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. (하드웨어에 비해 속도 느림)
  • 인터럽트 방식(Vectired Interrupt System)

    • 하드웨어적인 방법

    • 인터럽트 발생 시, 해당하는 Interrupt Vector를 찾아서 interrupt 서비스 수행

      Interrupt Vector : 인터럽트를 발생한 장치가 분기할 곳에 대한 정보

    • Polling 방법에 비해 비경제적이다.

    • 회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠르다.

    • Daisy Chain 방식

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

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

0개의 댓글