Was ist virtueller Speicher?


27

Ich habe meine Notizen auf 'Virtueller Speicher' überprüft und die Definition in meinem Lehrbuch lautet:

Prozess zum Zuweisen eines Abschnitts des Sekundärspeichers als Teil des Hauptspeichers

Wo, wie Wikipedia sagt:

Virtueller Speicher ist eine Computersystemtechnik, die einem Anwendungsprogramm den Eindruck vermittelt, einen zusammenhängenden Arbeitsspeicher (einen Adressraum) zu haben.

und (Wikipedia sagt auch)

Beachten Sie, dass "virtueller Speicher" mehr ist als nur "Festplattenspeicher zum Erweitern der physischen Speichergröße verwenden".

Kann mir jemand eine Klarstellung geben, welche richtig ist?


Ich glaube, die Anmerkung von Wikipedia enthält einige Qualifikationen darüber, was für zusammenhängende Dinge verwendet wird.
JB King

Diese Frage würde SO wahrscheinlich besser beantworten.
Kapitän Segfault

2
Verwechseln Sie nicht den virtuellen Speicher mit seiner Verwendung. Der erste Satz von Wikipedia definiert, was es ist. In Ihrem Buch wird darüber gesprochen, wie es normalerweise verwendet wird. Wenn die Leute von "Seiten" sprechen, sprechen sie über eine bestimmte Implementierung des virtuellen Speichers.
Tony Lee

2
Dein Lehrbuch ist einfach falsch. Es gibt viele Maschinen mit virtuellem Speicher und überhaupt keinem sekundären Speicher. In ähnlicher Weise gab es früher viele Computer, die sekundären Speicher als Teil des Hauptspeichers verwenden konnten, aber keinen virtuellen Speicher unterstützten. "Virtueller Speicher" ist etwas, das kein Speicher ist, auf das aber wie auf Speicher zugegriffen wird. In Ihrem Lehrbuch wird Tauschen oder Blättern definiert.
David Schwartz

1
Das Lehrbuch definiert es völlig falsch, der Sekundärspeicher ist nicht Bestandteil der Definition. Und sogar die Aussage von Wikipedia über "mehr als Speicherplatz" ist irreführend, da es sich möglicherweise überhaupt nicht um eine Festplatte handelt - diese Aussage klingt so, als würde sie "Speicher auf Festplatte erweitern" und noch etwas anderes.
Kelvin

Antworten:


41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

Der virtuelle Speicher ist eine Abstraktionsschicht, die jedem Prozess bereitgestellt wird. Der Computer verfügt beispielsweise über 2 GB physischen RAM, der von 0 bis 2 GB adressiert ist. Ein Prozess sieht möglicherweise einen Adressraum von 4 GB, den er vollständig für sich hat. Die Zuordnung von virtuellen Adressen zu physischen Adressen wird von einer Speicherverwaltungseinheit vorgenommen, die vom Betriebssystem verwaltet wird. In der Regel wird dies auf 4 KB großen "Seiten" durchgeführt.

Dies bietet mehrere Funktionen:

  1. Ein Prozess kann keinen Speicher in anderen Prozessen sehen (es sei denn, das Betriebssystem möchte es!)
  2. Der Speicher an einer bestimmten virtuellen Adresse befindet sich möglicherweise nicht an derselben physischen Adresse
  3. Speicher an einer virtuellen Adresse kann auf die Festplatte "ausgelagert" und dann "eingelagert" werden, wenn erneut darauf zugegriffen wird.

Ihr Lehrbuch definiert den virtuellen Speicher (falsch) als nur # 3.

Auch ohne Auslagerung müssen Sie sich insbesondere des virtuellen Speichers bewusst sein, wenn Sie einen Gerätetreiber für ein Gerät schreiben, das DMA (Direct Memory Access) ausführt. Ihr Treibercode läuft auf der CPU, dh die Speicherzugriffe erfolgen über die MMU (virtuell). Das Gerät durchläuft wahrscheinlich nicht die MMU, daher werden unformatierte physikalische Adressen angezeigt . Als Fahrerautor müssen Sie also sicherstellen, dass:

  1. Alle Rohspeicheradressen, die Sie an die Hardware übergeben, sind physisch und nicht virtuell.
  2. Alle großen (mehrseitigen) Speicherblöcke, die Sie senden, sind physisch zusammenhängend. Ein 8-KByte-Array kann (über die MMU) praktisch zusammenhängend sein, aber zwei physikalisch getrennte Seiten. Wenn Sie dem Gerät anweisen, 8 KB Daten an die physikalische Adresse zu schreiben, die dem Anfang dieses Arrays entspricht, schreibt es die ersten 4 KB an die erwartete Stelle, aber die zweiten 4 KB beschädigen irgendwo einen Speicher. :-(

4

Ich werde versuchen, langsam anzufangen und dann alles für Sie zusammenzustellen. Es ist so:

Virtueller Speicher bezieht sich, wie allgemein verwendet, auf "Paging". Wie der Name schon sagt, ist Paging wie ein menschlicher Notizblock.

Wenn Sie einfache Summen ausarbeiten oder einfache Informationen lernen, tun Sie dies alles in Ihrem Kopf: Sie laden einfach alle Informationen auf, verarbeiten sie und erhalten die Antwort. Dies ist wie ein Computer, der Dateien von der Festplatte lädt - er lädt die Programme oder Bilder oder andere Informationen, die er benötigt, in seinen "realen Speicher" (oder "physischen Speicher") und bearbeitet sie mit seinem "Gehirn" ( sein Prozessor).

Wenn Sie jedoch komplexe Informationen lernen oder mit komplexen Summen arbeiten, können Sie möglicherweise nicht alles auf einmal in Ihren Kopf integrieren. Sie werden verwirrt, fangen an, langsamer zu werden, behalten nicht alles auf einmal bei und müssen etwas vergessen, um sich an etwas anderes zu erinnern.

Die menschliche Lösung besteht darin, einen Notizblock zu verwenden. Wir notieren auf den Seiten alle Dinge, an die wir uns nicht auf einmal erinnern können, beziehen uns aber auf sie, während wir die Summen machen. Wir sind möglicherweise nicht in der Lage, uns eine riesige Liste von Verkaufszahlen für den Monat zu merken, aber wir können uns die Seiten ansehen, die Informationen Stück für Stück abrufen und jedes Stück verarbeiten. Dies ist so, als würde der Computer seinen Speicher "paginieren" - Seiten voller Informationen werden geschrieben und zur späteren Bezugnahme in den "virtuellen Speicher" verschoben, und es wird erkannt, dass eine Seite erforderlich ist, und diese Seite wird aus dem virtuellen Speicher in den realen Speicher zurückgeladen. Unter Linux und Unix wird der Ort, an dem diese Seiten gespeichert werden, wörtlich "Auslagerungsdatei" genannt, und die Seiten mit Daten im Speicher werden wörtlich "Seiten" genannt. Unterschiedliche Systeme haben unterschiedliche Namen für diese Dinge, aber das allgemeine Konzept ist weitgehend dasselbe.

Paging ist also wirklich sehr einfach. Alle Informationsseiten passen nicht in den Speicher, daher werden einige Seiten auf die Festplatte geschrieben und später erneut geladen.

Jetzt wird es noch komplizierter, wenn moderne Systeme über Speicherzuordnung und Speicherschutz verfügen, die normalerweise von demselben Hardwaresystem im Computer verwaltet werden: der Speicherverwaltungseinheit oder MMU.

In einem (modernen) Multitasking-Computer, auf dem viele Programme gleichzeitig ausgeführt werden können und der über einen Speicherschutz verfügt, ist jedes Programm normalerweise von anderen Programmen getrennt, die auf demselben System ausgeführt werden. Auf diese Weise kann ein Programm ein anderes Programm nicht einfach durch Zugriff auf seinen Speicher ändern - die MMU trennt den Adressraum eines Programms physisch von dem anderer Programme. Mit anderen Worten, Benutzerprogramme sehen weder die Programme anderer Benutzer noch andere Programme. Sie sehen kein "reales Gedächtnis" - sie sehen ihr eigenes "virtuelles Gedächtnis".

Dieses Konzept der Speicherisolation und das Konzept der Auslagerungsdatei sind zwei konzeptionell unterschiedliche Dinge, weshalb Sie wahrscheinlich verwirrt sind. Der Schlüssel ist jedoch, dass beide mit der MMU arbeiten - der Speicherverwaltungseinheit, die den Speicher in Seiten aufteilt und Seiten einem virtuellen Adressraum zuordnet.

Wenn also ein Programm bei einer bestimmten "Speicheradresse" nach dem Speicher fragt, geschieht in Wirklichkeit, dass die Speicherseiten für dieses Programm und ihre entsprechenden Adressen (der "Adressraum" des Programms) nachgeschlagen werden und die entsprechende Seite Dieser Speicherblock wurde gefunden. Diese Seite kann entweder irgendwo in den realen Speicher geladen werden. In diesem Fall erhält das Programm Zugriff, oder sie kann auf eine Festplatte ausgelagert werden. Wenn es ausgelagert wird, löst es einen "Seitenfehler" aus - auf die Festplatte wird zugegriffen und die Seite wird in den Speicher geladen. Das Programm funktioniert also auch dann, wenn nicht genügend Arbeitsspeicher vorhanden ist, aber es wird LANGSAM ausgeführt, wenn die Festplatte für einen normalerweise sehr schnellen Speicherzugriff verwendet werden muss.

Wenn nicht genügend Speicherplatz vorhanden ist, um diese Seite in den Speicher zu laden, liegt ein Problem vor. In diesem Fall muss eine ANDERE Seite, die sich bereits im Speicher befindet, auf die Festplatte "ausgelagert" werden, damit die Seite des ersten Programms geladen werden kann. Sie können aber auch Seiten aus demselben Programm sein. Sie sehen dies manchmal in Grafikprogrammen, zum Beispiel auf stark ausgelasteten Systemen, wenn ein Teil des Bildes langsam geladen und schnell gezeichnet wird, der nächste Teil ebenso langsam geladen und schnell gezeichnet wird und wenn Sie wieder mit dem ersten arbeiten Teil, es ist langsam wieder. Das liegt daran, dass sie geladen werden, um bearbeitet zu werden, und dann wieder ausgetauscht werden, damit an etwas anderem gearbeitet werden kann. Offensichtlich ist dies eine sehr langsame Arbeitsweise, und was Sie wirklich brauchen, ist mehr ECHTES Gedächtnis.


Ich bin mit dieser Antwort zu 100% nicht einverstanden. Wenn sich "virtueller Speicher" auf Paging bezieht, kann ein System, das nicht paginiert (z. B. ein System ohne aktivierte Auslagerungs- oder Auslagerungsdateien), den virtuellen Speicher nicht unterstützen. Aber das ist offensichtlich verrückt.
David Schwartz

@DavidSchwartz - Ich hatte anfangs eine ähnliche Reaktion wie Sie, aber wenn ich die Antwort genauer lese, denke ich nicht, dass es so schlimm ist. Betrachten Sie Wikipedia / virtual memory / Paged mit den Worten "Nahezu alle Implementierungen des virtuellen Speichers unterteilen einen virtuellen Adressraum in Seiten, Blöcke von zusammenhängenden virtuellen Speicheradressen". Das heißt, „Paging“, im weitesten Sinne, ist nicht eine Seite benötigt Datei , sondern bezieht sich auf die Abbildung virtueller Adressen in physikalische Adressen.
ToolmakerSteve

1
Hmm, auf der anderen Seite sagt Lee: "Alle Informationsseiten passen nicht in den Speicher, deshalb werden einige Seiten auf die Festplatte geschrieben und später wieder geladen." David hat also Recht: Diese Antwort übersieht die wesentliche Tatsache, dass Beim Paging geht es nicht nur um das Paging auf die Festplatte . Auf der positiven Seite erwähnt Lee weitere Vorteile des virtuellen Speichers (Speicherisolation). Wenn diese Antwort umformuliert würde, um "Zuordnen von Seiten des virtuellen Speichers" nicht mit "Auslagern auf Festplatte" zu verwechseln, wäre dies nützlicher.
ToolmakerSteve

@ToolmakerSteve Das Problem ist, dass dies ein weit verbreitetes Missverständnis ist und alles, was dieses Missverständnis verstärkt, eine schlechte Sache ist. Hier ist es besonders schlimm, wenn diese Antwort versucht, die grundlegenden Konzepte in einer sehr einfachen Angelegenheit zu erklären - dort ist es am wichtigsten, keine Grundlage zu legen, die auf einem verbreiteten Missverständnis beruht!
David Schwartz

@ DavidSchwartz - ich stimme zu. Sie haben recht, er definiert nicht "virtuellen Speicher", er definiert "wie eine Auslagerungsdatei funktioniert". Zuerst hatte ich gedacht, dass das Problem nur darin bestand, dass Lee nicht zwischen "Paging = Zuordnen von Speicherseiten von virtuell zu physisch" und "Auslagerungsdatei = Zuordnen von Seiten zu Festplatte" unterschied, aber nach dem erneuten Lesen sprach er wirklich nur über die Zuordnung auf die Festplatte. (Wie wir aus dem Lehrbuchzitat, aus allen anderen Antworten mit Ausnahme des Kapitäns und aus einer Google-Suche ersehen können, ist diese Vermischung der beiden Konzepte sehr verbreitet. Ich bin sicher, ich habe mich daran schuldig gemacht.)
ToolmakerSteve

0

Ich weiß, es ist zu spät ... aber ich fand es trotzdem nützlich.

  • Alle sind aus verschiedenen Blickwinkeln richtig.
  • Virtueller Speicher ist eine Speicherverwaltungstechnik, während Swap-Speicherbereich auf dem Festplattenlaufwerk war. Swap-Speicher wird im Allgemeinen als Swap-Speicher bezeichnet. Swap Space bezieht sich auf den Teil des virtuellen Speichers, der als temporärer Speicherort reserviert ist. Auslagerungsspeicher wird verwendet, wenn der verfügbare RAM die Anforderungen des Systemspeichers nicht erfüllen kann
  • Sie können auf den folgenden Link für weitere Details verweisen

-2

Nun, wenn wir das Wort virtuell verstehen, können wir meiner Meinung nach verstehen, wie es sich auf das Gedächtnis bezieht.

"Virtuell" im Sinne von Dictionary.com: "Vorübergehend simuliert oder erweitert durch Computersoftware: eine virtuelle Festplatte im RAM; virtueller Speicher auf einer Festplatte."

Im Fall des virtuellen Speichers simuliert das System den Systemspeicher durch Verwendung langsamerer Speicherressourcen (z. B. Festplatte, USB-Stick usw.). Wenn zusätzlicher Speicher benötigt wird, tauscht das System Daten im Systemspeicher aus, die nicht auf der Festplatte benötigt werden Laufwerk oder Ressource, die Sie eingerichtet haben. Dadurch wird Systemspeicher freigegeben, sodass Ihre Anwendung die von ihr ausgeführte Aufgabe fortsetzen kann.

Das Auslagern ist ein kontinuierlicher Prozess. Wenn Sie also Ihren Speicher aufrüsten, sollten Sie eine Leistungsverbesserung feststellen, da das System nicht so oft auf langsameren Speicher auslagern muss.


-2

Virtueller Speicher ist eine Funktion eines Betriebssystems (OS), mit der ein Computer Engpässe im physischen Speicher ausgleichen kann, indem vorübergehend Datenseiten aus dem Arbeitsspeicher (RAM) in den Plattenspeicher übertragen werden.

Das heißt, es ist wie ein Spiegel oder ein Beispielspeicher, der in einer virtuellen Maschine oder einer virtuellen Box verwendet wird, um Betriebssysteme zu testen, ohne den Computer zu formatieren.


Nein, das ist Paging.
David Schwartz

-4

Der virtuelle Speicher ist ein Block Ihrer Festplatte, den das System zusätzlich zum physischen RAM als Auslagerungsdatei verwendet.

Es wird schwierig und manchmal auch langsam, da Windows diesen Teil Ihrer Festplatte NICHT defragmentiert.

Die 2 besten Tipps, die ich anbieten kann: 1) Virt Mem sollte auf das 1,5-fache Ihres physischen Speichers eingestellt sein. Ex. 2 GB RAM = 3070 MB virt. 2) Schalten Sie beim Defragmentieren die Auslagerungsdatei aus. Defragmentieren Sie 2x und stellen Sie die ursprüngliche Nummer wieder her. Dies ergibt eine saubere Scheibe des Laufwerks und erhöht die Geschwindigkeit der Auslagerungsdatei.


1
Das stimmt nicht ganz - moderne Speichermanager virtualisieren den gesamten Systemspeicher. Dies ermöglicht die Trennung von Prozessen - jeder Prozess kann nur seinen eigenen Speicher berühren. Der Speichermanager ist dafür verantwortlich, diese virtuellen Seiten dem realen Speicher und optional einer Festplatte zuzuordnen.
Anthony Giorgio

1
"Windows defragmentiert diesen Teil Ihrer Festplatte NICHT." Nuke einfach pagefile.sys, starte neu, defragmentiere die Festplatte und aktiviere erneut Paging, voilá, eine frische und zusammenhängende Auslagerungsdatei! Sysinternals PageDefrag leistet jedoch bessere Arbeit, da die Auslagerungsdatei für eine bessere Leistung auch am Anfang des Laufwerks / der Partition platziert wird.

1
Wenn diese Antwort richtig war, konnte ein Windows-System ohne konfigurierte Auslagerungsdateien keine Unterstützung für den virtuellen Speicher bieten. Das ist aber offensichtlich falsch. Ein solches System könnte beispielsweise weiterhin Dateien in einen Prozessadressraum abbilden, der über den physischen RAM hinausgeht, der ein Beispiel für einen virtuellen Speicher ist.
David Schwartz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.