Warum hat der RAM-Speicher kein Partitionsschema?

Warum hat der RAM-Speicher kein Partitionsschema?

Eine andere Möglichkeit, dies zu fragen, wäre:

"Warum benötigen Festplatten, USB-Sticks und SSDs ein Partitionsschema, der RAM jedoch nicht?"

Versuche nur besser zu verstehen, wie alle Speicherdinger funktionieren.

Antwort1

Nun, das Problem ist etwas komplizierter.

Erstens ist die in der Frage geäußerte Annahme falsch. Festplatten und Flash-Speicher benötigen eigentlich überhaupt keine Partitionen! Sie können einfach Rohdaten auf eine Festplatte schreiben und sie dann wieder lesen, und es wird problemlos funktionieren. Einige relativ einfache Computersysteme verwenden auch heute noch keine Partitionen, da es keinen Grund dafür gibt. Zum Beispiel habe ich hier gerade auf meinem Schreibtisch einen Computer, der auf einem ATmega 162-Mikrocontroller basiert und Flash problemlos ohne Partitionen verwendet.

Im Grunde ermöglichen Partitionen die Trennung der Arbeitsaufgaben der Systemdesigner. Auf meinem 162 muss ich wissen, wo jedes Datenbit gespeichert ist und wie oft auf jede Flash-Zelle zugegriffen wird, damit ich Wear Leveling implementieren kann. Dazu brauche ich nicht einmal Dateien. Das Problem ist jedoch, dass mein Miniaturcomputer nur 16 KiB Flash hat und diese Menge manuell und mit Quellcodekommentaren verwaltet werden kann. Es ist, als hätte ich einen Schreibtisch mit einer einzigen Schublade. Ich kann alles dort ablegen und es ist leicht zu erreichen und darauf zuzugreifen.

Auf einem großen Computersystem, wie den heutigen Desktop-Computern, ist Software das Produkt der Arbeit von Tausenden von Programmierern, die unabhängig voneinander arbeiten. Sie müssen eine Möglichkeit haben, Daten zu speichern, und deshalb brauchen wir Dateien und Partitionen. Wenn wir sie haben, kann sich der Programmierer nur auf die Daten konzentrieren, mit denen er arbeiten muss, und muss sich keine Sorgen machen, andere Daten zu beschädigen. Er kann die Programmierer, die an der Dateisystemprogrammierung arbeiten, sich um die physische Speicherung der Daten kümmern lassen. Um mein Schubladenbeispiel fortzusetzen: Das ist so, als ob man ein Lagersystem hätte und versuchen würde, einen einzigen Artikel zu finden, wenn man Hunderttausende von Artikeln auf Lager hat. Während man also einfach in die einfache Schublade greifen und beispielsweise einen Bleistift herausholen könnte, wäre der Bleistift in einem Lagerkoffer in Lager 3, Abschnitt P, Regal 273, Ebene 3, Kiste 5.

Ich hoffe, ich habe deutlicher gemacht, warum wir Partitionen verwenden, auch wenn wir sie eigentlich nicht brauchen.

Kommen wir nun zum RAM. Es stimmt auch nicht, dass es im RAM keine Partitionen gibt. Der Hauptgrund, warum wir Partitionen verwenden, ist die Organisation, und RAM ist auch organisiert. Im Fall von RAM entscheidet jedoch der Systemkernel, wohin jedes Informationsbit geht, und er verfolgt die Speicherplatznutzung.

Vergleichen wir, wie ein Programm auf meinem einfachen ATmega 162 und wie ein Programm auf einem modernen Betriebssystem wie Windows funktioniert. Auf 162 ist das Programm mit Adressen von Speicherorten vorprogrammiert, die es zum Speichern von Daten verwenden wird. Da 162 nur ein Programm hat, muss ich mir keine Gedanken über das Überschreiben von Daten machen, die von einem anderen Programm verwendet werden, oder über die Speicherzuweisung. Ich kann einfach alles, was ich will, in jede Speicherzelle schreiben und es bleibt dort, während der Computer läuft.

Unter Windows hingegen können viele Programme gleichzeitig laufen und alle schreiben und lesen Daten in den Speicher und aus dem Speicher. Das heißt, wir können einzelnen Programmen nicht erlauben, direkt auf Speicherzellen zuzugreifen (und der Programmierer müsste wissen, wie er auf den Speicher dieses bestimmten Computers zugreift und wie viel RAM dieser Computer hat usw. An diesem Punkt kommen wir wieder zur Diskussion „Tausende vs. ein Programmierer“). Stattdessen weist der Kernel beim Start jedes Programms Speicher zu und für das Programm sieht es so aus, als wäre es das einzige Programm, das auf dem Computer läuft. Der Kernel ist dazu da, sicherzustellen, dass unser Programm nicht versucht, Speicher zu lesen oder zu schreiben, der anderen Programmen zugewiesen wurde, und dass es nicht versucht, als Daten markierten Speicher auszuführen, und dass es nicht das gesamte System in Gefahr bringt. Unter Windows und vielen anderen modernen Betriebssystemen erhält also jedes Programm grundsätzlich seine eigene RAM-Partition. Interessant ist auch, dass auf 32-Bit-Systemen jedes Programm nur bis zu 2 GiB RAM belegen kann, da dies die Obergrenze der Größe der „Partition“ ist.

Ich möchte hier einen kleinen Exkurs machen. Es gibt einige Programme, die durch Partitionen im RAM beschädigt werden. Es gab zum Beispiel Programme namens Trainer, die das Schummeln in Computerspielen ermöglichten. Sie funktionierten, indem sie Speicherorte fanden, an denen das Spiel seine Daten speicherte, zum Beispiel die Anzahl der Leben oder die Gesundheit, und dann griffen sie direkt auf die Daten zu und änderten sie. Auf der anderen Seite gab es auch Viren, die versuchten, auf den Speicher zuzugreifen, der von wichtigen Systemdiensten verwendet wurde, und ihn zu beschädigen, um ihre schändlichen Taten zu begehen.

Ein weiterer erwähnenswerter Punkt ist die Auslagerungsdatei oder Swap-Partition. Für einen Programmierer, der eine Anwendung schreibt, ist es nicht wichtig, ob sich das Programm in der Auslagerungsdatei oder im RAM befindet, da der Kernel sich darum kümmert. Auf meinem ATmega 162 ist die Situation etwas komplizierter. Wenn ich mehr RAM verwenden muss, als verfügbar ist, muss ich zuerst manuell feststellen, wann ich den gesamten RAM aufgebraucht habe. Danach muss ich die Daten manuell vom RAM in den Flash kopieren, den RAM freigeben, ihn für das verwenden, wofür ich ihn verwenden muss, ihn wieder freigeben, Daten vom Flash in den RAM verschieben und dann den belegten Speicherplatz im Flash-Speicher freigeben. Auf einem Desktop-Computer kann das Programm nicht einmal erkennen, ob es auf die Festplatte ausgelagert und dann wieder in den RAM verschoben wurde.

Ein weiterer interessanter Aspekt ist die Leistung. Kehren wir zum Beispiel mit der Schublade und dem Lager zurück. Nehmen wir alle Gegenstände aus unseren Lagern und stapeln sie auf einem Stapel. Wenn wir also einen Bleistift aus der Schublade nehmen müssen, öffnen wir einfach die Schublade und nehmen den Bleistift. Wenn wir einen bestimmten Bleistift aus einem Stapel mit Tausenden anderer Bleistifte, Notizbücher, Lineale, Schokoriegel, Radiergummis und was nicht noch alles nehmen müssen, müssen wir viel Zeit damit verbringen, danach zu suchen. Diese Zeit (im Durchschnitt) ist viel länger als die Zeit, die man braucht, um denselben Bleistift in einem gut organisierten Lager zu finden. Andererseits ist die Zeit, die man braucht, um einen Bleistift in einem organisierten Lager zu finden, viel länger als die Zeit, die man braucht, um einen Bleistift in einer Schublade zu finden. Manche Methoden funktionieren also gut bei kleinen Datenmengen und manche bei großen Datenmengen. Dateisysteme verbessern die Leistung, indem sie Daten auf logische Weise auf der Festplatte speichern, sodass jedes einzelne Datum leicht gefunden werden kann. Manche Dateisysteme bieten auch andere Vorteile. Im Fall von JFFS2, einem Dateisystem, das für Flash-Speicher entwickelt wurde, implementiert das Dateisystem Wear Leveling, sodass Benutzer oder die entwickelte Hardware dies nicht tun müssen.

Eine weitere interessante Sache ist, dass wir auch Standarddateisysteme für RAM verwenden können! Es gibt Programme, die RAM belegen und es wie ein Dateisystem organisieren und es Programmen ermöglichen, es zu verwenden, als wäre es Festplattenspeicher.

Einige interessante Links: Wikipedia-Artikel zur Speicherverwaltungbeschreibt, wie und warum Daten im RAM partitioniert werden. Artikel zum Betriebssystem, Abschnitt Arbeitsspeichererklärt, warum wir Dinge wie Speichersegmentierung, virtuelle Speicherauslagerung usw. benötigen.

Antwort2

Um es stark zu vereinfachen: RAM verfügt zwar über ein Layoutschema, dieses wird jedoch von der Hardware abstrahiert.

Intern ist der RAM als Matrix von „Speicherzellen“ aufgebaut, die in Zeilen und Spalten angeordnet sind, wie eine Tabellenkalkulation. Jede Speicherzelle wird verwendet, um ein Datenbit zu speichern, das sofort abgerufen werden kann, indem die Zeilen- und Spaltenposition (oder Adresse) der Daten angegeben wird.

Dies unterscheidet sich nicht wesentlich vom grundlegenden Konzept der Funktionsweise der Langzeitspeicherung. Das Dateisystem und die Partitionszuordnungen sind lediglich eine Abstraktion, die Sie davon abhalten soll, direkt auf die Rohfestplatte zuzugreifen.

Antwort3

Für Festplatten wurde ein Partitionierungsschema entwickelt, mit dem Sie mehrere inkompatible Betriebssysteme installieren können, die auf verschiedenen Teilen derselben Platte koexistieren können. USB-Sticks und SSD-Laufwerke übernehmen das Schema von der Festplatte, ihrem älteren Cousin.

Bei Personalcomputern wird der RAM normalerweise nur von einem Betriebssystem gleichzeitig verwendet und es gibt daher kein Partitionierungsschema dafür. Bei einigen großen Computern (Mainframes) gibt es jedoch auch ein Partitionierungsschema für den RAM.

Antwort4

RAM muss nicht partitioniert werden, da es in Seiten organisiert ist und diese Seiten dynamisch (MMU) strukturiert sind, ohne dass Bereiche vorab zugewiesen werden müssen. Es findet jedoch eine Art flüchtige Partitionierung des RAM statt, wenn Hardwarekomponenten, meist einige Grafikkarten, aber es kann alles Mögliche sein, einen Teil des physischen RAM reservieren, bevor das Betriebssystem hochfährt.

Eigentlich brauchen Festplatten, USB-Sticks oder SSDs auch kein Partitionsschema, oder zumindest sollten sie das nicht. Es gibt immer noch unvermeidliche Komponenten wie das BIOS (oder entsprechende Firmwares) und Bootloader, die eine Partitionstabelle benötigen, um richtig zu funktionieren, aber ansonsten sind Partitionen nur aufgrund von Designbeschränkungen von Betriebssystemen (genauer gesagt Dateisystemen und Volume-Managern) erforderlich.

Das ZFS-Pool-Konzept hat gezeigt, dass Partitionen nicht erforderlich sind, selbst wenn Sie mehrere Betriebssysteme booten möchten und diese Betriebssysteme mehrere Volumes und Dateisysteme erfordern.

Partitionen sind nur dann erforderlich, wenn die Laufwerke von einem oder mehreren Betriebssystemen verwendet werden, die ZFS (oder ein hypothetisches Äquivalent) nicht unterstützen.

verwandte Informationen