CS/운영체제

Interrupt

yhsim98 2022. 7. 24. 19:33

인터럽트

프로그램을 실행하는 도중 예상치 못한(CPU의 점유를 빼앗기는) 상황이 발생할 경우 작업을 즉시 중단하고, 발생한 상황을 우선 처리 후 실행중이던 작업으로 복귀하는 것

 

  • 입출력, 우선순위 연산 등의 발생
  • 하드웨어 장치가 CPU를 호출해야 하는 경우 CPU에 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다
  • CPU는 매번 PC register 가 가리키는 명령어를 수행한 뒤, 다음 명령을 수행하기 전 인터럽트 라인을 확인한다
  • 인터럽트가 발생하면 CPU는 현재 수행중이던 프로세스를 멈추고 운영체제의 인터럽트 처리 루틴(ISR)으로 이동하여 처리한다

 

입출력 장치나 주변 장치는 인터럽트 매커니즘을 통해 관리됩니다.

 

입출력 연산이 CPU 명령 수행속도보다 현저히 느리기 때문인데, 입출력 연산을 실행하는 동안 CPU가 기다리고 있으면 CPU 사용률에서 좋지 않습니다.

 

따라서 입출력 연산을 실행하는 동안 CPU는 다른 작업을 처리하다 입출력 처리가 완료되면 I/O controller가 작업을 완료했다고 인터럽트를 발생시키게 됩니다.

 

그럼 CPU는 해당 인터럽트를 처리하게 됩니다.

 

특정 프로세스가 CPU를 독점하는 것을 막기 위한 Time Sharing 시스템에서 Timer가 정해진 시간이 흐른 뒤 interrupt를 발생시킨다.

 

인터럽트는 크게 하드웨어와 소프트웨어 두 가지로 나눌 수 있습니다.

하드웨어 인터럽트

하드웨어가 발생시키는 인터럽트로, I/O Device 등이 발생시키는 경우

소프트웨어 언터럽트

사용자 프로그램에서 문데가 생겨 Exception이 발생하거나, 사용자 프로그램이 커널 함수 사용을 위해 system call 을 사용하는 경우

인터럽트 처리 과정

  1. CPU가 현재 레지스터 context를 PCB에 저장한다
  2. 인터럽트 처리 루틴을 통해 인터럽트 처리를 한다
  3. 인터럽트 처리가 완료되면 context를 restore 한다

DMA Controller

I/O Device는 메모리에 접근할 수 없고 CPU를 통해서만 접근할 수 있다. 이때 자주 인터럽트가 발생한다면 CPU가 모든 자잘한 인터럽트를 처리해야 합니다.

 

DMA 컨트롤러를 통해 device controller가 device 의 buffer storage의 내용을 메모리에 block 단위로 직접 전송할 수 있다.

이를 통해 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킵니다?