2014-09-24 23 views
6

Ich habe eine Frage über die Beziehung zwischen Linux Kernel und MMU. Ich habe jetzt einen Punkt, dass der Linux-Kernel Seitentabelle zwischen virtuellen Speicheradressen und physikalischen Speicheradressen verwaltet. Zur gleichen Zeit gibt es MMU in x86-Architektur, die Seitentabelle zwischen virtuellen Speicheradressen und physischen Speicheradressen verwaltet. Wenn MMU in der Nähe der CPU ist, muss der Kernel sich noch um die Seitentabelle kümmern?Linux Seite Tabellenverwaltung und MMU

Diese Frage kann dumm sein, aber die andere Frage ist, wenn MMU kümmert sich um Speicherplatz, der hohe Speicher und wenig Speicher verwaltet? Ich glaube, dass der Kernel die Größe des virtuellen Speichers von MMU (4GB in 32bit) bekommen wird, dann wird der Kernel zwischen dem Benutzerbereich und dem Kernelraum in der virtuellen Adresse unterscheiden. Bin ich richtig? oder völlig falsch?

Vielen Dank im Voraus!

+0

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. –

+0

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. –

Antwort

5

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.

+1

Genauer gesagt scheint es angebracht, den Teil der Frage nach der Trennung von Kernel und Userspace anzusprechen. (Ich denke * Linux verwendet (globale) negative Adressen für den Kernelraum, und für x86 benötigt man eine Seite oben in der hierarchischen Seitentabelle (pro Adressraum), deren obere (negative) Hälfte Kerntabellen abbildet unterstützt eine separate globale Seitentabelle, die vermutlich vom Linux-Kernel verwendet wird Die Hash-Seitentabelle von Power wird von Linux nicht für die Haupttabelle verwendet, das neuere Verzeichniseintrag-Caching-System passt in das Haupttabellenformat von Linux. –