Wer DOS noch von früher kennt, weiß, wie wichtig es ist, möglichst viel der Verfügbaren 640 KiB zu frei zu haben. Wer DOS nicht von früher kennt: Egal, wie viel RAM ein Computer unter DOS hat, es bleibt stets zusätzlich ein Limit von 640 KiB für die maximale Größe eines Programms. Dieser Wert ist maximal, zusätzliche Treiber oder Systemprogramme benötigen zusätzlichen Speicher.
640K ought to be enough for anybody.
Hat Bill Gates wohl nie gesagt,
er ist damit in guter Gesellschaft von
Albert Einstein und Oscar Wilde
Heutzutage wird DOS hauptsächlich in virtuellen Maschinen betrieben. Der Speichermanager EMM386, der Blöcke im oberen Speicher (UMB) für Treiber verfügbar macht, findet dort nicht mehr automatisch die korrekten Speicherbereiche.
EMM386 unterstützt zwei Modi, EMS und XMS. Wir behandeln hier nur XMS, da EMS nur für wirklich alte Software verwendet wird. Der notwendige Parameter für ist NOEMS. Der Parameter RAM kann benutzt werden, um den Speicherbereich, der für UMBs benutzt werden soll. Ohne weitere Spezifizierung wird der gesamte Bereich von 640 KiB an benutzt. Zusätzlich können über den Parameter I=xxxx-yyyy bestimmte Bereiche angewiesen werden. Dies ist notwendig, um auf modernen Computern mit Virtual Box die UMBs verfügbar zu machen. Folgende Bereiche stehen zur Verfügung:
Bereich | Verwendung | Benutzbar? |
---|---|---|
A000-AFFF | VGA Videospeicher. | Nicht verfügbar. |
B000-B7FF | Videospeicher für Monocromdisplays (MDA). | Sicher, die VM hat ein Farbdisplay. |
B800-BFFF | Videospeicher für Farbdisplays (CGA). | Nicht Verfügbar. |
C000-C7FF | Video ROM. | Nicht benutzbar. |
C800-EFFF | Verschiedene ROMs. Hard drive Rom von C800 bis CFFF, andere BIOS-Daten (Extended BIOS). | Sollte verfügbar sein. |
F000-FFFF | BIOS ROM. | Nicht verfügbar. |
Diese Liste gibt uns zwei Zusammenhängende Bereiche von Hauptspeicher, einmal ein kleiner Bereich (32 KiB von B000 bis B7FF) und einmal (160 KiB von C800 bis EFFF); zusammen 192 KiB. Diese beiden Bereiche können beim Laden in den oberen speicher über DEVICEHIGH oder LH mit /L:1 bzw. /L:2 angesprochen werden. Die kleinen Treiber sollten in den vorderen Bereich geladen werden, die großen in den hinteren. Wenn man optimieren möchte, es handelt sich hierbei um eine Instanz des Bin Packings Problems (Achtung! NP-Schwer ;)).
Eine CONFIG.SYS für den Anfang könnte also so aussehen:
DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF DEVICE=C:\DOS\EMM386.EXE RAM NOEMS /I=E000-EFFF /I=B000-B7FF /I=C800-CFFF /I=D000-DFFF DOS=HIGH,UMB DEVICEHIGH /L:1=C:\DOS\SETVER.EXE COUNTRY=049,850,C:\DOS\COUNTRY.SYS DEVICEHIGH /L:1=C:\DOS\DISPLAY.SYS CON=(EGA,,1) FILES=30
Die zugehörige Basisversion der AUTOEXEC.BAT ist dann:
@ECHO OFF PROMPT $p$g LH /L:2 C:\DOS\SMARTDRV.EXE /X PATH C:\DOS SET TEMP=C:\DOS MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI) MODE CON CODEPAGE SELECT=850 LH /L:2 KEYB GR,,C:\DOS\KEYBOARD.SYS LH /L:2 DOSKEY.COM
Auf dieser Konfiguration aufbauend, kann dann das System weiter aufgesetzt werden. Es gibt noch reichlich freien Speicher im oberen Speicherbereich und ein Großteil der 640 KiB sind verfügbar.