Was ist ein Treiber?
Ein Treiber ist eine Softwarekomponente, die das Betriebssystem und ein Gerät kommunizieren lässt. Wenn eine App beispielsweise Daten von einem Gerät lesen muss, ruft sie eine vom Betriebssystem implementierte Funktion auf. Das Betriebssystem ruft dann eine vom Treiber implementierte Funktion auf. Der Treiber, der in der Regel vom Gerätehersteller entwickelt wird, weiß, wie mit der Gerätehardware kommuniziert wird, um die Daten zu erhalten. Sobald der Treiber die Daten abgerufen hat, gibt er sie an das Betriebssystem zurück, das sie dann an die App zurückgibt.
Erweitern der Definition
Unsere Erklärung vereinfacht das Konzept der Treiber. Hier sind einige weitere Punkte, die berücksichtigt werden sollten:
Treiber müssen nicht immer vom Gerätehersteller entwickelt werden. Wenn ein Gerät einem veröffentlichten Hardwarestandard folgt, kann Microsoft den Treiber schreiben, sodass der Gerätedesigner keinen bereitstellen muss.
Nicht alle Treiber kommunizieren direkt mit einem Gerät. Häufig nehmen mehrere Treiber in einem Treiberstapel an einer E/A-Anforderung teil. Die herkömmliche Möglichkeit, den Stapel zu visualisieren, besteht darin, dass der erste Teilnehmer oben und der letzte Teilnehmer unten ist, wie in diesem Diagramm dargestellt. Einige Treiber im Stapel ändern die Anforderung von einem Format in ein anderes. Diese Treiber kommunizieren nicht direkt mit dem Gerät. Stattdessen ändern sie die Anforderung und übergeben sie an Treiber, die sich niedriger im Stapel befinden.
Funktionstreiber: Der Treiber, der direkt mit dem Gerät kommuniziert, wird als Funktionstreiber bezeichnet.
Filtertreiber: Treiber, die zusätzliche Verarbeitung durchführen, werden als Filtertreiber bezeichnet.
Weitere Informationen zu Stapeln finden Sie unter Treiberstapel.
Einige Filtertreiber beobachten und aufzeichnen Informationen zu E/A-Anforderungen, nehmen aber nicht aktiv daran teil. Beispielsweise fungieren einige Filtertreiber als Prüfer, um sicherzustellen, dass die anderen Treiber im Stapel die E/A-Anforderung ordnungsgemäß verarbeiten.
Wir können unsere Definition eines Treibers als jede Softwarekomponente verfeinern, die die Kommunikation zwischen dem Betriebssystem und einem Gerät beobachtet oder daran teilnimmt.
Softwaretreiber
Unsere erweiterte Definition ist ziemlich genau, aber immer noch unvollständig, da einige Treiber überhaupt keinem Hardwaregerät zugeordnet sind.
Wenn Sie beispielsweise ein Tool schreiben müssen, das auf grundlegende Betriebssystemdatenstrukturen zugreift, können Sie das Tool in zwei Komponenten aufteilen. Die erste Komponente wird im Benutzermodus ausgeführt und stellt die Benutzeroberfläche dar. Die zweite Komponente wird im Kernelmodus ausgeführt und greift auf die Kernbetriebssystemdaten zu. Die Komponente, die im Benutzermodus ausgeführt wird, wird als Anwendung bezeichnet, und die Komponente, die im Kernelmodus ausgeführt wird, wird als Softwaretreiber bezeichnet. Ein Softwaretreiber ist keinem Hardwaregerät zugeordnet.
Dieses Diagramm veranschaulicht eine Anwendung im Benutzermodus, die mit einem Kernelmodus-Softwaretreiber kommuniziert.
Softwaretreiber werden immer im Kernelmodus ausgeführt. Sie werden in erster Linie für den Zugriff auf geschützte Daten geschrieben, die nur im Kernelmodus verfügbar sind. Allerdings benötigen nicht alle Gerätetreiber Zugriff auf Daten und Ressourcen im Kernelmodus, sodass einige Gerätetreiber im Benutzermodus ausgeführt werden.
Weitere Informationen zu Prozessormodi finden Sie unter Benutzermodus und Kernelmodus.
Bustreiber
Ein anderer Treibertyp ist der Bustreiber. Um Bustreiber zu verstehen, müssen Sie Geräteknoten und die Gerätestruktur verstehen.
Informationen zu Gerätestrukturen, Geräteknoten und Bustreibern finden Sie unter Geräteknoten und Gerätestapel.
Weitere Informationen zu Funktionstreibern
Unsere bisherige Erklärung überschreibt die Definition des Funktionstreibers. Wir haben angegeben, dass der Funktionstreiber für ein Gerät der einzige Treiber im Stapel ist, der direkt mit dem Gerät kommuniziert. Dies gilt für ein Gerät, das eine direkte Verbindung mit dem PCI-Bus (Peripheral Component Interconnect) herstellt. Der Funktionstreiber für ein PCI-Gerät ruft Adressen ab, die Port- und Arbeitsspeicherressourcen auf dem Gerät zugeordnet sind. Der Funktionstreiber kommuniziert direkt mit dem Gerät, indem er in diese Adressen schreibt.
In vielen Fällen stellt ein Gerät jedoch keine direkte Verbindung mit dem PCI-Bus her. Stattdessen stellt das Gerät eine Verbindung mit einem Hostbusadapter her, der mit dem PCI-Bus verbunden ist. Beispielsweise stellt ein USB-Toaster eine Verbindung mit einem Hostbusadapter (als USB-Hostcontroller bezeichnet) her, der mit dem PCI-Bus verbunden ist. Der USB-Toaster verfügt über einen Funktionstreiber, und der USB-Hostcontroller verfügt auch über einen Funktionstreiber. Der Funktionstreiber für den Toaster kommuniziert indirekt mit dem Toaster, indem er eine Anforderung an den Funktionstreiber für den USB-Hostcontroller sendet. Der Funktionstreiber für den USB-Hostcontroller kommuniziert dann direkt mit der HARDWARE des USB-Hostcontrollers, die mit dem Toaster kommuniziert.