[gesichtete Version] | [gesichtete Version] |
Keine Bearbeitungszusammenfassung |
|||
Zeile 45: | Zeile 45: | ||
<br /> | <br /> | ||
<p> | <p> | ||
Ist ein blockorientiertes Gerät am System angeschlossen, so wird sein Treiber (z.B. beim Systemstart) in den Hauptspeicher geladen. Der Treiber implementiert (u.a.) die Funktionen initDevice(), readBlock(), writeBlock() | Ist ein blockorientiertes Gerät am System angeschlossen, so wird sein Treiber (z.B. beim Systemstart) in den Hauptspeicher geladen. Der Treiber implementiert (u.a.) die Funktionen | ||
* initDevice(), | |||
* readBlock(), | |||
* writeBlock(), sowie | |||
* handleInterrupt(). | |||
</p> | </p> | ||
<p> | <p> | ||
Durch das Laden des Treibers in den Hauptspeicher steht ab diesem Moment fest, ab welcher Adresse im Hauptspeicher der ausführbare Code der genannten Funktionen beginnt. | Durch das Laden des Treibers in den Hauptspeicher steht ab diesem Moment fest, ab welcher Adresse im Hauptspeicher der ausführbare Code der genannten Funktionen beginnt. Dies gilt für jeden geladenen Treiber, also auch für jedes unterstützte Gerät. | ||
</p> | </p> | ||
Zeile 55: | Zeile 59: | ||
<loop_area type="example"> | <loop_area type="example"> | ||
<p> | <p> | ||
Zum Beispiel für die Festplatte | Zum Beispiel für die Festplatte | ||
* ab Adresse 2 048 <math>\rightarrow</math> initDevice() | * ab Adresse 2 048 <math>\rightarrow</math> initDevice() | ||
* ab Adresse 2 560 <math>\rightarrow</math> readBlock() | * ab Adresse 2 560 <math>\rightarrow</math> readBlock() | ||
Zeile 62: | Zeile 66: | ||
</p> | </p> | ||
<p> | <p> | ||
und für den DVD-Brenner | |||
* ab Adresse 6 144 <math>\rightarrow</math> initDevice() | * ab Adresse 6 144 <math>\rightarrow</math> initDevice() | ||
* ab Adresse 7 168 <math>\rightarrow</math> readBlock() | * ab Adresse 7 168 <math>\rightarrow</math> readBlock() | ||
* ab Adresse 7 680 <math>\rightarrow</math> writeBlock() | * ab Adresse 7 680 <math>\rightarrow</math> writeBlock() | ||
* ab Adresse 8 704 <math>\rightarrow</math> handleInterrupt() | * ab Adresse 8 704 <math>\rightarrow</math> handleInterrupt() | ||
</p> | |||
<p> | |||
und so fort für jeden weiteren Treiber eines blockorientiertes Geräts. | |||
</p> | </p> | ||
</loop_area> | </loop_area> |
Blockorientierte Geräte übertragen Daten jeweils in kompletten Blöcken. Dies gilt sowohl beim Lesen von diesem Gerät, als auch beim Schreiben auf selbiges. Typische Blockgrößen liegen zwischen 512 und 32 768 Byte. Jeder Datenblock ist direkt adressierbar.
Beispiele für blockorientierte Geräte sind:
Eine Festplatte arbeite mit einer Blockgröße von 512 Byte. In Datenblock Nr. 723 soll das fünfte Byte geändert werden. Der folgende Ablauf ist dafür nötig:
Es können also immer nur komplette Datenblöcke ( in diesem Beispiel 512 Byte) gelesen oder geschrieben werden.
Der betreffende Datenblock wird direkt adressiert ( Nr. 723).
Die Geräteverwaltung definiert üblicherweise eine Standardschnittstelle, welche die Treiber aller blockorientierten Geräte unterstützen müssen. Darin vorgesehen sind beispielsweise Funktionen für
Diese Funktionen werden vom Gerätetreiber implementiert.
Ist ein blockorientiertes Gerät am System angeschlossen, so wird sein Treiber (z.B. beim Systemstart) in den Hauptspeicher geladen. Der Treiber implementiert (u.a.) die Funktionen
Durch das Laden des Treibers in den Hauptspeicher steht ab diesem Moment fest, ab welcher Adresse im Hauptspeicher der ausführbare Code der genannten Funktionen beginnt. Dies gilt für jeden geladenen Treiber, also auch für jedes unterstützte Gerät.
Zum Beispiel für die Festplatte
und für den DVD-Brenner
und so fort für jeden weiteren Treiber eines blockorientiertes Geräts.
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png