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.)
Antworten:
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 .quelle
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
GlobalLock
undGlobalUnlock
,LocalLock
undLocalUnlock
Funktionen. 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.
quelle
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.
quelle
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.
quelle
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)
quelle