Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.