# HIMEM.SYS

HIMEM.SYS ist ein Gerätetreiber, der es DOS-Programmen und -Treibern ermöglicht, Daten im erweiterten Speicherbereich (englisch Extended Memory) über die Extended Memory Specification (XMS) zu speichern. Mit HIMEM.SYS, der auch als Extended Memory Manager (XMM) bezeichnet wird, lässt sich der Speicherbereich oberhalb von 1 MiB so verwalten, dass verschiedene Programme und Gerätetreiber bei der Verwendung des Erweiterungsspeichers nicht in Konflikt geraten. Der Treiber kann durch Einstellungen in der CONFIG.SYS konfiguriert und angepasst werden.
Die erste Veröffentlichung von HIMEM.SYS war mit Windows 2.10, wo der Treiber unter „Windows/286“, das zwar auch auf PCs mit 8088/8086-Prozessor läuft, ab dem 80286-Prozessor die High Memory Area (HMA) verfügbar macht, und zusätzlich den Zugriff auf den gesamten Erweiterten Speicher (XMS) regelt. Der Treiber ist auch in der Variante „Windows/386“ enthalten, sowie in allen nachfolgenden DOS-basierten Windows-Versionen (Windows 2.11, Windows 3.x und Windows 9x).
HIMEM.SYS ist auch in MS-DOS ab Version 4.01 enthalten und regelt zusätzlich den Zugriff auf den Oberen Speicherbereich (die Upper Memory Area) zwischen 640 KiB und 1 MiB, wohin Teile des DOS-Kernels und von Gerätetreibern sowie TSR-Programme geladen werden können. Einige zu MS-DOS kompatible DOS-Varianten haben vergleichbare Extended Memory Manager hervorgebracht, beispielsweise DR DOS 5.0 mit HIDOS.SYS, das sogar mit 8088-Prozessoren kompatibel ist (dann aber ohne Erweiterten Speicher).
Die Höhe des nutzbaren Speicherplatzes oberhalb der 1-MiB-Grenze des Real Mode hängt von der x86-Prozessorgeneration ab. Da der 16-Bit-80286 im Protected Mode maximal 16 MiB adressieren kann, beträgt der maximal von HIMEM.SYS verwaltbare Speicherplatz 15 MiB bzw. ab dem 80386, der die 32-Bit-x86-Architektur (retronym „IA-32“) begründete, unter MS-DOS 6.x maximal 1023 MiB, obwohl 32-Bit-x86-Prozessoren bis zu vier Mal so viel Speicher direkt adressieren können (siehe 4-GB-Grenze). Bei solchen Systemen wird der Treiber bei der Installation von MS-DOS automatisch installiert.

## DOS-Startkonfiguration

In der CONFIG.SYS muss HIMEM.SYS noch vor einem Expanded Memory Manager wie EMM386.EXE geladen werden, da dieser EMS in XMS emuliert bereitstellt. Auf x86-Prozessoren ab dem „386er“ bzw. mit eigenen Treibern für den Expanded Memory Manager und mit Einschränkungen auch auf dem „286er“ können dadurch DOS-Programme, die „Expanded Memory“ voraussetzen, stattdessen den ohnehin im System verbauten „erweiterten“ (englisch extended) RAM verwenden, ohne dass teure Speicherkarten (in Form von Steckkarten) notwendig sind.
Ab MS-DOS 5.0 können danach Gerätetreiber mit dem Befehl DEVICEHIGH in den oberen Speicherbereich geladen werden. DR DOS unterstützt zusätzlich den Befehl HIDEVICE. Es ist jedoch Voraussetzung, dass DOS die Verwaltung der Speicherblöcke im oberen Speicherbereich (UMB, Upper Memory Block) übernimmt, wofür der Befehl DOS=UMB benötigt wird. Mit DOS=HIGH können Teile des DOS-Kernels selbst in den oberen Speicher geladen werden.
Beispiel für CONFIG.SYS:
Danach können Gerätetreiber in den oberen Speicherbereich geladen werden:
Ab MS-DOS 6.0 unterstützt der Befehl DEVICEHIGH auch den Parameter /L, mit dem der Block direkt angegeben werden kann.
Die Startdatei AUTOEXEC.BAT folgt dieser Logik mit dem Befehl LOADHIGH oder kurz LH, ebenfalls ab MS-DOS 5.0. DR DOS versteht zusätzlich den Befehl HILOAD:
Unter DR DOS können auch in der CONFIG.SYS Programme geladen werden, wofür die Befehle INSTALLHIGH und HIINSTALL verwendet werden können. MS-DOS unterstützt dies nicht.

## Windows

Zum Ausführen von Windows 3.x im Standard- (auf 80286) oder Erweiterten Modus (auch „386-Modus“ genannt, da dieser mindestens einen 80386-Prozessor benötigt) ist HIMEM.SYS unbedingt notwendig; ist der Treiber nicht vorhanden, startet Windows nicht. Alle auf Windows 3.11 folgenden DOS-basierten Windows-Versionen, die als Windows 9x bezeichnete Reihe von Windows 95 bis Me, benötigen HIMEM.SYS für die DOS-basierte Funktionalität, während die Speicherverwaltung für native Windows-Programme vom Virtual Memory Manager (VMM, VMM32.vxd) verwaltet wird, wie dies auch unter Windows NT der Fall ist. Damit DOS-Programme weiterhin laufen können stellen ihnen die NT-basierten Windows-Versionen aber ebenfalls ein HIMEM.SYS innerhalb einer virtuellen DOS-Umgebung (NT Virtual DOS Machine, NTVDM) zur Verfügung.