Protected Mode

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Der Begriff protected mode (englisch; deutsch: geschützter Modus oder Schutzmodus), bezeichnet einen speziellen Betriebsmodus der IA-32-Architektur (auch als x86-Architektur bekannt) von Intel, der seit dem 80286er Prozessor vorhanden ist. Er erlaubt die Begrenzung von Speicherzugriffsrechten für verschiedene Software, außerdem erhöhte sich mit ihm der direkt zugreifbare Speicher auf 16 MB Hauptspeicher (16-Bit Protected Mode). Mit dem 80386er und dem 32-Bit Protected Mode wurde der lineare Zugriff auf bis zu 4 GB Hauptspeicher möglich. Der Protected Mode wird von allen modernen PC-Betriebssystemen (bei Microsoft fakultativ bereits seit Windows 2.0, zwingend seit Windows 3.1 und Windows NT 3.1; bei IBM seit OS/2, von Apple seit Umstellung auf die Intel-Plattform, also mit OSX 10.4.4) verwendet.

Hintergründe und Idee[Bearbeiten]

Segmentdeskriptortabelle im Protected Mode

Ursprünglich existierte nur der Real Mode auf der 8086-Architektur, der aus Kompatiblitätsgründen immer noch bei aktuellen x86 32-bit Prozessoren der Startmodus ist, so dass ältere Betriebssysteme wie DOS lauffähig sind.[1] In diesem Modus gab es keine Speicherschutzmechanismen oder Policies, das Betriebssystem und auch jedes einzelne Programm konnte jederzeit sowohl lesend wie schreibend auf jede Speicheradresse zugreifen. Dies bedeutet die unrealistische Anforderung der völligen Fehlerfreiheit an Software, da schon ein einziger fehlerhafter Zugriff auf eine Adresse einer anderen Software (z. B. des Betriebssystems) zu Datenverlust oder Instabilität des gesamten Systems führen kann.

Um diese Situation zu entschärfen, wurden Mechanismen eingeführt, mit denen die Zugriffsrechte von Programmen auf verschiedene Speicherbereiche feingranularer einzustellen und zu vergeben sind, um also Speicherschutz zwischen verschiedener Software zu erzeugen.

Konzept und Charakteristika[Bearbeiten]

Aus Kompatiblitätsgründen entschied sich Intel für die virtuelle Speicherverwaltung als Methode, da hier jedem Programm durch die MMU weiterhin ein vollständiger Adressraum wie im Real-Mode vorgegaukelt werden kann. Jedes Programm wird in seiner eigenen, von anderer Software abgeschotteten Kopie des physischen Adressraums ausgeführt. Betriebssystembereiche (typischerweise im oberen Bereich des Adressraums 2 bis 4 GiB) können mit einer höheren Befugnisstufe ausgestattet sein (engl. „privilege level“). Dies ermöglicht unter anderem die Unterscheidung zwischen Kernel-Modus und Benutzer-Modus, welche in modernen Betriebssystemen umgesetzt ist.

Im Protected Mode unterstützt die CPU sowohl Segmentierung (ab 286er) als auch Paging (ab 386er) sowie den namensgebenden Speicherschutz mit vier verschiedenen Schutzebenen auf Segmentebene und zwei Schutzebenen auf Page-Ebene. Die vier verschiedenen im x86-Schutzmodus existierenden und als Ringe bezeichneten Schutzebenen bzw. Befugnisstufen (engl. „privilege level“) gewähren den darauf ablaufenden Codesegmenten unterschiedliche Rechte. Dadurch wird verhindert, dass fehlerhafte oder böswillige Anwendungsprogramme das Betriebssystem überschreiben und somit verändern oder zum Absturz bringen können, oder Daten anderer Programme ausspähen können, was auf dem 8086er-Prozessor noch ohne weiteres möglich war und nicht verhindert werden konnte. Ein Prozessor schaltet in den Protected Mode um, indem das Protection Enable (PE) bit im Control Register 0 (CR0) gesetzt wird.[2] Ferner gibt es im Protected Mode seit dem Intel 80386er einen Sondermodus, den Virtual 8086 Mode (Virtual Real Mode), der zur Ausführung von Real-Mode-Programmen im Protected Mode eingebaut wurde.

16-Bit Protected Mode[Bearbeiten]

Beim 286er wurde der so genannte „16-Bit Protected Mode“ eingeführt. Damit konnten maximal 16 MB physischer Hauptspeicher über 2 Tabellen mit jeweils 8192 Segmenten zu je maximal 64 KB angesprochen werden. Damit steht ein theoretischer Speicherraum von 1 GB zur Verfügung. Der Zugriff auf diese Segmente erfolgt über sogenannte Segmentdeskriptortabellen, welche vom Betriebssystem angelegt und verwaltet werden. Es ist möglich, mehr virtuelle Adressen anzusprechen, als physischer Arbeitsspeicher vorhanden ist. Über eine virtuelle Speicherverwaltung können einzelne Segmente beispielsweise auf Festplatte ausgelagert werden und anschließend in der Deskriptortabelle als „nicht vorhanden“ gekennzeichnet werden. Sobald ein Lese- oder Schreibzugriff auf so ein Segment erfolgt, löst der Prozessor eine „Segment not present“-Ausnahme aus, die vom Betriebssystem abgefangen wird, um das angeforderte Segment wieder zu laden und das Programm fortzusetzen.

Der 16-Bit-Protected-Mode wurde unter anderem von Digital Research Concurrent DOS 286 (1985), FlexOS 286 (1986/1987), IBM 4680 OS (1986), OS/2 1.x (1987) und MS Windows 3.x (im sogenannten „Standardmodus“) verwendet.

Segmentselektoren[Bearbeiten]

Aufbau eines Segmentselektors

Im Real Mode enthalten die Segmentregister direkt die Startadresse des Speichersegments (genauer: die obersten 16 Bit der 20-Bit Real-Mode-Speicheradresse). Im Protected Mode dagegen enthalten die Segmentregister einen Verweis auf eine der beiden Deskriptortabellen, in denen die Eigenschaften der Speichersegmente festgehalten sind.

Es werden 2 Deskriptortabellen unterstützt: die local descriptor table (LDT) und die global descriptor table (GDT). Das Bit 2 (TI=table indicator) legt fest, auf welche der beiden Tabellen sich der Index (in den Bits 3…15) bezieht. Jede der beiden Tabellen hat Platz für bis zu 8192 Einträge, wobei der erste Eintrag (mit Index 0) der GDT als Nullselektor reserviert ist und auf keinen Speicherbereich verweisen darf.

Deskriptortabelle[Bearbeiten]

386er Segmentdeskriptor
(auf dem 286er werden die Bits 24…31 noch nicht unterstützt)

Zu den Eigenschaften eines Speichersegments, die in den Diskriptortabellen gespeichert werden, gehören:

  • die Segmentlänge (segment limit – 1 Byte bis 64 KiB)
  • die Startadresse (base address – auf 1 Byte genau)
  • Segmenttyp (type und S: S=0 bedeutet Systemsegment, S=1 bedeutet Benutzersegment)
  • Descriptor Privilige level (dpl, wobei der Wert 0 die Stufe mit den höchsten Rechten, 3 die Stufe mit den niedrigsten Rechten bedeutet)
  • Present – Nur Segmente, dessen P-Bit im Descriptor auf 1 gesetzt sind, sind im physischen Hauptspeicher vorhanden. Dies kann zum Auslagern von Speichersegmenten ("Swapping") genutzt werden, da bei Zugriff auf Segmenten mit P-Bit = 0 vom Prozessor eine Exception generiert wird, die von Betriebssystem gefangen werden kann.

32-Bit Protected Mode[Bearbeiten]

Mit dem 386er wurde der Protected Mode auf 32 Bit erweitert, und bisher ungenutzte Felder in den Deskriptortabellen erlauben den Zugriff auf bis zu 4 GB physischer Hauptspeicher in 8192 Segmenten zu je maximal 4 GB ansprechen kann. Folgende Erweiterungen wurden gemacht:

  • Segmentlimit – Es wurde auf 20 Bit erweitert, so dass ein Segment bis zu 1 MiB groß sein kann. Um größere Segmente zu unterstützen, ohne das Längenfeld noch größer zu machen, wurde ein zusätzliches "Granularitätsbit" (G) eingeführt. Ist dieses Bit gesetzt, wird die Segmentlänge nicht mehr in Bytes, sondern in 4-KiB-Blöcken interpretiert. Damit sind Segmentgrößen bis 4 GiB möglich.
  • Startadresse – Sie wurde auf 32 Bit erweitert, so dass die Startadresse den gesamten physischen Adressraum abbilden kann
  • Operandengröße – Dieses Bit legt fest, ob ein Codesegment 16- oder 32-Bit-Code enthält, oder ob ein Stacksegment über den 16-Bit-Stackpointer SP oder den 32-Bit-Stackpointer ESP angesprochen werden soll.

Diese Erweiterungen beherrscht der 386er (und alle Nachfolgeprozessoren) auch im 16-Bit Protected Mode, so dass 16-Bit-Programme, die die 32-Bit-Befehlserweiterungen benutzen, den zusätzlichen Speicher auch ansprechen können.

Außerdem gibt es ab dem 386er die Möglichkeit, Seitenverwaltung (Paging) zu aktivieren, welche der Segmentierung nachgeschaltet ist.

64-Bit-Modus[Bearbeiten]

Mit der Einführung der AMD64-Architektur im K8-Prozessor von AMD, welche später auch von Intel unter dem Namen EMT64 (später IA 32e, jetzt Intel 64) übernommen wurde, wurde ein neuer Betriebsmodus bei x86-Prozessoren eingeführt, der sich von dem bisherigen Protected Mode grundlegend unterscheidet. In diesem Modus gibt es de facto keine Segmentation mehr (mit einer Ausnahme, siehe weiter im Text). Die Basisadresse der Segmente ist fest auf 0 gesetzt. Der Deskriptor für das Codesegment wird nur noch zur Ermittlung des Sub-Modus (64-Bit „Long Mode“ oder 32-Bit „Compatibility Mode“, der bei der Ausführung von 32-Bit-Programmen unter einem 64-Bit-Betriebssystem benutzt wird), der „Default Operation Size“ und der Privilegienstufe (engl. „privilege level“) des in diesem Segment ausgeführten Codes verwendet. Einzig die Segmentregister FS und GS können vom Ring-0 aus über spezielle Maschinenbefehle direkt (ohne auf Segmentdeskriptoren zuzugreifen) eine 64-Bit-Segmentbasisadresse erhalten.

Für Systemsegmente wurde das Format der Segmentdeskriptoren erweitert, so dass sie 64-bittige Basisadressen bzw. Offsets enthalten. Diese Deskriptoren belegen damit effektiv 2 Einträge in den Deskriptortabellen.

Paging und Speicherauslagerung[Bearbeiten]

Die meisten modernen Betriebssysteme für x86-Rechner, wie zum Beispiel Windows, Linux oder Mac OS X, arbeiten im Protected Mode. Dabei wird heute zur Realisierung des Speicherschutzes im Wesentlichen nur noch das Paging eingesetzt, während die Segmentierung nicht mehr benutzt wird. Mit diesem Mechanismus kann jedem Prozess in einem Betriebssystem ein eigener, von den anderen Prozessen getrennter virtueller Adressraum bereitgestellt werden. Gleichzeitig lassen sich dadurch aber auch die gemeinsame Speichernutzung zwischen Prozessen, Copy-On-Write-Mechanismen oder Speicherauslagerung sowie eine klare Trennung in Kernel- und Benutzeradressraum realisieren (Speicherschutz des Kernels vor Fehlern von Anwendungsprogrammen). Dieses Flat Memory Model ist nicht sicher vor Pufferüberläufen.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. 3.2 Modes of Operation. In: Intel 64 and IA-32 Architectures Software Developer Manuals. Intel, Denver, Colorado May 2005, S. 59.
  2. Robert Collins: Protected Mode Basics (PDF) ftp.utcluj.ro. 2007. Abgerufen am 31. Juli 2009.