EMM386.EXE

from Wikipedia, the free encyclopedia

EMM386.EXE (also EMM386.SYS ) is a system file that was used for memory management from 1987 in DOS versions from 3.0 and in DOS-based Windows versions from version 2.0. They used to manage the extended memory ( Expanded Memory ) on computers with Intel i386 CPUs and their successors. In this context, LIM-EMS (Lotus-Intel-Microsoft) memory or "expansion memory" is also used in German.

The EMM386.EXEor EMM386.SYScan be CONFIG.SYSconfigured and adjusted using settings in the . In addition, it can be called EMM386.EXEfrom the command line and thus display current settings or make configuration changes to a very limited extent. Depending on the manufacturer, some EMM386 versions require a loaded HIMEM.SYSdriver.

Probably the first version came into circulation for the first time in 1987 as Compaq CEMM.EXE with Compaq DOS 3.31, an OEM variant of MS-DOS . From around 1988, the name established itself EMM386.SYSfor the expanded memory manager of MS-DOS and DR-DOS versions, which required an Intel i386 or higher CPU to provide the expanded memory pages. From 1991, with the spread of MS-DOS 5.x, a significantly improved version was EMM386.EXEintroduced.

functionality

The driver EMM386.EXEprovides DOS programs, which can only address main memory from the lower area (below 1  MiB ), additional memory pages from the high memory area (above 1 MiB). For this he needs a memory window ( English page frame or page window ) in the lower memory area, preferably in the area between 640 KiB and 1 MiB ( UMB ). In this typically 64 KiB large windows then 16KB each arbitrary large memory pages ( English pages displayed) from the high memory. However, you can also use UMBs with less than 16 KiB (the size only has to be an integer multiple of 16 bytes). To access the relevant program first selects the desired page, the EMM386 shows this page and lets the program work with this page. By changing the page - the new page is displayed at the same address - all areas of the high memory can be used. From the point of view of the program, only memory addresses from the lower memory are used in any case.

From a software point of view, EMM386 thus achieves the same effect as the original expansion memory drivers designed for special EMS plug-in cards. While these, however, fade in their own memory areas, which cannot be addressed at all for the CPU, using special bank switching hardware, EMM386 only uses "on-board resources" from the 386 and higher processors. As a side effect, however, the processor is switched from the real mode common under DOS to the virtual 8086 mode , with which some programs that work very close to the hardware and some programs that use special memory management tricks are not compatible. The Intel 80286 and its predecessors do not yet offer the overlay of memory at other addresses, therefore EMS memory can only be implemented using the special EMS plug-in cards.

Newer versions of the EMM386 offer a further, conceptually independent function in addition to or instead of the EMS management: Drivers and other resident programs can be loaded in upper memory blocks (UMBs). The DEVICEHIGH and LOADHIGH commands ( LH for short ) are used for this. This enabled additional memory to be kept free for DOS application programs (below the 640 KiB limit).

With more modern operating systems, such additional drivers are not required, they have a kernel with integrated memory management for the entire physical main memory. The programs developed for these operating systems can now also handle 4 GiB RAM (or more).

A similar technology is offered in Windows on 32-bit systems: It is called AWE ( Address Windowing Extension ). Assuming suitable hardware, this technology provides memory that is beyond the 4 GB limit caused by 32-bit addressing , also using window technology. AWE was used by some memory-intensive programs such as Microsoft SQL Server . With the spread of 64-bit operating systems, this window technology will soon become meaningless.

See also