CS/OS

[OS] 인터럽트(Interrupt)란?

Deveun 2021. 8. 7. 16:31

초기 컴퓨터 시스템은 CPU 작업 중 입출력장치에 데이터를 통신할 일이 생기면 이를 직접 수행하는 폴링(Polling) 방식이었다. 이 때, CPU에서 입출력에 관여하는데 시간이 소요된다는 시간문제가 있었는데 이를 해결하기 위해 등장한 것이 바로 인터럽트(Interrupt)방식이다.

 

기존의 폴링 방식때에는 CPU만이 메모리나 주변장치에 대한 권한을 가지고 있었는데, 인터럽트 방식에서는 이 권한을 입출력 관리자에게 부여하고, CPU는 본래 역할(명령어 해석, 실행)에 충실하여 작업의 효율을 높혔다.

이 때, 입출력 관리자에게 부여한 권한을 직접 메모리 접근(DMA)라고 한다.

 

 

인터럽트 동작과정

(1) CPU에서 프로세스 실행중 I/O요청 발생시 해당 프로세스를 대기 상태로 변경. 다음 프로세스 수행

(2) 입출력관리자가 대기상태의 프로세스의 I/O 작업 수행 (DMA)

(3) (2)의 데이터 통신 완료시에 CPU에 알림 ==> 인터럽트

(4) 해당프로세스의 상태를 준비상태로 변경

 

 

출처: Operating System Concepts, 10th Ed. Abraham Silberschatz

 

 

* 또한, CPU에서 하나의 프로세스는 일정 시간의 작업 수행 권리를 가지게 되는데, 실행시간이 끝나고(timeout) 다시 준비 상태로 돌아가는 것도 인터럽트라고 한다. 

 

* DMA의 동작과정에서 메모리에는 CPU가 사용하는 데이터들과 입출력장치가 사용하는 데이터가 같이 있게된다. 이 때 데이터들이 서로 섞이지 않게 메모리에 입출력 작업 영역을 분리하는 것을 메모리 매핑 입출력(MMIO) 한다.

 

* CPU와 DMA가 동시에 메모리에 접근하는 경우에는 어떻게 될까? 이 때는 비교적 작업속도가 느린 DMA가 메모리 사용권한을 가지게 되는데, 이를 CPU입장에서 사이클 훔치기 라고 표현한다.