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?
x86
cpu
privileges
user541686
quelle
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
-
irgendwo etwas verpasst . Sind Sie sicher, dass Hypervisoren Ring 1 verwenden?