인터럽트
HW/컴퓨터 구조

인터럽트

인터럽트란 사전적 의미로는 '끼어들다', '중단시키다' 정도의 의미를 가진 말로 CPU가 프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것을 말한다.

 

인터럽트의 종류

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

 

외부 인터럽트

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

내부 인터럽트

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

소프트웨어 인터럽트

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

 

인터럽트 동작 순서

 

구성 요소동작 절차설명

인터럽트
벡터 테이블
(IVT)
Interrupt occurs – 요청 신호 모니터링 및 검출
Interrupt Vector Table – IVT에 인터럽트ID 조회
인터럽트 벡터 테이블의 해당 주소로 PC 값 변경
인터럽트
서비스 루틴
(ISR)
Disabling Interrupt – 인터럽트 처리 루틴 진입 후 상호 배제(Lock)
Save Processor-State – 인터럽트 당한 시점의 레지스터와 PC(program counter) 를 PCB(Process Control Block)에 저장(Context Switching) 

*Context Switching : 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정을 말합니다.
Interrupt Handling – 인터럽트 요청 작업수행
Restore Processor-State – 인터럽트 발생 시 저장해둔 PC(Program counter)를 다시 복구한다.(Context Switching)
Enabling interrupt – 상호배제 자원 반납 (Unlock), 인터럽트 루틴 종료

 

인터럽트 핸들러 (Interrupt Handler)

인터럽트 서비스 루틴(Interrupt Service Routine)이라고도 하며  실제 인터럽트를 처리하는 루틴으로 실행 중이던 레지스터 와 PC 를 보관함으로써 CPU의 상태를 보존한다. 인터럽트가 핸들링이 완료되면 이전의 상태로 복귀된다.

 

인터럽트 벡터 (Interrupt Vector)

인터럽트 요청이 발생했을 때, CPU는 인터럽트 소스가 무엇이며, 해당 인터럽트 ISR이 어디에 적재되어있는지를 확인해야한다. 이 때, CPU는 인터럽트 벡터 를 활용한다.

  • 여러 종류의 인터럽트에 대한 ISR의 시작 주소
  • 인터럽트 벡터 테이블 : 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블

인피니언, 마이크로침, Atmel, 프리스케일, AMD, 인텔 등 대부분의 CPU들은 인터럽트 벡터 테이블을 가지고 있다.

 

PC (Program Counter)

CPU 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다. 때문에 명령어 포인터라고도 불린다.

 

인터럽트 요청 신호

컴퓨터 내 자원들이 인터럽트 요청 회선을 통해 CPU에게로 요청 신호를 전달하게 된다.

인터럽트 신호 요청 회선에는 '단일 회선 방식'과 '고유 회선 방식' 2가지 종류가 있다.

 

단일 인터럽트 신호 요청 회선

인터럽트 요청이 가능한 장치를 CPU와 단일 회선으로 연결하는 방식

 

모든 자원이 하나의 회선을 사용하므로 인터럽트를 요청한 장치 판별 과정이 필요하고 복귀 주소인 PC값을 Memory 0번지나 Stack에 저장해서 처리 속도가 느립니다.

 

폴드[Polled] 인터럽트 방식

 

고유 인터럽트 신호 요청 회선

CPU에 있는 Interrupt Register의 각 비트에 고유 회선을 연결하는 방식

 

장치마다 고유한 요청 신호 회선을 가지므로 인터럽트 요청한 장치 판별 과정이 필요 없으므로 처리 속도가 빠릅니다.

벡터[Vector] 인터럽트 방식

 

인터럽트 우선순위

 

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

 

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

 

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

 

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

 

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

  • 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾고, 이에 해당하는 인터럽트 서비스 루틴을 수행한다.
  • 데이지-체인 방식과 같은 방식이지만 그 역할을 소프트웨어가 수행한다는 점에 있어서 다르다.
  • 장점 - 회로가 간단, 우선 순위의 변경이 용이
  • 단점 - 하드웨어 적인 방법에 비해서 우선순위 판단 속도가 느리다.

 

하드웨어적인 방법(Vectored Interrupt)

인터럽트를 요청할 수 있는 장치와 CPU사이에 장치번호를 식별할 수 있는 버스를 직렬/병렬로 연결한다.

 

소프트웨어적인 방법에 비해 비경제적이다.

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

 

하드웨어적인 방법은 아래 2가지로 나뉜다.

 

1) Daisy Chain

  • 인터럽트가 발행하는 모든 장치를 한 개의 회선에 직렬로 연결
  • INTA는 첫 번째 I/O 제어기로 보내진다.
    • 만약 그 제어기가 인터럽트를 요구한 상태라면,
      즉시 데이터 버스를 통해 자신의 ID(인터럽트 벡터)를 CPU에 보낸다.
    • 인터럽트를 요구한 상태가 아니라면, 확인 신호를 다음 제어기로 통과시킨다.
  • 장점 - 하드웨어가 간단하다.
  • 단점 - 우선 순위가 낮은 장치들이 서비스를 받지 못하고 매우 오래 기다려야 하는 경우가 발생 가능

 

2) 병렬(Parallel) 우선순위 부여 방식

인터럽트가 발생하는 모든 장치를 하나의 직렬 회선으로 연결한다.

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

마스크 레지스터는 우선순위가 높은 것이 서비스 받고 있을 때 우선순위가 낮은 것을 비활성화시킬 수 있다.
우선순위가 높은 인터럽트는 낮은 인터럽트가 처리되는 중에도 우선 처리된다.

 

 

 

https://itwiki.kr/index.php?title=%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8&oldid=26672

 

IT위키

IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키

itwiki.kr

 

'HW > 컴퓨터 구조' 카테고리의 다른 글

시스템 버스  (0) 2022.07.06