Sdílet prostřednictvím


Asynchronní funkce vstupně-výstupních operací a dokončování v síťových ovladačích

Latence je součástí některých síťových operací. Z důvodu této latence je mnoho funkcí horních okrajů poskytovaných ovladačem miniportu a funkcemi ovladače protokolu nižších okrajů navrženy tak, aby podporovaly asynchronní operace. Namísto plýtvání cykly procesoru čekajících ve smyčce na dokončení určité časově náročné úlohy nebo na signál hardwarové události se síťové ovladače spoléhají na schopnost zpracovávat většinu operací asynchronně.

Asynchronní síťový vstup/výstup je podporován pomocí dokončovací funkce . Následující příklad ukazuje použití dokončovací funkce pro síťovou operaci odeslání , ale stejný mechanismus existuje i pro mnoho dalších operací, které provádí ovladač protokolu nebo miniportový ovladač.

Když ovladač protokolu volá NDIS k odeslání paketu, což vede k volání ovladače miniportu MiniportSendNetBufferLists funkce, může se ovladač miniportu pokusit dokončit tento požadavek okamžitě a v důsledku toho vrátit odpovídající hodnotu stavu. U synchronní operace jsou možné odpovědi NDIS_STATUS_SUCCESS pro úspěšné dokončení odesílání, NDIS_STATUS_RESOURCES a NDIS_STATUS_FAILURE označující selhání nějakého druhu.

Dokončení operace odeslání ale může nějakou dobu trvat, než ovladač miniportu (nebo NDIS) zařadí paket do fronty a počká, až síťová karta označí výsledek operace odeslání. Ovladač miniportu použije funkci MiniportSendNetBufferLists k asynchronnímu zpracování této operace tím, že vrátí hodnotu stavu NDIS_STATUS_PENDING. Když ovladač miniportu dokončí operaci odeslání, zavolá funkci dokončení, NdisMSendNetBufferListsComplete, předá ukazatel na odeslaný popisovač paketu. Tyto informace se předávají ovladači protokolu a signalizují dokončení.

Většina operací ovladačů, které mohou vyžadovat delší dobu pro dokončení, podporuje asynchronní provoz s podobnou dokončovací funkcí. Tyto funkce mají názvy ve tvaru NdisMXxxComplete.

Funkce dokončování jsou k dispozici také pro:

  • Nastavení a dotazování konfigurace

  • Resetujte hardware.

  • Uveďte stav.

  • Indikuje přijatá data.

  • Přenos přijatých dat