Treiberthreadkontext
Wie in der Abbildung Verarbeiten von IRPs in Mehrschichttreibern gezeigt, handelt es sich bei einem Dateisystem um einen zweiteiligen Treiber:
Ein Dateisystemtreiber (File System Driver, FSD), der im Kontext eines Benutzermodusthreads ausgeführt wird, der einen E/A-Systemdienst aufruft
Der E/A-Manager sendet den entsprechenden IRP an die FSD. Wenn die FSD eine Vervollständigungsroutine für ein IRP einrichtet, wird ihre Vervollständigungsroutine nicht unbedingt im Kontext des ursprünglichen Benutzermodusthreads aufgerufen.
Ein Satz von Dateisystemthreads und möglicherweise ein FSP (Dateisystemprozess)
Ein FSD kann eine Reihe von treiberdedizierten Systemthreads erstellen, aber die meisten FSDs verwenden System-Workerthreads, um Die Arbeit zu erledigen, ohne dass E/A-Threads im Benutzermodus gebunden werden. Jede FSD kann einen eigenen Prozessadressraum einrichten, in dem die treiberdedienten Threads ausgeführt werden, aber die vom System bereitgestellten FSDs vermeiden diese Vorgehensweise, um Systemspeicher zu sparen.
Dateisysteme verwenden in der Regel Systemworkerthreads, um interne Arbeitswarteschlangen von IRPs einzurichten und zu verwalten, die sie an einen oder mehrere Treiber auf niedrigerer Ebene senden, möglicherweise für verschiedene Geräte.
Der treiber der unterste Ebene in der Abbildung Verarbeiten von IRPs in Mehrschichttreibern verarbeitet jeden IRP in Phasen über eine Reihe diskreter, vom Treiber bereitgestellter Routinen, verwendet jedoch keine Systemthreads wie das Dateisystem. Ein Treiber der niedrigsten Ebene benötigt keinen eigenen Threadkontext, es sei denn, das Einrichten des Geräts für E/A ist ein so langwieriger Prozess, dass er sich spürbar auf die Systemleistung auswirkt. Nur wenige Treiber der niedrigsten Ebene oder fortgeschrittene Treiber müssen ihre eigenen treiberdedienten oder gerätededizierten Systemthreads einrichten, und diejenigen, die eine Leistungseinbuße aufgrund von Kontextwechseln zu ihren Threads zahlen.
Die meisten Kernelmodustreiber, wie der treiber des physischen Geräts in der Abbildung Verarbeiten von IRPs in mehrstufigen Treibern , werden in einem beliebigen Threadkontext ausgeführt: der eines beliebigen Threads, der aktuell ist, wenn sie aufgerufen werden, um ein IRP zu verarbeiten. Daher behalten Treiber in der Regel den Zustand ihrer E/A-Vorgänge und der Geräte, die sie in einem vom Treiber definierten Teil ihrer Geräteobjekte, der als Geräteerweiterung bezeichnet wird, bei.