본문 바로가기
Computer Science/운영체제

[OS] 인터럽트란? (인터럽트가 필요한 이유, 인터럽트 동작 방식, 종류, 한번에 여러개의 인터럽트가 발생한다면?)

by 그적 2024. 1. 6.

목차

  • 인터럽트란?
  • 인터럽트가 필요한 이유
  • 인터럽트 동작 방식
  • 인터럽트 종류
  • 한 번에 여러 개의 인터럽트가 발생한다면?

 


1. 인터럽트란?

프로그램이 동작하고 있을 때 하드웨어 처리(주로 입출력 연산) 혹은 예외 상황에 대한 처리가 필요할 때, CPU에게 이를 알려 처리할 수 있도록 하는 일종의 신호이다. 예를 들어, 키보드 입력이 들어왔을 때 실행 중이던 프로그램을 중단하고 키보드 입력을 수행하는데, 이때 인터럽트를 통해 CPU에게 입출력 처리가 필요함을 알리는 것이다. 이후 인터럽트에 대한 처리를 끝내면 다시 작업 중이던 프로그램을 실행한다.

 


2. 인터럽트가 필요한 이유

일단 입출력 연산이 발생했을 때 구체적인 과정을 설명해보려고 한다.

 

메모리 및 I/O 장치 등의 하드웨어는 컨트롤러가  처리하는데, 오가는 데이터를 임시로 저장하는 로컬 버퍼에 데이터를 저장한 후 메모리로 전달된다. 만약 I/O 장치 연산이 들어왔을 때 컨트롤러가 입력 연산에 대한 처리를 끝냈는지 체크해야 한다. 따라서 CPU가 이 과정을 지켜보고 있다가 확인하는 것이 아닌 컨트롤러가 인터럽트를 발생시켜 입력 연산 작업이 끝났음을 CPU에게 알린다.

 

만약 위의 과정에서 입력 연산이 끝날 때까지 CPU가 이 과정을 지켜보고 있다면? 컨트롤러가 입력을 처리할 동안에 CPU는 아무 작업을 하지 않고 있으며, 이는 매우 비효율적이다. 따라서 CPU는 계속해서 다른 작업을 하고 있으며, 인터럽트가 발생했을 때 하던 작업을 멈추고 인터럽트를 처리한 후 다시 원래 작업으로 돌아오는 과정을 반복한다.

 


3. 인터럽트 동작 방식

1) 수행 중이던 프로세스 저장

 : CPU는 현재 진행 중인 명령을 완료한 후, 인터럽트 신호를 확인한다. CPU는 명령을 실행할 때 CPU 내부에 있는 임시 기억장치인 레지스터에 데이터를 저장해 두면서 작업한다. 이때 인터럽트가 발생하면 기존의 레지스터에 들어있는 데이터가 사라지기 때문에, PCB(Process Control Block)에 정보를 저장해 둔다. 그 후, PC()에 다음에 실행할 명령의 주소를 저장한다. 

 

2) 인터럽트 처리

 : 일반적으로 인터럽트가 발생하면 인터럽트 번호를 읽은 후, 반드시 제어권을 적절한 ISR(Interrupt Service Routine, 인터럽트 서비스 루틴)에게 넘겨야 한다. ISR을 가리키는 포인터 배열을 사용해 인터럽트를 처리하는데, ISR들의 주소가 담긴 배열을 인터럽트 벡터라고 한다. 

 

3) 작업 중이던 프로세스 복원

 : 인터럽트 처리를 완료하면 PCB에 저장해 둔 이전에 수행 중이던 프로세스 정보를 복구한 후, 다시 실행한다.

 


4. 인터럽트 종류

인터럽트 종류는 CPU의 인터럽트 라인을 누가 세팅했는가에 따라 나뉜다.

 

 1) 외부 인터럽트 (하드웨어 인터럽트)

 : 입출력 장치, 전원 등의 하드웨어에 의해 발생하며, 컨트롤러(하드웨어에 속함) 등이 인터럽트 라인을 세팅한다.

  • 전원 이상 인터럽트 : 정전이나 전원 이상일 때
  • 기계 고장 인터럽트 : CPU 등의 동작 오류가 발생했을 때
  • 입출력 인터럽트 : 입출력 종료할 때

 

2) 내부 인터럽트 (소프트웨어 인터럽트)

 : 트랩(trap)이라는 용어로 불리며, 프로그램 내부에서 잘못된 명령 혹은 데이터를 사용했을 때 발생한다. 소프트웨어가 인터럽트 라인을 세팅한다.

  • 예외상황(exception) : 0으로 나눌 때, 오버플로우/언더플로우 발생할 때, 프로그램 상의 오류가 있을 때 등
  • 시스템 콜(system call) : 사용자 프로그램이 운영체제, 즉 커널에 있는 코드를 호출할 때

 


5. 한 번에 여러 개의 인터럽트가 발생한다면?

인터럽트에 설정된 우선순위에 따라 처리하며, 숫자가 높을수록 더 높은 우선순위를 가진다. 아래는 인텔 프로세스에 대한 인터럽트 벡터이다. 0 ~ 31까지는 반드시 바로 처리해야 하는 인터럽트이며, 내부 인터럽트에 해당한다. 32 ~ 255까지는 하드웨어 인터럽트(32 ~ 47, 시스템 콜은 128)를 포함하고 있으며, 잠시 중단되거나 무시될 수 있는 인터럽트이다.

 

 


4. 시스템 콜 인터럽트

시스템 콜이 발생하면 0x80을 넘겨주면서 인터럽트를 발생시킨다. 16진수인 0x80을 10진수로 변환하면 128이며, 인터럽트 벡터 테이블에도 저장되어 있다.

 

댓글