Der virtuelle Speicher ist ein Teil des physischen Speichers des Computers. Virtueller Speicher ist eine Technologie zur Speicherverwaltung von Computersystemen. Er ist normalerweise in mehrere physische Speicherfragmente unterteilt, von denen einige bei Bedarf vorübergehend auf einem externen Festplattenspeicher gespeichert werden.
Das Betriebssystem verfügt über die Konzepte des virtuellen Speichers und des physischen Speichers. Vor langer Zeit, als es noch kein Konzept für virtuellen Speicher gab, nutzten Programme zur Adressierung physikalische Adressen. Der Bereich, den ein Programm adressieren kann, ist abhängig von der Anzahl der Adressleitungen der CPU. Auf einer 32-Bit-Plattform beträgt der Adressbereich beispielsweise 2^32, was 4G entspricht. Und das ist behoben. Wenn kein virtueller Speicher vorhanden ist und bei jedem Prozessstart 4 GB physischer Speicher zugewiesen werden, können viele Probleme auftreten:
Weil mein physischer Speicher begrenzt ist, wenn mehrere Prozesse ausgeführt werden müssen , 4G Speicher sind erforderlich, wenn Ihr Speicher kleiner ist, wird er schnell zugewiesen, sodass Prozesse, denen keine Ressourcen zugewiesen wurden, nur warten können. Wenn die Ausführung eines Prozesses abgeschlossen ist, wird der wartende Prozess in den Speicher geladen. Dieser häufige Speicherladevorgang ist sehr ineffizient. Da die Anweisungen direkt auf den physischen Speicher zugreifen, kann mein Prozess die Daten anderer Prozesse und sogar die Daten des Kernel-Adressraums ändern. Dies ist, was wir tun Ich möchte es nicht sehen. Da der Speicher zufällig zugewiesen wird, ist auch die Adresse, an der das Programm ausgeführt wird, falsch.
Als Reaktion auf die verschiedenen Probleme, die oben auftreten werden, wurde der virtuelle Speicher herausgebracht.
Der durch den Prozess erhaltene virtuelle 4G-Speicher ist ein kontinuierlicher Adressraum (dies ist nur das, was der Prozess denkt), aber tatsächlich ist er normalerweise in mehrere physische Speicherfragmente unterteilt, und einige werden auf einem externen Festplattenspeicher gespeichert erfolgt bei Bedarf.
Jedes Mal, wenn ich auf eine Adresse im Adressraum zugreifen möchte, muss ich die Adresse in eine tatsächliche physische Speicheradresse übersetzen
Von allen Prozessen gemeinsam genutzt Für diesen gesamten physischen Speicher ordnet jeder Prozess nur den virtuellen Adressraum zu, den er derzeit benötigt, um den physischen Speicher zu ermitteln. Der Prozess muss wissen, welche Daten im Adressraum sich im physischen Speicher befinden und welche nicht (möglicherweise). Dieser Teil wird auf der Festplatte (oben) gespeichert und befindet sich im physischen Speicher, der über die Seitentabelle aufgezeichnet werden muss. Jeder Eintrag in der Seitentabelle ist in zwei Teile unterteilt Physischer Speicher, und der zweite Teil zeichnet die Adresse der physischen Speicherseite auf (falls vorhanden).
Wenn ein Prozess auf eine virtuelle Adresse zugreift, wird zunächst die Seitentabelle überprüft nicht im physischen Speicher, tritt eine Ausnahme wegen fehlender Seite auf
Beim Verarbeitungsprozess der Ausnahme wegen fehlender Seite blockiert das Betriebssystem sofort den Prozess, ersetzt die entsprechende Seite auf der Festplatte im Speicher und führt dann den Vorgang durch Wenn der Speicher voll ist und kein leerer Platz vorhanden ist, finden Sie eine Seite, die ihn abdeckt. Welche Seite speziell abgedeckt wird, hängt davon ab, wie der Seitenersetzungsalgorithmus des Betriebssystems ausgelegt ist.
In Bezug auf den Zusammenhang zwischen virtuellem Speicher und physischem Speicher kann uns das folgende Bild zur Konsolidierung helfen.
Unsere CPU möchte auf die virtuelle Seite (VP3) zugreifen, auf der sich die virtuelle Adresse befindet, und den Wert ermitteln des dritten Eintrags in der Seitentabelle. Wenn das gültige Bit 1 ist, wird der Inhalt der physischen Seite entsprechend der physischen Seitennummer gefunden und zurückgegeben.
Wenn das gültige Bit 0 ist, tritt eine Parameterseitenfehlerausnahme auf und der Kernel-Seitenfehlerausnahmehandler wird aufgerufen. Der Kernel wählt mithilfe des Seitenersetzungsalgorithmus eine Seite als überschriebene Seite aus und aktualisiert den Inhalt der Seite auf dem Speicherplatz. Anschließend wird die VP3-zugeordnete Festplattendatei auf der physischen Seite zwischengespeichert. Dann wird im dritten Eintrag in der Seitentabelle das gültige Bit zu 1 und der zweite Teil speichert den Inhalt, der der Adresse der physischen Speicherseite entsprechen kann.
Nachdem die Seitenfehlerausnahme verarbeitet wurde, kehren Sie zur Anweisung vor der Unterbrechung zurück und führen Sie sie erneut aus. Zu diesem Zeitpunkt trifft der Cache und führt 1 aus.Ordnen Sie den gefundenen Inhalt dem Benachrichtigungscache zu, und die CPU ruft den Wert aus dem Benachrichtigungscache ab und beendet ihn.
Wenn jeder Prozess erstellt wird, weist der Kernel dem Prozess 4 GB virtuellen Speicher zu. Wenn der Prozess noch nicht ausgeführt wurde, handelt es sich lediglich um ein Speicherlayout. Tatsächlich werden die Programmdaten und der Code (z. B. das .text-.data-Segment) an der entsprechenden Stelle im virtuellen Speicher nicht sofort in den physischen Speicher kopiert. Es handelt sich lediglich um eine Zuordnung zwischen dem virtuellen Speicher und der Festplattendatei (genannt Speicherzuordnung). Zu diesem Zeitpunkt befinden sich die Daten und der Code noch auf der Festplatte. Wenn das entsprechende Programm ausgeführt wird, sucht der Prozess nach der Seitentabelle und stellt fest, dass die Adresse in der Seitentabelle nicht im physischen Speicher, sondern auf der Festplatte gespeichert ist. Daher tritt eine Seitenfehlerausnahme auf, sodass die Daten auf die Festplatte kopiert werden zum physischen Gedächtnis.
Wenn der Prozess ausgeführt wird und Speicher über malloc dynamisch zugewiesen wird, wird außerdem nur virtueller Speicher zugewiesen, dh der diesem virtuellen Speicher entsprechende Seitentabelleneintrag wird entsprechend festgelegt. Wenn der Prozess tatsächlich auf diese Daten zugreift, Wirft eine Seitenfehlerausnahme.
Es kann davon ausgegangen werden, dass virtueller Speicherplatz dem Speicherplatz zugeordnet wird (tatsächlich wird er bei Bedarf auch dem Speicherplatz zugeordnet, über mmap wird mmap verwendet, um die Zuordnungsbeziehung zwischen virtuellem Speicherplatz und Speicherplatz herzustellen)
Verwenden Vorteile des virtuellen Speichermechanismus
Da der Speicherplatz jedes Prozesses konsistent und fest ist (4G auf 32-Bit-Plattformen), kann der Linker die Speicheradresse beim Verknüpfen der ausführbaren Datei festlegen, ohne sich darum kümmern zu müssen Die endgültige tatsächliche Speicheradresse dieser Daten wird dem Kernel überlassen, um die Zuordnungsbeziehung zu vervollständigen.
Wenn verschiedene Prozesse denselben Code verwenden, beispielsweise den Code einer Bibliotheksdatei, kann nur eine Kopie dieses Codes darin gespeichert werden Physischer Speicher und verschiedene Prozesse Ordnen Sie einfach Ihren eigenen virtuellen Speicher zu, wodurch physischer Speicher eingespart werden kann
Wenn das Programm kontinuierlichen Speicherplatz zuweisen muss, muss es nur kontinuierlichen Speicherplatz im virtuellen Speicher zuweisen und benötigt keinen kontinuierlichen physischen Speicher Tatsächlich besteht der physische Speicher oft aus intermittierenden Speicherfragmenten. Auf diese Weise können wir unser physisches Gedächtnis effektiv nutzen.
Das obige ist der detaillierte Inhalt vonIst der virtuelle Speicher Teil des Computerspeichers?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!