Kurzantwort: Programmcode und Daten, die für die Ausführung eines Prozesses erforderlich sind, müssen im Hauptspeicher ausgeführt werden, aber der Hauptspeicher ist möglicherweise nicht groß genug, um die Anforderungen eines gesamten Prozesses zu erfüllen.
Zwei Vorschläge
(1) einen sehr großen Hauptspeicher mit einem beliebigen Bedarf an Speicherzuweisung zu erleichtern: es wegen der sehr hohen Kosten nicht machbar ist.
(2) Virtueller Speicher: Erlaubt die Ausführung von Prozessen, die möglicherweise nicht vollständig im Speicher vorhanden sind, durch automatische Speicherzuweisung auf Anfrage. Der Begriff virtueller Speicher bezieht sich auf die Abstraktion der Trennung von LOGISCHEM Speicher - Speicher im Prozess gesehen - vom PHYSISCHEN Speicher - Speicher, wie er vom Prozessor gesehen wird.Aufgrund dieser Trennung muss der Programmierer nur den logischen Speicherplatz berücksichtigen, während das Betriebssystem zwei oder mehr Ebenen des physischen Speicherplatzes verwaltet.
Mehr:
frühe Computer-Programmierer Programme in Abschnitte unterteilt, die in dem Hauptspeicher für einen Zeitraum von Verarbeitungszeit übertragen wurden. Als höhere Sprachen populär wurden, litt die Effizienz komplexer Programme unter schlechten Overlay-Systemen. Das Problem der Speicherzuweisung wurde komplexer.
Zwei Theorien zur Lösung des Problems der ineffizienten Speicherverwaltung entstanden - statische und dynamische Zuordnung. Bei der statischen Zuweisung wird davon ausgegangen, dass die Verfügbarkeit von Speicherressourcen und die Speicherreferenzzeichenfolge eines Programms vorhergesagt werden kann. Bei der dynamischen Zuweisung wird die Speicherbelegung erhöht und verringert sich mit den tatsächlichen Programmanforderungen und nicht mit der Vorhersage des Speicherbedarfs.
Programmziele und Maschinenfortschritte in den 60er Jahren machten die Voraussagen für die statische Zuordnung schwierig, wenn nicht gar unmöglich. Daher wurde die dynamische Zuweisungslösung allgemein akzeptiert, aber Meinungen zur Implementierung waren noch geteilt.
Eine Gruppe glaubte, dass der Programmierer weiterhin für die Speicherzuweisung verantwortlich sein sollte, die von Systemaufrufen zur Zuweisung oder Freigabe von Speicher ausgeführt würde. Die zweite Gruppe unterstützte die automatische Speicherzuweisung, die vom Betriebssystem durchgeführt wurde, aufgrund der zunehmenden Komplexität der Speicherzuweisung und der sich abzeichnenden Wichtigkeit des Multiprogrammierens.
Im Jahr 1961 schlugen zwei Gruppen einen einstufigen Speicher vor. Ein Vorschlag verlangte einen sehr großen Hauptspeicher, um die Notwendigkeit einer Speicherzuweisung zu verringern. Diese Lösung war aufgrund sehr hoher Kosten nicht möglich. Der zweite Vorschlag wird als virtueller Speicher bezeichnet.
CNE/modules/vm/grün/defn.html
Das hilft viel. Aber was ist mit Fragmentierung? Bestimmte Dinge (beispielsweise ein Array) müssen zusammenhängend zugewiesen werden. Wenn ein Array zusammenhängend im virtuellen Speicher zugewiesen wird, bedeutet das, dass es auch im physischen Speicher zusammenhängend ist? Oder tritt dieses Fragmentierungsniveau nicht auf? – user2079802
@ user2079802- Nicht unbedingt. Wenn sich das Array über mehrere Seiten virtuellen Speichers erstreckt, kann das Betriebssystem diese Seiten vollständig unterschiedlichen Bereichen des physischen Speichers zuordnen. Es liegt am Betriebssystem, sicherzustellen, dass dies nicht zu Leistungsproblemen führt. – templatetypedef
Eine andere Sache. Wenn Sie die Adresse einer Variablen erhalten, zum Beispiel mit & in C, ist das ihre virtuelle Adresse, richtig? – user2079802