인터럽트 (Interrupt)

 

- 비동기적 이벤트의 발생을 처리하기 위한 메커니즘

 

- 인터럽트 발생시 문맥을 저장하고 ISR로 점프

 

- 활성, 비활성화 가능

 

   비활성화 시간은 가능한 짧게 해야함

 

 

 

- 지연시간

 

  비활성화 최대시간 + ISR 최소 명령시간

 

 

인터럽트

HW에서 발생하는 비동기적 이벤트 발생에 대해

CPU가 대응되는 SW적인 처리를 수행하는 매커니즘


대부분 많은 인터럽트는

 

해당 인터럽트가 언제 발생하라 지 모릅니다.

 

타이머 인터럽트처럼

 

언제 발생할지 예측할 수 있는 인터럽트도 더러 있습니다.



CPU는 인터럽트가 발생하면, 현재 작업을 멈추고

 

인터럽트를 처리하기 위한 ISR 인터럽트 서비스 루틴을 실행합니다.

 

 

인터럽트 서비스 루틴 = 인터럽트 핸들러

 

 

필요할 경우, 인터럽트가 HW에서 발생하더라도

 

ISR이 실행되지 않도록 할 수 있는데

 

이것을 인터럽트 비활성화 라고 합니다.

 

그 반대말은 인터럽트 활성화 입니다.

 

 

 

대부분의 임베디드 시스템에서는

 

인터럽트를 지원하는 다수의 HW들을 사용하므로

 

이를 위해 별도의 인터럽트를 관리하는 장치를 필요로 하는데

 

그 장치를 인터럽트 컨트롤러 라고 합니다.

 

 

이 장치는 HW 주변 장치 사이에서

 

인터럽트 신호 전달을 중계하는 역할을 수행합니다.

 

 

 

인터럽트를 비활성화하는 방법에는 두 가지가 있습니다.

 

첫째, CPU로 입력되는 인터럽트 신호를

 

CPU 스스로 마스킹하는 것입니다.

 

이처럼 하면, 외부에서 들어오는 인터럽트 요청이

 

내부적으로 처리되지 않습니다.

 

 

이 경우, 인터럽트 요청에 대한 처리가

 

거절된 것이 아니고, 잠시 보류된 것입니다.

 

이후 CPU의 인터럽트 마스킹이 해제되기만 하면

 

보류되었던 인터럽트 처리가 즉시 시작됩니다.

이 보류라는 용어는, 전문용어로 인터럽트 펜딩 (Interrupt Pending) 이라고 합니다.

 

 


인터럽트를 비활성화하는 두 번째 방법입니다.

 

인터럽트 컨트롤러에 입력으로 들어오는 

 

개별적인 인터럽트 요청 신호를 마스킹하는 것입니다.

 



이 방법은 HW 주변장치를 필요할 경우, 

 

개별적으로 비활성화 할 수 있다는 점이

 

첫 번째 방법이었던 CPU 인터럽트 비활성화 방법과 비교됩니다.

 

 

인터럽트 지연 시간은 보통

인터럽트 레이턴시 (INTERRUPT LATENCY) 라고도 말하는데,

 

인터럽트 요청 신호가 발생한 이후부터

 

실제 인터럽트 핸들러가 실행을 시작하기 직전까지의

 

시간 길이를 말합니다.

 

 

 

통상 인터럽트 지연 시간은 짧을 수록

 

인터럽트 응답성이 좋다고 말합니다.


+ Recent posts