Was ist virtueller Speicher?

18450
Yacoby

Ich habe meine Notizen für "Virtueller Speicher" überprüft und die Definition in meinem Lehrbuch lautet:

Zuweisung eines Teils des sekundären Speichers als Teil des Hauptspeichers

Wo, wie Wikipedia sagt:

Virtueller Speicher ist eine Computersystemtechnik, die einem Anwendungsprogramm den Eindruck vermittelt, dass es über einen zusammenhängenden Arbeitsspeicher (einen Adressraum) verfügt.

und (Wikipedia sagt auch)

Beachten Sie, dass "virtueller Speicher" mehr ist als nur "Festplattenspeicher zur Erweiterung des physischen Arbeitsspeichers" verwenden.

Kann jemand eine Klarstellung geben, was richtig ist?

25
Ich glaube, dass der Hinweis von Wikipedia einige Qualifikationen beinhaltet, was in Bezug auf Dinge als zusammenhängend verwendet wird. JB King vor 14 Jahren 0
Diese Frage würde wahrscheinlich eine bessere Antwort auf SO erhalten. Captain Segfault vor 14 Jahren 0
Verwechseln Sie den virtuellen Speicher nicht mit seiner Verwendung. Der erste Satz von Wikipedia definiert, was es ist. Ihr Buch spricht darüber, wie es normalerweise verwendet wird. Sobald die Leute über "Seiten" sprechen, sprechen sie über eine bestimmte Implementierung des virtuellen Speichers. Tony Lee vor 14 Jahren 2
Dein Lehrbuch ist einfach falsch. Es gibt viele Maschinen mit virtuellem Speicher und überhaupt keinen sekundären Speicher. In ähnlicher Weise gab es einst viele Maschinen, die sekundären Speicher als Teil des Hauptspeichers verwenden konnten, aber keinen virtuellen Speicher unterstützten. "Virtueller Speicher" ist etwas, bei dem es sich nicht um Speicher handelt, sondern wie beim Speicher zugegriffen wird. Ihr Lehrbuch definiert das Austauschen oder Paging. David Schwartz vor 12 Jahren 2
Dieses Video überprüfen Dieses Handbuch enthält die Grundlagen für die Notwendigkeit einer VMM-Schicht. Erläutert die grundlegende Architektur. http://www.youtube.com/user/learnwithtechies#p/u/10/Fx_I6-dL__0 vor 13 Jahren 0
Das Lehrbuch definiert es völlig falsch, sekundärer Speicher ist nicht Teil der Definition. Und selbst die Aussage von Wikipedia über "mehr als Speicherplatz auf der Festplatte" ist irreführend, da möglicherweise keine Festplatte verwendet wird - diese Aussage klingt wie "Erweiterung des Arbeitsspeichers auf Festplatte" und etwas anderes. Kelvin vor 11 Jahren 1
FWIW, Wikipedia ist jetzt in die entgegengesetzte Richtung gegangen. Wenn man diesen Satz am Ende des zweiten Absatzes "verpasst", wenn er konzeptionell mehr Speicher verwenden kann, als physisch verfügbar wäre, und zwar mit der Technik des Paging. "", Könnte man nicht einmal wissen, dass virtueller Speicher für die Ausführung von mehr Software nützlich ist als passt in den physischen Speicher! ToolmakerSteve vor 6 Jahren 0

6 Antworten auf die Frage

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

Virtueller Speicher ist eine Abstraktionsebene für jeden Prozess. Der Computer verfügt beispielsweise über 2 GB physischen RAM, der von 0 bis 2 G adressiert ist. Ein Prozess kann einen Adressraum von 4 GB sehen, den er ganz für sich hat. Die Zuordnung von virtuellen Adressen zu physischen Adressen wird von einer Speicherverwaltungseinheit verwaltet, die vom Betriebssystem verwaltet wird. Normalerweise wird dies in 4-KB-Seiten durchgeführt.

Dies ergibt mehrere Funktionen:

  1. Ein Prozess kann keinen Speicher in anderen Prozessen sehen (es sei denn, das Betriebssystem wünscht 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" werden, und dann wieder "eingelagert" werden, wenn erneut darauf zugegriffen wird.

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

Wenn Sie einen Gerätetreiber für ein Gerät schreiben, das DMA (direkter Speicherzugriff) ausführt, müssen Sie den virtuellen Speicher insbesondere auch ohne Swap kennen. Ihr Treibercode wird auf der CPU ausgeführt. Dies bedeutet, dass die Speicherzugriffe über die virtuelle MMU erfolgen. Das Gerät durchläuft wahrscheinlich nicht die MMU, daher werden rohe physische Adressen angezeigt . Als Treiberschreiber müssen Sie also Folgendes sicherstellen:

  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 8K-Array kann (durch die MMU) virtuell zusammenhängend sein, jedoch zwei physisch getrennte Seiten. Wenn Sie dem Gerät mitteilen, dass es 8 KB Daten an die physikalische Adresse schreiben soll, die dem Start dieses Arrays entspricht, schreibt es die ersten 4 KB an den Stellen, an denen Sie es erwarten, aber der zweite 4 KB beschädigt irgendwo Speicher. :-(
5
Lee B

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

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

Wenn Sie einfache Summen ausarbeiten oder einfache Informationen lernen, erledigen Sie 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, um in seinen "realen Speicher" (oder "physischen Speicher") zu arbeiten, und arbeitet mit ihnen zusammen mit seinem "Gehirn" ( seinen Prozessor).

Wenn Sie jedoch komplexe Informationen lernen oder mit komplexen Summen arbeiten, können Sie möglicherweise nicht alles auf einmal in Ihren Kopf einpassen. Sie werden verwirrt, beginnen langsamer zu werden, versagen es nicht, alles auf einmal darin zu behalten, 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 einer Seite alle Dinge, an die wir uns nicht sofort erinnern können, beziehen uns aber auf die Summen. Möglicherweise können wir uns nicht an eine riesige Liste von Verkaufszahlen für den Monat erinnern, aber wir können die Seiten ansehen, die Informationen ein wenig nacheinander abrufen und jedes Bit verarbeiten. Dies ist so, als würde der Computer den Speicher "auslagern", indem er die mit Informationen gefüllten Seiten schreibt und zum späteren Nachschlagen in den "virtuellen Speicher" legt und erkennt, dass er eine Seite benötigt, und diese Seite aus dem virtuellen Speicher in den realen Speicher zurück lädt. Unter Linux und Unix wird der Ort, an dem diese Seiten gespeichert werden, wörtlich "Auslagerungsdatei" genannt, und die Seiten der Daten im Speicher werden "Seiten" genannt. Unterschiedliche Systeme haben unterschiedliche Namen für diese Dinge, aber das allgemeine Konzept ist weitgehend dasselbe.

Paging ist wirklich sehr einfach. Da alle Informationsseiten nicht in den Speicher passen, werden einige Seiten auf die Festplatte gelegt und später erneut geladen.

Jetzt, wo es komplizierter wird, bieten moderne Systeme Speicherzuordnung und Speicherschutz, der normalerweise vom selben Hardwaresystem im Computer ausgeführt wird: der Speicherverwaltungseinheit oder der MMU.

In einem (modernen) Multitasking-Computer, der viele Programme gleichzeitig ausführen kann und über 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 des anderen. Mit anderen Worten, Benutzerprogramme sehen keine Programme anderer Benutzer oder sogar andere Programme. Sie sehen kein "reales Gedächtnis" - sie sehen ihr eigenes "virtuelles Gedächtnis".

Dieses Konzept der Speicherisolation und das Seitendateikonzept sind zwei konzeptionell verschiedene 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 das wirklich, dass die Speicherseiten für dieses Programm und ihre entsprechenden Adressen (der "Adressraum" des Programms) und die entsprechende Seite nachgeschlagen werden dieser Speicherblock wird gefunden. Diese Seite kann entweder irgendwo in den realen Speicher geladen werden. In diesem Fall erhält das Programm Zugriff, oder es kann auf eine Festplatte ausgelagert werden. Wenn es ausgelagert wird, wird ein "Seitenfehler" ausgelöst - auf die Festplatte wird zugegriffen und die Seite wird in den Arbeitsspeicher geladen. Das Programm funktioniert also auch dann, wenn nicht genügend Speicher vorhanden ist, aber es läuft LANGSAM, wenn eine Festplatte für einen normalerweise sehr schnellen Speicherzugriff verwendet werden muss.

Wenn jetzt nicht genügend Speicherplatz vorhanden ist, um diese Seite in den Arbeitsspeicher zu laden, liegt ein Problem vor. In diesem Fall müssen einige ANDERE Seiten, die sich bereits im Speicher befinden, auf die Festplatte "ausgelagert" werden, damit die erste Seite des Programms geladen werden kann. Oder es können auch Seiten aus demselben Programm sein. Sie sehen dies manchmal in Grafikprogrammen, z. B. auf stark belasteten Systemen, wenn ein Teil des Bildes langsam geladen und schnell gezeichnet wird, dann wird der nächste Teil genauso langsam und schnell geladen, und wenn Sie mit dem ersten wieder arbeiten Teil ist es langsam wieder. Das liegt daran, dass sie geladen werden, um bearbeitet zu werden, und dann wieder ausgetauscht werden, damit etwas anderes bearbeitet werden kann. Offensichtlich ist dies eine sehr langsame Arbeitsweise, und Sie benötigen wirklich mehr ECHTEN Speicher.

Ich stimme dieser Antwort zu 100% nicht zu. Wenn "virtueller Speicher" sich auf Paging bezog, könnte ein System, das nicht blättert (beispielsweise eines, bei dem keine Auslagerungs- oder Auslagerungsdateien aktiviert sind) den virtuellen Speicher nicht unterstützen. Aber das ist offensichtlich verrückt. David Schwartz vor 12 Jahren 0
@DavidSchwartz - Ich hatte anfangs eine ähnliche Reaktion wie Sie, aber wenn ich die Antwort ausführlicher lese, denke ich nicht, dass sie so schlecht ist. Betrachten Sie [Wikipedia / Virtual Memory / Paged] (https://en.wikipedia.org/wiki/Virtual_memory#Paged): "Nahezu alle Implementierungen des virtuellen Speichers teilen einen virtuellen Adressraum in Seiten, Blöcke zusammenhängender virtueller Speicheradressen" auf. Das heißt, "Paging" im weitesten Sinne * erfordert * keine * Datei *, sondern bezieht sich auf die Zuordnung von virtuellen Adressen zu physischen Adressen. ToolmakerSteve vor 6 Jahren 0
Hmm, auf der anderen Seite sagt Lee: "Alle Informationsseiten passen nicht in den Speicher, daher werden einige Seiten auf die Festplatte gelegt und später erneut geladen.", So hat David Recht: Diese Antwort lässt die wesentliche Tatsache außer Acht * paging * ist ** nicht nur für das Paging auf die Festplatte **. Auf der positiven Seite erwähnt Lee noch weitere Vorteile des virtuellen Speichers (Speicherisolation). Wenn diese Antwort umformuliert würde, um "Mapping-Seiten des virtuellen Speichers" nicht mit "Paging to Disk" zu verwirren, wäre dies sinnvoller. ToolmakerSteve vor 6 Jahren 1
@ToolmakerSteve Das Problem ist, dass dies ein weit verbreitetes Missverständnis ist und alles, was dieses Missverständnis stärkt, IMO eine schlechte Sache ist. Dies ist besonders schlimm, wenn diese Antwort versucht, die sehr grundlegenden Konzepte in einer sehr einfachen Angelegenheit zu erklären - dort ist es das Wichtigste, keine Vorarbeit auf der Grundlage eines verbreiteten Missverständnisses zu legen! David Schwartz vor 6 Jahren 0
@ DavidSchwartz - Ich stimme zu. Sie haben Recht, er definiert nicht "virtuellen Speicher", er definiert "wie eine Seitendatei funktioniert". Zuerst hatte ich gedacht, dass das Problem lediglich darin bestand, dass Lee nicht unterschieden konnte zwischen "paging = Mapping von Speicherseiten von virtuell auf physisch" und "page file = Mapping von Seiten auf Festplatte", aber nach einem erneuten Lesen sprach er wirklich * * nur ** zum Mapping auf die Festplatte. (Wie aus dem Lehrbuch-Zitat, aus allen anderen Antworten mit Ausnahme des Kapitäns und aus der Google-Suche zu ersehen ist, ist dieses Vermischen der beiden Konzepte sehr weit verbreitet. Ich bin sicher, dass ich es schuld habe.) ToolmakerSteve vor 6 Jahren 0
0
sivaramaraju

Ich weiß, es ist zu spät ... aber dachte immer noch, es sei nützlich.

  • Alle sind basierend auf unterschiedlichen Gesichtspunkten korrekt.
  • Virtueller Speicher ist eine Speicherverwaltungsmethode, während sich auf dem Festplattenlaufwerk Auslagerungsspeicher befand. Auslagerungsspeicher wird im Allgemeinen als Auslagerungsbereich bezeichnet. Der Swap Space bezieht sich auf den Teil des virtuellen Speichers, der als temporärer Speicherplatz reserviert ist. Auslagerungsspeicherplatz wird verwendet, wenn verfügbarer RAM-Speicher die Anforderungen des Systemspeichers nicht erfüllt
  • Weitere Informationen finden Sie unter dem Link unten
-2
Racter

Wenn wir das Wort virtuell verstehen, können wir 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 Falle eines virtuellen Speichers simuliert das System den Systemspeicher unter Verwendung langsamerer Speicherressourcen (z. B. Festplatte, USB-Stick usw.). Wenn zusätzlicher Speicher erforderlich ist, werden Systemdaten aus dem Systemspeicher ausgelagert, die nicht zur Festplatte benötigt werden Laufwerk oder Ressource, die Sie eingerichtet haben. Dies gibt Systemspeicher frei, damit Ihre Anwendung die Aufgabe fortsetzen kann.

Das Austauschen ist ein kontinuierlicher Prozess. Wenn Sie also Ihren Speicher aufrüsten, sollten Sie eine Leistungsverbesserung feststellen, da das System nicht häufig auf langsameren Speicher umgestellt werden muss.

-2
Eric Buenaventura

Virtueller Speicher ist eine Funktion eines Betriebssystems, mit der ein Computer einen Mangel an physischem Speicher kompensieren kann, indem er Datenseiten vorübergehend aus dem Arbeitsspeicher (RAM) in den Plattenspeicher überträgt.

Dies bedeutet, dass es sich um einen Spiegel oder einen Beispielspeicher handelt, 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 vor 8 Jahren 0
-4
Anarkie

Virtueller Speicher ist ein Block Ihrer Festplatte, den das System zusätzlich zum physischen Arbeitsspeicher als Auslagerungsdatei verwendet.

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

Die besten 2 Tipps, die ich anbieten kann: 1) Virt Mem sollte für min. Und max. Ca. 1,5X Ihres physischen Speichers eingestellt werden. Ex. 2 GB RAM = 3070 MB Virt. 2) Deaktivieren Sie Ihre Paging-Datei beim Defragmentieren. 2x defragmentieren und auf die ursprüngliche Nummer zurücksetzen. Dies gibt ein sauberes Stück des Laufwerks und erhöht die Geschwindigkeit der Auslagerungsdatei.

Das trifft nicht ganz zu - moderne Speichermanager virtualisieren den gesamten Systemspeicher. Dies ermöglicht das Trennen 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 vor 14 Jahren 1
"Windows defragmentiert diesen Teil Ihrer Festplatte NICHT." einfach nuke pagefile.sys, booten Sie neu, defragmentieren Sie die Festplatte und aktivieren Sie paging erneut, voilá, eine neue und zusammenhängende Auslagerungsdatei! Sysinternals PageDefrag bietet jedoch eine bessere Leistung, da die Auslagerungsdatei außerdem am Anfang des Laufwerks / der Partition platziert wird, um eine bessere Leistung zu erzielen. vor 14 Jahren 1
Wenn diese Antwort richtig war, konnte ein Windows-System ohne konfigurierte Auslagerungsdateien keine Unterstützung für virtuellen Speicher bieten. Das ist aber offensichtlich falsch. Ein solches System könnte beispielsweise noch Dateien in den Prozessadressraum über dem physischen RAM abbilden, was ein Beispiel für virtuellen Speicher ist. David Schwartz vor 12 Jahren 1