x86-Programmierung und -Betriebsarten (Teil 4)

Segmentselektor

Der Selektor ist wie im Real Mode 16 Bit lang und wird in einem 16-Bit-Segmentregister gespeichert. Die beiden niederwertigsten Bits 0 und 1 geben die Selektor- oder geforderte Privilegierungsstufe an (RPL: Requested Privilege Level), ab der ein Programm auf das Segment zugreifen darf - wir sind hier erstmals mit einer Zugriffsprüfung des Protected Modes konfrontiert.

Der Wert des Feldes RPL im Segmentselektor des Code-Segments CS wird als gegenwärtige Privilegierungsstufe oder Current-Privilege-Level (CPL) bezeichnet, da dem gegenwärtig aktiven Programmcode diese Privilegierungsstufe zugewiesen ist. Das aktive Programm kann also auf Datensegmente zugreifen, deren Wert der Privilegierungsstufe gleich oder größer als CPL ist. Dabei kann der Wert von RPL größer als CPL sein, das heißt auf das vom Selektor festgelegte Segment wird mit einer geringeren Privilegierungsstufe zugegriffen. Der größere der beiden Werte CPL und RPL definiert die effektive Privilegierungsstufe (EPL) des Tasks.

Der Prozessor (ab 80286) kennt insgesamt vier Privilegierungsstufen (PL) 0 bis 3. Die Null kennzeichnet die höchste und die drei die niedrigste Stufe. Beachten Sie also, dass ein größerer Wert eine niedrigere Privilegierung und umgekehrt bedeutet. Ein RPL mit dem Wert 0 schränkt also die Privilegierungsstufe eines Tasks nicht ein, wohingegen ein Selektor mit einem RPL von 3 unabhängig vom CPL nur Segmente ansprechen kann, die eine Privilegierungsstufe von 3 aufweisen.

Programme mit niedrigerer Privilegierungsstufe (höherem CPL) dürfen nur in Ausnahmefällen auf Segmente mit höherer Stufe (kleinerem CPL) zugreifen. Hierzu dienen so genannte Gates (Tore). Damit wird der Schutz (Protection) innerhalb eines Tasks durch die verschiedenen Privilegierungsstufen vermittelt.