Freigeben über


Pufferstatussteuerelement

RDBSS stellt einen Puffer-Manager bereit, einen Mechanismus zum Bereitstellen von verteilter Cachekohärenz in Verbindung mit den verschiedenen Netzwerkminiumleitungen. Dieser Dienst ist im Puffer-Manager in RDBSS gekapselt, der Anforderungen verarbeitet, um den Pufferstatus zu ändern. Der Puffer-Manager in RDBSS verfolgt und initiiert Aktionen für alle Änderungspufferzustandsanforderungen, die von den verschiedenen Netzwerkminiumleitungen sowie von RDBSS generiert werden.

Bei der Implementierung der Cachekohärenz in einem typischen Netzwerk-Mini-Redirector gibt es mehrere häufige Komponenten:

  • Änderungen zum Erstellen und Öffnen von Dateiroutinen.

    In diesem Pfad wird der Typ der Pufferanforderung bestimmt, und die entsprechende Anforderung wird an den Server gestellt. Bei der Rückkehr vom Netzwerk-Miniumleitungsor und möglicherweise vom Server wird der puffernde Zustand, der dem FCB zugeordnet ist, basierend auf dem Ergebnis des erstellenden oder geöffneten Aufrufs aktualisiert.

  • Änderungen zum Empfangen eines Anzeigecodes zum Verarbeiten von Änderungszustandsbenachrichtigungen vom Server.

    Wenn eine solche Anforderung erkannt wird, muss der lokale Mechanismus zur Koordinierung der Pufferzustände ausgelöst werden.

  • Ein Mechanismus zum Ändern des Pufferzustands, der als Teil von RDBSS implementiert wird. Jede Änderungspufferstatusanforderung muss die SRV_OPEN Struktur identifizieren, für die die Anforderung gilt.

Der Berechnungsaufwand für die Identifizierung der SRV_OPEN Struktur hängt vom Protokoll und den Details des Netzwerkminiumleitungs ab. Im SMB-Protokoll stellen opportunistische Sperren (Oplocks) die erforderliche Infrastruktur für die Cachekohärenz bereit. In der SMB-Protokollimplementierung in Windows werden die von RDBSS bereitgestellten Multiplex-ID-APIs verwendet. Der Server wählt die Multiplex-ID aus, die zum Identifizieren einer auf dem Server geöffneten Datei verwendet wird. Die Multiplex-IDs sind relativ zum NET_ROOT (Freigabe), auf dem sie geöffnet werden. Daher wird jede Änderungspufferstatusanforderung durch zwei Schlüssel identifiziert: netRootKey und SrvOpenKey, die in die entsprechende NET_ROOT bzw. SRV_OPEN-Struktur übersetzt werden müssen. Um eine bessere Integration mit dem Mechanismus zum Erwerb/Freigeben von Ressourcen zu ermöglichen und diese Bemühungen in den verschiedenen Netzwerkminiumleitungen zu vermeiden, stellt das RDBSS diesen Dienst bereit.

In RDBSS werden zwei Routinen zum Angeben von Pufferzustandsänderungen an SRV_OPEN Strukturen bereitgestellt:

Beachten Sie, dass die Schlüsselzuordnungen irreversibel sind und die Lebensdauer der zugeordneten SRV_OPEN-Struktur dauern.

Netzwerkminiumleitungen, die einen Hilfsmechanismus zum Einrichten der Zuordnung von Multiplex-IDs zur SRV_OPEN-Struktur benötigen, können RxIndicateChangeOfBufferingState verwenden, während die Netzwerkminiumleitungen, die diese Unterstützung nicht benötigen, RxIndicateChangeOfBufferingStateForSrvOpen verwenden können.

Der Puffer-Manager in RDBSS verarbeitet diese Anforderungen in verschiedenen Phasen. Sie verwaltet die Anforderungen, die von den verschiedenen zugrunde liegenden Netzwerk-Miniumleitungen empfangen wurden, in einer von mehreren Listen.

  • Die Dispatcherliste enthält alle Anforderungen, für die die entsprechende Zuordnung zu einer SRV_OPEN-Struktur nicht eingerichtet wurde.

  • Die Handlerliste enthält alle Anforderungen, für die die entsprechende Zuordnung eingerichtet, aber noch nicht verarbeitet wurde.

  • LastChanceHandlerList enthält alle Anforderungen, für die die anfängliche Verarbeitung nicht erfolgreich war. Dies geschieht in der Regel, wenn der FCB zum Zeitpunkt des Empfangens der Änderungspufferstatusanforderung in einem freigegebenen Modus abgerufen wurde. In solchen Fällen kann die Oplock-Unterbrechungsanforderung nur von einem verzögerten Workerthread verarbeitet werden.

Die Verarbeitung der Änderungspufferstatusanforderung in einem Netzwerk-Miniumleitungstreiber ist mit dem FCB-Erfassungs- und Freigabeprotokoll verflochten. Dies trägt zu kürzeren Durchlaufzeiten bei.

RDBSS bietet die folgenden Routinen zum Verwalten des Pufferzustands, der von Netzwerk-Miniumleitungstreibern verwendet werden kann:

-Routine zurückgegebener Wert BESCHREIBUNG

RxChangeBufferingState

Diese Routine wird aufgerufen, um eine Änderungsanforderung für puffernden Zustand zu verarbeiten.

RxIndicateChangeOfBufferingState

Diese Routine wird aufgerufen, um eine Änderungsanforderung für puffernden Zustand (z. B. eine Oplock-Unterbrechungsanzeige) für die spätere Verarbeitung zu registrieren.

RxIndicateChangeOfBufferingStateForSrvOpen

Diese Routine wird aufgerufen, um eine Änderungsanforderung für puffernden Zustand (z. B. eine Oplock-Unterbrechungsanzeige) für die spätere Verarbeitung zu registrieren.