인터럽트 동기화 개체
PortCls 시스템 드라이버는 미니포트 드라이버의 이점을 위해 IInterruptSync 인터페이스를 구현합니다. IInterruptSync 는 ISR(인터럽트 서비스 루틴) 목록의 실행을 비 인터럽트 루틴과 동기화하는 인터럽트 동기화 개체를 나타냅니다.
인터럽트 동기화 개체는 다음 두 가지 주요 기능을 제공합니다.
인터럽트 에 대한 응답으로 ISR 목록을 실행합니다. 동기화 개체가 인터럽트 원본에 연결됩니다. 인터럽트 발생 때마다 동기화 개체는 선택한 모드에 따라 지정된 순서로 ISR을 실행합니다. (세 가지 모드에 대한 다음 설명을 참조하세요.)
ISR이 아닌 루틴의 실행 이러한 비 인터럽트 루틴은 동기화 개체의 인터럽트 에 연결되지 않습니다. 대신 비 인터럽트 루틴은 호출자가 선택한 시간에 실행됩니다. 그러나 동기화 개체는 개체의 ISR 목록과 함께 비 인터럽트 루틴을 동기적으로 실행합니다. 즉, 동기화 개체 목록의 ISR이 실행되기 전에 비 인터럽트 루틴이 완료될 때 실행되고 그 반대의 경우도 마찬가지입니다.
인터럽트 동기화 개체는 여러 ISR을 유연하게 처리할 수 있습니다. ISR은 동기화 개체가 인터럽트 시간에 트래버스하는 연결된 목록에 상주합니다. 미니포트 드라이버가 동기화 개체를 사용하여 ISR을 등록하는 경우 ISR을 이 목록의 시작 또는 끝에 추가할지 여부를 지정합니다.
미니포트 드라이버는 PcNewInterruptSync 함수를 호출하여 인터럽트 동기화 개체를 만듭니다. 이 호출 중에 드라이버는 개체가 인터럽트 시 ISR 목록을 트래버스하는 방식을 지정합니다. 이 호출은 다음 표의 INTERRUPTSYNCMODE 열거형 상수에 지정된 세 가지 옵션을 지원합니다.
상수 | 의미 |
---|---|
InterruptSyncModeNormal |
해당 ISR 중 하나가 STATUS_SUCCESS 반환될 때까지 목록에서 각 ISR을 호출합니다. |
InterruptSyncModeAll |
이전 ISR의 반환 코드에 관계없이 목록에서 각 ISR을 정확히 한 번 호출합니다. |
InterruptSyncModeRepeat |
목록의 ISR이 STATUS_SUCCESS 반환하지 않는 목록을 탐색할 때까지 전체 ISR 목록을 트래버스합니다. |
InterruptSyncModeNormal 모드에서 동기화 개체는 그 중 하나가 STATUS_SUCCESS 반환할 때까지 목록의 각 ISR을 호출합니다. 이 ISR을 따르는 목록의 모든 ISR은 호출되지 않습니다. 이 모드는 운영 체제에서 일반적으로 ISR을 처리하는 방식을 에뮬레이트합니다. STATUS_SUCCESS 반환하는 ISR이 없는 경우 동작은 InterruptSyncModeAll과 동일합니다.
InterruptSyncModeAll 모드에서 목록의 각 ISR은 이전 ISR의 반환 코드에 관계없이 정확히 한 번 호출됩니다. 이는 다른 상황에서도 유용할 수 있지만 인터럽트 원본이 결정적이지 않은 더 기본적인 하드웨어를 위한 것입니다. 예를 들어 특정 인터럽트에서 가져온 두 소스에 관계없이 모든 인터럽트에서 두 개의 인터럽트 원본이 긴밀하게 동기화될 수 있습니다.
InterruptSyncModeRepeat 모드에서 동기화 개체는 목록의 루틴이 STATUS_SUCCESS 반환하지 않는 목록을 탐색할 때까지 ISR의 전체 목록을 반복적으로 트래버스합니다. 이 모드는 여러 원본의 인터럽트에서 동시에 동일한 인터럽트 라인에서 발생하거나 ISR 처리 중에 두 번째 인터럽트 발생이 발생할 수 있는 상황에 적합합니다. 모든 인터럽트 원본은 처리가 필요한지 여부를 확인할 수 있어야 합니다. 항상 STATUS_SUCCESS 반환하는 ISR이 이 모드에서 동기화 개체에 등록된 경우 시스템은 응답을 중지합니다.
이러한 모드에서 동기화 개체는 등록된 ISR이 STATUS_SUCCESS 반환하는 경우 운영 체제에 대한 인터럽트 를 승인합니다. 세 가지 모드에서 모든 인터럽트 원본이 인터럽트를 성공적으로 처리하지 못했음을 나타내는 경우 동기화 개체는 실패한 결과 코드를 운영 체제에 반환합니다.
IInterruptSync 인터페이스는 다음 메서드를 지원합니다.