Dockers DEV Site


Updates · Faq · Home 

4 DOS-Extender

4.1 Einleitung / Allgemeines

Die Beispielprogramme der vorherigen Kapitel zeigen den hohen Aufwand, der investiert werden muß, um im Protected Mode zu programmieren. Denn ohne ein geeignetes Protected Mode Betriebssystem, das zum Beispiel Funktionen für die Prozeßverwaltung oder die Arbeit mit Dateien bereitstellt, ist der Protected Mode mit allen seinen Vorzügen nicht effizient einzusetzen.

Von (MS-) DOS darf dabei keine Unterstützung erwartet werden, da DOS nicht für die Anwendung im Protected Mode entwickelt wurde. Der Aufruf einer DOS-Funktion würde beim ersten Zugriff auf ein Segmentregister (innerhalb der Funktion) eine Exception auslösen, da der Inhalt der Segmentregister im Protected Mode, wie bereits in den vorangegangenen Kapiteln erwähnt, anders interpretiert wird. Da DOS wie die meisten Realmode Programme auf eine direkte Manipulation dieser Adressen angewiesen ist, können die Funktionen nicht direkt genutzt werden.

DOS und Protected Mode miteinander zu verbinden, ist die Aufgabe eines sogenannten DOS-Extenders. Er gestattet die Ausführung eines Protected Mode Programmes unter Nutzung von DOS-Funktionen. Wird in diesem Zusammenhang von "Ausführung eines DOS-Programmes im Protected Mode" gesprochen, ist der eigentliche Protected Mode gemeint und nicht der V86-Modus (Vgl. vorangegangenes Kapitel).

Prinzip des DOS-Extenders

Prinzipiell läßt sich die Funktion eines DOS-Extenders so beschreiben: Ausführen eines Programmes im Protected Mode und zurückschalten in den Realmode vor jedem DOS- bzw. BIOS-Aufruf.

Die meisten DOS-Extender gehen dabei so vor:

Mit dieser Methode ist es möglich, die Umschaltung in den Realmode vollkommen transparent durchzuführen. Das heißt, das entsprechende Protected Mode Programm bleibt von der Umschaltung völlig unbeeinflußt und kann DOS-Funktionen wie im Realmode ansprechen. Diese Vorgehensweise ist jedoch nur solange möglich, wie die entsprechenden DOS-Funktionen keine Zeiger in den Registern erwarten.

Soll beispielsweise einer DOS- oder BIOS-Funktion ein Zeiger auf einen Puffer übergeben werden, so ergibt sich das folgende Problem: DOS erwartet Adressen in der Form Segment:Offset innerhalb des Realmode-Bereiches von 1MB. Adressen im Protected Mode werden hingegen als Selektor:Offset Paar interpretiert und können nicht ohne Umwandlung der entsprechenden DOS-Routine übergeben werden.

Eine mögliche Lösung, die auch von DOS-Extendern eingesetzt wird, ist das zusätzliche Kopieren zwischen der im Protected Mode angegebenen Adresse und vom Extender angelegten Puffern. Nur die Adresse dieses zusätzlichen Puffers wird der ursprünglichen (DOS-) Interrupt-Routine übergeben. Der umgekehrte Weg (DOS liefert Daten, die in einem Protected Mode Puffer gespeichert werden) funktioniert auf ähnliche Weise, die entsprechenden Daten werden im Extender-Buffer abgelegt, von wo aus sie in den Protected Mode Puffer kopiert werden.

Probleme

Auch wenn das Problem der Zeigerübergabe über das obengenannte Prinzip gelöst werden kann, existieren weitere Probleme in der Form von Speicherverwaltungs-Utilities.

Dabei geht es prinzipiell um zwei Ressourcen: den Zugriff auf den Extended Memory auf der einen und den Protected Mode auf der anderen Seite. Da eine zentrale Kontrolle in Form eines Protected Mode Betriebssystems fehlt, glaubt jedes Utility nach Belieben auf den Extended Memory zugreifen zu können oder den Protected Mode zu nutzen.

EMS-Emulatoren (z.B. EMM386) betreiben den Prozessor beispielsweise im V86-Modus, bei der ein Teil der Protected Mode Speicherverwaltung ebenso aktiv ist wie der Realmode. Für Programme im V86-Modus ergibt sich dadurch das Problem, daß sie automatisch in der niedrigsten Privilegstufe arbeiten (Stufe 3), bei der z.B. der Zugriff auf die Register des Protected Mode (GDTR, LDTR, IDTR) verweigert wird. Ein "normales" Realmode Programm läuft unter diesen Umständen ohne Probleme, ein DOS-Extender hingegen könnte nie in den Protected Mode schalten (der ja in gewisser Weise bereits aktiviert wurde).

Da auch die beteiligten Software-Hersteller dieses Problem erkannten, entstanden zwei Standards die es erlauben, verschiedene Protected-Mode Utilities in einem System zu verwenden. Das etwas ältere VCPI (Virtual Control Programming Interface), das in Speicherverwaltungen und DOS-Extendern eingesetzt wird, sowie DPMI (DOS Protected Mode Interface), auf das Windows 3.x aufbaut.

Index
weiter >>
<< zurück ||

Last change 27/11/2022 by Docker Rocker.
This page uses no cookies, no tracking - just HTML.
Author: "Docker Rocker" ~ 2022 · [Public Git]