# 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 - ![image_338.png](image_338.png) - **absolute Pfadnamen** - Gesamter Pfad von Wurzel bis Datei - **relative Pfadnamen** - In Verbindung mit dem Konzept des Arbeitsverzeichnisses - ./ - aktuelles Verzeichnis - ../ - übergeordnetes Verzeichnis - ![image_339.png](image_339.png) ## 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 - ![image_340.png](image_340.png) ### Methoden zur Belegungsverkettung #### Zusammenhängende Belegung