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.
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).
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 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.
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:
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 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.
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.