3.4.4.3 Bereitstellen einer Schnittstelle zum Geräte-Controller

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.

Treiber-in-der-mitte.JPG


Beispiel aus alten Tagen

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).


Frage

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


NEC PD765 Floppy Disk Controller Chip

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.


Aufgabe 1

Aufgabe

Finde über dieses NEC PD765 Data Sheet heraus, wieviele und welche Befehle der Controller bereitstellt.


Zitat aus dem Data Sheet

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:

Zitat

"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."


Tätigkeiten des FDC-Treibers

Aus dieser Beschreibung lassen sich die Tätigkeiten des zugehörigen Treibers bei einer Kommunikation mit dem PD765 Floppy Disk Controller ableiten:

  1. Schreiben des Befehls mit allen nötigen Parametern und Daten in das Data Register des PD765.
  2. Abwarten, bis der Befehl ausgeführt wurde.
  3. Auslesen der Statusinformationen und Daten zum ausgeführten Befehl aus dem Data Register des PD765.
  4. Interpretation der ausgelesenen Statusinformationen.
  5. Einleiten weiterer Schritte auf Basis der Interpretation.


Wichtig

Unter den Tätigkeiten 1 und 3 des Treibers versteht man die Bereitstellung einer Schnittstelle zum Geräte-Controller.


Aufgabe 2

Aufgabe

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:

  • Der Treiber möchte einen Befehl in das Data Register des Controllers schreiben. Dieser Befehl habe eine Gesamtlänge von insgesamt vier Byte.

  • Nach der erfolgreichen Befehlsausführung liefere der Controller insgesamt sieben Byte zurück, die vom Treiber über das Data Register ausgelesen werden müssen.

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.


Hinweis

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?


Geraeteverwaltung-3.jpg


Aufgabe 3

Aufgabe

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