Dateisystem ist im Wesentlichen die Methode zum Speichern von Dateien im Speicher.
Speichergeräte wie Festplatten, Flash-Laufwerke, optische Platten, Speicherkarten usw. können eine feste Anzahl von Bytes speichern. Ein leerer, gelöschter 48-Byte-Speicher enthält Folgendes:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Nehmen wir an, ich habe zwei Textdateien
- Die erste heißt Greetings.txt und enthält das Wort
Hello
. - Die andere heißt Username.txt und enthält das Wort
gronostaj
.
Dateien werden mit ASCII codiert, daher entspricht jeder Buchstabe einem Byte. Nach der Kodierung mit ASCII lauten die Bytes der Dateien:
Name
47 72 65 65 74 69 6e 67 73 2e 74 78 74
Inhalt
48 65 6c 6c 6f
Name
55 73 65 72 6e 61 6d 65 2e 74 78 74
Inhalt
67 72 6f 6e 6f 73 74 61 6a
(Ich verwende hexadezimale Werte aus der zweiten Spalte der Tabelle auf dieser Website.)
Ich kann den Inhalt der ersten Datei folgendermaßen speichern:
48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Es gibt jedoch einige Probleme.
- Was ist, wenn ich eine zweite Datei im Speicher ablegen möchte? Woher weiß ich, wo eine Datei endet und die andere beginnt?
- Dateien haben Namen, wie speichere ich diese?
Um dies zu lösen, können wir ein einfaches Dateisystem entwickeln. Nehmen wir an, dass wir Dateinamen mit ihrem Inhalt verschachteln, so dass auf jeden Dateinamen der Inhalt dieser Datei folgt und diese mit null Bytes getrennt werden. Zwei aufeinander folgende Null-Bytes bedeuten "keine weiteren Dateien".
47 72 65 65 74 69 6e 67 <- first 8 bytes of name 1 73 2e 74 78 74 00 48 65 <- next 5 bytes of name 1, then 00, then 2 bytes of content 1 6c 6c 6f 00 55 73 65 72 <- next 3 bytes of content 1, then 00, then 4 bytes of name 2 6e 61 6d 65 2e 74 78 74 <- next 8 bytes of name 2 00 67 72 6f 6e 6f 73 74 <- 00, then 7 bytes of content 2 61 6a 00 00 00 00 00 00 <- 2 bytes of content 2, then 00 00, so no more files
Oder dasselbe, aber ohne ASCII-Kodierung: (Wir können es nicht so speichern, es ist nur der Lesbarkeit halber)
G r e e t i n g s . t x t 00 H e l l o 00 U s e r n a m e . t x t 00 g r o n o s t a j 00 00 00 00 00 00
Ein echtes Dateisystem würde auch:
- Speichern Sie Dateierstellungs- und Änderungsdaten, Attribute, Berechtigungen, Metadaten und anderes
- Enthält eine Art Inhaltsverzeichnis, sodass auf Dateien fast sofort zugegriffen werden kann, ohne die gesamte Festplatte zu scannen, bis sie gefunden werden
- Unterstützungsverzeichnisse
- Unterstützungsdateien und Dateinamen, die
00
Bytes enthalten - Sie können sich von einigen Fehlern erholen
- Unterstützt das Ändern der Länge einer Datei, ohne folgende Dateien zu verschieben
Aber du hast die Idee.
Jetzt Betriebssysteme. Betriebssysteme für die meisten Computer bestehen aus Dateien, daher benötigen Sie ein Dateisystem, um das Betriebssystem darin zu speichern. Sie können jedoch ein monolithisches Betriebssystem erstellen, das nicht mit persistenten Dateien arbeiten muss und nicht in einer Datei gespeichert ist. FreeRTOS ist ein Beispiel. Während Dateisysteme und Betriebssysteme normalerweise eng miteinander verbunden sind, können sie tatsächlich auch ohne einander existieren.
Mit "monolithisch" meine ich "ein einzelnes Stück Binärcode". Es wäre ein sogenannter Blob : eine Folge von Bytes ohne Namen, Erstellungsdatum oder andere Eigenschaften. Schließlich verarbeiten CPUs nur Befehlsfolgen. Sie interessieren sich nicht für Dateimetadaten oder Dateisysteme, sie möchten nur Aufgaben ausführen, die ausgeführt werden sollen. Und wenn Sie diese Anweisungen als Bytes ausdrücken können, genügen Blobs!
Und Blobs können problemlos ohne Dateisystem im Speicher abgelegt werden. Eigentlich haben wir das in unserem ersten Beispiel gemacht, als wir nur den Inhalt von Datei 1 in den Speicher schreiben.
Ich hoffe, das beantwortet deine Frage!