Freigeben über


Von Storport bereitgestellte Funktionen

Der Storport-Treiber bietet die folgenden Funktionen:

  • Adressierung

    Microsoft Windows unterstützt Systeme, die verschiedene Typen von E/A-Bussen und/oder mehrere E/A-Busse desselben Typs enthalten. Um diese Vielfalt zu verarbeiten, ist ein allgemeines Adressierungsschema erforderlich.

    PCI-Geräte können sowohl über E/A-Port- als auch über Speicherregistrierungsressourcen verfügen. Logische Adressen helfen dabei, diese Unterscheidung für den Porttreiber transparent zu machen.

    Einige Systeme enthalten HBAs, die mit mehr als einem Bus verbunden sind; Für einen solchen HBA sind möglicherweise mehrere Adressübersetzungen erforderlich.

    Logische Adressen werden für die Portabilität zwischen CISC-basierten und RISC-basierten Computern benötigt.

  • Wiederholungen und Fehlerbehandlung

    • Speicherklassentreiber müssen keine Algorithmen zum Wiederholen von IRPs implementieren, wenn Geräte zu ausgelastet sind, um sie zu verarbeiten. Der Storport-Treiber implementiert diese Funktionalität.

    • Der Klassentreiber legt einen Timeoutwert für Anforderungen fest, und Storport ist für die Erzwingung verantwortlich. Der Storport-Fahrer kann jedoch die Timeoutwerte des Klassenfahrers flexibel erzwingen, unter Berücksichtigung des Zustands des Busses. Wenn beispielsweise eine von Storport verwaltete Fibre Channel-Verbindung um 20 Sekunden unterbrochen wird, kann Storport den Timeoutzähler während der Downzeit anhalten, sodass bei Anforderungen mit einer Zeitüberschreitung von 10 Sekunden bei instance erst 10 Sekunden nach dem Wiedereinkommen des Links fehlschlagen. Storport erhöht die Timeoutwerte, die Anforderungen als Reaktion auf einen Anstieg des E/A-Datenverkehrs zugewiesen werden, da die Geräte bei einem höheren E/A-Datenverkehr mehr Zeit benötigen, um Anforderungen abzuschließen.

    • Storport behandelt Ziel- und Controller-Ausgelastete Fehler sowie Transportfehlerbedingungen (d. h. Fehler, die sich auf die tatsächliche Übertragung von Daten im Bus beziehen). Beispiel:

      • Busparitätsfehler
      • Auswahltimeouts
  • Konfiguration, Warteschlangen und Energiezustandsverwaltung

    • Bereitstellen von Informationen zu Hostadapterbeschränkungen für Klassentreiber: Es liegt in der Verantwortung des Klassentreibers, die Größe der Datenübertragungen entsprechend den Grenzwerten der Hostbusadapter (Host Bus Adapter, HBAs) zu regeln. Storport stellt dem Klassentreiber jedoch die Informationen bereit, die er zum Ausführen dieser Aufgabe benötigt. Storport stellt diese Informationen in einem Adapterdeskriptor (STORAGE_ADAPTER_DESCRIPTOR) als Reaktion auf eine IOCTL-Anforderung (IOCTL_STORAGE_QUERY_PROPERTY) bereit. Der Klassentreiber ist für die Aufteilung von Anforderungen in Blöcke der entsprechenden Größe verantwortlich, basierend auf den informationen, die in diesem Deskriptor gemeldet werden.

    • Übersetzen relativer Busadressen in logische Adressen: Wenn sie abgefragt werden, stellen Adapter busrelative Adressen für E/A-Ports, Befehlsregister und Steuerungsregister bereit, status Register. Ein Miniporttreiber kann jedoch keine busrelativen Adressen für die Kommunikation mit seinem Hostbusadapter (HBA) verwenden. Storport übersetzt busrelative Adressen in logische Adressen, sodass Miniporttreiber transparent auf Busadressen zugreifen können. Dafür gibt es mehrere Gründe:

    • Sicherstellen, dass ein Gerät und alle zugrunde liegenden Geräte (im D0 Gerätestromzustand) vor dem Starten des Geräts eingeschaltet werden: Wenn ein Gerät nicht eingeschaltet werden kann, stellt Storport eine D0-Anforderung für dieses Gerät in die Warteschlange, bis das Gerät bereit ist.

    • Warteschlangen für asynchrone Anforderungen von Klassentreibern und asynchrones Weiterleiten an das Zielgerät: Klassentreiber müssen nicht auf den Abschluss einer Anforderung warten, bevor sie die nächste Anforderung senden. Storport übernimmt die Verantwortung für die Warteschlangen dieser Anforderungen, um zu vermeiden, dass die Verarbeitungsleistung der zugrunde liegenden Hardware überlastet wird.

    • Unterstützung sowohl der internen als auch der externen Verwaltung interner E/A-Anforderungswarteschlangen: Die meisten Warteschlangenverwaltungsvorgänge werden von Storport selbst initiiert. Für instance friert Storport seine Warteschlange ein, wenn ein Fehler auftritt, und meldet die Fehlerbedingung an den Klassentreiber, damit der Klassentreiber reagieren kann, bevor weitere Anforderungen verarbeitet werden. Storport reagiert jedoch auch auf Anforderungen des Klassentreibers oder anderer höherer Treiber zum Sperren, Entsperren, Einfrieren oder Aufheben des Fixierens der internen Anforderungswarteschlange. Übergeordnete Treiber können erzwingen, dass Storport die interne Warteschlange mithilfe der SRB_FUNCTION_RELEASE_QUEUE-Anforderung aufzuheben. Eine Erläuterung, was das "Einfrieren", "Sperren" oder "Entsperren" einer Warteschlange bedeutet, finden Sie unter Storport Queue Management.

    • Übersetzen von Fehlern, die vom Gerät zur Verarbeitung durch den Klassentreiber in das SCSI-3-Sense-Datenformat gemeldet werden.

Storport bietet Dienstleistungen für den Miniporttreiber mithilfe der Storport-Bibliotheksroutinen an. Miniport-Treiberschreiber können diese Routinen aufrufen, anstatt die von ihnen bereitgestellten Funktionen in einem einzelnen monolithischen Porttreiber zu codieren. Einige der wichtigsten Dienste, die mit diesen Routinen angeboten werden, sind wie folgt:

  • Ein Storport-Miniporttreiber kann viele betriebssystemabhängige Initialisierungsvorgänge an die Storport-Bibliotheksroutine StorPortInitialize delegieren . Der Storport-Treiber verarbeitet beispielsweise die Details im Zusammenhang mit der PnP- und DMA-Zuordnung. Dadurch wird der Arbeitsaufwand reduziert, den ein Storport-Miniporttreiber erledigen muss. Eine Erläuterung der Initialisierungsaufgaben eines Storport-Miniporttreibers finden Sie unter Hardwareinitialisierung mit Storport.

  • Storport-Miniporttreibern für Nicht-PnP-Geräte bleibt die Suche nach Adaptern und das Melden ihrer Ressourcen an den PnP-Manager erspart. Dies erfolgt in StorPortInitialize.

  • Storport-Miniporttreiber initialisieren keine Dispatcheinstiegspunkte im Treiberobjekt. Der Storport-Treiber tut dies im Namen des Miniporttreibers, wenn der Miniporttreiber StorPortInitialize aufruft.

  • Storport-Miniporttreiber konvertieren keine busrelativen Adressen mithilfe von HalTranslateBusAddress in logische Adressen. Storport-Miniporttreiber tun dies durch einen Aufruf von StorPortGetDeviceBase.

Eine vollständige Liste der Bibliotheksroutinen, die Storport Storport-Miniporttreibern zur Verfügung stellt, finden Sie unter Storport-Treiberunterstützungsroutinen.