update
This commit is contained in:
310
Writerside/topics/02/BS/16_Dateisysteme.md
Normal file
310
Writerside/topics/02/BS/16_Dateisysteme.md
Normal file
@ -0,0 +1,310 @@
|
||||
# Dateisysteme
|
||||
## Warum Dateisysteme
|
||||
- Neben Verwaltung des Hauptspeichers und Cache
|
||||
- Verwaltung des Massenspeichers (bspw. SSD, Festplatte)
|
||||
- Organisation der Ablage von Dateien
|
||||
- Dateisysteme verwalten die Namen und Attribute (Metadaten) der Dateien
|
||||
- Bilden einen Namensraum
|
||||
- Hierarchie von Verzeichnissen und Dateien
|
||||
|
||||
## Dateien
|
||||
- Datei dient der Abstraktion
|
||||
- Bietet Möglichkeit Informationen auf einer Platte zu speichern/lesen
|
||||
- Nutzer müssen Details der Speicherung verborgen bleiben
|
||||
- _Wo_ und _Wie_
|
||||
- Wichtigstes Merkmal ist Art und Weise wie verwaltete Objekte benannt werden
|
||||
- Wenn Prozess Datei erzeugt, vergibt er ihr einen Namen
|
||||
- Bei einigen Systemen (bspw UNIX)
|
||||
- Dateiendungen lediglich Konventionen, die vom Betriebssystem nicht erzwungen
|
||||
- Datei _file.txt_ kann Textdatei sein, Name dient mehr dazu den User zu erinnern
|
||||
- Andererseits könnte ein C-Compiler darauf bestehen, dass Eingabedateien Endung ".c" haben
|
||||
- Für BS ist das egal
|
||||
- Dateien können in verschiedenster Art und Weise strukturiert sein
|
||||
- **Bytefolge**
|
||||
- **Datensätze**
|
||||
- **Baumstrukturen**
|
||||
- In den meisten Fällen werden Dateien als Bytefolgen angesehen
|
||||
- Maximum an Flexibilität
|
||||
- Interpretation der Inhalte erfolgt auf Anwendungsebene
|
||||
|
||||
## Sequenzieller Dateizugriff
|
||||
- Prozess kann alle Bytes oder Datensätze einer Datei nacheinander lesen
|
||||
- Überspringen oder Zugriffe außerhalb der Reihenfolge nicht möglich
|
||||
- Sequenzielle Dateien konnten zurückgespult werden
|
||||
- können so oft wie nötig gelesen werden
|
||||
|
||||
## Wahlfreier Dateizugriff
|
||||
- Mit Einführung der Platte als Speichermedium
|
||||
- Möglichkeit die Bytes oder Datensätze in beliebiger Reihenfolge auslesen
|
||||
- über Schlüssel statt Positionsangabe zugreifen
|
||||
- Dateien, bei denen das geht = Dateien mit _wahlfreiem Zugriff_ (random access file)
|
||||
- sind heute Voraussetzung für viele Anwendungen
|
||||
- bspw. für Datenbanksysteme
|
||||
|
||||
## Dateiattribute
|
||||
- Eigenschaften / Metadaten
|
||||
- Können von BS / Dateisystem verwaltet werden
|
||||
- enthalten Größe, Erstellungsdatum, Zugriffsrechte ...
|
||||
|
||||
## Dateioperationen
|
||||
### Create
|
||||
- Datei wird ohne Datum erzeugt
|
||||
- Entstehung der Datei ankündigen und eigene Attribute festlegen
|
||||
|
||||
### Delete
|
||||
- Wird eine Datei nicht länger benötigt, muss sie gelöscht werden
|
||||
|
||||
### Open
|
||||
- Bevor eine Datei benutzt werden kann, muss ein Prozess sie öffnen
|
||||
- Open ermöglicht Laden in Arbeitsspeicher
|
||||
|
||||
### Close
|
||||
- Freigeben des internen Tabellenspeichers
|
||||
|
||||
### Read
|
||||
- Daten werden aus Datei gelesen
|
||||
- Bytes von der aktuellen Position
|
||||
- Aufrufer muss angeben wie viele Daten benötigt werden
|
||||
- Puffer für Daten zur Verfügung stellen
|
||||
|
||||
### Write
|
||||
- Wenn aktuelle Position an Ende der Datei
|
||||
- Dateigröße erhöht sich
|
||||
- Befindet sich Position in der Mitte der Datei
|
||||
- vorhandene Daten werden überschrieben
|
||||
|
||||
### Append
|
||||
- Eingeschränkte Form von [Write](#write)
|
||||
|
||||
### Seek
|
||||
- Bei Dateien mit wahlfreiem Zugriff
|
||||
- Von wo Daten holen?
|
||||
- Seek positioniert Dateizeiger an einer bestimmten Stelle in der Datei
|
||||
- Danach lesen/schreiben an Position
|
||||
|
||||
### Rename
|
||||
- Name der Datei ändern
|
||||
- nicht zwingend notwendig
|
||||
- normalerweise in eine neue Datei mit anderem Namen umkopieren
|
||||
- alte löschen
|
||||
|
||||
### Get attributes
|
||||
|
||||
### Set attributes
|
||||
|
||||
## Verzeichnisse
|
||||
- Verzeichnissystem mit nur einer Ebene ist angemessen für sehr einfache Anwendungen
|
||||
- 
|
||||
- **absolute Pfadnamen**
|
||||
- Gesamter Pfad von Wurzel bis Datei
|
||||
- **relative Pfadnamen**
|
||||
- In Verbindung mit dem Konzept des Arbeitsverzeichnisses
|
||||
- ./
|
||||
- aktuelles Verzeichnis
|
||||
- ../
|
||||
- übergeordnetes Verzeichnis
|
||||
- 
|
||||
|
||||
## Verzeichnisoperationen
|
||||
### Create (Verzeichnis)
|
||||
|
||||
### Delete (Verzeichnis)
|
||||
- Es kann immer nur ein leeres Verzeichnis gelöscht werden
|
||||
- (., .. dürfen enthalten sein)
|
||||
|
||||
### Opendir
|
||||
- Um beispielsweise alle Dateien in einem Verzeichnis aufzulisten
|
||||
|
||||
### Closedir
|
||||
|
||||
### Readdir
|
||||
- Aufruf gibt nächsten Eintrag eines geöffneten Verzeichnisses zurück
|
||||
|
||||
### Rename (Verzeichnis)
|
||||
|
||||
### Link
|
||||
- Durch Technik des Verlinkens können Dateien in mehr als einem Verzeichnis vorkommen
|
||||
- Spezifiziert eine vorhandene Datei und erzeugt Verbindung von dieser Datei zu dem Namen
|
||||
|
||||
### Unlink
|
||||
- Verzeichniseintrag wird entfernt
|
||||
- Falls nur in einem Verzeichnis → [löschen](#delete)
|
||||
|
||||
## Implementierung
|
||||
- BIOS liest MBR ein, führt aus
|
||||
- MBR-Programm
|
||||
- lokalisiert aktive Partition
|
||||
- liest ersten Block (Boot-Block)
|
||||
- führt aus
|
||||
- lädt BS, das in Partition gespeichert ist
|
||||
- Dateisystem enthält häufig noch Superblock
|
||||
- enthält alle _Schlüsselparameter_ des Dateisystems
|
||||
- **Magische Zahl**
|
||||
- identifiziert Typ des DS
|
||||
- **Anzahl der Blöcke**
|
||||
- **Weitere administrative Schlüsselinformationen**
|
||||
- wird bei Start in den Speicher geladen
|
||||
- Danach
|
||||
- **Freie Blöcke**
|
||||
- Bitmap oder Liste von Zeigern
|
||||
- **I-Nodes**
|
||||
- Feld von Datenstrukturen
|
||||
- Jede beinhaltet Informationen über je eine Datei
|
||||
- **Wurzelverzeichnis**
|
||||
- Spitze des Dateibaums
|
||||
- 
|
||||
|
||||
## Methoden zur Belegungsverkettung
|
||||
### Zusammenhängende Belegung
|
||||
- Einfachstes Belegungsschema
|
||||
- Speicherung als zusammenhängende Menge von Plattenblöcken
|
||||
- Jede Datei beginnt mit neuem Block
|
||||
- 
|
||||
- | Vorteile | Nachteile |
|
||||
|-----------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|
|
||||
| Einfach zu implementieren<br/>Lokalisierung der Dateiblöcke basiert auf zwei Zahlen | Im Laufe der Zeit wird die Platte fragmentiert |
|
||||
| hervorragende Leseleistung<br/>Gesamte Datei kann mit einer Operation von der Platte gelesen werden |  |
|
||||
- In manchen Situationen praktikabel
|
||||
- CD-ROM
|
||||
- alle Dateigrößen sind bekannt, werden sich niemals während Gebrauch ändern
|
||||
- DVD
|
||||
- Kann als eine Datei gespeichert werden
|
||||
- meistens ~4 1GB Dateien
|
||||
|
||||
### Verkettete Listen
|
||||
- Jede Datei ist verkettete Liste von Plattenblöcken
|
||||
- Erstes Wort = Zeiger auf den nächsten
|
||||
- Rest = Daten
|
||||
- 
|
||||
- | Vorteile | Nachteile |
|
||||
|-------------------------------------------------------------------------|--------------------------------------------------------------------|
|
||||
| Kein verlorener Speicherplatz durch Fragmentierung | sequenzielles Lesen zwar schnell, wahlfreier Zugriff sehr langsam |
|
||||
| | Für Verzeichniseintrag ist Plattenadresse des ersten Blocks ausreichend | Um Auf Block n zuzugreifen müssen n-1 Blöcke vorher gelesen werden |
|
||||
|
||||
### File Allocation Table (FAT)
|
||||
- Zeiger jedes Plattenblocks in einer Tabelle im Arbeitsspeicher
|
||||
- | Vorteile | Nachteile |
|
||||
|------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|
|
||||
| Gesamter Block steht für Daten zur Verfügung | Gesamte Tabelle muss durchgehend im Speicher sein |
|
||||
| Obwohl Kette verfolgt werden muss, kann das im RAM ohne Zugriffe auf Platte geschehen | Bei einer !TB Festplatte mit einer Blockgröße von 1KB benötigt die Tabelle 1Mia*3Byte ~ 3GB des RAM |
|
||||
| Es reicht für Verzeichniseintrag einen einzigen ganzzahligen Wert des Startblocks zu speichern | |
|
||||
|
||||
### I-Nodes (Index Node)
|
||||
- Datenstruktur, die Informationen über eine Datei oder ein Verzeichnis auf einem Dateisystem enthält
|
||||
- Jede/s Datei/Verzeichnis ist durch einen eindeutigen I-Node identifiziert
|
||||
- | Vorteile | Nachteile |
|
||||
|--------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| I-Node muss nur im Speicher sein, solange Datei geöffnet ist | Jeder Node kann nur begrenzte Anzahl von Plattenadressen<br/>Sobald das Limit erreicht ist, müsste man die letzte Adresse als Zeiger auf den nächsten Node nehmen |
|
||||
| Feld, das die I-Nodes enthält benötigt nur n*k Byte | |
|
||||
- 
|
||||
|
||||
|
||||
## Dateinamen
|
||||
- Keine festgelegte Länge
|
||||
- variable Dateinamenlängen verwalten?
|
||||
- 
|
||||
- Nachteil:
|
||||
- Lücke variabler Länge
|
||||
- entsteht, wenn eine Datei entfernt wird und nächste Lücke nicht genau passt
|
||||
- Es ist möglich Verzeichniseinträge zu verschieben
|
||||
- 
|
||||
- Für alle Dateinamen nur feste Längen zulassen
|
||||
- Gemeinsam auf einem Heap am Ende des Verzeichnisses speichern
|
||||
- Vorteil:
|
||||
- nach Entfernen einer Datei passt nächste immer rein
|
||||
- Heap muss mitverwaltet werden :/
|
||||
- Lineare Suche → sehr langsam
|
||||
- Verwendung einer Hashtabelle in jedem Verzeichnis
|
||||
- Vorteil einer viel schnelleren Suche
|
||||
- Nachteil: komplizierte Verwaltung
|
||||
- Zwischenspeichern der Resultate vorangegangener Suchen
|
||||
|
||||
## Gemeinsam genutzte Dateien
|
||||
- 
|
||||
- Probleme:
|
||||
- 
|
||||
- Enthält Verzeichnis Plattenadressen, dann muss Kopie der Adressen im Verzeichnis B angelegt werden
|
||||
- Wenn B/C Daten an Datei anhängen
|
||||
- neue Blöcke werden nur im Verzeichnis, in dem Änderung stattfand, aufgelistet
|
||||
- Zweck gemeinsamer Verwendung verfehlt
|
||||
|
||||
### Symbolische Links
|
||||
- Enthält Pfadnamen zur gewünschten Datei
|
||||
- Wenn B Datei liest, sucht BS direkt im angegebenen Pfad
|
||||
- | Vorteil | Nachteile |
|
||||
|--------------------------------------------------------|--------------------------------------------------------------------------------------------|
|
||||
| Dateien auf entfernten, vernetzten Maschinen verlinken | zusätzlicher Aufwand<br/>eigener Plattenblock für Pfad |
|
||||
| | Datei mit Pfadnamen muss gelesen werden, Pfad analysieren, Komponente bis I-Node verfolgen |
|
||||
| | Falls in Unterverzeichnissen wird Datei evtl. mehrfach gefunden |
|
||||
| | Bei Einspielung auf anderen Computer → Link wird zur Kopie der selben Datei |
|
||||
|
||||
## Log-basiertes Dateisystem (LFS)
|
||||
- Schreibzugriffe sind effizienter als Lesezugriffe
|
||||
- Schreibleistungs- und Fragmentierungsprobleme überwinden
|
||||
- Schreibvorgänge werden protokolliert
|
||||
- Mit schnelleren CPUs, größerem RAM wächst Platten-Cache schneller
|
||||
- Viele Lesezugriffe direkt aus Platten-Cache
|
||||
- Ohne Festplattenzugriffe
|
||||
- Meiste Plattenzugriffe = Schreibzugriffe :)
|
||||
- Probleme
|
||||
- Schreibzugriffe meist in Stückchen → ineffektiv
|
||||
- Abhängig von
|
||||
- Spurwechselzeit ([seek](#seek) time)
|
||||
- Latenzzeit (latency)
|
||||
- Kommando-Latenz (controller overhead)
|
||||
- Inkonsistenzen bei Systemabstürzen
|
||||
- Lösungsansatz
|
||||
- Alle noch ausstehenden im Speicher gepufferten Schreibaufträge regelmäßig sammeln
|
||||
- An Ende des Logs schreiben
|
||||
- Einzelnes Segment kann in beliebiger Reihenfolge I-Nodes, Verzeichnisblöcke und Datenblöcke enthalten
|
||||
- Am Anfang Zusammenfassung über Inhalt
|
||||
- Probleme Lösungsansatz
|
||||
- Log wird ohne Reorganisation immer größer
|
||||
- Bereinigungsvorgang wird benötigt
|
||||
- Über alle Vorgänge Protokoll zu führen erfordert logistischen Aufwand
|
||||
- LFS sind hochgradig inkompatibel zu bestehenden Dateisystemen
|
||||
- können Inkonsistenz bei Systemabstürzen nicht abfangen
|
||||
|
||||
## Journaling
|
||||
- mit Grundgedanken von [LFS](#log-basiertes-dateisystem-lfs) Robustheit DS erhöhen
|
||||
- Log ist Protokoll über geplante Aktionen
|
||||
- Bei Systemabsturz vor Beendigung einer geplanten Arbeit
|
||||
- Bei Neustart im Log nachschauen, was gerade vor sich ging
|
||||
- Vorgang sauber beenden
|
||||
- Beispiel:
|
||||
- _NTFS_, _ext3_, _macOS Extended_
|
||||
- Für zusätzliche Zuverlässigkeit
|
||||
- Datenbankkonzept der atomaren Transaktion
|
||||
- Gruppe von Aktionen klammern
|
||||
- Anfangstransaktion (begin transaction)
|
||||
- Endtransaktion (end transaction)
|
||||
- Dateisystem weiß, das es alle eingeklammerten oder keine ausführen muss
|
||||
- ACID-Eigenschaften
|
||||
- **Atomarität (Atomicity)**
|
||||
- Transaktion wird als Ganzes behandelt
|
||||
- alle oder keine Operationen in Transaktion ausführen
|
||||
- Wenn eine fehlschlägt Rest rückgängig machen
|
||||
- **Konsistenz (Consistency)**
|
||||
- Transaktionen werden von einem in einen andern konsistenten Zustand überführt
|
||||
- Nach Abschluss einer erfolgreichen Transaktion
|
||||
- DB in Zusatnd, der Integritätsregeln entspricht
|
||||
- **Isolation (Isolation)**
|
||||
- mehrere gleichzeitige Transaktionen unabhängig, gleichzeitig ausführen
|
||||
- **Dauerhaftigkeit (Durability)**
|
||||
- einmal abgeschlossene Transaktion dauerhaft in DB gespeichert
|
||||
- Änderung auch nach Systemabsturz / Neustart erhalten
|
||||
|
||||
## Virtuelle Dateisysteme (VFS)
|
||||
- 
|
||||
- Abstraktionsschicht im BS
|
||||
- dient zur Vereinheitlichung der Dateisysteme und deren Zugriffsmethoden
|
||||
- Anwendungen können auf Dateien zugreifen
|
||||
- ohne auf Details der zugrunde liegenden physischen Dateisysteme zu achten
|
||||
- erleichtert Portabilität, flexiblere Verwaltung der Dateisystemressourcen
|
||||
- Wenn System hochgefahren
|
||||
- Wurzeldateisystem beim VFS registrieren
|
||||
- Liste der Adressen von Funktionen dem VFS zur Verfügung stellen
|
||||
- Entweder lange Aufruftabelle oder eine Tabelle pro VFS-Objekt
|
||||
- VFS legt im RAM V-Nodes an
|
||||
- weitere Dateisysteme jetzt oder während Ausführung
|
||||
|
Reference in New Issue
Block a user