Heutzutage speichern die meisten Datenbankverwaltungssysteme (z. B. PostGreSQL , MongoDB usw.) ihre Daten intern in Betriebssystemdateien (in der Vergangenheit verwendeten einige DBMS Partitionen direkt auf unformatierten Datenträgern).
Bei neueren Computern, auf denen noch rotierende Festplatten verwendet werden , ist die Festplatte im Vergleich zur CPU oder zum RAM so langsam, dass das Hinzufügen einiger Softwareschichten nicht relevant ist. Die SSD- Technologie kann dies etwas ändern, und einige Dateisysteme sind für SSDs optimiert.
Dateien sind in den meisten Betriebssystemen im Allgemeinen aus historischen und sozialen Gründen vorhanden (insbesondere C-Compiler und die meisten Tools - Editoren, Linker - möchten Dateien, daher gibt es ein Problem mit Hühnchen und Eiern) und weil es viele sehr gute Dateien gibt System - Implementierungen.
Übrigens können einige wesentliche Systemeinrichtungen Datenbanken verwenden. Beispielsweise kann unter Linux PAM so konfiguriert werden, dass Informationen in Datenbanken verwendet werden (dies wird in der Praxis jedoch selten durchgeführt). Einige Mailserver speichern möglicherweise auch einige oder die meisten ihrer Daten in Datenbanken (z . B. Exim ).
Dateien sind etwas weniger abstrahiert als Datenbanken, sodass sie einfacher zu implementieren (als Dateisysteme und VFS- Ebene im Linux-Kernel) und schneller zu verwenden sind. Insbesondere sind die Vorgänge für Dateien wesentlich eingeschränkter als für Datenbanken. Tatsächlich könnten Sie Dateien oder Dateisysteme als sehr eingeschränkte Datenbanken betrachten!
Sie könnten ein Design - Betriebssystem ohne Dateien , aber mit einer anderen orthogonaler Persistenz Maschinen (zB jeder mit Prozess als persistent, dann sorgen Sie nicht viel explizit über die Lagerung, da das O persistente Ressourcen verwaltet). Dies wurde in mehreren akademischen Betriebssystemen (1) (und auch in den Smalltalk- und Lisp-Maschinen der 1980er Jahre, irgendwie in IBM System i , auch bekannt als AS / 400 , und in einigen von osdev verknüpften Spielzeugprojekten durchgeführt), aber wenn Sie Ihr Betriebssystem auf diese Weise entwerfen, können Sie nicht auf viele vorhandene Tools zurückgreifen (z. B. müssen Sie auch Ihren Compiler und Ihre Benutzeroberfläche von Grund auf neu erstellen, und das ist eine Menge Arbeit).
Beachten Sie, dass Mikrokernel- Betriebssysteme möglicherweise keine Dateien benötigen, die von Kernel-Layern bereitgestellt werden, da die Dateisysteme nur Anwendungsserver sind (z. B. Hurd- Übersetzer, die im Userland ausgeführt werden). Schauen Sie sich auch den Unikernel- Ansatz im heutigen MirageOS an
Linux (und wahrscheinlich Windows, das am meisten von VMS & Unix inspiriert wurde ) benötigen Dateien, um zu funktionieren. Zumindest muss das init- Programm (das erste vom Kernel gestartete Programm) eine ausführbare Datei sein, die in einer Datei gespeichert ist (oft /sbin/init
, aber heutzutage könnte es systematisch sein ), und (fast) alle anderen Programme werden mit execve (2 ) gestartet ) syscall muss also in einer datei gespeichert werden. Mit FUSE können Sie jedoch dateiähnliche Semantiken für Nicht-Datei-Objekte festlegen.
Beachten Sie auch, dass sqlite unter Linux (und vielleicht sogar unter Windows, das ich nicht kenne und das ich nie benutzt habe) eine Bibliothek ist, die einige SQL-Datenbanken in Dateien verwaltet und eine API dafür bereitstellt. Es ist allgemein bekannt, dass Android (eine Linux-Variante) viele SQLite-Dateien verwendet (es gibt jedoch immer noch ein POSIX-ähnliches Dateisystem).
Lesen Sie auch über Application Checkpointing (das auf vielen aktuellen Betriebssystemen implementiert ist, um den Prozessstatus in Dateien zu schreiben). Im Extremfall muss dieser Ansatz nicht manuell Anwendungsdateien schreiben (sondern nur den gesamten Prozessstatus mithilfe der Checkpointing-Maschinerie beibehalten).
Tatsächlich ist die interessante Frage, warum aktuelle Betriebssysteme immer noch Dateien verwenden, und die Antwort ist Legacy sowie wirtschaftliche und kulturelle Gründe (leider wollen die meisten Programmiersprachen und Bibliotheken heute immer noch Dateien).
Anmerkung 1: Persistente akademische Betriebssysteme umfassen Lisaac und Grasshopper , aber diese akademischen Projekte scheinen inaktiv zu sein. Schauen Sie auch in http://tunes.org/ ; Es ist inaktiv, hat aber viele Diskussionen über solche Themen geführt.
Anmerkung 2: Der Begriff der Datei hat sich im Laufe der Zeit stark verändert (siehe diese Antwort zu meinen ersten Programmiererfahrungen): Das erste MSDOS auf IBM-PCs der 1980er Jahre (keine Verzeichnisse!), Das VMS -on 1978 Vaxen - (hatte beide Festaufzeichnungen) Dateien und sequentielle Dateien (mit einem primitiven Versionsverwaltungssystem) hatten die 70er-Jahre-Mainframes ( IBM / 370 mit OS / VS2 MVS ) eine ganz andere Vorstellung von Dateien und Dateisystemen (insbesondere, weil zu ihrer Zeit das Verhältnis der Festplattenzugriffszeit zu Die Kernspeicherzugriffszeit betrug einige Tausend - zu diesem Zeitpunkt lief die Festplatte also relativ schneller als heute, auch wenn die heutigen Festplatten absolut sindschneller als im vorigen Jahrhundert, liegt das CPU / Disk-Geschwindigkeits-Verhältnis heute bei etwa einer Million; aber wir haben jetzt SSDs). Dateien sind auch dann weniger (oder gar nicht) nützlich, wenn der Speicher permanent ist (wie bei der CAB500- Magnettrommel in den 1960er-Jahren oder zukünftigen Computern, die MRAM verwenden ).