Die Verantwortlichkeiten für das OS- und MMU-Seitenmanagement sind zwei Seiten desselben Mechanismus, der an der Grenze zwischen Architektur und Mikroarchitektur lebt.
Die erste Seite definiert den "Vertrag" zwischen der Hardware und der Software, die darüber läuft (in diesem Fall das Betriebssystem). Wenn Sie virtuellen Speicher verwenden möchten, müssen Sie eine Seitentabelle wie in beschrieben erstellen und pflegen dieser Vertrag. Die MMU-Seite hingegen ist eine Hardwareeinheit, die für die Ausführung der HW-Aufgaben der Adressumsetzung verantwortlich ist. Dies kann Hardware-Optimierungen beinhalten oder auch nicht, diese sind normalerweise verborgen und können auf verschiedene Arten implementiert werden, um unter der Haube zu laufen, solange sie die Hardware-Seite des Vertrags beibehält.
Theoretisch kann die MMU entscheiden, für jede Übersetzung (einen Seitenwechsel) eine Reihe von Speicherzugriffen auszugeben, um das erforderliche Verhalten zu erreichen. Da es jedoch ein leistungskritisches Element ist, optimieren die meisten MMUs dies, indem sie die Ergebnisse früherer Seitenwanderungen innerhalb des TLB zwischenspeichern, genau wie ein Cache die Ergebnisse früherer Zugriffe speichert (tatsächlich können die Caches selbst bei einigen Implementierungen auch einige davon speichern die Zugriffe auf die Seitentabelle, da sie normalerweise im cache-fähigen Speicher liegt. Die MMU kann mehrere TLBs verwalten (die meisten Implementierungen trennen die für Daten- und Codepages, und einige haben TLBs der zweiten Ebene) und stellen die Übersetzung von dort bereit, ohne dass Sie dies bemerken, außer für die schnellere Zugriffszeit.
Es sollte auch beachtet werden, dass die Hardware gegen viele Ecken Fälle schützen muss, die die Kohärenz von solchen TLB "Caching" von früheren Übersetzungen, zum Beispiel Seiten Aliasing oder Neuabbildungen während der Verwendung beeinträchtigen können. Auf manchen Maschinen erfordern die ärgerlichen Fälle sogar einen massiven Flush-Flow, TLB-Shootdown genannt.
Linux kann auf Hardware ohne MMU laufen, also muss der Kernel wissen, wie man eine Übersetzung macht, aber auf x86 glaube ich, es benutzt einfach MMU dafür. –
Ich bin nach Gennadis Kommentar an zweiter Stelle. Auf x86-Architektur kümmert sich MMU darum, virtuelle Adressen in physikalische Adressen zu übersetzen, aber der Kernel behält immer im Auge, welche Seiten zum Kernel gehören und welche Seiten zu den Benutzerprozessen gehören. Ich glaube, [this] (http://www.tldp.org/LDP/tlk/mm/memory.html) könnte helfen, etwas Licht in die Funktionsweise der Dinge zu bringen. –