인터럽트

개요[편집 | 원본 편집]

인터럽트CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능이다.

설명[편집 | 원본 편집]

대부분의 컴퓨터는 한 개의 CPU를 사용하고 있기에 한 순간에는 하나의 일 밖에 처리할 수 없기 때문에[1] 어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요하다.

예를 들면, 키보드의 키를 하나 누르면, 눌려진 키 코드 값이 키보드 버퍼에 입력된 후 CPU에 인터럽트가 걸린다. 그럼 현재 처리하던 작업에 대한 정보를 수집하여 저장한 뒤에 인터럽트 서비스 루틴(Interrupt Service Routine)을 수행한다.(이 경우에는 키보드 버퍼에 있는 키 코드 값을 가져가는 일을 한다.) 이렇게 인터럽트 처리를 마친 후에는 다시 이전에 처리하던 작업으로 돌아간다.

과정[편집 | 원본 편집]

이제 이런 인터럽트의 처리 과정을 매우 간단하게 정리해서 설명하면 다음과 같다.

  1. 기존의 작업을 처리하던 도중, 인터럽트가 발생하면
  2. 현재 컴퓨터가 처리하는 일을 중지하고 현재의 컴퓨터의 상태(CPU 내부의 레지스터, 메인 메모리 내용 등을) 저장한다.
  3. 해당하는 인터럽트를 처리해주기 위한 인터럽트 서비스 루틴을 처리한다.
  4. 인터럽트 처리 이후 저장되었던 이전 작업의 상태를 복구하고 이전 작업 수행을 재개한다.

종류[편집 | 원본 편집]

인터럽트는 다양한 종류가 있다. 일반적으로 사용되는 인터럽트는 두 가지 정도가 있는데,

  • 외부 인터럽트: 입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인에 의해서 발생하는 인터럽트.
    전원 이상 인터럽트: 정전이나 전원이 이상이 있는 경우
    기계 고장 인터럽트: CPU등의 기능적인 동작 오류가 발생한 경우
    입출력 인터럽트(I/O Interrupt): 입출력의 종료 등의 이유로 CPU의 수행을 요청하는 인터럽트.
  • 내부 인터럽트: 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트
    0으로 나누는 경우
    오버플로우 또는 언더플로우가 발생한 경우
    프로그램 상의 오류[2]
    프로그램에서 함수등 명령어를 잘못 사용한 경우
    소프트웨어 인터럽트: CPU가 인스트럭션을 수행하는 도중에 일어나는 인터럽트[3]

각주

  1. 대부분의 컴퓨터가 동시에 여러 가지 일을 동시에 처리하는 것 같지만 사실 매우 빠른 속도로 시간을 매우 잘게 쪼개고 일을 나누어서 처리한다. 이런 방식을 time-sharing(시-분할) 방식이라고 한다.
  2. 이상하게 메모리 장소를 참조하는 경우 등
  3. 주로 기계어 레벨에서 제공되지 않는 인스트럭션을 운영 체제의 시스템 콜(System Call)의 형태로 제공되는 인터럽트