新常态下谋转型 中信银行打造创新型零售银行
Der Begriff Protected Mode (englisch; deutsch: geschützter Modus oder Schutzmodus) bezeichnet einen Betriebsmodus von x86-Prozessoren, der seit dem 80286er-Prozessor von Intel 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 MiB Hauptspeicher (16-Bit-Protected-Mode des 80286). Mit dem 80386er und dessen 32-Bit-Protected-Mode wurde der lineare Zugriff auf bis zu 4 GiB Hauptspeicher m?glich. Der Protected Mode wird von allen weiterentwickelten 16-Bit- und 32-Bit-PC-Betriebssystemen genutzt.
Hintergründe und Idee
BearbeitenUrsprünglich existierte nur der retronym ab dem 80286 so bezeichnete Real Mode der 8086-Prozessoren, dem Begründer der x86-Architektur, der aus Kompatibilit?tsgründen immer noch bei 32-Bit- und 64-Bit-x86-Prozessoren der Startmodus ist, so dass ?ltere Software wie etwa das auf IBM-PC-kompatiblen Computern bis in die 1990er Jahre am weitesten verbreitete Betriebssystem DOS lauff?hig ist.[1] In diesem Modus gab es keine Speicherschutzmechanismen oder Policies, das Betriebssystem und auch jedes einzelne Programm konnte jederzeit sowohl lesend auch 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.
Bei der Weiterentwicklung der x86-Architektur hat Intel daher Mechanismen eingeführt, mit denen die Zugriffsrechte von Programmen auf verschiedene Speicherbereiche feingranularer einstellbar sind, was Speicherschutz zwischen verschiedener Software erm?glicht und die ursprüngliche Situation im Real Mode entsch?rft. Der Prozessor muss dazu allerdings in den Protected Mode versetzt werden, mit dem bestehende Software – allen voran MS-DOS und PC DOS der mit dem IBM PC begründeten Plattform – nicht mehr kompatibel war. Ab dem 80386 wurde mit dem Virtual 8086 Mode ein Kompatibilit?tsmodus integriert, der die Ausführung von 16-Bit-Software im 32-Bit-Protected-Mode erm?glicht.
Konzept und Charakteristika
BearbeitenIm Protected Mode unterstützt der Prozessor sowohl Segmentierung (ab dem 80286) als auch Paging (ab dem 80386). Aus Kompatibilit?tsgründen entschied sich Intel für die virtuelle Speicherverwaltung als Methode, da hier jedem Programm durch die Speicherverwaltungseinheit, kurz ?MMU“ für englisch Memory Management Unit, 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 (englisch ?privilege level“).
Der namensgebende Speicherschutz des Protected Mode ist auf vier verschiedene Schutzebenen auf Segmentebene und zwei Schutzebenen auf Page-Ebene aufgebaut. Die vier verschiedenen im x86-Schutzmodus existierenden und als Ringe oder ?Domain“ bezeichneten Schutzebenen bzw. Befugnisstufen gew?hren den darauf ablaufenden Codesegmenten unterschiedliche Rechte. Dies erm?glicht unter anderem die Unterscheidung zwischen Kernel-Modus (Ring 0) und Benutzer-Modus (Ring 3), welche in modernen Betriebssystemen umgesetzt ist. 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 x86-Prozessor schaltet in den Protected Mode um, indem das PE-Bit, für englisch Protection Enable, im Control Register 0 (CR0) gesetzt wird.[2]
Ebenfalls aus Kompatibilit?tsgründen integrierte Intel im 32-Bit-Protected-Mode ab dem 80386 einen Sondermodus, den Virtual 8086 Mode (auch ?Virtual Real Mode“ genannt), der die Ausführung von existierenden Real-Mode-Programmen im Protected Mode erm?glicht.
16-Bit Protected Mode
BearbeitenDer ursprüngliche Protected Mode wurde mit dem 80286 von Intel eingeführt und ist wie dieser ein reiner 16-Bit-Modus. Dieser wird daher retronym meist mit ?16-Bit Protected Mode“ bezeichnet. Damit konnten maximal 16 MB physischer Hauptspeicher über 2 Tabellen mit jeweils 8.192 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 Concurrent DOS 286 (1985), FlexOS 286 (1986/1987), IBM 4680 OS (1986), OS/2 1.x (1987) und Windows 3.x im ?Standardmodus“ verwendet. Auf 32- und 64-Bit-Systemen hat der ursprüngliche Protected Mode keine Bedeutung mehr.
Deskriptortabellen
BearbeitenEs existieren drei Arten von Deskriptortabellen:
- Global descriptor table (GDT) – diese ist für alle Tasks identisch
- Local descriptor table (LDT) – jeder Task kann eine eigene LDT besitzen
- Interrupt descriptor table (IDT) – wird beim Anspringen von Interrupt Service Routinen verwendet.
Die Deskriptortabellen liegen im Hauptspeicher und werden vom Betriebssystem verwaltet. In speziellen Registern wird ihre jeweilige (Basis-)Adresse gespeichert:
- GDTR – speichert die physische Basisadresse der GDT (24 Bits)
- IDTR – speichert die physische Basisadresse der IDT (24 Bits)
- LDTR – ist ein (16-Bit-)Segmentselektor für das Segment, in dem die LDT liegt.
(auf dem 286er sind die Bits 24…31 reserviert und müssen 0 sein)
Jede Deskriptortabelle enth?lt maximal 8.192 Eintr?ge, sogenannte Segmentdeskriptoren. Jeder Segmentdeskriptor beschreibt ein Speichersegment und enth?lt dafür folgende Felder:
- 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 Privilege level (dpl, wobei der Wert 0 die Stufe mit den h?chsten Rechten, 3 die Stufe mit den niedrigsten Rechten bedeutet)
- Present – Nur Segmente, deren P-Bit im Deskriptor auf 1 gesetzt ist, 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 Ausnahme ausgel?st wird, die vom Betriebssystem abgefangen werden kann.
Der erste Eintrag (mit Index 0) der GDT ist als Nullselektor reserviert und darf auf keinen Speicherbereich verweisen.
Segmentselektoren
BearbeitenIm Real Mode enthalten die Segmentregister direkt die Startadresse des Speichersegments (genauer: die obersten 16 Bits der 20-Bit-Real-Mode-Speicheradresse). Im Protected Mode dagegen enthalten die Segmentregister einen Verweis auf eine der beiden Deskriptortabellen (GDT oder LDT), in denen die Eigenschaften der Speichersegmente festgehalten sind.
Die Segmentselektoren sind 16 Bits gro? und haben den nebenstehenden Aufbau: Das Bit 2 (TI=table indicator) legt fest, auf welche der beiden Tabellen sich der Index (in den Bits 3…15) bezieht.
32-Bit Protected Mode
BearbeitenMit dem 80386 wurde der Protected Mode von Intel auf 32 Bits erweitert, der über bisher ungenutzte Felder in den Deskriptortabellen den Zugriff auf bis zu 4 GiB physischer Hauptspeicher in 8.192 Segmenten zu je maximal 4 GiB erm?glicht. Durch Erweiterung der Paging-Einheit, bezeichnet mit englisch Physical Address Extension oder kurz ?PAE“, ist der maximal nutzbare Hauptspeicher im 32-Bit-Modus sogar bis theoretisch 4.096 TiB erweiterbar.
32-Bit-Software für die x86-Architektur IA-32 ist immer für den Protected Mode des ?i386“ oder neuer geschrieben, da es keinen anderen 32-Bit-Modus gibt.
Im Vergleich zum ursprünglichen 16-Bit-Protected-Mode weist der 32-Bit-Protected-Mode folgende Erweiterungen auf:
- Segmentlimit – Es wurde auf 20 Bits 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 Bits 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 80386er und alle Nachfolgeprozessoren auch im 16-Bit-Protected-Mode, so dass 16-Bit-Programme, die die 32-Bit-Befehlserweiterungen IA-32 benutzen, den zus?tzlichen Speicher auch ansprechen k?nnen. Zus?tzlich bietet jeder 32-Bit-x86-Prozessor die M?glichkeit, Seitenverwaltung (Paging) zu aktivieren, welche der Segmentierung nachgeschaltet ist.
Der 32-Bit-Protected-Mode wird von allen 32-Bit-Betriebssystemen verwendet, beispielsweise:
- bei Microsoft fakultativ bereits seit Windows 2.0 (wenn es auf einem 32-Bit-Prozessor l?uft), zwingend seit Windows für Workgroups 3.1 und Windows NT 3.1
- bei IBM seit OS/2 2.0
- von Apple nach der Umstellung auf die Intel-Plattform, also mit Erscheinen von Mac OS X Tiger/Intel
- der Linux-Kernel wurde ursprünglich für den 32-Bit-Protected-Mode des 80386 geschrieben
64-Bit-Modus
BearbeitenMit der Einführung der AMD64-Architektur in der K8-Prozessorgeneration von AMD, welche wenig sp?ter auch von Intel unter dem Namen EM64T (auch IA-32e) bzw. schlie?lich Intel 64 übernommen wurde, wurde ein neuer 64-Bit-Betriebsmodus bei x86-Prozessoren eingeführt, der sich von dem bisherigen Protected Mode grundlegend unterscheidet. Neben einigen anderen Modernisierungen der Prozessorarchitektur gibt es in diesem Modus 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, der ?Default Operation Size“ und der Privilegienstufe 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.
Die Sub-Modi bei x64 werden ?Long Mode“ (64-Bit-Modus; bei Intel auch ?IA-32e Mode“) und ?Compatibility Mode“ (32-Bit) bezeichnet. Der 32-Bit-Kompatibilit?tsmodus erm?glicht die Ausführung von 32-Bit-Programmen unter einem 64-Bit-Betriebssystem.
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
BearbeitenBetriebssysteme für die x86-Architektur, wie zum Beispiel Windows, Linux, PC-BSD oder macOS, arbeiten im 32-Bit-Protected-Mode oder bieten, als 64-Bit-Betriebssysteme in dessen Nachfolger ?Long Mode“, mit dem ?Compatibility Mode“ essentiell ebenfalls einen 32-Bit-Protected-Mode. Dabei wird 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 allerdings nicht sicher vor Pufferüberl?ufen.
Siehe auch
Bearbeiten- DOS Protected Mode Interface (DPMI)
- DOS Protected Mode Services (DPMS)
- System Management Mode (SMM)
- Virtual Control Program Interface (VCPI), ersetzt durch DPMI
Weblinks
BearbeitenEinzelnachweise
Bearbeiten- ↑ Intel 64 and IA-32 Architectures Software Developer Manuals. Intel, Denver, Colorado Mai 2005, 3.2 Modes of Operation, S. 59 (Online).
- ↑ Robert Collins: Protected Mode Basics. (PDF) ftp.utcluj.ro, 2007, abgerufen am 31. Juli 2009.