Massenspeichergeräte wie Festplatten-, CD-ROM- und Diskettenlaufwerke haben normalerweise eine Blockstruktur, d.h. aus Betriebssystemsicht lassen sich Daten nur als ganze Blöcke lesen oder schreiben. Ein Block hat dabei eine feste Größe, die früher 512 (29) Bytes, heute meist 4096 (212) oder 8192 (213 ) Bytes umfasst. Die Speichergeräte präsentieren sich als große Fläche mit vielen Blöcken.
Blockstruktur eines Massenspeichergeräts (jeder Block besteht beispielsweise aus 8192 Bytes):
| Block0
| Block1
| Block2
| Block3
| ...
|
Ein Programm greift auf die Massenspeicher über das Dateisystem zu. Unter UNIX und ähnlichen Betriebssysteme werden dazu Systemrufe zur Verfügung gestellt. Die wichtigsten Systemrufe sind hier:
- open, close - Öffnen und Schließen einer Datei
- read, write - Lesen und Schreiben
- creat, unlink - Erzeugen und Löschen
- mkdir, rmdir - Erzeugen und Löschen eines Verzeichnisses
- readdir - Lesen von Verzeichniseinträgen
Eine Datei ist eine Speicherfläche beliebiger Größe, die auf dem Gerät aus mehreren Blöcken besteht. Jede Datei erhält außerdem eine Beschreibungsstruktur, die die tatsächliche Größe, Referenzen auf die verwendeten Blöcke und evtl. weitere Informationen wie Dateityp, Eigentümer, Zugriffsrechte enthalten kann.
Verzeichnisse enthalten Dateinamen und Referenzen zu dem jeweiligen Beschreibungsblock. Da Verzeichnisse auch Speicherflächen sind, werden meist speziell gekennzeichnete Dateien als Verzeichnisse verwendet. Der erste Beschreibungsblock kann dabei das Ausgangsverzeichnis enthalten. Oft ist der erste Block für einen Bootblock reserviert, der für das Hochfahren des Systems verwendet werden kann. Er ist nicht Teil des eigentlichen Dateisystems.
Aufteilung eines Massenspeichers für ein Dateisystem:
| Boot
| Beschreibungsblöcke
| Freiliste
| Blöcke mit Dateien und Verzeichnissen
|
Die Umsetzung der Systemrufe eines Programms werden vom Kernel eines Betriebssystems implementiert und unterscheiden sich bei den verschiedenen Dateisystemen. Der Kernel übersetzt die Zugriffe dann in die Blockoperationen des jeweiligen Massenspeichers.
Wenn ein Programm eine Datei mittels open öffnet, wird der Dateiname im Verzeichnis gesucht. Die Blöcke auf dem Massenspeicher ermittelt der Kernel aus den entsprechenden Beschreibungsstrukturen. Falls eine Datei im Verzeichnis gefunden wird, erhält man auch ihre Beschreibungsstruktur und damit Referenzen zu den Blöcken.
Mit read kann das Programm dann auf die Blöcke der Datei zugreifen. Falls mit write die Datei vergrößert wird, wird bei Bedarf ein neuer Block aus der Freiliste entnommen und in der Beschreibungsstruktur der Datei hinzugefügt. Auch die anderen Systemrufe lassen sich in Blockzugriffe übersetzen.