Kein Dateisystem ist gleich wie kein Betriebssystem?

464
FunctionBlock

Einige ältere Computer / Controller verfügen nicht über das Dateisystem, da diese Geräte kein Betriebssystem haben. Wenn Dateien nicht auf diesen Geräten gespeichert werden können, wie können dann die werkseitige Steuerungslogik / das Programm und andere Daten auf dem Gerät gespeichert werden?

1

3 Antworten auf die Frage

1
gronostaj

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

  1. Die erste heißt Greetings.txt und enthält das Wort Hello.
  2. 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:

  1. Name 47 72 65 65 74 69 6e 67 73 2e 74 78 74

    Inhalt 48 65 6c 6c 6f

  2. 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 00Bytes 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!

0
Wayne

Das BIOS, das Betriebssystem und das Dateisystem sind separate und separate Elemente, und ein Betriebssystem kann im Nur-Lese-Speicher des Geräts vorhanden sein. Die Meldungen sind also nicht gleich, aber das Betriebssystem hat eine Aufgabe, die Schnittstelle zwischen Programmen und Hardware zu sein. Wenn das Gerät über kein Betriebssystem verfügt, handelt es sich bei dem oder den auf dem Gerät ausgeführten Programmen um das Betriebssystem.

Es klingt wahrscheinlich, dass das System über kein Betriebssystem verfügt, wenn kein Dateisystem oder ein fehlerhaftes oder unvollständiges Partitions- / Dateisystem gemeldet wird. Aber

... Es kann sein, dass der Massenspeicher falsch konfiguriert ist. oder genauer, dass die Anzahl der Heads und Tracks, für die das BIOS konfiguriert ist, nicht der Anzahl der Heads und Tracks entspricht, für deren Verwendung das Gerät formatiert wurde. In diesem Fall kann der Bootstrap das vollständige Dateizuweisungssystem nicht laden. Verfügt das System über eine Batterie, die leer ist und die Setup-Informationen verloren gehen. Wenn Sie die BIOS-Einstellungen so richtig an die Formatierung anpassen, wird das System wiederhergestellt ...

Bios ist die grundlegende Schnittstelle zur Hardware. Das Betriebssystem ist die Schnittstelle für die zu verwendenden Programme, die standardisiert wurde, sodass sich die Programme 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 aus dem Nur-Lese-Speicher auf der Treiberschnittstelleneinrichtung Interruptpunkte für den Zugriff. Int 13 ist der Zugangspunkt 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 einer Bootstrap-Routine. http://www.ntfs.com/fat-partition-sector.htm

Die Partitionstabelle zeigt alles über die Größe der Festplatte und die Bootstrap-Routine an der Maschinenadresspartitionstabelle + 3E hex an (wenn ich mich an mein Reverse Engineering richtig erinnere, ist dies auf 0000: 063E hex der Maschine). Normalerweise wird das Betriebssystem geladen. und Treiber, die fortgeschrittener sein können.

Wenn das Betriebssystem des Computers keine Unterstützung für Massenspeicher bietet, können Sie immer noch in die Unterstützung dieses BIOS einbinden und eine Erweiterung für das System erstellen, die auf Massenspeichergeräten basiert. Beachten Sie jedoch, dass das Betriebssystem möglicherweise Interrupts ein- und ausschaltet, um die Anforderungen an das BIOS sequentiell zu halten.

Das BIOS kann keine Multithread-Operationen ausführen. Insbesondere wird ein Aufruf an das BIOS gemacht, um die Festplatte anzuweisen, sich an einem bestimmten Ort zum Lesen oder Schreiben vorzubereiten. Die Leseschreibvorgänge finden dann bei einem zweiten Aufruf des BIOS statt. Ein fortgeschritteneres Betriebssystem ist erforderlich, da etwas verhindern muss, dass ein Programm zum Lesen von Daten bereit ist, während ein anderes Programm Daten schreiben möchte oder Daten überschrieben werden.

Ein Dateisystem ist erforderlich, damit Programme das Massenspeichergerät verwenden können, ohne zu riskieren, dass Daten überschrieben oder andere Programme von der Verwendung der Festplatte oder des BIOS ausgeschlossen werden.


Das von Altair basic in den 80er Jahren verwendete Betriebssystem war sehr minimalistisch. Sie können Dateien auf der Festplatte speichern, indem Sie angeben, in welchem ​​Kopf und in welcher Spur die Datei angezeigt werden soll. Es wurde kein Dateisystem verwendet, der Benutzer musste sich die Kopf- und Tracknummer merken, unter der die Datei selbst gespeichert wurde.

Nicht viel von einem Festplatten-Betriebssystem, aber es hat funktioniert. Die Routinen zum Lesen der Tastatur und zum Senden von Informationen an das Display waren ebenfalls minimal.

0
Attie

Ich denke, es gibt zwei Punkte, die hier angesprochen werden müssen:

  • Einige Systeme haben kein Dateisystem - bedeutet das, dass sie kein Betriebssystem haben?
  • Wo kann die Konfiguration gespeichert werden, wenn kein Dateisystem vorhanden ist (oder schreibgeschützt ist)

Rohmetall

Einige Systeme haben kein Betriebssystem - es gibt eine Anwendung, und diese Anwendungssoftware ist direkt mit der Hardware verbunden. Dies ist bei kleinen Mikrocontrollersystemen üblich, bei denen die Komplexität gering ist. In diesem Szenario wird die Software normalerweise maßgeschneidert, wobei das Entwicklungsteam die Treiber und die Abstraktion von Grund auf neu schreibt oder Herstellercode verwendet, um deren Entwurfsziel zu erreichen.

Dies wird gesagt, solche Systeme können ein Dateisystem unterstützen. Einfache Dateisysteme wie FAT werden häufig zum Speichern von Protokollen und zum funktionalen Firmware-Update verwendet.

Die Konfiguration wird häufig formatiert und direkt in einen nichtflüchtigen Rohspeicher geschrieben, ohne ein Dateisystem zu verwenden.

Eingebettete Systeme - Scheduler

Beim Aufstieg finden wir etwas größere Systeme und eine zunehmende Komplexität. An dieser Stelle werden wir Echtzeitbetriebssysteme (RTOS) finden - obwohl nicht alle Echtzeitanforderungen haben -, die mit einem bestimmten Satz von Funktionen ausgestattet sind. Diese Systeme werden mit einer Reihe von " Tasks " erstellt, die zur Ausführung geplant sind. Normalerweise können andere / beliebige Tasks nicht ausgeführt werden. Es ist üblich, dass diese Systeme Dateisysteme, Netzwerke usw. unter Verwendung von Code des Herstellers oder der Community problemlos unterstützen.

Die Konfiguration kann in einen Raw-Speicher geschrieben oder als Datei in einem Dateisystem gespeichert werden.

Schauen Sie in FreeRTOS, ThreadX usw.

Eingebettete Systeme

Jetzt finden wir eingebettete Systeme, die noch größer sind. Die Komplexität ist gestiegen, und auf dieser Ebene finden wir eine Abhängigkeit von einem Dateisystem, um die Systemkonfiguration und Anwendungen / Software zu organisieren. Wir können jetzt beliebige Anwendungen ausführen, und die Kernel werden mit einer ganzen Menge Treiber für verschiedene Hardware geliefert.

Hier betrachten wir Linux, QNX, " Windows Embedded Compact " usw.

In der Regel wird Software für das System erstellt, wobei Projekte wie busybox aufgerufen werden, um einen Großteil der Funktionalität bereitzustellen, und Projekte wie buildroot und Yocto verwendet werden, um die verschiedenen Anwendungen zu erstellen und ein Image zu erstellen.

Die Konfiguration wird höchstwahrscheinlich in eine Datei geschrieben. Dies hindert die Entwickler jedoch nicht daran, den Rohspeicher wie zuvor zu verwenden, da diese Systeme normalerweise auf benutzerdefinierter Hardware ausgeführt werden.

Das Dateisystem ist erforderlich, aber möglicherweise nicht beschreibbar. Es kann sich dabei um einen reinen In-Memory-Speicher handeln, dessen Größe begrenzt ist. Alle Änderungen (falls RW) gehen bei einem Neustart verloren.

Vollständige Benutzer- / Serversysteme

Hier werden Desktop-PCs mit einem Fenstersystem, Lese- / Schreib-Dateisysteme (normalerweise auf großen Festplatten) und die Ausführung von beliebigem Code untersucht. Die Konfiguration wird definitiv als Datei gespeichert. Dies ist der Typ des Systems, mit dem Sie vertraut sind. Server sind im Allgemeinen Desktop-PCs in den hier beschriebenen Begriffen ziemlich ähnlich.

In der Linux-Welt wäre dies eine " Distribution ". In der Regel finden Sie eine Form der Paketverwaltung. Das Installieren und Deinstallieren einer Anwendung erfordert das Herunterladen und Entpacken (auch Kompilieren, wenn Sie Gentoo verwenden ).

Hier betrachten wir Linux, Windows, Windows Server usw.


Ich habe oben erwähnt, dass kleinere Systeme die Konfiguration normalerweise in nichtflüchtigem Rohspeicher speichern. Dies geschieht, indem Sie entscheiden, was Sie speichern möchten, die Daten zusammenstellen und in den Speicher schreiben.

Beispielsweise möchten wir die folgende einfache Konfiguration speichern:

  • Der Flansch weist precicely 52458Schritte Dreh
  • Der Flansch muss Position gedreht werden, 5547in05:00
  • Der Flansch muss Positronen gedreht werden 49885bei18:00

Die Zahlen passen alle in eine 16-Bit-Ganzzahl, also verwenden wir diese zur Darstellung von Schritten. Für die Zeit entscheiden wir uns, in BCD zu speichern, um eine bessere Kompatibilität mit einer Echtzeituhr zu erreichen.

Wir haben folgende Daten:

  • 52458 -> 0xCCEA
  • 5547 -> 0x15AB
  • 05:00 -> 0x0500
  • 49885 -> 0xC2DD
  • 18:00 -> 0x1800

Dort können Werte in 10 Bytes zusammengefasst und in den Speicher geschrieben werden:

0x00000000 CC EA 15 AB 05 00 C2 DD 18 00 

Die Anwendung kann dies interpretieren und benötigt daher keine Unterstützung. Mit dem Support beziehe ich mich darauf, den Speicherbereich anhand des Namens (z. B.: Dateisystem und Dateiname) zu lokalisieren und das Verständnis der Konfiguration mit einem Benutzer zu teilen (z. B. JSON / XML / YAML / TOML ).