2017-11-10 3 views
0

hier ein Zitat von verstehen Linux-Kernel Buch (Hervorhebung von mir)Kernel-Threads User-Space-Adresse

Zugriff auf ... keine Notwendigkeit, einen TLB-Eintrag ungültig zu machen, die einem Benutzer-Modus lineare Adresse bezieht, weil kein Kernel-Thread greift auf den Adressraum User Mode

ich den User-space-Prozess verstehen nicht den Kernel zugreifen können, aber warum umgekehrt (das, was ich den Satz denken, wird impliziert oben) wahr? Wird dies durch Hardware oder einfach eine Designauswahl des Kernels erzwungen?

Antwort

1

Der Satz ist falsch, aber in dem Zusammenhang ist es gut genug.

Der vollständige Zitat lautet:

In der Tat, jeder Kernel-Thread nicht über einen eigenen Satz von Seitentabellen; Stattdessen verwendet es den Satz von Seitentabellen, die zu einem normalen Prozess gehören. Es besteht jedoch keine Notwendigkeit, einen TLB-Eintrag ungültig zu machen, die zu einem Benutzermodus lineare Adresse bezeichnet, da kein Kernel-Thread den Benutzermodus-Adressraum zugreift

Was sie bedeuten Benutzer < Schalt -> Benutzer-Thread Änderungen Adressräume (Duh), aber User-Thread -> Kernel-Thread und Kernel-Thread -> Kernel-Thread tut NICHT als eine Optimierung. Kernel-Threads sind nicht an einen Benutzer-Thread gebunden, daher gibt es keinen bestimmten Benutzerbereich des Adressraums, auf den zuerst zugegriffen werden kann. Da die Dinge im Laufe der Zeit in unterschiedlicher Reihenfolge geplant werden und ein bestimmter Kernel-Thread nach zufälligen Benutzerthreads ausgeführt wird, wird die Ausführung mit verschiedenen Seitentabellen für den Benutzerteil fortgesetzt (Kernel-Teil bleibt gleich). Es gibt also keinen Zugriff auf einen Kernel-Thread im Benutzerbereich. Tun Sie einfach ps auxw und überprüfen Sie alle Sachen mit eingeschlossen in '[]'. Das sind Kernel-Threads.

Dies muss nicht mit Kernel Code Zugriff auf Benutzerraum verwechselt werden - das passiert die ganze Zeit, z.B. wenn ein Benutzer-Thread einen Syscall ausführt.

Ich sagte auch der Satz ist falsch, weil in speziellen Fällen ein Kernel-Thread explizit einen bestimmten Adressraum für die Verwendung festlegen kann. Dies wird von aio getan.

+0

Ich habe später im Buch eine Erklärung gefunden. "Kernel-Thread" unterscheidet sich hier von "Kernel-Modus-Ausführung" eines Benutzerprozesses. Dieser Thread ähnelt einem Worker-Thread für asynchrone Kernel-Tasks, wie das Zurückfordern von Speicher, verzögerbaren Interrupts usw. Da er nur einen Kernel-Job ausführt, benötigt er keinen Zugriff auf Benutzerbereich. – user1734905