Ist der MMU-Chip (Memory Management Unit) erforderlich, damit ein Prozessor den virtuellen Speicher unterstützt?

14

Ist der MMU-Chip (Memory Management Unit) erforderlich, damit ein Prozessor den virtuellen Speicher unterstützt?

Ist es möglich, MMU-Funktionalität in Software zu emulieren? (Mir ist bewusst, dass dies wahrscheinlich einen großen Einfluss auf die Leistung haben wird.)

yoyo_fun
quelle
Jeder voll funktionsfähige Computer kann jeden anderen Computer mit ausreichender Leistung emulieren. Oder emulieren Sie Hardware. Die einzige Frage ist die Höhe der Leistungseinbußen.
Vality
Jeder Prozessor benötigt heutzutage einen TLB und verfügt daher über eine eingebaute MM-Einheit.
Rastafile

Antworten:

22

Jeder Systememulator, der ein System emuliert, das eine MMU enthält, emuliert effektiv eine MMU in der Software. Die Antwort auf Ihre Frage lautet also "Ja". Für den virtuellen Speicher ist jedoch eine Möglichkeit erforderlich, die Speicherzugriffssteuerung oder zumindest die Adressumsetzung zu erzwingen. Daher ist entweder eine vollständige Softwareemulation der CPU erforderlich, auf der die gesteuerte Software ausgeführt wird, oder es ist Hardwareunterstützung erforderlich.

So können Sie möglicherweise ein System ohne MMU erstellen, QEMU portieren , die fehlenden Teile hinzufügen, um den virtuellen Speicher tatsächlich nützlich zu machen ( z. B. Unterstützung für Swap auf dem Host-System hinzufügen) und ein MMU-erforderliches Betriebssystem in QEMU ausführen. mit all dem Schutz, den Sie vom Gastbetriebssystem erwarten (mit Ausnahme von QEMU-Fehlern).

Ein echtes und altes Beispiel für eine MMU-freie „Emulation“ zur Bereitstellung von virtuellem Speicher ist die Z-Maschine , die in den späten siebziger und frühen achtziger Jahren in der Lage war, Code und Daten auf 8-Bit-Systemen zu pagen und auszutauschen . Dies funktionierte, indem ein virtueller Prozessor auf dem zugrunde liegenden realen Prozessor emuliert wurde. Auf diese Weise behält der Interpreter die volle Kontrolle über das Speicherlayout, das das laufende Programm „sieht“.

In der Praxis wird allgemein davon ausgegangen, dass eine MMU für die Unterstützung des virtuellen Speichers erforderlich ist, zumindest auf Betriebssystemebene. Wie angegeben MMU-weniger Kernel? Es ist möglich, den Linux-Kernel so zu erstellen, dass er auf Systemen ohne MMU ausgeführt werden kann. Die resultierende Konfiguration ist jedoch sehr ungewöhnlich und nur für sehr spezielle Anwendungsfälle geeignet (insbesondere ohne feindliche Software). Möglicherweise werden viele Szenarien, die virtuellen Speicher erfordern (Auslagerung, mmap...), nicht unterstützt .

Stephen Kitt
quelle
Haben Anwendungen für virtuelle Maschinen auch eine MMU-Emulatorkomponente?
yoyo_fun
Ja - nicht unbedingt als separate Komponente, aber sie haben die notwendige Unterstützung in der Emulation.
Stephen Kitt
7
@JenniferAnderson: Einige moderne CPUs verfügen über Funktionen, mit denen der Emulator die MMU-Emulation (teilweise) auf die MMU selbst verlagert. Wenn ein Programm, das in einem Emulator ausgeführt wird, selbst mehrere emulierte Speicherseiten verwendet, sind diese Speicherseiten natürlich in den vom Emulator verwendeten Speicherseiten "verschachtelt". Sowohl neuere High-End-Intel- als auch AMD-CPUs unterstützen verschachtelte Seitentabellen, mit denen der Emulator diese Verschachtelung innerhalb der MMU selbst ausdrücken kann, anstatt sie (teuer) emulieren zu müssen.
Jörg W Mittag
@ Jörg ja, danke für die Aufklärung. Die meisten Hypervisoren verfügen jedoch immer noch über ein gewisses Maß an Software-Emulation, sodass sie ohne die zusätzliche Hardware-Unterstützung funktionieren. Der Aspekt „Ist es möglich“ bei der Frage hat mich geblinzelt ;-).
Stephen Kitt
3
@JenniferAnderson: Ja, diese Funktionalität wurde speziell für die Paravirtualisierung eingeführt. (Beachten Sie, dass es in der Mainframe-Welt seit den frühen 1960er-Jahren keine neue hardwaregestützte Paravirtualisierung gibt.) Es hat sich jedoch herausgestellt, dass sie auch für andere interessante Anwendungen wie die Beschleunigung der Garbage Collection verwendet werden kann (siehe der C4-Kollektor in Azul's Zing JVM (als Beispiel). Beachten Sie jedoch, dass all dies in beide Richtungen funktioniert: So wie die Erweiterung von MMUs mit Virtualisierungsunterstützung nichts anderes ist als eine Leistungsoptimierung und Virtualisierung…
Jörg W Mittag
7

Es hängt davon ab, was Sie als virtuellen Speicher bezeichnen. Ein interessantes Modell ist das alte Win16-Modell (bekannt aus dem alten Windows 3.x, nicht Windows NT). In diesem Modell, Sie hatten GlobalLockund GlobalUnlock, LocalLockund LocalUnlockFunktionen. Dies war eine Form der kooperativen manuellen Verwaltung des virtuellen Speichers. Da dies in (Anwendungs-) Software durchgeführt wurde, war keine MMU erforderlich. Und der Speicher war in dem Sinne virtuell, dass entsperrter Speicher auf die Festplatte ausgelagert werden konnte.

Im Win16-Modell besteht jedoch kein Schutz zwischen verschiedenen Prozessen. Wenn ein anderer Prozess Daten im Speicher belässt, können Sie diese überschreiben. Dies ist keine grundsätzliche Einschränkung. Mit den heutigen schnellen SSDs können Sie einen nicht ausgeführten Prozess vollständig und in angemessener Zeit aus dem Speicher entfernen.

MSalters
quelle
7

Es ist nicht notwendig , eine Hardware-MMU zu haben, wenn Sie die Software das kann haben Swap - Prozesse zum und vom physischen Speicher.

Dies war die Funktionsweise früherer Multitasking-Betriebssysteme. Zu einem bestimmten Zeitpunkt befindet sich nur ein Prozess im Arbeitsspeicher. Er wird nach Ablauf der Zeitspanne vollständig ausgelagert (Sie sehen, dass dies bei großen Prozessen problematisch wird). Der Speicherinhalt, der vom aktuell ausgeführten Prozess angezeigt wird, ist nicht derselbe wie derjenige, der von einem anderen Prozess angezeigt wird, und jeder hat eine eigene Ansicht des Adressraums.

Eine gewisse Hardwareunterstützung ist hilfreich - die Vorstellung eines "geschützten" Speicherbereichs für die eigene Verwendung des Betriebssystems (z. B. alle Adressen mit gesetztem MSB sind nur im Supervisor-Modus zugänglich) und ein "break" -Wert, der die höchste verwendete Adresse, aber die Speicherverwaltung anzeigt Hardware ist keine zwingende Voraussetzung für virtuellen Speicher. es ist nur ein besonders effektiver Weg, dies zu erreichen.

Toby Speight
quelle
2
Das ist jedoch nicht wirklich virtueller Speicher, sondern nur Prozessaustausch ... (Wir müssten wirklich "virtuellen Speicher" definieren, um diese Frage richtig zu beantworten!)
Stephen Kitt,
Jeder Prozess hat eine eigene Ansicht des Adressraums - ich bearbeite sie, um die Definition zu verdeutlichen, die ich verwende.
Toby Speight
Richtig, aber es ist das gleiche Eins-zu-Eins-Mapping für alle Prozesse. (Aus der Sicht der Prozesse gibt es keinen großen Unterschied, daher gibt es dort kein wirkliches Argument ...)
Stephen Kitt
0

Die ursprünglichen kommerziellen Maschinen für VMs hatten keine MMU - sie hatten VMs in den Prozessor eingebaut. Meiner Meinung nach sind MMUs nur ein nachträglicher Gedanke, um VMs auf Nicht-VM-Prozessoren zu platzieren. VM wurde an der Universität Manchester entwickelt, und die Designer von Burroughs waren überzeugt, dass sie es einbeziehen sollten - obwohl es zu dieser Zeit sehr innovativ war.

Die Burroughs B5000 (jetzt Unisys MCP-Maschinen) verwendeten Speicherdeskriptoren, die Speichergrenzen erzwingen - gehen Sie über eine Grenze hinaus und Ihr Programm wird entleert (das Respektieren von Grenzen ist die Grundlage einer netten Gesellschaft, aber einige missbrauchen das Privileg, daher müssen Grenzen erzwungen werden).

Deskriptoren enthalten eine Speicheradresse, Blocklänge und einen Datentyp, aber auch das alles entscheidende P-Bit oder Präsenzbit. Das p-Bit zeigt an, dass sich der Block im Speicher befindet. Ein p-Bit von Null bedeutet, dass sich der Block im Massenspeicher befindet und die Adresse die Speicheradresse ist, entweder im ursprünglichen Programm (Code oder Daten) oder in der VM (ausgelagerte Daten).

Diese Maschinen implementierten ein hierarchisches Speichermodell. MMUs scheinen die Mängel des flachen Speichers auszugleichen und müssen Benutzerobjekte in den flachen Speicher abbilden. JK Iliffe entwarf auch ICL-Maschinen mit diesem Modell:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://en.wikipedia.org/wiki/Burroughs_large_systems

Der Unterschied zwischen diesen Maschinen und den meisten heutigen Maschinen besteht darin, dass sie sich auf die gesamte Systemarchitektur und nicht nur auf eine CPU-Architektur beziehen.

Es scheint also, dass nicht nur MMUs nicht notwendig sind, sondern auch Systeme ohne sie besser dran sind.

user3717661
quelle
-1

Die Mehrheit der Desktop-, Laptop- und Serverprozessoren enthält einen oder mehrere TLBs in der Speicherverwaltungshardware. Sie sind fast immer in jedem Prozessor vorhanden , der ausgelagerten oder segmentierten virtuellen Speicher verwendet .

Translation_lookaside_buffer

Und dann lesen Sie mehr über den virtuellen Speicher und wofür er wirklich gedacht ist. Der riesige virtuelle Adressraum ist nicht die Hauptidee. Hauptidee ist das Cachen / Puffern auf vielen Ebenen.

Es ist alles andere als einfach, aber dieser TLB-Speichercache ist ein wichtiges Hardwareteil, auf dem das mm-Subsystem des Kernels aufbaut (andernfalls wäre die VM weitgehend überlastet).


VM =

virtueller Speicher ODER virtuelle Maschine. Ganz anders, ganz verbunden.


Die Antwort lautet also nein, ein MMU- Chip (eine separate Einheit außerhalb der CPU auf dem Mainboard) ist nicht erforderlich.

Ja, einige Hardware-MMUs (in der CPU) sind erforderlich, um überhaupt über nützliche VMs nachzudenken. (Es begann mit dieser 8086- Segmentierung für die x86-Plattform)

Rastafile
quelle