Ein Treiber bildet die Schnittstelle zwischen der Geräteverwaltung und dem Controller des betreffenden Geräts. Insbesondere muss der Treiber deshalb wissen, welche Befehle oder Funktionen der Controller zur Verfügung stellt, wie diese anzusprechen sind, und in welcher Weise die Rückgabewerte zu interpretieren sind.
Tanenbaum 2009 hat in früheren Auflagen seines Buchs gerne ein Beispiel aus den guten alten Tagen des Computerzeitalters gegeben: Ein kurzer Blick in die Kommunikation mit einem Floppy Disk Controller (kurz: FDC).
In Zeiten von USB-Sticks, SSD-Festplatten und Cloud-Speicher weißt du doch noch, was eine Floppy und ein Diskettenlaufwerk war, oder?
Notfalls zeigt Wikipedia dir die Hintergründe:
http://de.wikipedia.org/wiki/Diskette
Die Firma NEC Electronics U.S.A. Inc. hatte seit den 1970er Jahren mit dem NEC PD765 FDC Chip einen oft eingesetzen Controller für Diskettenlaufwerke am Markt. Im Zuge der üblichen Weiterentwicklung existierten verschiedene Versionen dieses Chips.
Man findet noch heute die zugehörigen Datenblätter (engl. data sheets) im Internet, z.B. hier:
http://www.bitsavers.org/components/nec/_dataSheets/uPD765_Data_Sheet_Dec78.pdf
Allgemeine Informationen zum Thema 'Floppy Disk Controller' gibt es auf der englischsprachigen Wikipedia-Seite:
Finde über dieses NEC PD765 Data Sheet heraus, wieviele und welche Befehle der Controller bereitstellt.
Im NEC PD765 Data Sheet wird erläutert, dass der Controller zwei interne Register bereitstellt: ein Status Register und ein Data Register. Dazu heißt es im Absatz "Internal Registers" auf Seite 6:
"The 8-bit Data Register (actually consists of several registers in a stack with only one register presented to the data bus at a time), which stores data, commands, parameters, and FDD status information. Data bytes are read out of, or written into, the Data Register in order to program or obtain the results after a particular command."
Aus dieser Beschreibung lassen sich die Tätigkeiten des zugehörigen Treibers bei einer Kommunikation mit dem PD765 Floppy Disk Controller ableiten:
Unter den Tätigkeiten 1 und 3 des Treibers versteht man die Bereitstellung einer Schnittstelle zum Geräte-Controller.
In dem Zitat oben heißt es:
"The 8-bit Data Register (actually consists of several registers in a stack with only one register presented to the data bus at a time)..."
Angenommen:
Beschreibe den Ablauf der Kommunikation zwischen Treiber und Data Register vor dem Hintergrund, dass das Data Register nur eine Breite von 8 Bit besitzt und aus "several registers in a stack" besteht.
Die Antwort auf diese Aufgabe zeigt, wie genau das Handeln des Treibers auf die Bedürfnisse und Gegebenheiten des Geräte-Controllers zugeschnitten sein muss.
Man kann sich auch vorstellen, dass Controller für andere Geräte, eine völlig unterschiedliche Kommunikation mit dem Treiber erfordern. Dies gilt umso mehr für Controller, die erst sehr viel später als der hier beispielhaft angesprochene NEC PD765 entwickelt wurden.
Die Schnittstelle wird mit hoher Wahrscheinlichkeit eine andere sein.
Du verstehst spätestens jetzt, warum es - wie in der folgenden Abbildung angedeutet - für jedes Gerät (bzw. dessen Controller) einen eigenen Treiber geben muss, oder?
Unter Punkt 2 der Tätigkeiten des FDC-Treibers ist aufgeführt:
"Abwarten, bis der Befehl ausgeführt wurde."
Woher weiß der Treiber, wann der an den Controller gesendete Befehl vom Gerät ausgeführt wurde, und die Ergebniswerte aus den Controller-Registern abgerufen werden können (Punkt 3 der Tätigkeiten)?
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png