Passive-Level ISR
Windows 8부터 KMDF(커널 모드 드라이버 프레임워크) 및 UMDF(사용자 모드 드라이버 프레임워크) 드라이버는 옵션으로 수동 수준에서 실행되도록 ISR(인터럽트 서비스 루틴)을 등록할 수 있습니다.
KMDF 및 UMDF 드라이버에 대한 수동 수준 ISR에 대한 자세한 내용은 다음 topics 참조하세요.
주변 장치에서 GPIO(범용 I/O) 핀을 사용하여 프로세서에 인터럽트 요청을 릴레이하는 경우 Windows 인터럽트 추상화는 이 디바이스의 드라이버가 이 핀이 속한 GPIO 컨트롤러의 하드웨어별 세부 정보를 무시하도록 편리하게 합니다. 디바이스의 GPIO 릴레이 인터럽트 요청에 대한 응답으로 커널 트랩 처리기가 실행되면 이 처리기는 필요에 따라 GPIO 하드웨어의 인터럽트 레지스터를 자동으로 지우거나 마스크합니다. 또한 커널 트랩 처리기는 디바이스의 ISR을 직접 호출하거나 이 ISR이 다른 스레드에서 실행되도록 예약합니다.
GPIO 하드웨어 레지스터는 메모리 매핑되는 경우가 많으며, 이 경우 커널 트랩 처리기가 DIRQL에서 직접 액세스할 수 있습니다. 그러나 주변 디바이스의 하드웨어 레지스터는 메모리 매핑되지 않을 수 있습니다. 이 경우 주변 디바이스 드라이버는 I/O 요청을 사용하여 액세스해야 합니다. 이 경우 I/O 요청을 사용하여 인터럽트의 초기 서비스를 수행하거나 인터럽트의 초기 서비스를 수행할 수 있도록 주변 디바이스 드라이버에 대한 ISR을 IRQL = PASSIVE_LEVEL 실행해야 합니다. 수동 수준 ISR은 I/O 요청을 동기적으로 보내고 필요한 경우 요청이 완료될 때까지 차단할 수 있습니다.
에지 트리거 인터럽트 요청 신호를 생성하는 주변 디바이스에 대해 수동 수준 ISR을 지원하기 위해 커널 트랩 처리기는 GPIO 핀에서 보류 중인 인터럽트를 지우고 수동 수준 커널 스레드에서 실행되도록 ISR을 예약합니다.
수준 트리거 인터럽트 요청 신호를 생성하는 주변 디바이스에 대해 수동 수준 ISR을 지원하기 위해 커널 트랩 처리기는 GPIO 핀에서 보류 중인 인터럽트 마스크를 마스킹한 다음 수동 수준 커널 스레드에서 실행되도록 ISR을 예약합니다. ISR은 주변 장치에서 인터럽트 요청을 지울 책임이 있습니다. ISR이 반환되면 커널 스레드는 GPIO 핀에서 인터럽트 마스크를 해제합니다.
인터럽트는 ISR이 반환될 때까지 마스킹된 상태로 유지되므로 디바이스의 수동 수준 ISR은 인터럽트의 초기 서비스만 수행한 다음, 다른 디바이스에 대한 수동 수준 ISR 지연을 방지하기 위해 반환해야 합니다. 일반적으로 드라이버는 ISR보다 낮은 우선 순위로 실행되는 인터럽트 작업자 스레드에 대한 추가 인터럽트 관련 처리를 연기해야 합니다.