10. Implementierung von Dateisystemen Application Programs Logical Files System File Organization Module Input/Output Control Basic File System Devices Figure 60: Schichten eines Filesystems Betriebssysteme Harald Kosch Seite 175
Implementierung auf der Platte Benutzersicht der Datei Stream (sequentiell) Array von logischen Blöcken oder Bytes (direkt) Hardware-Sicht Array von physischen Blöcken Sequentieller Zugriff ist trotzdem schneller rotational latency, seek time entfallen Interne Fragmentierung ist unvermeidbar Blöcke fester Länge Aufgabe der Implementierung Effiziente und zuverlässige Abbildung der Benutzersicht auf die Hardware-Sicht Allozierung von Blöcken Verwaltung von freien Blöcken Verwaltung von Directories Pufferverwaltung Betriebssysteme Harald Kosch Seite 176
Kontinuierliche Allozierung File Start Length Count 0 1 4 2 5 6 7 8 9 10 11 Tr 3 F Count 0 2 Tr 14 3 Mail 19 6 List 28 4 F 6 2 12 13 14 15 16 17 18 19 Mail 20 21 22 23 24 25 26 27 List 28 29 30 31 External Fragmentierung, aber schneller Zugriff Dynamische Allozierung: first-fit schnell best-fit langsam, kleine Restfragmente worst-fit langsam, große Restfragmente Kompaktierung langsam und hoch fehlerempfindlich Allozierungsschwierigkeit Feste Größe muß im voraus bekannt sein Betriebssysteme Harald Kosch Seite 177
Gelinkte Allozierung 0 1 10 2 3 4 5 6 7 File 8 9 16 10 25 11 Start Jeep 9 End 25 12 13 14 15 16 1 17 18 19 20 21 22 23 24 25-1 26 27 28 29 30 31 Ineffizient für direkten Zugriff Fehlerempfindlich (kann durch doppelt verkettete Listen reduziert werden) Verbesserte Implementierung durch File-Allocation Table (FAT) Die Einträge in der FAT sind durch Blocknummern indiziert und zeigen auf einen nächsten Eintrag (oder NIL) Betriebssysteme Harald Kosch Seite 178
Indizierte Allozierung 0 1 2 3 4 5 6 7 File Jeep Index Block 9 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 19 9 16 1 10 25-1 -1 28 29 30 31 Verlust von Index-Block bei kleinen Dateien Bei großen Dateien Gekettete Index Blocks Mehrschichtige Indizes bei sehr großen Dateien Beide verlangsamen den Zugriff Betriebssysteme Harald Kosch Seite 179
File-Implementierung in UNIX owner berni group os type regular file perms rwxr-xr-x accessed Apr 7 17:42:29 1999 modified Apr 15 04:42:29 1999 inode Jun 6 06:06:06 1999 size 17004 bytes disk addresses Figure 61: Beispiel eines Inode Jede Datei und Directory ist durch einen Inode beschrieben mit folgenden Inode-Attributen: Besitzer Typ Zugriffskontrolle Zugriff und Änderung der Datei Änderung des Inodes (z.b. permissions) Adressen der physischen Daten Betriebssysteme Harald Kosch Seite 180
Allozierung im Inode I-node Disk addresses Attributes Single indirect block Double indirect block Addresses of data blocks Triple indirect block Figure 62: Direkte und indirekte Blocks in einer Inode Mit 32-Bit Blockadressierung, 1 KB Blöcken (256 Einträge), max 16 GB Größe für ein File. Betriebssysteme Harald Kosch Seite 181
0 1 2 3 4 5 6 7 8 9 single double 4096 228 46423 0 0 11111 0 101 367 0 428 9156 824 256 K 331 3333 75 K 808 367 816 9156 331 3333 Figure 63: Block Layout eines Files und seiner Inode Direkte Blöcke: 1KB Einfache Indirektion: 256 KB Doppelte Indirektion: 256 256 KB = 64 MB Dreifache Indirektion: 256 256 256 KB = 16 GB 1. Bsp.: Byteadresse: 9000 block 8, 808. Byte (9000 DIV 1024 = 8, 9000 MOD 1024 = 808) 2. Bsp.: Byteadresse: 350.000 double block 262.144 (=256 KB) 87.040 (=75 KB) + 816 (byte offset) 350.000 Betriebssysteme Harald Kosch Seite 182
Verwaltung der freien Blöcke Free Space List Head 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Figure 64: Verkettete Liste der freien Blöcke Verkettete Liste Bitmap (effizient für kleine Platten) Freie-Block-Blöcke: selber gelinkt Zähler für zusammenhängende Blöcke Betriebssysteme Harald Kosch Seite 183
Freie Blöcke in UNIX UNIX File System Layout: (Berkley: cylinder groups, d.h. mehrere solche Subsysteme) boot super inode list... data blocks... block block Super Block: Figure 65: UNIX FS Layout Größe des FS, der Inode-Liste, Liste der freien Blöcke Info über freie Blöcke und freie Inodes Funktioniert als Cache für die freien Blöcke Der Kernel schreibt den Superblock periodisch auf die Platte Betriebssysteme Harald Kosch Seite 184
superblock list 109.................................. Hauptspeicher 109 211 208 205 202................. Original configuration superblock list 112 Platte 109 109 949.............................. 211 208 205 202................. After freeing block number 949 112 superblock list 109.................................. 109 211 208 205 202................. After assigning block number 949 112 superblock list 211 208 205 202................. 112 211 344 341 338 335................. 243 After assigning block number 109 replenish superblock free list Figure 66: Disk Blocks anfordern und freigeben Betriebssysteme Harald Kosch Seite 185
Hierarchisches Directory (z.b. MS-DOS) Bytes 8 3 1 10 2 File name 2 2 4 Size Extension Attributes Reserved Time Date First block number Figure 67: Ein MS-DOS Directory-Eintrag Ein Directory kann Directories enthalten Allozierung über File Allocation Table z.b. File 1 : 3 (4, 7, 10) File 2 : 9 FFFF 4 7 A FFFF FFFF 1 2 3 4 5 6 7 8 9 A Figure 68: File Allocation Table (FAT) Betriebssysteme Harald Kosch Seite 186
Hierarchisches Directory z.b. UNIX Bytes 2 14 File name I-node number Figure 69: Ein Directory-Eintrag (dentry) in UNIX Der hierarchische Pfadname wird entlang der Hierarchie lokalisiert: 1. 2.. 4 bin 7 dev 14 lib 9 etc 6 usr 8 tmp I-node 6 is for /usr Mode size times 132 Root directory Block 132 is /usr directory 6. 1.. 19 dick 30 erik 51 jim 26 ast 45 bal I-Node 26 is for /usr/ast Mode size times 406 Block 406 is /usr/ast directory 26. 6.. 64 grants 92 books 60 mbox 81 minix 17 src Looking up usr yields to I-node 6 I-node 6 says that /usr is in block 132 /usr/ast is in I-node 26 I-node 26 says that /usr/ast is in block 406 /usr/ast/mbox is I-node 60 Figure 70: Die Schritte, um /usr/ast/mbox zu finden. Die I-node Nummer ist ein fester Index Betriebssysteme Harald Kosch Seite 187
Zuverlässigkeit Ist von höchster Wichtigkeit. Bad blocks können markiert werden und durch Reserveblöcke ersetzt werden (in Hardware oder Software). Backup Vollbackup oder inkrementelles Backup Spiegelung Alles doppelt speichern (schnell aber teuer). Inkonsistenz einzelner Dateien (z.b. durch Stromausfall). Block number 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 Blocks in use Block number 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 Blocks in use 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 Free blocks Consistent 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 Free blocks Missing block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 Blocks in use 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 1 0 1 0 2 1 1 1 0 0 1 1 1 0 0 Blocks in use 0 0 1 0 2 0 0 0 0 1 1 0 0 0 1 1 Free blocks Duplicate Block in free list 0 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 Free blocks Duplicate data block Figure 71: Zustände eines Dateisystems. (a) Konstistent. (b) Fehlender Block. (c) Duplizierter Block in der Liste der freien Blöcke. (d) Doppelter Datenblock. Inkonsistenz des Directories: Anzahl der Files muß mit den Link-Zählern der Inodes übereinstimmen. Betriebssysteme Harald Kosch Seite 188
Speicherhierarchie Registers Cache Random Access Memory Puffer (Cache) Disk-System Tape-System Betriebssysteme Harald Kosch Seite 189
Pufferverwaltung Dient zur Zwischenspeicherung von Plattendaten im Arbeitsspeicher Gleicht den Geschwindigkeitsunterschied zwischen Platte und Arbeitsspeicher etwas aus Kann für mehrfach verwendete Daten auch als Cache dienen Könnte im Prinzip das Anwendungsprogramm tun (sogar besser als das Betriebssystem), die meisten Betriebssysteme bieten aber eine Pufferverwaltung selber an Betriebssysteme Harald Kosch Seite 190
ptr to previous buffer on hash queue device num block num status ptr to data area ptr to next buffer on hash queue ptr to previous buffer on free list ptr to next buffer on free list Figure 72: Buffer Header Status: locked or free valid data delayed write currently reading or writing wanted Betriebssysteme Harald Kosch Seite 191
Das Linux Filesystem Das Virtuelle Filesystem (VFS) Ermöglicht die gleichzeitige Benutzung (mounting) mehrerer Filesysteme Figure 73: Der Aufbau des Virtuellen Filesystems Benutzt eigene Superblocks und Inodes Die realen Filesysteme entweder im Kernel gebunden oder als ladbare Module müssen sich bei VFS registrieren Betriebssysteme Harald Kosch Seite 192
Die realen Filesysteme bieten Funktionen an, die die einzelnen Operationen filesystem-spezifisch durchführen (eine Art Objektorientierung) So wird z.b. ein read auf eine Minix Datei durch ein Minix read durchgeführt Figure 74: Registrierte Filesysteme Figure 75: Mounted Filesystem Die Operationen sind in den Superblocks gespeichert Der Buffer Cache ist gemeinsam für alle Filesysteme, es ist an die Blockdevices (Platte) gebunden VFS cache-t selber Inode und Directory Daten Betriebssysteme Harald Kosch Seite 193
Second Extended Filesystem (EXT2) Das Hauseigene Filesystem von Linux Files bestehen aus einer integeren Anzahl von Blöcken fester Länge (z.b. 1 KB) Die logische Partition wird in Blockgruppen aufgeteilt Die Blockgruppen duplizieren die kritischen Daten Figure 76: EXT2 physikalische Struktur EXT2 Superblock Beschreibt die Grunddaten eines Filssystems Magc Number Identifikation Mount Count, Maximum Mount Count Bei zu viel mounts ein Filesystem Check ist ratsam Block Group Number Die Stelle der Kopie des Superblocks Block Size, Bolcks per Group Free Blocks, Free Inodes, First Inode,... Betriebssysteme Harald Kosch Seite 194
EXT2 Group Descriptor Beschreibt die Grunddaten einer Blockgruppe Wird ähnlich dem Superblock dupliziert Blocks Bitmap Stelle der Allokation-Bitmap für Datenblöcke Inode Bitmap Stelle der Allokation-Bitmap für Indoes Inode Table Stelle der Inode-Tabelle Free blocks count, Free Inodes count,... Betriebssysteme Harald Kosch Seite 195
Figure 77: EXT2 inode Struktur EXT2 Inode ähnlich zu anderen Unix-inodes Mode Art der Datei (file, directory, symbolic link, block device, character device,...) und Zugriffsrechte Besiter Direkter Besitzer und Gruppe Größe Zeitstempel (Erzeugung, letzte Änderung...) Zeiger auf die Datenblöcke mit der üblichen Struktur (Erste 12 Blöcke direkt, dann doppelte und dreifache Indirektion) Betriebssysteme Harald Kosch Seite 196
Figure 78: EXT2 Directory Struktur EXT2 Directories sind spezielle Files, wie üblich in Unix Inode Index zur Inode-Tabelle für sich selbst Name, Länge des ganzen Eintrags Die ersten 2 Einträge in jedem Directory:. für das aktuelle- und.. für das Vater-Directory Betriebssysteme Harald Kosch Seite 197
Das /proc Filesystem Ein virtuelles reales Filesystem Registriert sich, wie ein reales Filesystem Die Filesystemoperationen werden durch Funktionen realisiert, die Kernel-Informationen darlegen Z.B. /proc/devices wird aus den entsprechenden Kernel- Datenstrukturen erzeugt Betriebssysteme Harald Kosch Seite 198