2014-03-25 6 views
1

인터럽트 서비스 루틴이 처리 중이며 특정 IRQ 라인이 비활성화되면 동일한 IRQ 라인에 등록 된 장치가 인터럽트를 발생시킬 때 발생합니다. 인터럽트가 손실되거나 저장되어 나중에 처리 될 수 있습니다.ISR이 실행 중일 때 특정 IRQ 라인의 인터럽트는 어떻게 될까요? 손실되거나 저장되어 나중에 처리 할 수 ​​있습니다.

친절하게 설명합니다.

미리 감사드립니다.

+0

http://stackoverflow.com/questions/11779397/what-happens-to-preempted-interrupt-handler의 가능한 복제본 – computerfreaker

답변

1

일반적으로 인터럽트는 손실됩니다. 즉, 장치 드라이버가 인터럽트 상태와 관련된 장치 레지스터를 정기적으로 검사하는 것처럼 누락 된 인터럽트가 발생했다는 것을 추론 할 수없는 경우입니다.

대다수는 아니지만 대부분의 장치 드라이버는 그렇게하지 않습니다. 인터럽트를 신속하게 처리하고 인터럽트에서 돌아 오는 것이 좋습니다. 따라서 다음 인터럽트를 더 빨리 처리 할 수 ​​있습니다.

합리적인 목표는 코드 경로 ISR 로직을 12 진수 —보다 적은 수의 — 개의 간단한 소스 코드로 제한하는 것입니다. 이것은 서비스가 필요한 모든 것을 서비스함으로써 쉽게 달성 할 수 있습니다 : 일반적으로 장치 레지스터와의 몇 가지 전송, 준비된 I/O에 대한 차단 된 작업 표시 및 반환. 물론 나머지 드라이버 (ISR이 아닌 부분)는 ISR 효율성을 달성하기 위해 더 많은 작업을해야 할 수도 있지만 좋은 드라이버 설계는 IMHO입니다.

ISR이 그 자리에서 더 많은 작업을 수행하고 스레드 기반 처리가 지연되지 않는다면 대기 시간과 시스템 성능을 향상시킬 수 있다고 주장하는 많은 장치 드라이버 엔지니어와 논의했습니다. 나는 주장이 사실이라는 것을 확신하지 못한다. 내 여기에 대답 밖으로