Speicherver-
waltung unter
MS-DOS 5.0

E-Books


Technische Grundlagen

Speicherbereiche in einem PC


In diesem Abschnitt wollen wir die verschiedenen Speicherbereiche in einem PC erklären und wie sie implementiert wurden, um die Platzprobleme im Hauptspeicher zu vermindern.
Der konventionelle Arbeitsspeicher ist der untere 640-KB-Bereich des Hauptspeichers, in dem das Betriebssystem (oder ein Teil davon) liegt und Anwenderprogramme ausgeführt werden.
Vor der Version 5.0 von MS-DOS bot das Betriebssystem kaum Möglichkeiten, in diesem Bereich mehr Platz für Anwenderprogramme zu schaffen. Unter MS-DOS 4.0 konnten Puffer und einige Konrollinformationen des Betriebssystems in den erweiterten Speicher verlagert werden, wodurch etwas mehr Arbeitsspeicher für Programme verfügbar wurde.
Expanded Memory war der erste Versuch, mehr Speicher für Anwendungsprogramme zu schaffen.
Es ist wichtig, zu erkennen, daß Expanded Memory von Aplikationen nur verwendet werden kann, wenn das Programm dafür geschrieben wurde, d.h. daß der Expansionsspeicher nicht vom Betriebssystem für Anwenderprogramme verwaltet und diesen zur Verfügung gestellt wird.
Der zusätzliche Expansionsspeicher befindet sich entweder auf einer Speichererweiterungskarte oder wird im erweiterten Speicher emuliert (siehe später).
Extended Memory ist der Speicherbereich über der 1-MB-Grenze und kann nur von den Prozessoren 80286 und darüber bearbeitet werden. Diese Prozessoren können in einem von zwei Modi arbeiten:
Im Real Mode emuliert der Prozessor einen 8086-Prozessor, wodurch es in der Lage ist, MS-DOS auszuführen, aber auch fast alle Limitierungen dieses Prozessors in Kauf nehmen muß. Im Real Mode kann der Prozessor nicht auf den erweiterten Speicher zugreifen (Ausnahme siehe HMA-Beschreibung).
Die Prozessoren ab 80286 können in den Protected Mode umgeschaltet werden, in dem sie eine andere Adressierungstechnik verwenden und daher auf den erweiterten Speicher zugreifen können.
Extended Memory kann unter MS-DOS folgendermaßen verwendet werden:
*
Zusatztreiber (z.Bsp. VDISK.SYS), die mittels einer DEVICE-Anweisung in der Konfigurationsdatei CONFIG.SYS installiert werden, können eine RAM-Disk im erweiterten Speicher verwalten.
*
Durch die Installation eines Expanded Memory Mangers (ebenfalls ein Zusatztreiber) kann Expanded Memory im erweiterten Speicher emuliert werden.
*
Ab Version 5.0 von MS-DOS kann ein großer Teil des Betriebssystems in den ersten 64 KB über der 1-MB-Grenze ausgeführt werden (siehe HMA).
*
Mit einem Prozessor 80386 oder 80486 können ab MS-DOS 5.0 speicherresidente Programme und Zusatztreiber im erweiterten Speicher abgelegt werden (siehe UMB).
In den vergangenen Jahren wurden viele Programme entwickelt, die mit Expanded Memory arbeiten können. Erst seit kurzer Zeit werden Applikationen entwickelt, die direkt mit Extended Memory arbeiten können. Wir werden die Arbeitsweise und die Möglichkeiten der Programmierung des erweiterten Speichers in diesem Lehrmaterial nicht behandeln, weil es doch ein derart umfangreiches Thema darstellt, dem wir uns gesondert widmen werden.
In vorigen Abschnitt haben wir Ihnen gezeigt, wie unter MS-DOS die höchste absolute Speicheradresse erzeugt wird. Die logische Adresse der CPU ist aufgebaut aus der Segmentnummer F000H und dem Offset FFFFH. Sie erkennen sicher, daß die Segmentnummer weit unter dem maximalen Wert liegt, der in einem 16-Bit-Register bearbeitet werden kann.
Theoretisch wäre es möglich, die logische Adresse FFFF:FFFF in der CPU zu bilden. Schicken wir diese Adresse an die Adressierungseinheit, wird sie in folgende absolute Adresse umgewandelt:
FFFFH*10H=FFFF0H+FFFFH=10FFEFH
Wandeln wir diese absoluter Endadresse in einen Binärwert um, erhalten wir 21 Bits, d.h. ein 8086 oder 8088 kann diese Adresse nicht an die Speicherelektronik übertragen, da diese Prozessoren nur über 20 Adreßleitungen (A0 bis A19) verfügen.
Die Prozessoren ab 80286 verfügen aber über 24 Adreáleitungen (A0 bis A23) und könnten daher die absolute Adresse 10FFEFH an den Speicher schicken und so im Real Mode auf fast 64 KB mehr Speicher zugreifen. Es ist selbstverständlich, daß dies auch für diese Prozessoren nur möglich ist, wenn erweiterter Speicher über der 1-MB-Grenze installiert ist.
Um die 21-Bit-Adresse übertragen zu können, muß die Adressleitung A20 aktiviert werden. Diese Aufgabe kann eine Routine in jedem Treiber übernehmen, der für die Verwaltung des Extended Memoryies unter MS-DOS installiert ist. Standardmäßig ist dieser Treiber HIMEM.SYS, der mehrere Routinen dieser Art für verschiedene Prozessortypen eingebaut hat.
Der 64-KB-Bereich unmittelbar über der 1-MB-Grenze wird als High Memory Area (HMA) bezeichnet und kann von MS-DOS im Real Mode angesprochen werden.
In der Konfigurationsdatei CONFIG.SYS kann durch die Anweisung DOS=HIGH festgelegt werden, daß ein großer Teil des Betriebssystems aus dem konventionellen Arbeitsspeicher in den HMA-Bereich gelegt wird.
In dem folgenden Beispiel zeigen wir Ihnen die Ausgabe des MEM-Befehls (mit dem Schalter /C), ohne die Verwendung der Bereiche HMA und UMB.
Konventioneller Speicher
Name Größe (dezimal) Größe (Hex)
________________________________________________
MSDOS 64304 ( 62.8KB) FB30
SETVER 400 ( 0.4KB) 190
MOUSE 14816 ( 14.5KB) 39E0
ANSI 4192 ( 4.1KB) 1060
COMMAND 5344 ( 5.2KB) 14E0
KEYB 6208 ( 6.1KB) 1840
NLSFUNC 2784 ( 2.7KB) AE0
RETRIEVE 12656 ( 12.4KB) 3170
FREI 64 ( 0.1KB) 40
FREI 112 ( 0.1KB) 70
FREI 593088 (579.2KB) 90CC0
Insgesamt FREI: 593264 (579.4KB)
Insgesamt verfügbarer Arbeitsspeicher: 593264 (579.4KB)
Maximale Größe für ausführbares Programm: 592928 (579.0KB)
7340032 Byte fortlaufender Erweiterungsspeicher insgesamt
0 Byte fortlaufender Erweiterungsspeicher verfügbar
7274496 Byte XMS-Speicher verfügbar
MS-DOS resident im oberen Speicherbereich (High Memroy Area)
In der letzten Zeile wird angezeigt, daß MS-DOS in den HMA-Bereich geladen wurde, wodurch sich die Belegung im konventionellen Arbeitsspeicher auf 14.2 KB verringert hat.
Der Zusatztreiber HIMEM.SYS muß im 640-KB-Bereich resident sein und belegt hier 2.8 KB. Insgesamt hat sich aber der für Anwenderprogramme verfügbare Arbeitsspeicher um 49072 Bytes erhöht.
Beachten Sie, daß durch die Installation von HIMEM.SYS der verfügbare Erweiterungsspeicher (Extended Memory) auf 0 gesetzt wird, da dieser Zusatztreiber die Verwaltung des erweiterten Speichers übernimmt und andere Programme nur über ihn darauf zugreifen können. Die Größe des Erweiterungsspeichers weist MEM als Wert für den XMS-Speicher aus.
Die hohen Speicherblöcke können unter MS-DOS nur von den Prozessoren 80386 und 80486 verwendet werden. Der UMB-Bereich liegt im konventionellen Adressierungsraum nach dem 640-KB-Arbeitsspeicher und reicht bis zum BIOS-Segment unmittelbar unter der 1-MB-Grenze.
Dieser Bereich ist für Speicher (RAM oder ROM) auf Zusatzkarten reserviert. In den meisten Fällen bleiben aber zwischen den belegten Bereichen nicht verwendete Blöcke frei. Da die Speicherprobleme hauptsächlich auf mangelnde Adressen zurückzuführen sind, könnten die nicht verwendeten Adressen im UMB-Bereich für eine Erweiterung des Arbeitsspeichers verwendet werden. Es ist zu beachten, daß nur die Adressen in diesem Bereich verwendet werden, da an dieser Stelle kein Speicher installiert ist.
In dem folgenden DEBUG-Beispiel zeigen wir Ihnen einen Teil unseres UMB-Bereichs, nachdem wir den HIMEM.SYS-Treiber installiert haben. Beachten Sie, daß wir den Treiber EMM386.SYS (den Verwalter für Expanded Memory) nicht installiert haben.
c:\: debug
-d e000:0000 1 20
E000:0000 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF .........
E000:0010 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF .........
-e e0000:0 'Das ist unsere Eingabe'
-d e000:0 120
E000:0000 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF .........
E000:0010 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF .........
-e
Die Anzeige FFH in allen Speicherplätzen bedeutet, daß an dieser Stelle kein Speicher installiert ist. Unser Versuch, in diesen Bereich etwas einzugeben, wird ignoriert.
Daß trotzdem Speicher über diese Adresse angesprochen werden kann, machen die verbesserten Fähigkeiten der Prozessoren 80386/486 möglich. Diese Prozessoren verfügen über eine sogenannte Paging-Einheit, die es ihnen erlaubt, Adressen, die auf Speicherplätze im konventionellen Adressierungsbereich zeigen, umzuwandeln, so daß der Prozessor in Wirklichkeit auf Speicherplätze im Extended Memory zugreift.
Installieren wir in unserem System den Expanded Memory Manager EMM386.EXE, belegt dieser 8.7 KB im konventionellen Arbeitsspeicher, wodurch der für Anwendungsprogramme verfügbare Speicher auf 584176 Bytes verringert wird. In dem folgenden Beispiel können Sie aber erkennen, daß eine Eingabe unter DEBUG in diesen Speicherbereich übernommen wird.
c:\: debug
-e e000:0 'Das ist unsere Eingabe'
-d e000:0 120
E000:0000 44 61 73 20 69 73 74 20-75 6E 73 65 72 65 20 45 Das ist uns
E000:0010 69 6E 67 61 62 65 FF FF-FF FF FF FF FF FF FF FF ingabe.....
-e
Wenn MS-DOS mitgeteilt wird, das ein Treiber oder ein speicherresidentes Programm in den hohen Speicherblöcken abgelegt werden soll, sucht es einen genügend großen Block im UMB-Bereich und beauftragt den Prozessor, das Programm dorthin zu übertragen. Da sich aber an diesen Positionen kein Speicher befindet, wird das Programm im erweiterten Speicher abgelegt, und der Prozessor merkt sich, daß ein Zugriff auf dieses Programm eine Umwandlung der Adressen erforderlich macht.
Die Anweisungen, die MS-DOS veranlassen, einen Zusatztreiber oder ein speicherresidentes Programm im UMB-Bereich abzulegen, sind DEVICEHIGH und LOADHIGH (LH). Findet das Betriebssystem keinen Block in diesem Bereich, der für das Programm groß genug ist, wird es im konventionellen Arbeitsspeicher installiert.
Im folgenden Abschnitt wollen wir Ihnen die Vorgehensweise erklären, die zu einer optimalen Auslastung des UMB-Bereichs führt.
(c) Jürgen Richter