--->also available in English.

Beschreibung des Real Mode, Protected Mode und V86 Mode

Inhalt:

Real Mode

Im RealMode verhalten sich alle x86-Prozessoren wie der 8086. Aus Kompatibilitätsgründen starten alle sie alle in diesem Modus.

Dere 8086 verfügt über 20 Adressleitungen, über die maximal 2^20 = 1048576 = 1024 K = 1MB Byte Hauptspeicher angesprochen werden können. Diese 20 Adressleitungen werden durch zwei verschiedene 16-Bit Register kontrolliert: Die erste Sorte Register werden Segmentregister genannt. Diese zeigen auf eine durch 16 teilbare Adresse im Speicher. Die andere Sorte wird Index oder Offsetregister genannt. Sie zeigen auf eine Adresse zwischen 0 und 2^16=65536 RELATIV zu der Adresse, die im Segmentregister gespeichert wird.


Folgende Grafik veranschaulicht dies:
Grafische Darstellung des Speicherzugriffs im RealMode
Die physikalische Adresse (das ist die Adresse, die an den Signalleitungen des Addressbusses anliegt) ist identisch mit der logischen Adresse (mit der man im Programm arbeitet). Die physikalische Adresse berechnet sich wie folgt:
Wert_im_Segmentregister * 16 + Wert_im_Offsetregister. Man erkennt, daß ein Programm auf den gesamten Adressraum einer CPU zugreifen kann, indem man nur ein anderen Wert in das Segmentregister ladet.
Es gibt keine Vorkehrungen gegen Programme, die versehentlich oder absichtlich das Betriebssystem überschreiben und das System zum Absturz bringen können.

286 Protected Mode

Der 286 wartet mit einigen wichtigen Verbesserungen auf:
Diese Verbesserungen sind nur im Protected Mode verfügbar.

Privilegstufen

Privilegstufen (Privilege Levels, PL) (auch oft mit dem irreführenden Begriff "Ring" gekennzeichnet) wurden implementiert um garantieren zu können, daß Anwendungsprogramme nicht das Betriebssystem oder den Rechenr zum Absturz bringen können. Privilegstufe 0 bedeutet, daß ein Programm alle Befehle auführen darf. Dies trifft auf den Betriebssystemkern zu. Die anderen Programme haben höhere Privilegstufen, Anwendungsprogramme haben meist Privilegstufe 3. Je niedriger die Privilegstufe, desto mehr Zugriffsrechte besitzt das Programm. Code, der mit niedriger Privilegstufe läuft wird als sicherer und stabiler als Code mit höheren Privilegstufen betrachtet, welche mehr Fehler enthalten können.

Programm können nur Code mit derselben oder niedrigerer Privilegstufe aufrufen. Somit wird verhindert, daß im Betriebssystemkern weniger sichere Funktionen aufgerufen werden können. Ebenso ist es möglich, für bestimmte Privilegstufen direkte Zugriffe auf Hardware wie Tastatur, Festplatte, Soundkarte usw. zu verhindern.

Falls ein Programm etwas macht, zu dem es nicht genügend Zugriffsrechte besitzt, ruft die CPU eine Betriebssystemfunktion auf, die das Problem behandelt (indem es z.B. den Speicher- oder Hardwarezugriff emuliert, verwirft oder das Programm mit einer Fehlermeldung beendet).

Speicherverwaltung im Protected Mode

Im Real Mode wird der Speicher über ein Segmentregister mit der Startadresse und einem Indexregister mit einem relativen Offset adressiert.
Im Protected Mode werden die Indexregister auf die gleiche Weise verwendet, aber die Segmentregister funktionieren anders: Sie zeigen nicht mehr direkt auf eine Speicheradresse, sondern stellen ebenfalls einen Index dar - einen Index in eine Tabelle, die vom Betriebssystem irgendwo im Speicher angelegt wurde. Diese Tabelle beinhaltet Beschreibungen über die von den laufenden Programmen belegten Speicherbereiche. Jede diese Beschreibungen, die auch Deskriptoren genannt werden (und die Tabelle entsprechend Deskriptortabelle) besteht aus den folgenden Informationen:

Der Speicherzugriff läuft nach dem folgendem Schema ab:
Speicherzugriff im 286 PMode

Man sieht, daß die logische Adresse, gebildet aus dem Segmentregister (das jetzt auch Selektor genannt wird, da es einen Deskriptor innerhalb der Tabelle selektiert) und dem Index nichts mehr mit der physikalischen Adresse zu tun hat. Man spricht deshalb auch von virtuellen Adressen. Da virtuelle und physikalische Adressen unabhängig voneinander sind kann das Betriebssystem die physikalische Position des Speicherblocks ändern, ohne daß dies Auswirkungen auf das ihn verwendende Programm hat. Diese Technik nennt sich auch Auslagern.

Erweiterungen des Protected Mode im 386

Der 386 führte folgende Verbesserungen ein:

Der auffälligste Unterschied zwischen dem 286 und dem 386 im Protected Mode besteht darin, daß die Speicherblöcke nun deutlich größer sein können und der Adressraum auf 4GB erweitert wurde. Im großen ganzen sind die Zugriffsmechanismen jedoch dieselben geblieben.

Auch heute noch, fast 2 Jahrzehnte nach der Vorstellung des 386ers, verwenden die meisten Rechner nur einen kleine Teil des maximal möglichen physikalischen Speichers von 4GB. Das Auslagern des Speichers auf dem 286 war recht einfach, da kein Block größer als 64KB war und somit problemlos am Stück in den Hauptspeicher paßte. Auf dem 386er kann ein Speicherblock aber bis zu 4GB groß sein - mehr als in den meisten PCs vorhanden. Dieses Problem wurde gelöst, indem eine separate Einheit (Paging Unit) in den 386 eingebaut wurde.

386 Paging Unit

Diese Erweiterung des 386 arbeitet völlig unabhängig von den normalen Mechanismen des Protected Modes. Der 4GB große Adressraum wird dazu in kleine Teile zerlegt, die im Speicher beliebig verschoben werden können oder aus dem Speicher entfernt und auf Festplatte gespeichert werden können, um Platz für neue Blöcke zu schaffen.

Da das Paging unabhängig von der Selektor-Offset-Adressierung abläuft, können selbst Programme die ihre Deskriptoren selbst verwalten, nicht erkennen, ob Paging aktiv ist oder nicht. Der Speicherzugriff ist nun dreistufig:

Speicherzugriff mit aktiviertem Paging auf dem 386

Anmerkung: Natürlich kann parallel auch noch wie beim 286 über die Deskriptoren Speicher ausgelagert werden.

Virtuelle V86 Erweiterung

Obwohl der Protected Mode wesentlich leistungsfähiger ist erfreuten sich Anwendungen im Real Mode weiterhin großer Beliebtheit. Da es nicht gerade einfach ist, eine Real Mode - Anwendung im Protected Mode ablaufen zu lassen wurde zu diesem Zweck eine spezielle Erweiterung dem 386 hinzugefügt.
Mit dieser lassen sich nun einzelne Hardwareports sperren oder emulieren als auch der Speicherzugriff wie vom 8086 gewohnt emulieren, ohne dabei unnötig hohen Aufwand bei den Schutzmechanismen in Kauf nehmen zu müssen. Dadurch lassen sich Protected Mode und Real Mode Programme ohne wesentlichen Geschwindigkeitsverlust parallel ausführen.

Im Unterschied zum echten Real Mode sind allerdings nur die Instruktionen des PL3 erlaubt. Zudem kann der addressierte Speicher an jeder beliebigen Position abgebildet sein oder auf die Festplatte ausgelagert worden sein. Hardwarezugriffe, die mit anderen Programmen Probleme verursachen können werden per Software emuliert.

Multitasking

Multitasking bezeichnet die gleichzeitige Ausführung mehrerer Codefragmente zur gleichen Zeit. Da ein x86-CPU-Kern nur ein Codefragment zu einer bestimmten Zeit abarbeiten kann wird so schnell zwischen diesen umgeschaltet, daß der Eindruck einer gleichzeitigen Ausführung entsteht.

Multitasking erfordert eine Menge an Vorarbeit vom Betriebssystem, abhängig von der Art und Fähigkeiten der implementierten Taskwechselmethode.
Es gibt zwei verschiedene Arten des Multitaskings: Beim kooperativen Multitasking wird ein Programm solange abgearbeitet, bis es von selbst die Kontrolle an das Betriebssystem zurückgibt. Dabei tritt das Problem auf, daß ein einziges fehlerhaftes Programm das gesamte System zum Stillstand bringen kann.
Die andere Möglichkeit verwendet häufig vorkommende Ereignisse wie den Systemzeitgeber, um zwischen den Programmen hin- und herzuwechseln. Dieses Vorgehen ist viel sicherer. Jedoch erfolgt dadurch der Taskwechsel asynchron, so daß bei jedem Wechsel ein gehöriger Organisationsaufwand erforderlich ist, um den Zustand des Prozessors zu sichern und wieder herzustellen.

Ein weit verbreiteter Irrglaube besteht darin, daß erst ab einem 286er Multitasking möglich ist. Jedoch reicht auch schon der 8086, um Multitasking zu betreiben. Allerdings ist dies mehr eine theoretische Überlegung, da nicht nur die Geschwindigkeit und der geringe adressierbare Speicher wenig geeignet für mehrere Programme sind, sondern auch kein Schutzmechanismus zur Sicherung der Programme und des Betriebssytems exisiert. Zudem enthalten der 286 und der 386 viele Neuerungen, mit denen sich die Taskwechsel deutlich schneller und einfacher realisieren lassen.

Weiterlesen

Von Michael Chourdakis gibt es einen CodeProject-Eintrag namens The Real,Protected,Long mode assembly tutorial for PCs mitsamt Quelltexten
Der PMODE-Quelltext in den Programmierseiten ist ebenso ein Blick wert.

Mail an den Autor: webmeister@deinmeister.de

Hauptseite Programmieren Win32Asm Downloads Software Hardware Cartoons+Co Texte Sitemap