Gehören Linux-Module/Treiber zum Kernel- oder zum Benutzerbereich?

Gehören Linux-Module/Treiber zum Kernel- oder zum Benutzerbereich?

In einigen Artikeln heißt es, dass Module/Treiber zum Kernelbereich gehören, da sie an der Bildung des Kernels beteiligt sind (Referenz:http://www.freesoftwaremagazine.com/articles/drivers_linux)

Andere wiederum sagen, dass nur Ring0 (direkte Interaktion mit der Hardware) als Kernelspeicher bezeichnet werden kann (Module/Treiber sind ausgeschlossen, da sie sich in Ring2 befinden). (Referenz:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)

Kann mir jemand sagen, welcher Standpunkt richtig ist?

Antwort1

Auf AMD64 und Klonen sowie ix86 verwendet Linux nur Ring 0 und 3. Keine andere gängige Architektur hat die „Ringe“, daher wäre ihre vollständige Nutzung absolut nicht portierbar. Außerdem ist Linux monolithisch. Die ganze Ringidee besteht darin, den Mikrokernel auf Ring 0 ausführen zu können und Serviceprozesse auf höheren Ringen laufen zu lassen, damit sie den Mikrokernel nicht durcheinanderbringen können, und schließlich den Benutzerbereich im höchsten Ring laufen zu lassen, wo er nicht viel Schaden anrichten kann.

Antwort2

Könnten Sie eine Referenz angeben? Ich gehe davon aus, dass Sie von Linux sprechen, das (soweit ich weiß) nur die Ringe 0 (Kernel) und 3 (Benutzer) verwendet.

BEARBEITEN:

Ich denke, es hängt vom Design des Betriebssystems ab. Sie könnten die inneren Ringe beispielsweise in einer Mikrokernel-Architektur verwenden. Fragen Sie nach einem bestimmten System (z. B. Linux)? Ich glaube, diese Frage kann nur für ein bestimmtes Betriebssystem beantwortet werden. In den meisten Fällen verwenden x86-basierte Betriebssysteme jedoch nur „Kernel“ (0) und „Benutzer“ (3).

Antwort3

Bei einem herkömmlichen Betriebssystem (das nicht unter Virtualisierung läuft) sind Kernel Space und Ring0 in Bezug auf die Berechtigung gleichbedeutend. Ich muss sie jedoch separat erklären, um die vorhandenen Unterschiede und Gemeinsamkeiten hervorzuheben.

Kernel space- Das Betriebssystem verfügt normalerweise über zwei Ausführungsmodi: Kernel-Space und User-Space. Im Kernel-Space befindet sich der privilegierte Code des Betriebssystems wie Scheduler, Gerätetreiber usw. Seine Aufgabe besteht darin, das Gesamtsystem zu verwalten und sicherzustellen, dass es stabil läuft. Der User-Space enthält Prozesse wie Webbrowser usw., die die vom Kernel-Space bereitgestellte Funktionalität nutzen.

Rings- Intel-Prozessoren verfügen über 4 Berechtigungsstufen. Diese werden Ringe genannt. Ring 0 ist die privilegierteste Stufe, Ring 3 die privilegierteste. Jeder Bereich des Computerspeichers kann mit diesen Stufen markiert werden. Wenn ein Speicherbereich für den Zugriff durch Ring0 markiert ist, kann nur Code, der sich in Ring0 befindet, darauf zugreifen; ein Speicherbereich, der für den Zugriff durch Ring3 markiert ist, kann von allen Ringen aus aufgerufen werden. Dies stellt einen Mechanismus bereit, der sicherstellt, dass, wenn Sie weniger vertrauenswürdigen Code in niedrigeren Berechtigungsstufen (höherer Ring) und vertrauenswürdigeren Code in höheren Berechtigungsstufen (niedrigerer Ring) ausführen, ersterer Code letzteren nicht beeinflussen kann. Welcher Code in welchem ​​Ring (Berechtigungsstufe) ausgeführt wird, kann programmgesteuert festgelegt werden.

Um das Design zu vereinfachen und den Code portierbar zu machen (nicht von Intel stammende CPUs wie ARM haben keine 4-Ring-Architektur), verwenden die meisten Betriebssysteme nur zwei der 4 Ringe. Dies sind normalerweise Ring0 und Ring3. Der Kernel läuft in Ring0 und bildet den Kernel-Speicherplatz (beachten Sie, dass, wenn der Betriebssystementwickler den Kernel morgen so konfiguriert, dass er in Ring1 statt in Ring0 läuft, Ring1 den Kernel-Speicherplatz bildet). Anwendungsprogramme laufen in Ring3 und bilden den Benutzerspeicherplatz.

Dies ist die Konvention, der die meisten Betriebssysteme folgen. Wenn ich jedoch der Betriebssystementwickler bin, kann ich die Ringarchitektur beliebig verwenden. Betrachten Sie die folgenden Szenarien:
(KS=Kernelspeicher,UNS=Benutzerbereich,DD=Gerätetreiber oder Kernelmodule,rX= Ring X)

  1. KSin r0,UNSin R3 – am häufigsten verwendet, z. B. Linux, Windows usw.
  2. KSin r1,UNSin R3 – virtualisiertes Setup, bei dem der Hypervisor im Ring0 läuft.
  3. KSin r0,DDin r1,UNSin r3 – Einige Forschungsprojekte verwenden diese Konfiguration, um den Kernel vor fehlerhaften Gerätetreibern zu schützen.
  4. KSin r0,DDin r3,UNSin r3 – Mikrokernel verwenden diese Konfiguration.
  5. KSin r0,UNSin r0 – alles im selben Ring. Einige Forschungsbetriebssysteme wie Microsofts Singularity verwenden diese Konfiguration. KS ist durch andere Mechanismen vor US geschützt. (Ältere Betriebssysteme wie MS DOS, Windows 98 usw. verwendeten dies. KS war nicht vor US geschützt, daher kam es häufig zu Betriebssystemabstürzen.)
  6. KSin r3,UNSin r0 – Absurd. Wenn wir den USA mehr Privilegien geben, können wir KS beschädigen. Ich habe noch nie eine solche Konfiguration gesehen, aber wenn ich ein solches Betriebssystem schreiben möchte, hält mich nichts davon ab.

Hinweis: Ich habe beim Schreiben einige Vereinfachungen vorgenommen, z. B. die Bezeichnung der x86-Architektur als Intel-CPUs. Kümmern Sie sich jetzt nicht um die Einzelheiten.

verwandte Informationen