3.4.5.1 Blockorientierte Geräte

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 86: Zeile 86:


<br />
<br />
<loop_area type="practice">
<p>
<p>
<loop_area type="practice">
Eine etwas vereinfachte Darstellung für einen Prozess, der Daten in eine (bereits geöffnete) Datei auf der Festplatte schreiben möchte:
Eine etwas vereinfachte Darstellung für einen Prozess, der Daten in eine (bereits geöffnete) Datei auf der Festplatte schreiben möchte:
</p>
* Der Prozess tätigt einen Systemaufruf zum Schreiben von Daten in eine Datei.
* Der Prozess tätigt einen Systemaufruf zum Schreiben von Daten in eine Datei.
* Durch den Systemaufruf kommt das Betriebssystem zur Ausführung.
* Durch den Systemaufruf kommt das Betriebssystem zur Ausführung.
Zeile 94: Zeile 95:
* Die Geräteverwaltung identifiziert die Festplatte als gewünschtes Gerät und sorgt dafür, dass Adresse 3&nbsp;072 (siehe Beispiel oben) in den Programmzähler geladen wird.
* Die Geräteverwaltung identifiziert die Festplatte als gewünschtes Gerät und sorgt dafür, dass Adresse 3&nbsp;072 (siehe Beispiel oben) in den Programmzähler geladen wird.
* Die CPU beginnt mit der Ausführung des vom Treiber bereitgestellten Maschinencodes.
* Die CPU beginnt mit der Ausführung des vom Treiber bereitgestellten Maschinencodes.
* Der Schreibbefehl wird ausgeführt.
* Die einzelnen Befehle des Maschinencodes der Treiberfunktion werden ausgeführt, dabei wird:
</p>
** Der betreffende Block auf der Festplatte identifiziert (ggf. auch nacheinander mehrere Blöcke)
</loop_area>
</loop_area>
</p>


<div class="autoit_do_not_print">
<div class="autoit_do_not_print">

Version vom 21. November 2014, 12:21 Uhr

Blockorientierte Geräte

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:

  • Festplatte
  • CD- oder DVD-Laufwerk
  • Bandlaufwerk


Beispiel

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:

  • Lade Datenblock Nr. 723 von der Festplatte.
  • Ändere das fünfte Byte wie gewünscht.
  • Schreibe Datenblock Nr. 723 zurück auf die Festplatte.

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


Schnittstelle für blockorientierte Geräte

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

  • die Initialisierung des Geräts,
  • das Lesen der Daten des adressierten Blocks vom Gerät,
  • das Schreiben der Daten des adressierten Blocks zum Gerät, sowie
  • die Behandlung eines vom Geräte-Controller ausgelösten Interrupts.

Diese Funktionen werden vom Gerätetreiber implementiert.


Zusammenarbeit von Treiber und Geräteverwaltung

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

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 für jedes unterstützte Gerät.


Beispiel

Zum Beispiel für die Festplatte

  • ab Adresse 2 048     initDevice()
  • ab Adresse 2 560     readBlock()
  • ab Adresse 3 072     writeBlock()
  • ab Adresse 4 096     handleInterrupt()

und für den DVD-Brenner

  • ab Adresse 6 144     initDevice()
  • ab Adresse 7 168     readBlock()
  • ab Adresse 7 680     writeBlock()
  • ab Adresse 8 704     handleInterrupt()

und so fort für jeden weiteren Treiber eines blockorientiertes Geräts.


Die Geräteverwaltung wird über die Startadressen der implementierten Funktionen informiert und verwaltet diese entsprechend für alle unterstützten blockorientierten Geräte. Ab diesem Moment steht das Gerät für die Nutzung durch die Geräteverwaltung, durch das Betriebssystem und/oder einen Prozess zur Verfügung.


Aus der Praxis

Eine etwas vereinfachte Darstellung für einen Prozess, der Daten in eine (bereits geöffnete) Datei auf der Festplatte schreiben möchte:

  • Der Prozess tätigt einen Systemaufruf zum Schreiben von Daten in eine Datei.
  • Durch den Systemaufruf kommt das Betriebssystem zur Ausführung.
  • Das Betriebssystem blockiert den betreffenden Prozess und leitet den Schreibauftrag an die Geräteverwaltung weiter.
  • Die Geräteverwaltung identifiziert die Festplatte als gewünschtes Gerät und sorgt dafür, dass Adresse 3 072 (siehe Beispiel oben) in den Programmzähler geladen wird.
  • Die CPU beginnt mit der Ausführung des vom Treiber bereitgestellten Maschinencodes.
  • Die einzelnen Befehle des Maschinencodes der Treiberfunktion werden ausgeführt, dabei wird:
    • Der betreffende Block auf der Festplatte identifiziert (ggf. auch nacheinander mehrere Blöcke)