Im Kampf gegen permanenten Speichermangel ist der Treiber EMM386 von MS-DOS
ein maechtiges Werkzeug, um brachliegenden Arbeitsspeicher zu nutzen oder
Programme zu beschleunigen. Wir zeigen Ihnen, wie Sie die vielen Parameter
fuer eigene Zwecke einsetzen.
Nun haben Sie sich tatsaechlich einen Rechner mit 16 MByte Arbeitsspeicher
gekauft, und trotzdem meldet Ihnen DOS, dass es nicht genug Speicher habe,
um das Programm XYZ zu starten. Keine Panik! Mit Ihrem Speicher ist alles
in bester Ordnung, und Sie haben auch nicht umsonst das viele Geld
ausgegeben: Das einzige Hindernis in diesem Fall ist DOS selbst, das aus
historischen Gruenden den Speicher immer noch in verschiedene Bereiche
aufteilt (Moderne Betriebssysteme wie OS/2 oder Windows NT haben dieses
Problem nicht mehr).
Unsere Kaesten Die Speicheraufteilung unter DOS und Die verschiedenen
Speicherarten von DOS sollen Ihnen helfen, das Speicherproblem von MS-DOS
zu verstehen. Im Text geben wir Ihnen konkrete Hinweise, wie Sie Ihr
Programm XYZ letztendlich doch noch starten koennen. Dazu sind diverse
Aenderungen an Ihren Konfigurationsdateien notwendig.
Lassen Sie daher vorab das Diskettenlaufwerk rattern, um Pannen bei der
Arbeit moeglichst glimpflich abgehen zu lassen. Der Befehl FORMAT A: /s
legt eine bootfaehige Systemdiskette an, auf die Sie mittels COPY-Befehl
die aktuellen Dateien CONFIG.SYS und AUTOEXEC.BAT uebertragen. Allzu
schnell haben Sie naemlich Ihren Rechner lahmgelegt, und dann laeuft ohne
Bootdiskette gar nichts mehr.
DOS hochladen
-------------
Rufen Sie einen Editor, wie zum Beispiel EDIT.COM aus dem DOS-Verzeichnis
auf, und laden Sie die Datei CONFIG.SYS. Ziemlich weit am Anfang stechen
Ihnen meist diese drei Zeilen ins Auge:
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH, UMB
DEVICE=C:\DOS\EMM386.EXE
(mit oder ohne Parameter).
Der erste Aufruf bewirkt, dass mit HIMEM.SYS ein Treiber installiert wird,
der zur Steuerung des Zusatzspeichers verantwortlich ist. HIMEM.SYS regelt
den Zugriff und verhindert, dass mehrere Programme gleichzeitig einen
Speicherplatz im Upper Memory oder im Extended Memory belegen. Die
Anweisung DOS=HIGH bewirkt, dass ein Grossteil des Betriebssystems in die
High Memory Area geladen wird. Dort werden Teile der Systemdateien MSDOS.
SYS, IO.SYS und COMMAND. COM abgelegt. Der Zusatz UMB legt fest, dass Upper
Memory Blocks zur Aufnahme von Programmen bereitgestellt werden. Wie das
geschieht, haengt von der Programmart ab. Geraetetreiber, zu erkennen an
der Endung .SYS, muessen in der Datei CONFIG.SYS mit DEVICEHIGH geladen
werden. TSRs, speicherresidente Programme mit den Endungen .COM oder .EXE,
schickt man in der AUTOEXEC.BAT mit LOADHIGH in die Upper Memory Blocks.
Der Funktionstuechtigkeit der Programme tut dies keinen Abbruch. Uebrigens
sind weder HIMEM.SYS noch EMM386 selbst "hochladefaehig".
An dieser Stelle kommt jetzt EMM386.EXE ins Spiel, denn damit bestimmt der
Anwender, wie der Zusatzspeicher aufgeteilt wird. Der Benutzer legt fest,
ob und wie der Zusatzspeicher in Extended oder Expanded Memory aufgeteilt
wird und ob Upper Memory Blocks bereitgestellt werden. Ohne Parameter
richtet EMM386 lediglich 256 KByte Expanded Memory ein und legt die Page
Frame an die Speicherstelle D000.
Bei einem herstellerseitig eingerichteten Rechner finden Sie haeufig den
Parameter NOEMS. Er bewirkt zum einen, dass der Zusatzspeicher weiterhin
als Extended Memory verwaltet wird, und zum anderen, dass Upper Memory
Blocks bereitgestellt werden. Wieviel, das ist von Rechner zu Rechner
unterschiedlich, meistens jedoch zwischen 96 und 159 KByte. Ein ebenso
haeufig verwendeter Parameter ist RAM, wahlweise mit oder ohne
Groessenangabe davor. Dieser Parameter stellt Upper Memory Blocks bereit
und richtet 256 KByte Expanded Memory oberhalb 1 MByte ein. Soll's mehr
oder weniger EMS sein, teilen Sie EMM386 die genaue Groesse unter xxxx RAM
mit, wobei xxxx fuer die Menge in KByte steht.
Verwundert werden Sie jedoch feststellen, dass die Groesse Ihrer Upper
Memory Blocks bis auf wenige KBytes zusammenschrumpft, sobald Sie den
Parameter RAM einsetzen. Der Grund: der 64 KByte grosse Page Frame wird in
der Upper Memory Area angelegt. Genauso koennen Sie allein mit der
Groessenangabe (in KByte) Expanded Memory einrichten und gleichzeitig auf
UMBs verzichten. EMM386.EXE 786 richtet oberhalb 1 MByte 786 KByte EMS ein,
sonst nichts. Gueltige Werte sind 16 bis 32.768 und muessen durch 16
teilbar sein. Wieviel EMS Sie brauchen, sollte Ihnen jedes Programm
mitteilen; nur noch sehr wenige Programme (meistens Spiele) benoetigen
jedoch tatsaechlich EMS.
Die dritthoechsten Einschaltquoten werden von einer ganzen Parametergruppe
erzielt, den Adressparametern. Mit ihnen laesst sich festlegen, welcher
Bereich des Upper Memory fuer UMBs und welcher fuer den Seitenrahmen
beansprucht wird.
Die Anwendung der Adressparameter setzt also voraus, dass gleichzeitig die
Parameter Groesse, RAM oder NOEMS als Bezug verwendet werden. Die Upper
Memory Area ist von A000 bis F7FF adressiert. Doch das gespiegelte ROM,
Videospeicher und BIOS der Grafikkarte sowie das Rechner-Setup nehmen nur
einen Teil davon ein. Fuer den Seitenrahmen und die UMBs sind die 20 KByte
grossen Bereiche C800 bis EFFF nutzbar, eventuell sogar noch die 32 KByte
von B000 bis B7FF und 32 KByte von F000 bis F7FF.
Benoetigen Sie Upper Memory Blocks, bestimmen Sie per Include-Anweisung
(englisch: include = einschliessen), welcher Bereich benutzt werden soll.
Die korrekte Syntax lautet i=Adresse-Adresse, also beispielsweise
EMM386.EXE 1024 RAM i=E000-EFFF.
Der Parameter RAM sorgt dafuer, dass Upper Memory Blocks bereitgestellt
werden, die Include-Anweisung legt fest, daá neben den Voreinstellungen
auch der Be- reich von E000 bis EFFF dafuer benutzt werden soll.
In diesem Zusammenhang bietet sich an, dem Page Frame ebenfalls eine
bestimmte Adresse zuzuweisen. Er wird normalerweise an Adresse D800
angelegt, doch in manchen Faellen kann es nuetzlicher sein, ihn zur
Vermeidung von Adress- konflikten zum Beispiel mit Netzwerkkarten an eine
andere Stelle zu verlegen.
Anschlussverfahren
-----------------
"Der etwas andere" Parameter nennt sich X=Adresse-Adresse. X steht hier
fuer "eXclude", also auschliessen. Damit wird festgelegt, welche Bereiche
im Upper Memory nicht benutzt werden d?rfen, um UMBs oder den Seitenrahmen
einzurichten. Das kann dann nuetzlich sein, wenn eine bestimmte Adresse im
Upper Memory fuer Erweiterungskarten freigehalten werden muss, worauf Sie
eigentlich jedes anstaendige Manual hinweisen sollte.
Zur Beschleunigung des Datentransfers ist der Parameter D=xxx interessant.
xxx steht fuer eine Groesse in KByte, die hier fuer DMA (Direct Memory
Access), den direkten Speicherzugriff, freigehalten wird. An und fuer sich
eine gute Idee:
Ein Programm kann bei der Datenuebertragung von externen Speichern wie
Disketten, Festplatten- oder CD-ROM-Laufwerken zum RAM die CPU umgehen (und
damit entlasten) und statt dessen den DMA-Controller beauftragen. Die vom
An- wender mit D=xxx definierte Groesse wird im Upper Memory fuer Daten
reserviert, die ueber den DMA-Controller ins RAM gelangen.
Hier lohnt sich dann das Experimentieren mit verschiedenen DMA-Groessen.
Die Voreinstellung 16 kann bis auf 256 heraufgesetzt werden, wobei Sie
nat?rlich den Platzbedarf im Upper Memory beruecksichtigen muessen.
Obwohl heute recht selten anzutreffen, bietet EMM386 mit dem Parameter
W=ON/OFF die Unterstuetzung eines Weitek-Coprozessors. Die Voreinstellung
ist Off, er kann aber von der Kommandozeilenebene aus eingeschaltet werden.
Bei vorhandenem Coprozessor laeuft die Zusammenarbeit mit selbigem
eventuell erst dann reibungslos, wenn EMM386 darauf aufmerksam gemacht
wurde. Allerdings setzt dies das Vorhandensein der High Memory Area voraus,
die nicht von DOS (durch DOS = HIGH) belegt sein darf.
Verwenden Sie Programme, die oft auf Speicherbereiche im Expanded Memory
zugreifen, kann es sinvoll sein, mit dem Parameter H die Anzahl der Handles
zu erh?hen (von 2 bis 255). Die Syntax lautet H=n,, wobei n die Anzahl der
Handles ist. In den meisten F?llen gen?gt die Voreinstellung 64, wenn
nicht, so sollte das Handbuch eines Programms darauf hinweisen.
Die verschiedenen Speicherarten von DOS
---------------------------------------
Konventioneller Speicher
------------------------
Die ersten 640 KByte RAM bezeichnet man als konventionellen Speicher. In
diesem Bereich werden das Betriebssystem und jedes ablaufende Programm
gestartet, das der Anwender von der Kommandozeilenebene startet.
Upper Memory Area
-----------------
Auch Adapter-Segment genannt. Gemeint ist damit der Bereich zwischen 640
KByte und 1 MByte, zu deutsch etwa "oberer Speicher". Normalerweise wird
dieser Bereich f?r den Videospeicher der Grafikkarte und das Rechner-Setup
benutzt und um Teile des ROMs sowie den EMS Page Frame hier
hineinzuspiegeln. Mit wenigen Tricks kann der Anwender einen Teil der Upper
Memory Area fuer eigene Zwecke verfuegbar machen. Gemeint sind damit die
Upper Memory Blocks, UMB abgekuerzt.
Extended Memory
---------------
Zusatzspeicher oberhalb von 1 MByte, der "an einem Stueck" verwaltet wird,
abgekuerzt XMS. Das Extended Memory kann teilweise oder vollstaendig in
Expanded Memory umgewandelt werden.
High Memory Area
----------------
Die ersten 64 KByte des Extended Memory, in die Teile des Betriebssystems
ausgelagert werden koennen.
Expanded Memory
---------------
Eine spezielle Speichertechnik, abgekuerzt EMS, die ihren Ursprung in
RAM-Erweiterungen auf Steckkarten findet. Der als Expanded Memory
eingerichtete Speicher wird in Seiten (Pages) zu je 16 KByte Groesse
aufgeteilt, die im Viererpack (64 KByte) auf einen Bereich im Upper Memory
abgebildet werden. Diesen Bereich nennt man Page Frame, zu deutsch
"Seitenrahmen". Programme muessen ueber den Treiber EMM386 Speicherinhalt
anfordern und nach dem Abbilden aus dem Page Frame lesen.
Eine Universalkonfiguration fuer die meisten Anwendungen
-------------------------------------------------------
In diesem Beispiel stellen wir eine CONFIG.SYS und eine AUTOEXEC.BAT vor,
die die wichtigsten Anwendungsfaelle abdecken. Ueber die neuen
Menue-Optionen von MS-DOS 6.2 werden verschiedene Konfigurationen
bereitgestellt, aus denen Sie beim Rechnerstart per Tastendruck auswaehlen
koennen. So benoetigen zum Beispiel Spiele sehr viel Speicher, koennen aber
auf Zusaetze wie DOSKEY verzichten. Dagegen soll fuer normale Anwendungen
maximaler Komfort geboten werden. Der EMS-Speicher wird nur noch ganz
selten (zumeist von Spielen) benoetigt, die meisten Anwendungen koennen auf
XMS zurueckgreifen, so dass nicht 64 KByte hoher Speicher fuer den Page
Frame verbraucht werden.
- Der Block [MENU] enth?lt die verschiedenen gebotenen Auswahloptionen und
deren Beschreibung. Treffen Sie innerhalb von 10 Sekunden keine Auswahl,
startet MS-DOS automatisch die Konfiguration fuer normalen
MS-DOS/Windows- Betrieb.
- Der Block [COMMON] enth?lt die Befehlszeilen, die bei jedem Start
ausgef?hrt werden. Da es immer guenstig ist, DOS hochzuladen, werden die
Befehle hier eingetragen.
- In der Konfiguration [NORMAL] werden die Treiber gestartet, die das Leben
einfach machen. Die Diskbuffer reduzieren wir auf 3, da Smartdrive die
Pufferung der Festplatte uebernimmt. Die FILES muessen wir erhoehen, da
Windows mindestens 50 benoetigt.
- Fuer die beiden Spiele-Optionen verwenden wir den Parameter /E:, mit
dem DOS sehr wenig Platz fuer Umgebungsvariablen erhaelt. Dafuer haben
wir wieder einige Bytes gespart. BUFFER und FILES bleiben auf den
Standardwerten, da wir Smartdrive aus Sparsamkeitsgruenden nicht
verwenden. Zudem benuetzen die meisten Spiele allen verfuegbaren Platz
fuer ihre eigene Zwischenspeicherung.
MS-DOS setzt in der CONFIG.SYS die Umgebungsvariable CONFIG auf die
ausgew?hlte Option (zum Beispiel SPIELE_EMS). Diese Umgebungsvariable
koennen wir in der AUTOEXEC.BAT einfach verwenden. Der Befehl GOTO %CONFIG%
springt an die Stelle im Batchfile, die mit dem entsprechenden Label
bezeichnet ist. Ein Label wird in einer Batchdatei mit der Anweisung
erzeugt und dient als Sprungmarke fuer den GOTO-Befehl.
In der Konfiguration NORMAL setzen wir den Pfad auf alle benoetigten Ver-
zeichnisse und laden einige Zusatzprogramme, die das Leben erleichtern.
Die beiden Spiele-Konfigurationen erhalten nur einen Minimal-Pfad, um
Speicher in der DOS-Umgebung zu sparen. Lediglich der Maustreiber wird in
allen Konfigurationen gestartet, da es kaum noch ein Spiel gibt, das keine
Maus- unterstuetzung bietet.
CONFIG.SYS
----------
[MENU]
MENUITEM=NORMAL,Normale Konfiguration
MENUTIEM=SPIELE,Spiele
MENUITEM=SPIELE_EMS,Spiele mit EMS
MENUDEFAULT=NORMAL,20
[COMMON]
DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH,UMB
[NORMAL]
DEVICE=C:\DOS\EMM386.EXE NOEMS
DEVICEHIGH=C:\DOS\SETVER.EXE
BUFFERS=3
FILES=50
SHELL=C:\COMMAND.COM C:\ /P
[SPIELE]
DEVICE=C:\DOS\EMM386.EXE NOEMS
SHELL=C:\COMMAND.COM C:\ /E:128 /P
[SPIELE_EMS]
DEVICE=C:\DOS\EMM386.EXE 2048 RAM
SHELL=C:\COMMAND.COM C:\ /E:128 /P
AUTOEXEC.BAT
------------
@ECHO OFF
LH C:\DOS\MOUSE.COM
GOTO %CONFIG%
:NORMAL
PATH=C:\;C:\DOS;C:\BATCH;C:\WINDOWS;C:\WINAPPS\EXCEL;C:\DOSAPPS\PACKER
LH C:\DOS\VSAFE
LH C:\DOS\DOSKEY
LH C:\DOS\SMARTDRV.EXE 2048 1024
:SPIELE
PATH=C:\;C:\DOS;C:\BATCH;
:SPIELE_EMS
PATH=C:\;C:\DOS;C:\BATCH;
Text aus dem TextArchiv 7 - http://www.ta7.de/