Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vzhledem k tomu, že V/V manažer podporuje asynchronní vstupně-výstupní operace v rámci multitaskingu a vícevláknového systému, mohou vstupně-výstupní požadavky na zařízení přijít rychleji, než jeho ovladač dokáže zpracovat k dokončení, zejména v multiprocesorových počítačích. V důsledku toho musí být IRP vázané na konkrétní zařízení zařazeny do fronty v ovladači, když je dané zařízení zaneprázdněné zpracováním jiného IRP.
Ovladač nejnižší úrovně proto vyžaduje jednu z následujících možností:
Rutina StartIo, kterou správce vstupně-výstupních operací volá k zahájení vstupně-výstupních operací pro IRPs, které ovladač zařadil do fronty poskytnuté systémem (viz IoStartPacket).
Interní mechanismus zařazování a vyřazování z fronty IRP, který ovladač používá ke správě IRP, které přicházejí rychleji, než je dokáže zpracovat. Ovladače můžou používat fronty zařízení, vzájemně uzamčené fronty nebo fronty bezpečné pro zrušení. Další informace najdete v tématu Driver-Managed fronty protokolu IRP.
Pouze ovladač zařízení nejnižší úrovně, který může vyhovět a dokončit všechny možné IRP v dispečinkových rutinách, nepotřebuje rutinu StartIo ani žádné fronty spravované ovladačem pro IRP.
Ovladače vyšší úrovně téměř nikdy nemají rutiny StartIo . Většina přechodných ovladačů nemá rutiny StartIo ani interní fronty; zprostředkující ovladač může obvykle předávat IRP s platnými parametry z jeho dispečerských rutin a provádět jakékoli následné zpracování potřebné pro jakýkoli IRP v jeho rutině IoCompletion.
Následující popis obecně popisuje některé aspekty návrhu pro určení, zda implementovat rutinu StartIo s interními frontami spravovanými ovladači nebo bez nich pro irPs.
Rutiny StartIo v ovladačích zařízení
V případě periferních zařízení počítače, která můžou současně zpracovávat pouze jednu vstupně-výstupní operaci zařízení, můžou ovladače zařízení implementovat rutiny StartIo . Pro tyto ovladače poskytuje správce vstupně-výstupních operací rutiny IoStartPacket a IoStartNextPacket pro zařazení a odebrání IRP ze systémové fronty IRP.
Další informace o rutinách StartIo naleznete v tématu Zápis rutiny StartIo.
Interní fronty pro IRP v ovladačích
Pokud zařízení podporuje více než jednu souběžnou vstupně-výstupní operaci, musí ovladač zařízení na nejnižší úrovni nastavit interní fronty požadavků a spravovat vlastní fronty IRP. Systémový sériový ovladač například udržuje samostatné fronty pro operace čtení, zápisu, vyprázdnění a čekání na svých zařízeních, protože podporuje plně duplexní sériová zařízení.
Ovladač vyšší úrovně, který odesílá požadavky několika základním ovladačům zařízení, může také udržovat interní fronty IRP. Například ovladače souborového systému mají téměř vždy interní fronty pro IRP.
Další informace najdete v tématu Driver-Managed fronty protokolu IRP.
Interní synchronizace front
Ovladače s vlákny vyhrazenými pro zařízení a ovladače nejvyšší úrovně, které používají vlákna výkonných pracovních úloh (včetně většiny ovladačů systému souborů), obvykle nastavují vlastní frontu pro IRP. Fronta je sdílena vláknem ovladače nebo zpětným voláním pracovního vlákna poskytnutého ovladačem a dalšími rutinami ovladače, které zpracovávají IRP.
Ovladač, který implementuje vlastní strukturu fronty, musí zajistit, že přístup k frontě je synchronizován, a že zrušené IRPs jsou z fronty odstraněny. Chcete-li zjednodušit tuto úlohu pro tvůrce ovladačů, poskytují chráněné fronty IRP proti zrušení standardní architekturu, kterou můžete použít při implementaci fronty IRP. Viz Cancel-Safe Fronty protokolu IRP pro více informací. Toto je přednostní metoda pro implementaci fronty IRP.
Ovladače můžou také implementovat veškerou synchronizaci front protokolu IRP a explicitně zrušit logiku. Řidič může například použít prokládanou frontu. Rutiny odesílání ovladače vkládají protokoly IRP do vzájemně uzamčené fronty a vlákno vytvořené ovladačem nebo zpětné volání pracovního vlákna ovladače je odebere voláním rutin podpory ExInterlockedXxxList .
Například ovladač disketové jednotky systému používá vzájemně zamknutou frontu. Jeho vlákno dedikované pro zařízení zpracovává stejné zpracování IRPů, které provádějí rutiny StartIo jiných ovladačů zařízení, a část stejných zpracování IRPů, které provádějí rutiny DpcForIsr jiných ovladačů zařízení.
Interní fronty s rutinami StartIo v ovladačích
Ovladač, který spravuje vlastní interní fronty, může mít také rutinu StartIo , ale nemusí. Většina ovladačů zařízení nejnižší úrovně má buď rutinu StartIo, nebo spravuje vlastní řazení do fronty IRPs, ale ne obojí zároveň.
Výjimkou je ovladač portu SCSI, který má proceduru StartIo a spravuje interní fronty IRP. Správce vstupně-výstupních operací zařazuje IRP do rutiny StartIo ovladače portu ve frontě zařízení, která je přidružená k objektu zařízení vytvořeného ovladačem, jenž představuje SCSI hostitelský řadič (HBA). Ovladač portu SCSI také nastavuje a spravuje fronty zařízení pro IRPy pro každé cílové zařízení (odpovídající logické jednotce SCSI) na každé sběrnici SCSI ovládané řadičem HBA v počítači.
Ovladač portu SCSI používá své doplňkové fronty zařízení k uchovávání IRP odesílaných z ovladačů třídy SCSI ve frontách specifických pro LU, kdykoli je jakékoli zařízení na sběrnici SCSI zvlášť zaneprázdněné. V důsledku toho doplňkové fronty zařízení specifické pro LU umožňují ovladači portu SCSI serializovat operace pro heterogenní zařízení SCSI prostřednictvím HBA a současně udržovat každé zařízení na SCSI sběrnici tohoto HBA co nejvíce zaneprázdněné.