CPU-Berechtigungsringe: Warum werden die Ringe 1 und 2 nicht verwendet?

102

Einige Fragen zu den x86-CPU-Berechtigungsringen:

  • Warum werden die Ringe 1 und 2 von den meisten Betriebssystemen nicht verwendet? Ist es nur, um die Codekompatibilität mit anderen Architekturen aufrechtzuerhalten, oder gibt es einen besseren Grund?

  • Gibt es Betriebssysteme, die diese Ringe tatsächlich verwenden? Oder sind sie völlig unbenutzt?

user541686
quelle

Antworten:

109

Als Verfasser von Hobby-Betriebssystemen stellte ich fest, dass der Nutzen für die Ringe 1 und 2 erheblich verringert wurde, da Paging (ein wesentlicher Teil des modernen Schutzmodells) nur ein Konzept von privilegiert (Ring 0,1,2) und nicht privilegiert hat.

Die Absicht von Intel, die Ringe 1 und 2 zu haben, besteht darin, dass das Betriebssystem Gerätetreiber auf diese Ebene bringt, damit sie privilegiert, aber etwas vom Rest des Kernel-Codes getrennt sind.

Die Ringe 1 und 2 sind in gewisser Weise "meistens" privilegiert. Sie können auf Supervisor-Seiten zugreifen, aber wenn sie versuchen, eine privilegierte Anweisung zu verwenden, werden sie weiterhin wie Ring 3 GPF-fähig. Es ist also kein schlechter Ort für Fahrer, wie Intel es geplant hat ...

Das heißt, sie haben definitiv Verwendung in einigen Designs. In der Tat nicht immer direkt vom Betriebssystem. Zum Beispiel setzt VirtualBox , eine virtuelle Maschine , den Gastkernelcode in Ring 1. Ich bin mir auch sicher, dass einige Betriebssysteme sie verwenden. Ich denke nur, dass es im Moment kein beliebtes Design ist.

Evan Teran
quelle
28
wHOA VirtualBox verwendet Ring 1?! Das ist pure Großartigkeit !! Vielen Dank für die Info, das ist eine tolle Antwort! +1
user541686
10
OS / 2 verwendete Ring 2 ausgiebig für E / A-Code. Deshalb ist es so schwer zu virtualisieren.
Kinokijuf
Von superuser.com/questions/1402537/… : "Das Ausführen von Ring 0-Code in Ring 1 verursacht viele zusätzliche Anweisungsfehler, da Ring 1 keine privilegierten Anweisungen ausführen darf, von denen Ring-0 des Gastes reichlich enthält Von diesen Fehlern muss der VMM eingreifen und den Code emulieren, um das gewünschte Verhalten zu erzielen. Während dies funktioniert, ist das Emulieren von Tausenden dieser Fehler sehr teuer und beeinträchtigt die Leistung des virtualisierten Gasts erheblich. "
Dustin Oprea
23

Aus Sicht des Betriebssystemdesigns ist es eine Seltsamkeit von x86, mehrere privilegierte Ringe zu haben - die meisten anderen CPUs haben nur zwei Modi (Supervisor und Benutzer). Wenn Sie ein Betriebssystem so gestalten, dass mehrere privilegierte Modi erforderlich sind, wird sofort verhindert, dass es auf eine andere CPU portiert wird. Darüber hinaus emulieren viele moderne Virtualisierungspakete andere Berechtigungsstufen als 0 und 3 nicht korrekt, was das Testen von Betriebssystemen, die diese Stufen verwenden, erheblich erschwert.

Dämmerung -inaktiv-
quelle
7

Laut der Wikipedia-Seite zu Ringsicherheit werden die Ringe 1 und 2 für Treiber (Ring 1), Gastbetriebssysteme (Ring 1) und privilegierten E / A-Code (Ring 2) verwendet. Hypervisoren befinden sich in -1/0 (abhängig von) das Hypervisier) nicht 1, wie ich zuvor angegeben habe.

Die zusätzlichen zwei Ringe halfen jedoch nie wirklich und wurden daher selten verwendet. TBH, die meisten Codes, die die Ringe 1 und 2 verwenden, haben sie von ihrer ursprünglichen Verwendung (wie den Hypervisoren) teilweise umfunktioniert. Die meisten Windows-Codes scheinen das System heutzutage so zu behandeln, dass es nur zwei Ebenen hat (Kernel und Benutzer), wahrscheinlich aufgrund des Overheads, der mit dem Betreten und Verlassen des Kernellandes verbunden ist.

Necrolis
quelle
1
Ich denke du hast -irgendwo etwas verpasst . Sind Sie sicher, dass Hypervisoren Ring 1 verwenden?
user541686
Heh, dachte nicht, sollte Hyper-Visiere in -1 und Gast-Betriebssysteme in 1 sein, wird das schnell aktualisieren
Necrolis
4
Windows verwendet nur zwei Ringe, da es für die Ausführung auf anderen (inzwischen nicht mehr funktionierenden) Prozessoren konzipiert wurde, die nur zwei hatten.
David
In meinen Augen ist das Umschalten der Modi mit wenig Aufwand verbunden. Soweit ich weiß, kann nur die Hardware der CPU mehr privilegierte Berechtigungen zuweisen (z. B. wenn ein Interrupt mit E / A-Abschluss aufgetreten ist). Wenn diese Berechtigungsumschaltung in der Hardware erfolgt, bezweifle ich, dass es nicht trivial ist, Ringe zu wechseln. Ich denke, Windows, Linux oder MacOS verwenden nur die beiden extremsten Ringe, da die Architekten die mittleren Ringe für Dinge wie die von OS gehostete Virtualisierung reservieren.
Nate Symer