de.phhsnews.com


de.phhsnews.com / Warum verwenden x86-CPUs nur zwei von vier "Ringen"?

Warum verwenden x86-CPUs nur zwei von vier "Ringen"?


Wenn Sie mehr darüber erfahren, wie Betriebssysteme und die Hardware, auf der sie ausgeführt werden, funktionieren und miteinander interagieren, werden Sie überrascht sein um zu sehen, was Kuriositäten oder eine unzureichende Nutzung von "Ressourcen" zu sein scheint. Warum das? Der heutige SuperUser Q & A Post hat die Antwort auf die Frage eines neugierigen Lesers.

Die heutige Question & Answer Session kommt uns dank SuperUser - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites - zu Gute Lemsipmatt (Flickr).

Die Frage

SuperUser-Reader AdHominem möchte wissen, warum x86-CPUs nur zwei von vier Ringen verwenden:

Linux- und Windows-basierte x86-Systeme verwenden nur

Ring 0 Kernel-Modus und Ring 3 für den Benutzermodus. Warum unterscheiden Prozessoren sogar vier verschiedene Ringe, wenn sie alle nur zwei davon verwenden? Hat sich das mit der AMD64-Architektur geändert? Warum benutzen x86-CPUs nur zwei von vier Ringen?

Der Antwort

SuperUser-Mitwirkende Jamie Hanrahan hat die Antwort für uns:

Dafür gibt es zwei Hauptgründe.

Der erste ist, dass die x86-CPUs zwar vier Speicherschutzringe bieten, die Granularität des Schutzes jedoch nur auf Segmentebene liegt. Das heißt, jedes Segment kann zusammen mit anderen Schutzfunktionen wie Schreib-deaktiviert auf einen bestimmten Ring (Privilegstufe) gesetzt werden. Aber es gibt nicht so viele Segmentdeskriptoren. Die meisten Betriebssysteme wünschen sich eine feinere Granularität des Speicherschutzes, wie ... für einzelne Seiten.

Geben Sie also einen tabellenbasierten Schutz ein. Die meisten, wenn nicht alle modernen x86-Betriebssysteme ignorieren den Segmentierungsmechanismus mehr oder weniger (so viel wie sie können) und verlassen sich auf den Schutz, der von den niederwertigen Bits in Seitentabelleneinträgen verfügbar ist. Einer davon wird als "privilegiertes" Bit bezeichnet. Dieses Bit steuert, ob der Prozessor in einer der "privilegierten" Ebenen sein muss, um auf die Seite zuzugreifen. Die "privilegierten" Ebenen sind

PL 0, 1 und 2 . Aber es ist nur ein Bit, so dass auf der Seite-für-Seite-Schutzebene die Anzahl der verfügbaren "Modi" für den Speicherschutz nur zwei ist: Eine Seite kann vom nicht-privilegierten Modus aus zugänglich sein oder nicht. Daher nur zwei Ringe. Um vier mögliche Ringe für jede Seite zu haben, müssten sie zwei Schutzbits in jedem Seitentabelleneintrag haben, um eine von vier möglichen Ringnummern zu codieren (genau wie die Segmentdeskriptoren). Allerdings nicht. Der andere Grund ist der Wunsch nach Betriebssystem-Portabilität. Es geht nicht nur um x86; Unix hat uns gelehrt, dass ein Betriebssystem für mehrere Prozessorarchitekturen relativ portabel sein kann, und dass es eine gute Sache war. Und einige Prozessoren unterstützen nur zwei Ringe. Da die Betriebssysteme nicht von mehreren Ringen in der Architektur abhängig sind, haben die Betriebssystemimplementierer die Betriebssysteme portabler gemacht.

Es gibt einen dritten Grund, der spezifisch für die Windows NT-Entwicklung ist. Die Entwickler von NT (David Cutler und sein Team, das Microsoft von DEC Western Region Labs eingestellt hatte) verfügten über umfangreiche Erfahrungen mit VMS. Tatsächlich gehörten Cutler und einige andere zu den ursprünglichen Designern von VMS. Und der VAX-Prozessor, für den VMS entwickelt wurde, hat vier Ringe (VMS verwendet vier Ringe).

Aber die Komponenten, die in VMS

Ringe 1 und 2 (Record Management Services und die CLI) ausgeführt wurden " Ring 2 in VMS ging es nicht wirklich um die Betriebssystemsicherheit, sondern darum, die CLI-Umgebung des Benutzers von einem Programm zum nächsten zu erhalten, und Windows hatte dieses Konzept nicht; Das CLI wird als normaler Prozess ausgeführt. Wie bei VMS's Ring 1 musste der RMS-Code in Ring 1 ziemlich oft in Ring 0 anrufen, und Ringübergänge sind teuer. Es erwies sich als viel effizienter, einfach zu Ring 0 zu gehen und damit fertig zu werden, anstatt viele Ring 0 Übergänge innerhalb des Ring 1 zu haben Code (wieder, nicht, dass NT sowieso etwas wie RMS hat). Warum x86 vier Ringe implementiert hat, während Betriebssysteme diese nicht verwendeten, handelt es sich um Betriebssysteme, die wesentlich aktueller sind als x86. Viele der Systemprogrammierungsfunktionen von x86 wurden entworfen, lange bevor NT oder echte Unix-ish-Kernel darauf implementiert wurden, und sie wussten nicht wirklich, was das Betriebssystem verwenden würde. Erst als wir auf x86 pagingten, konnten wir echte Unix-ish- oder VMS-artige Kernel implementieren.

Moderne x86-Betriebssysteme ignorieren nicht nur die Segmentierung (sie richten nur die C-, D- und S-Segmente ein) eine Basisadresse von 0 und eine Größe von 4 GB; F- und G-Segmente werden manchmal verwendet, um auf wichtige Betriebssystemdatenstrukturen zu zeigen), sie ignorieren auch weitgehend Dinge wie "Taskstatussegmente". Der TSS-Mechanismus wurde eindeutig für das Thread-Kontext-Switching entworfen, aber es stellt sich heraus, dass es zu viele Nebenwirkungen hat, so dass moderne x86-Betriebssysteme es "von Hand" machen. Das einzige Mal, an dem x86 NT Hardware-Aufgaben ändert, sind einige wirklich außergewöhnliche Bedingungen, wie zum Beispiel eine Doppelfehler-Ausnahme.

In Bezug auf die x64-Architektur wurden viele dieser nicht verwendeten Funktionen weggelassen. Zu ihren Gunsten hat AMD tatsächlich mit Betriebssystem-Kernelteams gesprochen und gefragt, was sie von x86 benötigten, was sie nicht brauchten oder nicht wollten und was sie hinzufügen wollten. Segmente auf x64 existieren nur in einer Form, die man als Restform bezeichnen könnte, Task-State-Switching existiert nicht, usw., und Betriebssysteme verwenden weiterhin nur zwei Ringe.

Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.



Wie erkennen Hard-Drive-Diagnose-Tools, ob ein Sektor schlecht ist oder nicht?

Wie erkennen Hard-Drive-Diagnose-Tools, ob ein Sektor schlecht ist oder nicht?

Niemand denkt gerne über eine Festplatte schlecht, weniger Probleme mit einem, aber wie Festplatten-Diagnose-Tools wissen eigentlich, ob Sektoren schlecht sind oder nicht? Der heutige SuperUser Q & A-Post hat Antworten auf Fragen eines neugierigen Lesers. Die heutige Frage-Antwort-Sitzung kommt dank SuperUser zustande - einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites.

(how-to)

Was ist

Was ist "Kompatibilitätsmodus" in Microsoft Office?

Wenn Sie ein Dokument öffnen, das in einer älteren Version von Microsoft Word, Excel oder PowerPoint in einer modernen Office-Version erstellt wurde, sehen Sie möglicherweise "Compatibility Mode" erscheint nach dem Namen des Dokuments in der Titelleiste. Dies ändert die Art und Weise, wie das Dokument angezeigt wird, und verhindert, dass Sie einige moderne Funktionen verwenden.

(how-to)