Speicherver-
waltung unter
MS-DOS 5.0

E-Books


UMB-Bereich aus der Benutzersicht

Aktivieren des UMB-Bereichs


Um mit den Adressen des UMB-Bereichs arbeiten zu können müssen folgende Voraussetzungen erfüllt sein:
*
Der PC muß über einen Prozessor 80386 oder 80486 verfügen.
*
Der Zusatztreiber HIMEM.SYS für die Verwendung des erweiterten Speichers muß installiert sein.
*
Der Zusatztreiber EMM386.EXE muß installiert sein.
*
In die Konfigurationsdatei CONFIG.SYS muß die Anweisung
DOS=UMB
aufgenommen werden.
Die erste Aufgabe, die vor der Verwendung des UMB-Bereichs vom Benutzer durchzuführen ist, ist die Belegung dieses Bereichs festzustellen. Die Aufgabe führt teilweise der EMM386.EXE aus, wenn er installiert wird. Wir haben aber festgestellt, daß die Angaben nicht unbedingt richtig sind.
Z.Bsp. kennzeichnet der EMM386.EXE nicht den Bereich von E0000H bis EFFFFH als freie höhere Speicherblöcke, obwohl diese Adressen bei unseren Systemen nicht belegt sind.
Wir installieren den Zusatztreiber EMM386.EXE über folgende Anweisung in der CONFIG.SYS:
device=c:\dos\emm386.exe ram
Durch den Parameter RAM wird der Zugriff auf die höheren Speicherblöcke und Expanded Memory ermöglicht. Automatisch wird aus dem erweiterten Speicher ein 256-KB-Block für Expanded Memory reserviert.
Im folgenden Kasten sehen Sie einen Ausschnitt der Ausgabe des MEM-Befehls mit dem Schalter /C:
Konventioneller Speicher
Name Größe (dezimal) Größe (Hex)
________________________________________________
MSDOS 14560 ( 14.2KB) 38E0
HIMEM 2896 ( 2.8KB) B50
EMM386 8896 ( 8.7KB) 22C0
SETVER 400 ( 0.4KB) 190
ANSI 4192 ( 4.1KB) 1060
COMMAND 5344 ( 5.2KB) 14E0
FREI 64 ( 0.1KB) 40
FREI 112 ( 0.1KB) 70
FREI 595104 (581.2KB) 914A0
Insgesamt FREI: 595424 (581.5KB)
Insgesamt verfügbarer Arbeitsspeicher: 595424 (581.5KB)
Maximale Größe für ausführbares Programm: 595104 (581.2KB)
655360 Byte EMS-Speicher insgesamt
262144 Byte EMS-Speicher frei
MS-DOS kann auf den UMB-Bereich noch nicht zugreifen, da zuvor die DOS-Anweisung in der CONFIG.SYS geändert werden muß:
dos=high,umb
Führen wir jetzt den MEM-Befehl mit dem Schalter /C aus, wird uns die Belegung des UMB-Bereichs teilweise angezeigt (wie sie der EMM386.EXE erkannt hat). In unserem Beispiel wird die Belegung des Videobereichs mit System gekennzeichnet und die Größe des verfügbaren UMB-Bereichs angezeigt. Wir können leider nicht erkennen, welche Bereiche ausgeklammert wurden.
FREI 112 ( 0.1KB) 70
FREI 598992 (585.0KB) 923D0
Insgesamt FREI: 599168 (585.1KB)
Hoher Speicher
Name Größe (dezimal) Größe (Hex)
_________________________________________________
SYSTEM 163840 (160.0KB) 28000
FREI 32736 ( 32.0KB) 7FE0
Insgesamt FREI: 32736 ( 32.0KB)
Insgesamt verfügbarer Arbeitsspeicher: 613904 (617.1KB)
Maximale Größe für ausführbares Programm: 598832 (584.8KB)
Größter freier Block im hohen Speicher: 32736 ( 32.0KB)
In dem folgenden Kasten sehen Sie die Ausgabe des Programms MFT (Quarterdeck), das die Belegung der höheren Speicherblöcke wesentlich detaillierter und vor allem richtig zeigt.
Memory Area Size Description
0000 - 003F 1K Interrupt Area
0040 - 004F 0.3K BIOS Data Area
0050 - 006F 0.5K System Data
0070 - 0798 28K DOS
0799 - 0EB4 28K Program Area
0EB5 - 9FFE 581K [Available]
9EFF - 9FFF 0K Unused
Conventional memory ends at 640K
A000 - AFFF 64K VGA Graphics
B000 - B7FF 32K Unused
B800 - BFFF 32K VGA Text
C000 - C5FF 24K Video ROM
C600 - CFFF 40K Unused
D000 - DFFF 64K Page Frame
64K Unused
Wir können genau erkennen, wo die freien Bereiche, der Paging-Bereich für Expanded Memory und die ROMs auf Zusatzkarten liegen. MFT zeigt uns als verfügbare Speicherblöcke (Unused) insgesamt 136 KB im Vergleich zu 32 KB, die EMM386.EXE anzeigt.
Beachten Sie, daß durch den Parameter >RAM in der Anweisung für die Installation des EMM386.EXE ein Paging-Bereich im UMB-Bereich eingerichtet wurde, der uns 64 KB der höheren Speicherblöcke kostet.
Benötigen Sie keinen Expansionsspeicher, sollten Sie bei der Installation des EMM386.EXE den Parameter NOEMS angeben., der die Emulation von Expanded Memory im erweiterten Speicher verhindert und daher auch keinen Paging-Bereich angelegt.
Aufgrund der Erkenntnisse des Programms MFT ändern wir die Anweisung für die Installation des Treibers EMM386.EXE folgendermaßen (in der CONFIG.SYS in einer Zeile):
device=c:\dos\emm386.exe ram noems i=b000-b7ff i=e000-efff i=c600-c7ff
Nach dem erneuten Starten des Computers zeigt auch MEM die richtigen Werte an:
Hoher Speicher
Name Größe (dezimal) Größe (Hex)
_________________________________________________
SYSTEM 122912 (120.0KB) 28000
FREI 32704 ( 31.9KB) 7FC0
FREI 172000 (168.0KB) 29FE0
Insgesamt FREI: 204704 (199.9KB)
Insgesamt verfügbarer Arbeitsspeicher: 803872 (785.0KB)
Maximale Größe für ausführbares Programm: 598832 (584.8KB)
Größter freier Block im hohen Speicher: 172000 (168.0KB)
Unser Beispiel zeigt Ihnen, daß durch den Parameter NOEMS und das explizite Einschließen einiger Adreßbereiche die Größe des UMB-Bereichs von 32 KB auf fast 200 KB erhöht werden konnte. Applikationen, die unter Windows laufen, können trotzdem auf Expanded Memory zugreifen, da dieses nach Bedarf von Windows zur Verfügung gestellt wird.
Im nächsten Schritt ändern wir in unserer Konfigurationsdatei alle DEVICE-Anweisungen (ausgenommen für HIMEM.SYS und EMM386.EXE) auf DEVICEHIGH, um die Zusatztreiber im UMB-Bereich zu installieren. Über die AUTOEXEC.BAT laden wir alle speicherresidenten Programme mittels LH ebenfalls in die höheren Speicherblöcke.
Hoher Speicher
Name Größe (dezimal) Größe (Hex)
_________________________________________________
SYSTEM 122812 (120.0KB) 1E020
RETRIEVE 12656 ( 12.4KB) 3170
RAMDRIVE 1184 ( 1.2KB) 4A0
SETVER 400 ( 0.4KB) 190
MOUSE 14816 ( 14.5KB) 39E0
ANSI 4192 ( 4.1KB) 1060
KEYB 6208 ( 6.1KB) 1840
NLSFUNC 2784 ( 2.7KB) AE0
FREI 32560 ( 31.8KB) 7F30
FREI 129760 (126.7KB) 1FAE0
Insgesamt FREI: 162320 (158.5KB)
Insgesamt verfügbarer Arbeitsspeicher: 787840 (769.4KB)
Maximale Größe für ausführbares Programm: 625296 (610.6KB)
Größter freier Block im hohen Speicher: 129760 (126.7KB)
Wir vergrößern dadurch den verfügbaren Arbeitsspeicher von 598832 auf 625296 Bytes. Im Bereich der höheren Speicherblöcke bleiben noch 158.5 KB für die Installation weiterer speicherresidenter Programme frei.
Wir haben in unserem Beispielsystem im UMB-Bereich weit mehr Platz zur Verfügung, als wir für unsere Zusatztreiber und speicherresidente Programme benötigen. Ist dies nicht der Fall, muß bei der Installation die Größe und die Reihenfolge der zu installierenden Programme überprüft werden.
Wir können dabei nicht von der Größe der entsprechenden Programmdatei ausgehen, da diese einerseits durch die Initialisierungsteil vergrößert werden, anderseits kann ein Programm während der Installation mehr Speicher anfordern.
Als Beispiel wollen wir das Programm KEYB.COM überprüfen. In dem vorhergehenden Kasten können Sie sehen, daß KEYB nach der Installation 6208 Bytes im Speicher belegt, während der DIR-Befehl eine Dategröße von 15107 Bytes anzeigt.
Eine Methode, um den Speicherbedarf eines Programms festzustellen, ist die Installation dieses Programms im konventionellen Arbeitsspeicher und anschließend mit dem MEM-Befehl die tatsächliche Größe festzustellen.
Aufgrund der erhaltenen Werte sollten Sie versuchen, die optimale Reihenfolge herauszufinden. Überprüfen Sie anschließend die Belegung des UMB-Bereichs mit Hilfe des MEM-Befehls.
(c) Jürgen Richter