Wozu muss die virtuelle Adresse in eine physische Adresse übersetzt werden?

Dies sind die Punkte, die ich in der Memory Management Unit der ARM-Architektur gelesen habe:

  1. Virtuelle Adressen (oder logische Adressen) sind Adressen, die Prozessen vom Betriebssystem bereitgestellt werden.
  2. Ein virtueller Adressraum pro Prozess
  3. Programme verwenden virtuelle Adressen. Während ein Programm läuft, wandelt die Hardware (mit Hilfe des Betriebssystems) jede virtuelle Adresse in eine physikalische Adresse um.
  4. Die Umwandlung einer virtuellen Adresse in eine physische Adresse wird als Adressübersetzung bezeichnet
  5. Wenn die MMU ausgeschaltet ist, wirkt das Virtuelle als Ausgang auf die physikalische Adresse.

Nachdem ich den fünften Punkt gelesen habe, möchte ich verstehen, warum die Adressübersetzung erforderlich ist. Liegt es daran, dass der virtuelle Speicher kleiner ist als der physische Speicher? Und warum/wann würde die MMU ausgeschaltet?

Stellen Sie sich zwei Prozesse vor, die dieselbe virtuelle Adresse für eine ihrer Variablen haben.
Es hört sich so an, als würden Ihnen die Grundlagen des virtuellen Speichers und der virtuellen Adressierung fehlen. Haben Sie den Wikipedia-Artikel dazu gelesen und verstanden?
@PlasmaHH Oh! Warum tritt dieser Fall auf?
@TonyM Ja, ich habe gelesen, bevor ich gepostet habe (auch von anderen Websites), aber da du es erwähnt hast, werde ich es noch einmal durchgehen (vielleicht habe ich etwas verpasst, was du sagst).

Antworten (1)

Die Übersetzung virtueller Adressen ist aus mehreren Gründen erforderlich:

  1. Es kann mehr RAM adressiert werden als zur Verfügung steht. Beispielsweise kann die CPU in meinem Laptop 256 TB Speicher adressieren, während sie nur 8 GB Speicher hat. Dieser zusätzliche Adressraum ermöglicht es dem Kernel, weit mehr Speicher zuzuweisen, als verfügbar ist, und er kann Seiten für Anwendungen, die nicht verwendet werden, auf die Festplatte auslagern.

  2. Die Übersetzung virtueller Adressen verhindert eine Speicherfragmentierung. Stellen Sie sich ein Programm vor, das große Objekte von der Größe einer Speicherseite häufig zuweist und freigibt. Wenn die Adressen physisch wären, würde der Speicherplatz schnell fragmentiert, ohne dass große Speicherbereiche frei wären. Der Kernel kann jedoch die virtuellen und physischen Adressen neu zuordnen, sodass immer ein großer Teil des Speichers frei ist, und wenn ein Teil des Adressraums fragmentiert ist, na und? Nur die verwendeten Speicherseiten müssen durch physischen Speicher unterstützt werden, und es gibt viel Adressraum für neue Zuordnungen.

  3. Virtuelle Adressen bieten mehr Sicherheit. Erinnern Sie sich an die CPU-Bugs Anfang dieses Jahres, Spectre und Meltdown? Sie verlassen sich darauf, einige Informationen über die Zuordnung virtueller Adressen für verschiedene Prozesse und den Kernel zu kennen. Wenn Sie die virtuelle Adressierung deaktivieren, werden sie und andere Angriffe viel einfacher, weil Sie dann die Adressen des Kernels und anderer Prozesse kennen.

Warum Sie die MMU ausschalten würden, kann ich nur vermuten, dass es sich auf den Zustand der MMU während des Starts des Prozessors bezieht, bevor der Kernel die Seitentabelle eingerichtet hat. Sie würden die MMU während des normalen Betriebs eines Betriebssystems nicht ausschalten.

Es ist ein ARM, es wird oft ohne Betriebssystem oder mit einem RT-Betriebssystem ausgeführt, das sich nicht um die Speichertrennung kümmert.
Richtig, aber wenn der ARM eine MMU hat, ist es keiner der Cortex-M-Mikrocontroller, also ist es nicht unvernünftig, ein Betriebssystem darauf zu setzen. Und wenn Sie eines ohne Multitasking-Betriebssystem verwenden, spielt die MMU wirklich keine Rolle und wird wahrscheinlich nicht verwendet.
Das stimmt nicht ganz. Auf (einigen?) ARMs funktioniert der Datencache nicht ohne aktivierte MMU.