인터럽트

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


1. 종류[편집]

인터럽트의 종류는 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 분류

1.1. 외부 인터럽트[편집]

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

1.2. 내부 인터럽트[편집]

  • 잘못된 명령이나 잘못된 데이터를 사용할때 발생
  • Trap이라고도 함
  • 프로그램 검사 인터럽트(Program check interrupt)
    • Division by zero
    • Overflow/Underflow
    • 기타 프로그램 Exception

1.3. 소프트웨어 인터럽트[편집]

  • 프로그램 처리 중 명령의 요청에 의해서 발생
  • 대표적인 형태는 프로그램에서 감시 프로그램(SVC) 호출
  • SVC(SuperVisor Call)
    • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
    • 복잡한 입출력 처리를 하는 경우

2. 인터럽트 동작 순서[편집]

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


3. 인터럽트 우선순위[편집]

여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요
  1. 전원 이상(Power fail)
  2. 기계 착오(Machine Check)
  3. 외부 신호(External)
  4. 입출력(I/O)
  5. 명령어 잘못
  6. 프로그램 검사(Program Check)
  7. SVC(SuperVisor Call)
  • 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 높고,
  • 일반적으로 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다.


3.1. 우선순위 판별 방법[편집]

3.1.1. 소프트웨어적인 방법(폴링)[편집]

Polling
  • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다.
  • 속도가 빠른 장치에 높은 등급을 부여한다.
  • 우선순위 변경이 쉽다.
  • 많은 인터럽트가 있을 경우 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다.
  • 회로가 간단하고 융통성이 있으며, 별도의 하드웨어가 필요 없다.
  • Polling의 주기가 짧으면 server 성능에 부담이 생기며, 주기가 길어지면 실시간성이 떨어진다

3.1.2. 하드웨어적인 방법[편집]

Vectored Interrupt
  • 인터럽트를 요청할 수 있는 장치와 CPU사이에 장치번호를 식별할 수 있는 버스를 직렬/병렬로 연결한다.
  • 인터럽트 벡터는 인터럽트를 발생한 장치가 분기할 곳에 대한 정보이다.
  • 소프트웨어적인 방법에 비해 비경제적이다.
  • 회로가 복잡하고 융통성이 없으나, 별도의 소프트웨어가 필요없이 하드웨어로 처리되므로 속도가 빠르다.
  • 하드웨어적인 방법은 아래 2가지로 나뉜다.
  • Daisy Chain
    • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
    • 우선순위가 높은 장치를 상위에 두고 우선순위 차례대로 배치한다.
  • 병렬(Parallel) 우선순위 부여 방식
    • 인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.
    • 각 장치별 우선순위를 판별하기 위한 Mask register에 bit를 설정한다.
    • Mask register상 우선순위가 높은 서비스 루틴 수행중 우선순위가 낮은 bit들을 비활성화 시킬 수 있다.
    • 반대로 우선순위가 높은 인터럽트는 낮은 인터럽트 수행 중에도 우선 처리된다.