
Einige ältere Computer/Controller verfügen nicht über das Dateisystem. Liegt das daran, dass diese Geräte kein Betriebssystem haben? Wenn auf diesen Geräten keine Dateien gespeichert werden können, wie können dann die werkseitige Steuerlogik/das werkseitige Programm und andere Daten auf dem Gerät gespeichert werden?
Antwort1
Das Dateisystem ist grundsätzlich die Methode zum Speichern von Dateien im Speicher.
Speichergeräte wie Festplatten, Flash-Laufwerke, optische Datenträger, 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
- Der erste heißtGrüße.txtund enthält das Wort
Hello
. - Der andere heißtBenutzername.txtund enthält das Wort
gronostaj
.
Die Dateien werden kodiert mitASCII, also 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 Hexadezimalwerte aus der zweiten Spalte der Tabelle auf dieser Website.)
Ich kann den Inhalt der ersten Datei wie folgt in unseren Speicher einfügen:
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 passiert, wenn ich eine zweite Datei im Speicher ablegen möchte? Woher weiß ich, wo die eine Datei endet und die andere beginnt?
- Dateien haben Namen, wie speichere ich diese?
Um diese Probleme zu lösen, können wir ein einfaches Dateisystem erfinden. Nehmen wir an, wir verschachteln Dateinamen mit ihrem Inhalt, so dass auf jeden Dateinamen der Inhalt dieser Datei folgt, und trennen sie durch Nullbytes. Zwei aufeinanderfolgende Nullbytes 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: (so können wir es nicht im Speicher ablegen, es dient nur der Lesbarkeit)
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 außerdem:
- Speichern Sie Erstellungs- und Änderungsdaten, Attribute, Berechtigungen, Metadaten und andere Dinge von Dateien
- Enthalten eine Art Inhaltsverzeichnis, sodass auf Dateien fast sofort zugegriffen werden kann, ohne dass die gesamte Festplatte durchsucht werden muss, bis sie gefunden werden
- Support-Verzeichnisse
- Unterstützt Dateien und Dateinamen, die
00
Bytes enthalten - In der Lage sein, sich von einigen Fehlern zu erholen
- Unterstützt das Ändern der Dateilänge ohne Verschieben nachfolgender Dateien
Aber Sie verstehen, was ich meine.
Nun zu den Betriebssystemen.Betriebssysteme der meisten Computer bestehen aus Dateien, daher benötigen Sie ein Dateisystem, um das Betriebssystem darin zu speichern. Sie könnten jedoch ein monolithisches Betriebssystem erstellen, das nicht mit persistenten Dateien arbeiten muss und nicht in einer Datei gespeichert ist.FreeRTOSist ein Beispiel. Obwohl 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 sogenannterKlecks: eine Folge von Bytes ohne Namen, Erstellungsdatum oder andere Eigenschaften. Schließlich verarbeiten CPUs nur Anweisungsfolgen. Sie kümmern sich nicht um Dateimetadaten oder Dateisysteme, sie wollen nur mit Aufgaben versorgt werden, die sie ausführen können. Und wenn Sie diese Anweisungen als Bytes ausdrücken können, reichen Blobs aus!
Und Blobs können problemlos im Speicher abgelegt werden, ohne dass ein Dateisystem erforderlich ist. Tatsächlich haben wir das in unserem ersten Beispiel getan, als wir einfach den Inhalt von Datei 1 in den Speicher gelegt haben.
Ich hoffe, das beantwortet Ihre Frage!
Antwort2
Das BIOS, das Betriebssystem und das Dateisystem sind unterschiedliche und separate Elemente, und ein Betriebssystem kann im Nur-Lese-Speicher des Geräts vorhanden sein. Also nein, die Nachrichten sind nicht gleich,Die Aufgabe des Betriebssystems besteht jedoch darin, als Schnittstelle zwischen Programmen und Hardware zu fungieren.Wenn das Gerät nicht über ein Betriebssystem verfügt, stellen die auf dem Gerät ausgeführten Programme das Betriebssystem dar.
Es klingt wahrscheinlich, dass das System kein Betriebssystem hat, wenn es kein Dateisystem oder eine defekte oder unvollständige Partition/Dateisystem meldet; Aber
... Es kann sein, dass das Massenspeichergerät falsch konfiguriert ist; oder genauer gesagt, dass die Anzahl der Köpfe und Spuren, die das BIOS verwenden soll, nicht mit der Anzahl der Köpfe und Spuren übereinstimmt, für die das Gerät formatiert wurde. Wenn das passiert, kann der Bootstrap das komplette Dateizuordnungssystem nicht laden. Ist die Batterie des Systems leer, wodurch Setup-Informationen verloren gegangen sind? Wenn ja, wird das System wiederhergestellt, indem die BIOS-Einstellungen korrekt an die Formatierung angepasst werden ...
Das BIOS ist die grundlegende Schnittstelle zur Hardware. Das Betriebssystem ist die Schnittstelle für Programme, die standardisiert wurde, sodass Programme sich nicht darum kümmern müssen, welche spezifische Hardware verwendet wird. Das Dateisystem ist die Standarddatentabelle für den Zugriff auf ein Massenspeichergerät.
Das BIOS lädt zuerst den Nur-Lese-Speicher auf der Treiberschnittstelle und richtet Interrupt-Punkte für den Zugriff ein. Int 13 ist der Zugriffspunkt für die Massenspeichergeräte.
https://en.wikipedia.org/wiki/INT_13H... das BIOS lädt dann die Partitionstabelle von Spur 0, Sektor 0 des Geräts und eine Bootstraproutine.http://www.ntfs.com/fat-partition-sector.htm
Die Partitionstabelle gibt Aufschluss über die Größe der Festplatte, und die Bootstraproutine an der Rechneradresse Partitionstabelle+3E Hex (wenn ich mich an mein Reverse Engineering richtig erinnere, ist das auf dem Rechner 0000:063E Hex) lädt normalerweise das Betriebssystem und ggf. erweiterte Treiber.
Wenn das Betriebssystem des Computers keine Massenspeicherunterstützung bietet, können Sie trotzdem auf die Unterstützung dieses BIOS zurückgreifen und eine Erweiterung des Systems auf Basis eines Massenspeichergeräts erstellen. Beachten Sie jedoch, dass das Betriebssystem möglicherweise Interrupts ein- und ausschaltet, um die Anfragen an das BIOS sequenziell zu halten.
Das BIOS selbst kann keine Multithread-Operationen verarbeiten. Genauer gesagt wird das BIOS aufgerufen, um die Festplatte anzuweisen, sich zum Lesen oder Schreiben an einer bestimmten Stelle vorzubereiten. Die Lese-/Schreibvorgänge finden dann bei einem zweiten Aufruf des BIOS statt. Es ist ein fortschrittlicheres Betriebssystem erforderlich, da etwas verhindern muss, dass ein Programm sich zum Lesen von Daten vorbereitet, während ein anderes Programm Daten schreiben möchte, da sonst die Daten überschrieben werden.
Damit Programme das Massenspeichergerät verwenden können, ist ein Dateisystem erforderlich, ohne das Risiko einzugehen, dass Daten überschrieben werden oder andere Programme von der Verwendung der Festplatte oder des BIOS ausgeschlossen werden.
Das von Altair Basic in den Tagen des 8080 verwendete Betriebssystem war sehr minimalistisch. Man konnte Dateien auf der Festplatte speichern, indem man spezifizierte, an welchem Kopf und welcher Spur die Datei beginnen sollte. Es wurde kein Dateisystem verwendet, der Benutzer musste sich selbst merken, an welcher Kopf- und Spurnummer die Datei gespeichert wurde.
Kein großartiges Festplattenbetriebssystem, aber es funktionierte. Die Routinen zum Lesen der Tastatur und Senden von Informationen an das Display waren ebenfalls minimal.
Antwort3
Meiner Meinung nach müssen hier zwei Punkte angesprochen werden:
- Einige Systeme haben kein Dateisystem. Bedeutet das, dass sie kein Betriebssystem haben?
- Wo kann die Konfiguration gespeichert werden, wenn kein Dateisystem vorhanden ist (oder es schreibgeschützt ist)
Rohmetall
Einige Systeme haben kein Betriebssystem – es gibt eine Anwendung, und diese Anwendungssoftware kommuniziert direkt mit der Hardware. Dies ist bei kleinen Mikrocontrollersystemen üblich, bei denen die Komplexität gering ist. In diesem Szenario ist die Software normalerweise maßgeschneidert, wobei das Entwicklungsteam die Treiber und die Abstraktion von Grund auf neu schreibt oder Anbietercode verwendet, um sein Designziel zu erreichen.
Allerdings sind solche SystemeMaiunterstützen ein Dateisystem. Einfache Dateisysteme wieFETTwerden häufig zum Speichern von Protokollen und zur Bereitstellung von Firmware-Updatefunktionen verwendet.
Die Konfiguration wird häufig formatiert und direkt in den nichtflüchtigen Rohspeicher geschrieben, ohne Verwendung eines Dateisystems.
Eingebettete Systeme - Scheduler
Wenn wir eine Ebene höher gehen, finden wir etwas größere Systeme und eine Zunahme der Komplexität. An diesem Punkt finden wirEchtzeitbetriebssysteme(RTOS) - obwohl nicht alle Echtzeitanforderungen haben - die mit einem bestimmten Satz von Funktionen entwickelt werden. Diese Systeme werden mit einem Satz von "Aufgaben", die zur Ausführung geplant sind – normalerweise können andere/beliebige Aufgaben nicht ausgeführt werden. Es ist üblich, dass diese Systeme Dateisysteme, Netzwerke usw. problemlos unterstützen, indem sie vom Anbieter oder der Community erstellten Code verwenden.
Die Konfiguration kann in den Rohspeicher geschrieben oder als Datei in einem Dateisystem gespeichert werden.
Einblick inFreeRTOS,ThreadX, usw...
Eingebettete Systeme
Heute gibt es eingebettete Systeme, die noch größer sind. Die Komplexität ist gestiegen und auf dieser Ebene sind wir von einem Dateisystem abhängig, um die Systemkonfiguration und Anwendungen/Software zu organisieren. Wir können jetzt beliebige Anwendungen ausführen und die Kernel werden mit einer ganzen Reihe von Treibern für verschiedene Hardware geliefert.
Hier sehen wirLinux,QNX, "Windows Embedded Compact", usw...
Software wird typischerweise erstelltfürdas System, indem Projekte wiebeschäftigtboxum einen Großteil der Funktionalität bereitzustellen, und mithilfe von Projekten wieBaustammsatzUndYoctoum die verschiedenen Anwendungen zu erstellen und ein Image zu produzieren.
Die Konfiguration wird höchstwahrscheinlich in eine Datei geschrieben. Allerdings hindert das die Entwickler nicht daran, wie bisher Rohspeicher zu verwenden, da diese Systeme normalerweise auf benutzerdefinierter Hardware laufen.
Das Dateisystem ist erforderlich, kann aber nicht beschreibbar sein und kann rein "in Erinnerung" – in der Größe begrenzt und alle Änderungen (wenn RW) gehen bei einem Neustart verloren.
Vollständige Benutzer-/Serversysteme
Hier sehen wir uns Desktop-PCs an, die ein Fenstersystem, Lese-/Schreib-Dateisysteme (normalerweise auf großen Festplatten) und die Ausführung beliebiger Codes in Hülle und Fülle ausführen. Die Konfiguration wird definitiv als Datei gespeichert – das ist die Art von System, mit der Sie vertraut sind. Server sind in den hier diskutierten Begriffen im Allgemeinen Desktop-PCs recht ähnlich.
In der Linux-Welt wäre dies ein „Verteilung". Normalerweise finden Sie eine Art Paketverwaltung, sodass die Installation/Deinstallation einer Anwendung nur aus dem Herunterladen und Entpacken besteht (und auch dem Kompilieren, wenn Sie beispielsweiseGentoo).
Hier betrachten wir Linux,Windows,Windows Server, usw...
Oben habe ich erwähnt, dass kleinere Systeme die Konfiguration normalerweise in einem nichtflüchtigen Rohspeicher speichern. Dies geschieht, indem Sie entscheiden, was Sie speichern möchten, die Daten sortieren und in den Speicher schreiben.
Beispielsweise möchten wir möglicherweise die folgende einfache Konfiguration speichern:
- Der Flansch hat präzise
52458
Drehschritte - Der Flansch muss in die Position gedreht werden
5547
, in der05:00
- Der Flansch muss gedreht werden, um Positronen
49885
bei18:00
Die Zahlen passen alle in eine 16-Bit-Ganzzahl, also verwenden wir diese, um Schritte darzustellen. Die Zeiten speichern wir in BCD, um eine bessere Kompatibilität mit einer RTC zu gewährleisten, und das war’s.
Wir verfügen über folgende Daten:
- 52458 -->
0xCCEA
- 5547 -->
0x15AB
- 05:00 -->
0x0500
- 49885 -->
0xC2DD
- 18:00 -->
0x1800
Diese Werte können gesammelt und als 10 Bytes in den Speicher geschrieben werden:
0x00000000 CC EA 15 AB 05 00 C2 DD 18 00
Die Anwendung weiß, wie dies zu interpretieren ist, und benötigt daher keine Unterstützung. Mit Unterstützung meine ich das Auffinden des Speicherbereichs anhand des Namens (z. B.: Dateisystem und Dateiname) und das Teilen des Verständnisses der Konfiguration mit einem Menschen (z. B.:JSON/XML/YAML/TOML).