Udostępnij przez


Procedury StartIo w sterownikach Higher-Level

Każdy sterownik wyższego poziomu może mieć procedurę StartIo . Jednak taki sterownik jest mało prawdopodobny, aby współpracował z istniejącymi sterownikami niższego poziomu i prawdopodobnie będzie wykazywał niskie charakterystyki wydajnościowe.

Procedura StartIo w sterowniku wyższego poziomu ma następujące skutki:

  • Przychodzące IRP-y można kolejkować poprzez wywołanie IoStartPacket w procedurach DispatchXxx oraz IoStartNextPacket w procedurach IoCompletion, co powoduje ich przetwarzanie jeden po drugim za pomocą procedury StartIo.

  • Przepływność we/wy sterownika może stać się znacznie wolniejsza w okresach dużego zapotrzebowania we/wy, ponieważ jego procedura StartIo może stać się wąskim gardłem.

  • Procedura StartIo sterownika wywołuje IoCallDriver dla każdego IRP na poziomie IRQL = DISPATCH_LEVEL, co powoduje, że wszystkie procedury oddziaływania sterowników niższego poziomu również są wykonywane na poziomie IRQL = DISPATCH_LEVEL. Ogranicza to zestaw rutyn wspomagających, które mogą wywoływać niższe sterowniki w swoich rutinach dyspozycji. Ponieważ większość twórców sterowników zakłada, że procedury wysyłania ich sterowników działają na poziomie IRQL < DISPATCH_LEVEL, kierowca wyższego poziomu prawdopodobnie nie jest współdziałalny z wieloma istniejącymi sterownikami niższego poziomu.

  • Rutyna StartIo zmniejsza ogólną przepustowość systemu, ponieważ rutyny dysponowania wszystkich sterowników niższego poziomu w łańcuchu działają na poziomie IRQL = DISPATCH_LEVEL.

    Aby uzyskać więcej informacji na temat poziomów IRQL, na których działają standardowe procedury sterowników, zobacz Zarządzanie priorytetami sprzętu.

Żaden z dostarczonych przez system sterowników wyższego poziomu nie ma rutynowej procedury StartIo , ponieważ może spowolnić przetwarzanie IRP dla samego sterownika, dla wszystkich sterowników powyżej i poniżej niego, i dla całego systemu.

Większość sterowników wyższego poziomu po prostu wysyła IRPs do sterowników niższego poziomu z ich procedur wysyłania i wykonuje wszelkie niezbędne operacje końcowe w ich routynach IoCompletion.

Jednak sterowniki wyższego poziomu mogą konfigurować wewnętrzne kolejki dla IRP, które żądają określonego rodzaju operacji, lub skonfigurować wewnętrzne kolejki do przechowywania IRP powiązanych z zestawem heterogenicznych urządzeń niższego poziomu, takich jak sterownik portu SCSI. Aby uzyskać więcej informacji, zobacz Kolejkowanie i usuwanie z kolejki IRP.