Betriebssysteme Folie 6-1 6 Dateiverwaltung Rechner muß unterschiedliche Geräte bedienen können zeichenorientierte Geräte (character devices, unstructured devices) (z.b. Sichtgeräte, Drucker oder Übertragungsleitungen in Rechnernetzen) blockorientierte Geräte (block devices, structured devices) (z.b. Magnetplatten oder Magnetbänder) bei blockorientierten Geräten wird zwischen Rechner und Gerät immer ein Datenblock anstelle eines einzelnen Zeichens übertragen Beispiel: Ablauf einer Ein- / Ausgabe (Programm - Fragment) PROGRAM Adresskartei; (* Bearb. einer Mitgliederkartei *) CONST len = 3; TYPE KARTE = RECORD name: ARRAY [1..len] OF CHAR; vorname: ARRAY [1..len] OF CHAR; strasse: ARRAY [1..len] OF CHAR; hausnr: 1..9999; plz: 1..9999; ort: ARRAY [1..len] OF CHAR; bezirk:..999; telefon: ARRAY [1..len] OF CHAR; END; KARTEI = FILE OF KARTE; VAR mitglieder: KARTEI; satz: KARTE; BEGIN (* ====== Hauptprogramm ====== *) RESET (mitglieder); READ (mitglieder, satz); END.
Betriebssysteme Folie 6-2 Annahme: jedes Zeichen einer Karteikarte wird in 1 Byte und jede Zahl in 2 Byte gespeichert eine Karteikarte ist 156 Byte groß aus der Sicht des Programms besteht die Adreßdatei aus einer Folge von 156 Byte langen Sätzen für das Betriebssystem ist die Strukturierung der Datei auf Programmebene ohne Bedeutung das Betriebssystem teilt die Datei in eine Folge logisch aufeinanderfolgender Bereiche (logische Blöcke) ein das blockorientierte Gerät (z.b. Magnetplatte) hat eine völlig andere Blockstruktur (z.b. den Sektor als kleinste Transporteinheit) das Betriebssystem muß die logischen Blöcke der Datei auf die Blöcke des Gerätes abbilden Problem: die einzelnen Geräte besitzen i.a. völlig unterschiedliche Geräteparameter (z.b. unterschiedlich viele Oberflächen, Spuren pro Oberfläche, Sektoren pro Spur oder Sektorgrößen), so daß eine direkte Abbildung gerätespezifisch erfolgen müßte
Betriebssysteme Folie 6-3 Beispiel: Disketten 1) 5,25"-Disketten mit einer Kapazität von 36 KB: 2 Köpfe, 4 Spuren pro Kopf, 9 Sektoren pro Spur 2) 5,25"-Disketten mit einer Kapazität von 1,2 MB: 2 Köpfe, 8 Spuren pro Kopf, 15 Sektoren pro Spur Lösung des Problems: jedes Gerät stellt eine Folge von physikalischen Blöcken zur Verfügung, die z.b. jeweils aus einem oder mehreren zusammenhängenden Sektoren bestehen die Geräte stellen dem Betriebssystem eine unterschiedliche Anzahl von physikalischen Blöcken zur Verfügung, sehen aber sonst identisch aus (Beispiel: bei einer physikalischen Blockgröße von 2 KB besitzt die 36 KB Diskette 18 Blöcke und die 1,2 MB Diskette 6 Blöcke) die physikalischen Blocknummern werden vom sogenannten Gerätetreiber in gerätespezifische Angaben umgesetzt
Betriebssysteme Folie 6-4 die physikalischen Blöcke eines Gerätes sind nach einiger Zeit mehr oder weniger zufällig belegt oder frei, so daß eine Datei auf dem Gerät i.a. nicht in aufeinanderfolgenden physikalischen Blöcken gespeichert wird das Betriebssystem muß die logischen Blöcke einer Datei auf die physikalischen Blöcke des Gerätes abbilden logische und physikalische Blöcke werden i.a. gleich groß gewählt Ein-/Ausgabe bei blockorientierten Geräten Puffer im Anwendungsprogramm Satz Satz 1 Satz 2 Satz 3 Datei (Sicht des Programms) Puffer im Betriebssystem Block Block 1 Block 2 Datei (Sicht des Betriebssystems: logische Blocknummern) Block Block 1 Block n Gerät (Sicht des Betriebssystems: physikalische Blocknummern) Gerätesteuerung (Sicht des Betriebssystems: Geräteparameter, wie z.b. (Zylinder, Spur, Sektor) bei einer Platte)
Betriebssysteme Folie 6-5 die Größe eines Datensatzes im Programm entspricht normalerweise nicht der Blockgröße des Betriebssystems (Beispiel: Satz der Mitgliederkartei: 156 Byte; Blockgröße auf Betriebssystemebene: 1, 2, 4 oder 8 KB) das Betriebssystem muß jeden Block zuerst in einem Systempuffer zwischenspeichern, aus dem es den gewünschten Teil der Datei in den Puffer des Anwenderprogramms kopiert (falls der gewünschte Datensatz über eine logische Blockgrenze hinausgeht, muß das Betriebssystem zwei Blöcke anfordern) während der gesamten Ein- / Ausgabeoperation befindet sich der Prozeß im Zustand blockiert das Betriebssystem verfügt i.a. über mehrere interne Puffer um den zeitaufwendigen Datenaustausch mit dem peripheren Speicher zu minimieren, so daß ein Prozeß in den meisten Fällen nicht blockiert wird, sondern seine Daten sofort aus dem internen Puffer erhält bzw. in diesen schreiben kann
Betriebssysteme Folie 6-6 6.1 Dateiverwaltung unter MS-DOS MS-DOS verwendet eine Dateizuordnungstabelle (Synonym: Dateibelegungstabelle, engl.: file allocation table, Abk.: FAT) die FAT enthält für jeden physikalischen Block einen Eintrag, der u.a. angibt, ob der Block frei, unbrauchbar (fehlerhaft) oder einer Datei zugeordnet ist (im Betriebssystem MS-DOS heißen diese Blöcke Sektorgruppe oder cluster) im Dateiverzeichnis wird der Dateiname mit der ersten Blocknummer der Datei verknüpft diese Nummer wird einerseits dazu verwendet, den ersten Datenblock der Datei auf dem Datenträger zu lokalisieren und andererseits als Index in die FAT, um die Blocknummer des nächsten Datenblocks der Datei zu bestimmen der Wert eines Eintrags in der FAT ist entweder ein reservierter Wert (Dateiende, fehlerhafter Block) oder die Blocknummer des nächsten Datenblocks der Datei, die ihrerseits auf die gleiche Art verwendet werden kann wie die Nummer aus dem Eintrag im Dateiverzeichnis) MS-DOS verwendet eine spezielle Form einer verketteten Liste, um die Datenblöcke einer Datei zu finden
Betriebssysteme Folie 6-7 6.2 Dateiverwaltung unter UNIX Umwandlung von logischen in physikalische Blocknummern unter UNIX Dateikopf (i-node) Datenblöcke der Datei Typ + Zugriffsrechte Datenblock Referenzzähler Benutzernummer Gruppennummer Dateilänge Erstellungsdatum Datenblock 9 Datum des letzten Zugriffs Datum der letzten Änderung physikalische Blocknummer für logischen Block physikalische Blocknummer für logischen Block 9 physikalische Blocknummer für 1-fach indirekten Block physikalische Blocknummer für 2-fach indirekten Block physikalische Blocknummer für 3-fach indirekten Block Datenblock 1 Datenblock 137 Datenblock 138 Datenblock 16.521 Datenblock 16.522 Datenblock 2.113.673
Betriebssysteme Folie 6-8 UNIX verwendet eine Dateikopfliste (i-node-list), in der alle notwendigen Angaben zu einer Datei gespeichert sind das Dateiverzeichnis enthält den Dateinamen und die Nummer des zugehörigen Dateikopfes (i-node) falls eine Datei unter verschiedenen Namen bekannt ist (z.b. in verschiedenen Dateiverzeichnissen) müssen die Daten nur einmal gespeichert werden, da ein Referenzzähler im Dateikopf angibt, wie viele Verweise auf die Datei existieren die Datenblöcke einer Datei werden erst dann gelöscht, wenn der Referenzzähler den Wert annimmt sobald eine Datei geöffnet wird, wird der Dateikopf von der Platte in den Hauptspeicher übertragen und bleibt dort solange bis die Datei wieder geschlossen wird die logischen Blocknummern werden als Index in eine Verweisstruktur verwendet (die Nummern der ersten 1 Blöcke können direkt über den Dateikopf umgewandelt werden, so daß ein schneller Zugriff auf kleine Dateien sichergestellt ist. Falls die Datei größer ist, werden die nächsten Blöcke über (mehrstufige) Verweisblöcke adressiert)
Betriebssysteme Folie 6-9 UNIX erlaubt Dateien bis zu 4 GB Größe Beispiel: Es werde der 54.224-te Satz (Satzlänge 156 Byte) der Mitgliederkartei gesucht. Die physikalische Blockgröße betrage 512 Byte. Welcher Datenblock muß von der Platte gelesen werden? Der gesuchte Satz befindet sich im logischen Block mit der Nummer (54.224 x 156) / 512 = 16.521 Der physikalische Block kann nur über zwei Indexblöcke bestimmt werden (siehe obige Abbildung). Da die 2-fache Indizierung ab Block 138 beginnt, muß die logische Blocknummer 16.521 für die weitere Rechnung um diesen Wert reduziert werden (die Indizierung kann als ein Zahlsystem zur Basis 128 interpretiert werden). Aus dem Dateikopf ist die physikalische Blocknummer des ersten Indexblocks bekannt. Der Block wird eingelesen und es wird der Index für den nächsten Indexblock berechnet. (16.521-138) / 128 = Der Indexblock, den die dortige Blocknummer angibt, wird eingelesen. In diesem Block enthält der Eintrag 16.521-138 - x 128 = die physik. Blocknummer des Datenblocks mit dem gesuchten Satz.
Betriebssysteme Folie 6-1 Aufgaben 1) Warum gibt es physikalische Blocknummern? 2) Welche Aufgabe hat die Gerätesteuerung? 3) Wie werden die logischen Blocknummern einer Datei in physikalische Blocknummern bei MS-DOS umgesetzt?