인터럽트 서비스 루틴이 처리 중이며 특정 IRQ 라인이 비활성화되면 동일한 IRQ 라인에 등록 된 장치가 인터럽트를 발생시킬 때 발생합니다. 인터럽트가 손실되거나 저장되어 나중에 처리 될 수 있습니다.ISR이 실행 중일 때 특정 IRQ 라인의 인터럽트는 어떻게 될까요? 손실되거나 저장되어 나중에 처리 할 수 있습니다.
친절하게 설명합니다.
미리 감사드립니다.
인터럽트 서비스 루틴이 처리 중이며 특정 IRQ 라인이 비활성화되면 동일한 IRQ 라인에 등록 된 장치가 인터럽트를 발생시킬 때 발생합니다. 인터럽트가 손실되거나 저장되어 나중에 처리 될 수 있습니다.ISR이 실행 중일 때 특정 IRQ 라인의 인터럽트는 어떻게 될까요? 손실되거나 저장되어 나중에 처리 할 수 있습니다.
친절하게 설명합니다.
미리 감사드립니다.
일반적으로 인터럽트는 손실됩니다. 즉, 장치 드라이버가 인터럽트 상태와 관련된 장치 레지스터를 정기적으로 검사하는 것처럼 누락 된 인터럽트가 발생했다는 것을 추론 할 수없는 경우입니다.
대다수는 아니지만 대부분의 장치 드라이버는 그렇게하지 않습니다. 인터럽트를 신속하게 처리하고 인터럽트에서 돌아 오는 것이 좋습니다. 따라서 다음 인터럽트를 더 빨리 처리 할 수 있습니다.
합리적인 목표는 코드 경로 ISR 로직을 12 진수 —보다 적은 수의 — 개의 간단한 소스 코드로 제한하는 것입니다. 이것은 서비스가 필요한 모든 것을 서비스함으로써 쉽게 달성 할 수 있습니다 : 일반적으로 장치 레지스터와의 몇 가지 전송, 준비된 I/O에 대한 차단 된 작업 표시 및 반환. 물론 나머지 드라이버 (ISR이 아닌 부분)는 ISR 효율성을 달성하기 위해 더 많은 작업을해야 할 수도 있지만 좋은 드라이버 설계는 IMHO입니다.
ISR이 그 자리에서 더 많은 작업을 수행하고 스레드 기반 처리가 지연되지 않는다면 대기 시간과 시스템 성능을 향상시킬 수 있다고 주장하는 많은 장치 드라이버 엔지니어와 논의했습니다. 나는 주장이 사실이라는 것을 확신하지 못한다. 내 여기에 대답 밖으로
확인 : 특정 IRQ
라인 On x86, when the OS disables interrupts, do they vanish, or do they queue and 'wait' for interrupts to come back on?
인터럽트 인터럽트 손실됩니다. 따라서 ISR
루틴은 그러한 sceanrio가 발생하지 않도록 최대한 빨리 실행해야합니다. 이것이 우리가 상반부, 하반부 접근 방식 (작업 표, 워크 큐)으로 이동 한 후 Threaded IRQs
으로 이동 한 이유입니다.
http://stackoverflow.com/questions/11779397/what-happens-to-preempted-interrupt-handler의 가능한 복제본 – computerfreaker