The limit of 640K of conventional memory became troublesome for many people, and by 1984, several methods were available for expanding the memory on your computer. By adding memory on expansion cards, more memory could be made available to applications. Lotus, Intel, and Microsoft created the LIM EMS (Lotus Intel Microsoft Expanded Memory Specification) standard for the implementation of memory expansion. This is often just called EMS. Memory added through expansion cards was - very logically - called expanded memory. Although all of the system's "action" took place in conventional memory, the expanded memory gave applications an area where they could store information.
Expanded memory could be beneficial only if applications were designed to use it, and eventually, many applications grew to rely on the extra storage space provided by expanded memory. Expanded memory resulted in increased application performance. After the introduction of the 80286 processor (1984), preference was given to extended memory (see the following section), and expanded memory cards became a thing of the past. Nowadays, applications that require expanded memory use an emulator, emm386.exe. For more on emm386.exe, see the section "emm386.exe," later in this tutorial.
Eventually, computer manufacturers devised a way to enable hardware to address more than 1MB of memory, and the amount of available memory then jumped to 2MB or 4MB. Unfortunately, the MS-DOS real-mode operating system was hard-coded to limit applications to 640K. In order to enable access to the additional memory, and at the same time allow Windows to use the additional memory, the idea of a memory manager was born. The memory manager would control access to the memory that was extended beyond the original 1MB memory chips.
Allowing a memory manager, such as himem.sys, to swap information in and out of extended memory gave applications access to a larger block of memory. All memory that was being accessed had to be below the 640K mark, but it could be swapped into the extended memory area at other times. With the release of protected-mode Windows 3.0 (1990), Windows was able to access extended memory directly.
When the driver (himem.sys) was created to enable access to extended memory, they took advantage of a processor design flaw, which started with the 286 processor. With MS-DOS 5.0, the himem.sys developers found out how to exploit this processor flaw to allow MS-DOS to access the first 64K of extended memory (from 1,024K to 1,088K). This area was referred to as the High Memory Area (HMA).
MS-DOS is able to load a portion of its code into the High Memory Area, freeing up memory below 640KB for other drivers and applications to use. This is a standard technique used to allow additional applications to run in the MS-DOS environment. To give MS-DOS access to this area, you will need to add the line dos = high to your to config.sys. Your config.sys file can be modified with any text editor. To then have device drivers load into the HMA, you will change your device load commands in config.sys. The following two lines show a standard device load command, and a load command which uses the HMA.
In this tutorial:
- System Files and the Boot Process
- Power-On Self-Test (POST) Process
- Standard Boot Process for Windows XP
- ARC pathnames
- The device load process
- Loading the shell
- Understanding the Boot Process for MS-DOS and Windows 9x
- win.com and vmm32
- Managing Memory
- Expanded memory
- Upper memory
- Examining Other Boot Process Files