Ist virtueller Speicher real oder nur eine Methode zur Speicherverwaltung?

0

Ich bin nicht sicher, ob virtueller Speicher tatsächlich eine physische Komponente ist, oder ob die Leute ihn einfach als Methode zur Optimierung von Speicherprozessen bezeichnen.


quelle
2
Es gibt viele verschiedene Dinge, die oft als "virtueller Speicher" bezeichnet werden. Bitte sei spezifischer.
Eugene Sh.
1
Virtueller Speicher ist ein Konzept, aber zum Implementieren benötigen Sie einen sehr realen Teil der CPU-Schaltung, die als bezeichnet wird MMU . Es ist eine schwere Sache, die Immobilien im Silizium erfordert, da es Caches hat und über ein oder zwei Dutzend dedizierter Anweisungen zugegriffen werden kann.
anrieff

Antworten:

4

Virtueller Speicher ist ein Konzept.

Wie anrieff sagt, haben Systeme, die virtuellen Speicher unterstützen, eine MMU, die das Mapping tatsächlich handhabt. Der Prozessor verwendet virtuelle Adressen. Dies kann eine beliebige Adresse im unterstützten 32- oder 64-Bit-Adressraum sein. Virtuelle Adressen sind nicht durch die Größe des physischen Speichers begrenzt.

Wie ich in meinem Kommentar erwähnt habe, muss der virtuelle Speicher auf nichts abgebildet werden. Es gibt zwei Arten von Tabellen:

  • das MMU-Seitentabellen Dies kann sich auf den realen physischen Speicher beziehen oder auch nicht, je nach dem "vorhandenen" Bit. Sie können Seiten haben, die nicht "vorhanden" sind; Die MMU weiß nicht, was sie möglicherweise enthält, und kümmert sich auch nicht darum, aber sie sind keinem echten physischen DRAM zugeordnet. Wenn Sie versuchen, auf eine davon zuzugreifen, generiert das System eine Seitenfehler zum Betriebssystem.

  • Das Betriebssystem verfolgt die Speicherzuordnung zu Prozessen und sich selbst und übernimmt die Verantwortung für die Behandlung von Seitenfehlern. Es kann entscheiden, was mit nicht vorhandenen Seiten geschehen soll, während der Prozess, der auf den Speicher zugreift, angehalten wird. Mögliche Auswahlmöglichkeiten sind:

Tauschen: Die Seite wird ausgetauscht. Ordnen Sie einen echten DRAM zu, lesen Sie ihn von der Festplatte und kehren Sie dann zum Prozess zurück.

Speicherzugeordnetes E / A: Ähnlich, aber Lesen aus einer bestimmten Datei.

PCI / AGP-Raum: Die Anforderung geht über den Bus an z. eine GPU statt Hauptspeicher.

Nullen: Entweder hält das Betriebssystem einen DRAM mit Nullen bereit, oder es stoppt, um Nullen auf eine Seite zu schreiben, bevor Sie ihn an Sie weitergeben.

Ungültig: Schließlich ist es durchaus möglich, dass das Betriebssystem überhaupt nicht zurückkehrt und nur den Prozess beendet, der diese Seite angefordert hat. Ein häufiges Beispiel ist "Überbelegung" des Linux-Speichers: Prozesse können mehr Speicher anfordern und zuweisen als verfügbarer DRAM + Swap-Speicher. Das ist in Ordnung, solange sie es nicht benutzen. Wenn sie tun Alle verwenden es und das System verfügt nicht mehr über genügend realen Speicher. Dadurch werden Prozesse abgebrochen, um das System wiederherzustellen. Andere Krisensituationen können das Zuordnen von E / A-Speicher zu einer Datei über das Netzwerk, die nicht mehr vorhanden ist, oder das Austauschen eines ausgefallenen Laufwerks sein.

Sie können eine unbrauchbare Seite absichtlich zuweisen (mmap-Option PROT_NONE unter Linux). Dies ist gelegentlich nützlich, um bestimmte Arten von Fehlern zu finden.

pjc50
quelle
Ich bin mir nicht 100% sicher, aber wenn IIRC, Linux Overcommit und OOM Killer zwei verschiedene Dinge sind: Möglicherweise hat Prozess A die Seite angefordert, die die Grenze von physischem Speicher + Swap überschritten hat. dann tritt der OOM-Killer ein, aber es könnte sich entscheiden, einen anderen Prozess, Prozess B, zu beenden, und am Ende wird eine gültige Seite an A geliefert ("hier ist die Seite, die Sie angefordert haben; es tut mir leid, dass Sie warten mussten, wir waren gerade beschäftigt andere Kunden zu töten, damit wir Ihnen dienen können ").
anrieff