[전자계산기구조] 인터럽트(Interrupt)

[전자계산기구조] 인터럽트(Interrupt)

인터럽트는 컴퓨터 구조에서 CPU의 활동에 많은 영향을 끼치는 중요한 개념이다.


인터럽트

  • '끼어 들다', '중단시키다' 정도의 의미를 가진 말로 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것을 말한다.
  • 입출력 장치 제어기에서 중앙처리장치로 보내는 신호
  • 인터럽트가 발생하면 운영체제가 제어권을 받는다.


인터럽트 사이클

CPU가 어떤 프로그램을 순차적으로 수행하는 도중에 외부로부터 인터럽트 요구가 들어오게 되면, CPU는 원래의 프로그램 수행을 중단하고 요구된 인터럽트를 처리해주기 위한 프로그램을 먼저 수행한다. 인터럽트에 대한 처리가 끝나면 CPU는 원래의 프로그램으로 복귀(return)하여 그 수행을 계속한다. 

인터럽트의 종류

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


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

내부 인터럽트(동기)
  • 프로그램 검사 인터럽트(Program Check Interrupt)
    • Division by zero
    • Overflow / Underflow
    • 기타 Exception


소프트웨어 인터럽트(SVC : SuperVisor Call)
  • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
  • 소프트웨어 이용 중 다른 프로세스를 실행시키면 시분할 처리를 위해 자원 할당 등의 동작이 수행된다.
  • 프로세스 관리 호출, 기억장치 할당 후틴 호출, 입출력 수행 루틴 호출 시에 발생하는 인터럽트로 사용자가 새로운 프로그램을 실행할 때 발생한다.
  • 새로운 프로그램을 실행하는 것은 사용자와 운영체제 정보 교환을 하므로 오퍼레이터(사용자)와의 대화시에 발생하는 인터럽트라고도 한다.
트랩 = 소프트웨어 인터럽트
= 실행중인 프로그램 내에 특별한 조건을 걸어 놓은 것.
ex) 0으로 나누기 Overflow 등등


인터럽트 동작 순서

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


인터럽트 우선순위

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

  1. 전원 이상(Power fail)
  2. 기계 착오(Machine Check)
  3. 외부 신호(External)
  4. 입출력(I/O)
  5. 명령어 잘못
  6. 프로그램 검사(Program Check)
  7. SVC(Supervisor Call)


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

인터럽트 우선순위 체제의 목적
  • CPU에는 여러 장치가 연결되어 있어 동시에 인터럽트가 발생할 수 있으므로, 이와 같이 동시에 하나 이상의 인터럽트가 발생하였을 때 먼저 서비스할 장치의 결정
인터럽트 우선순위를 판별하는 방법은 소프트웨어적인 방법과 하드웨어적인 방법이 있음

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

우선순위를 소프트웨어적으로 알아내는 방법으로서 모든 인터럽트를 위한 공통의 서비스 프로그램을 가지고 있다.
융통성 있고 경제적이지만 입출력을 위해 입출력장치를 계속 반복적으로 검사하므로 처리 속도가 느리다.
프로세서가 입출력을 위해 입출력장치의 상태를 반복적을 검사한다.

ex) 한대의 모국이 있고, 5대의 자국이 있다고 가정하면 각각의 자국은 모국에게 무언가를 알리고 싶어도 곧바로 알릴수가 없다. 자신의 상태를 유지시켜놨다가, 무국이 차례차례 자국의 상태를 확인할 때 그때 자국의 요구사항을 알게되고 조치를 취하게 된다.

Daisy-chain 방식(하드웨어적인 방법)

데이지 체인 동작원리
  1. 한 개 또는 그 이상의 입출력 모듈이 인터럽트를 요구한다.
  2. 인터럽트 요구를 수신한 중앙처리장치는 이에 대한 확인 신호(ACK)를 보낸다.
  3. 확인 신호를 수신한 입출력 모듈 중에서 인터럽트를 요구하지 않은 모듈은 다음 모듈로 확인 신호를 전달한다.
  4. 확인 신호를 수신한 인터럽트를 요구한 모듈은 데이터 버스를 통하여 인터럽트 벡터를 보낸다. 전달된 벡터로 CPU는 입출력 모듈을 구분한다.
인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다.

하드웨어 우선 순위 인터럽트 장치는 인터럽트 라인을 직렬이나 병렬로 연결하여 우선순위를 결정하는 것으로, 이중 직렬로 연결하여 우선순위를 결정하는 것이다.

ex) SCSI 인터페이스는 최대 7개의 장치까지 데이지체인형식을 지원한다.


병렬(Parallel) 방식(하드웨어적인방법)

각 장치별 우선순위를 파별하기 위한 Mask register에 bit를 설정한다.

인터럽트가 발생했는지 확인하는 회로가 각 장치마다 별개의 회선으로 연결하는 하드웨어적인 방법
데이지 체인 & 병렬 방식은 하드웨어적인 방법으로 인터럽트 우선순위를 판별하는 것을 벡터 인터럽트라고 부릅니다.



댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?