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