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.
Ponieważ menedżer we/wy obsługuje asynchroniczne we/wy w systemie wielozadaniowym i wielowątkowym, żądania we/wy do urządzenia mogą być dostarczane szybciej niż jego sterownik może przetwarzać je do ukończenia, szczególnie w przypadku maszyn wieloprocesorowych. W związku z tym IRP-y powiązane z dowolnym konkretnym urządzeniem muszą być umieszczane w kolejce przez sterownik, gdy jego urządzenie jest już zajęte przetwarzaniem innego IRP-u.
W związku z tym sterownik najniższego poziomu wymaga jednego z następujących elementów:
Procedura StartIo , którą menedżer we/wy wywołuje w celu uruchomienia operacji we/wy dla adresów IRPs sterownik został w kolejce do kolejki IRP dostarczonej przez system (zobacz IoStartPacket).
Wewnętrzny mechanizm kolejkowania i usuwania z kolejki IRP, którego sterownik używa do zarządzania żądaniami IRP, które pojawiają się szybciej, niż można je przetworzyć. Sterowniki mogą używać kolejek urządzeń, połączonych kolejek lub kolejek bezpiecznych pod kątem anulowania. Aby uzyskać więcej informacji, zobacz Driver-Managed kolejki IRP.
Tylko sterownik sprzętowy najniższego poziomu, który może obsłużyć i zakończyć wszystkie możliwe IRP w swoich procedurach wysyłania, nie wymaga procedury StartIo i nie potrzebuje kolejek zarządzanych przez sterownik dla IRP.
Kierowcy wyższego poziomu prawie nigdy nie mają procedur StartIo . Większość sterowników pośrednich nie ma procedur StartIo ani kolejek wewnętrznych; Pośredni sterownik może zwykle przekazywać IRP-y z prawidłowymi parametrami z procedur odsyłania i wykonywać wszelkie czynności w ramach przetwarzania, które są wymagane dla dowolnego IRP w swojej procedurze IoCompletion.
Poniżej opisano ogólnie niektóre zagadnienia projektowe dotyczące określania, czy zaimplementować procedurę StartIo z wewnętrznymi kolejkami zarządzanymi przez sterowniki dla środowisk IRP lub bez nich.
Procedury StartIo w sterownikach
W przypadku urządzeń peryferyjnych komputera obsługujących tylko jedną operację we/wy urządzeniach jednocześnie sterowniki urządzeń mogą implementować procedury StartIo . W przypadku tych sterowników menedżer we/wy udostępnia procedury IoStartPacket i IoStartNextPacket do kolejkowania i usuwania z kolejki IRP do i z kolejki IRP dostarczonej przez system.
Aby uzyskać więcej informacji na temat procedur StartIo , zobacz Pisanie procedury StartIo.
Kolejki wewnętrzne dla IRP w sterownikach
Jeśli urządzenie może obsługiwać więcej niż jedną współbieżną operację we/wy, jego sterownik urządzenia najniższego poziomu musi skonfigurować kolejki żądań wewnętrznych i zarządzać własną kolejką irps. Na przykład sterownik szeregowy systemu obsługuje oddzielne kolejki dla operacji odczytu, zapisu, przeczyszczania i oczekiwania na urządzeniach, ponieważ obsługuje urządzenia szeregowe pełnodupleksowe.
Sterownik wyższego poziomu, który wysyła żądania do pewnej liczby podstawowych sterowników urządzeń, może również obsługiwać wewnętrzne kolejki IRP. Na przykład sterowniki systemu plików prawie zawsze mają wewnętrzne kolejki dla IRPów.
Aby uzyskać więcej informacji, zobacz Driver-Managed kolejki IRP.
Wewnętrzna synchronizacja kolejek
Sterowniki z dedykowanymi wątkami urządzenia oraz sterowniki najwyższego poziomu, które korzystają z wątków procesu roboczego wykonawczego (w tym większość sterowników systemu plików), zwykle konfigurują własną kolejkę dla IRP-ów. Kolejka jest współdzielona przez wątek sterownika lub wywołanie zwrotne wątku roboczego dostarczonego przez sterownik oraz przez inne procedury sterownika, które przetwarzają IRP-y.
Sterownik, który implementuje własną strukturę kolejki, musi zapewnić, że dostęp do kolejki jest synchronizowany, a anulowane IRP są usuwane z kolejki. Aby ułatwić wykonywanie tego zadania dla piszących sterowniki, bezpieczne kolejki IRP przed anulowaniem zapewniają standardową strukturę, którą można użyć podczas implementowania kolejki IRP. Aby uzyskać więcej informacji, zobacz Cancel-Safe Kolejki IRP . Jest to preferowana metoda implementowania kolejki IRP.
Sterowniki mogą również zaimplementować całą synchronizację kolejek IRP i jawnie anulować logikę. Na przykład sterownik może używać połączonej kolejki. Procedury wysyłania kierowcy wstawiają IRP do połączonej kolejki, a wątek utworzony przez sterownik lub wywołanie zwrotne wątku roboczego sterownika usuwa je, wywołując procedury ExInterlockedXxxList.
Na przykład sterownik kontrolera dyskietki systemowej używa zakleszczonej kolejki. Jego dedykowany wątek obsługuje takie same przetwarzanie IRPs, jakie odbywa się przez procedury StartIo innych sterowników urządzeń, oraz niektóre z tych samych przetwarzań IRPs, jakie są wykonywane przez procedury DpcForIsr innych sterowników urządzeń.
Kolejki wewnętrzne z procedurami StartIo w sterownikach
Sterownik, który zarządza własnymi kolejkami wewnętrznymi, może również mieć procedurę StartIo, ale nie musi. Większość sterowników najniższego poziomu ma procedurę StartIo lub zarządza własną kolejką IRP, ale nie obie.
Wyjątkiem od tego jest sterownik portu SCSI, który ma procedurę StartIo i zarządza wewnętrznymi kolejkami IRP. Menedżer we/wy kolejkuje IRP do rutyny StartIo sterownika portu w kolejce urządzeń skojarzonej z obiektem urządzenia utworzonego przez sterownik, który reprezentuje HBA SCSI. Sterownik portu SCSI konfiguruje również kolejki urządzeń dla IRP i zarządza nimi dla każdego urządzenia docelowego (odpowiadającego jednostce logicznej SCSI) na dowolnej magistrali SCSI zarządzanej przez kartę HBA na maszynie.
Sterownik portów SCSI wykorzystuje dodatkowe kolejki urządzeń do przechowywania IRP wysyłanych ze sterowników klas SCSI w kolejkach specyficznych dla jednostek logicznych (LU), gdy dowolne urządzenie na magistrali SCSI jest szczególnie zajęte. W efekcie, dodatkowe kolejki urządzeń specyficzne dla LU tego sterownika pozwalają sterownikowi portów SCSI na serializację operacji dla różnorodnych urządzeń SCSI przez kartę HBA, jednocześnie utrzymując działanie każdego urządzenia na magistralach SCSI tej karty HBA w możliwie największym stopniu.