Die Entwicklung von Dateisystemen
Bevor Computer entwickelt wurden, um auf Datenträgerbetriebssystemen zu funktionieren, wurde jeder Computer für die Ausführung einer einzelnen, proprietären Anwendung entwickelt, die eine vollständige und exklusive Kontrolle über den gesamten Computer hatte. Die Anwendung würde ihre persistenten Daten direkt auf einen Datenträger oder eine Trommel schreiben, indem Befehle direkt an den Datenträgercontroller gesendet werden. Die Anwendung war für die Verwaltung der absoluten Speicherorte der Daten auf dem Datenträger verantwortlich und stellte sicher, dass sie nicht bereits vorhandene Daten überschrieben hat. Da zu jeder Zeit nur eine Anwendung auf dem Computer ausgeführt wurde, war diese Aufgabe nicht allzu schwierig.
Das Aufkommen von Computersystemen, die mehrere Anwendungen ausführen konnten, erforderte einen Mechanismus, um sicherzustellen, dass Anwendungen nicht die Daten der anderen überschreiben. Anwendungsentwickler haben dieses Problem behoben, indem sie einen einzigen Standard für die Unterscheidung der verwendeten Datenträgersektoren von den kostenlosen Sektoren übernommen haben, indem sie sie entsprechend markieren. Im Laufe der Zeit wurden diese Standards zu einem Datenträgerbetriebssystem, das verschiedene Dienste für die Anwendungen bereitstellte, einschließlich eines Dateisystems für die Verwaltung persistenten Speichers. Mit dem Aufkommen eines Dateisystems mussten Anwendungen nicht mehr direkt mit dem physischen Speichermedium umgehen. Stattdessen haben sie einfach das Dateisystem angewiesen, Datenblöcke auf den Datenträger zu schreiben, und das Dateisystem sich Gedanken darüber machen zu lassen, wie dies zu tun ist. Darüber hinaus ermöglichte das Dateisystem Anwendungen das Erstellen von Datenhierarchien über eine Abstraktion, die als Verzeichnis bezeichnet wird. Ein Verzeichnis kann nicht nur Dateien, sondern auch andere Verzeichnisse enthalten, die wiederum eigene Dateien und Verzeichnisse enthalten können usw.
Das Dateisystem bot eine einzige Ebene der Indirektierung zwischen Anwendungen und dem Datenträger, und das Ergebnis war, dass jede Anwendung eine Datei als einzelnen zusammenhängenden Datenstrom von Bytes auf dem Datenträger sah, obwohl das Dateisystem die Datei tatsächlich in unübersichtlichen Sektoren speicherte. Durch die Indirekteion mussten die Anwendungen die absolute Position der Daten auf einem Speichergerät nicht nachverfolgen.
Heute stellen praktisch alle System-APIs für Dateieingabe und -ausgabe Anwendungen zum Schreiben von Informationen in eine Flatfile bereit. Anwendungen sehen diese Datei als einen einzelnen Bytestrom, der so groß wie nötig werden kann, bis der Datenträger voll ist. Lange Zeit reichten diese APIs für Anwendungen aus, um ihre persistenten Informationen zu speichern. Anwendungen haben wichtige Innovationen im Umgang mit einem einzelnen Datenstrom vorgenommen, um Features wie inkrementelle "schnelle" Ersparnissen bereitzustellen.
In einer Welt der Komponentenobjekte ist das Speichern von Daten in einer einzelnen Flatfile jedoch nicht mehr effizient. Genau wie Dateisysteme aus der Notwendigkeit entstanden sind, dass mehrere Anwendungen dasselbe Speichermedium gemeinsam nutzen müssen, so benötigen Komponentenobjekte jetzt ein System, das es ihnen ermöglicht, den Speicher innerhalb des konzeptionellen Rahmens einer einzelnen Datei gemeinsam zu nutzen. Auch wenn es möglich ist, die separaten Objekte mit herkömmlichem Flatfilespeicher zu speichern, wird es erforderlich, die gesamte Datei in den Arbeitsspeicher zu laden, das neue Objekt einzufügen und dann die gesamte Datei zu speichern. Dieser Prozess kann extrem zeitaufwändig sein.
Die von COM bereitgestellte Lösung besteht darin, eine zweite Indirektierungsebene zu implementieren: ein Dateisystem in einer Datei. Flatfilespeicher erfordert, dass eine große zusammenhängende Bytesequenz auf dem Datenträger über ein einzelnes Dateihandle mit einem einzelnen Suchzeiger bearbeitet wird. Im Gegensatz dazu definiert der strukturierte COM-Speicher, wie eine einzelne Dateisystementität als strukturierte Auflistung von zwei Arten von Objekten – Speicher und Datenströme – behandelt werden kann, die sich wie Verzeichnisse und Dateien verhalten.