Frage zu OS X/Darwin: Virtueller Speicher



  • Hallo,
    ich lese mich gerade ein bisschen in die Funktionsweise von OS X und gerade vor eben vor allem Darwin, bzw seinen Kernel XNU ein.

    Wenn ich das richtig verstanden habe, weist der "Mach"-Teil in Darwin zumindest bei 32-bit jedem Prozess einen virtuellen 4GB-Adressraum zu. Ich verstehe den Vorteil nicht, den das bringt, die ganze Geschichte über einen virtuellen Adressraum zu machen, warum wird das Ganze nicht direkt in den Speicher geschrieben?

    Weiß ja jemand bescheid? Wahrscheinlich ist das Thema nichteinmal so OS X-beschränkt, wie ich denke 😉

    Grüße,
    Michael



  • Sehe ich das richtig. du fragst dich warum man überhaupt virtuelle Adressen verwendet, statt direkt mit den physischen Adressen zu arbeiten?



  • Ja. Blöde Frage oder wie? Naja, ich habe halt echt keine Ahnung 🙂



  • Programme benötigen nicht permanent den gesamten Speicher und noch nicht mal den von ihnen genutzten Speicher ständig. Das nutzt man, um den momentan nicht benötigten Speicherinhalt auf die Festplatte auszulagern. So kann man den tatsächlichen Speicher dann für mehr Sachen nutzen. Damit es aber keine Probleme gibt, erzeugt man eben einen virtuellen Adressraum. In diesem virtuellen Raum sind die Adressen eindeutig, obwohl er größer als das tatsächlich verfügbare RAM sein kann. Und das ist letztlich der Sinn der Sache. Mehr Arbeitsspeicher als RAM haben zu können. Ob eine konkrete virtuelle Adresse momentan auf der Festplatte ausgelagert ist, oder im physischen RAM verfügbar ist, das weiß nur die Speicherverwaltung des Betriebssystems.



  • Eigentlich ist es so wie beim Programmieren es wird einfach abstrahiert, durch die virtualisierung des Arbeitsspeichers können Anwendungen ganz transparent auf ihrem Adressraum arbeiten, obwohl der Speicher in der Realität wo ganz anders sein kann.
    Der andere Aspekt der damit einhergeht ist die Zugriffskontrolle, da eine Anwendung nicht auf Speicher einer anderen Anwendung zugreifen kann (der ist ja gar nicht eingeblendet, wenn da jede Anwendung ihren eigenen Adressraum hat).



  • virtuellen speicher kannst du dir wie einen großen kuchen vorstellen, von dem man eben mit der gabel nur einen kleinen teil abzwacken kann. 🙂



  • Okay, vielen Dank für die Erklärungen! 🙂 Auf's C++-Forum ist halt Verlass 😉


Anmelden zum Antworten