Expanded memory
From Free net encyclopedia
Expanded Memory was a trick invented around 1984 that provided more memory to byte-hungry, business-oriented MS-DOS programs. These were typically spreadsheets and databases running on the original IBM PC, and on its successors like the IBM AT. Both machines used real mode memory architecture, which only allowed programs to use 1 megabyte of address space, of which only up to 640 KiB was reserved for use.
The idea behind expanded memory was to use part of the remaining 384 KiB, normally dedicated to communication with peripherals, for program memory as well. In order to fit potentially much more memory than the 384 KiB of free address space would allow, a banking scheme was devised, where only selected portions of the additional memory would be accessible at the same time. Originally, a single 64 KiB window of memory was possible; later this was made more flexible. Applications had to be written in a specific way in order to access expanded memory.
This insertion of a memory window into the peripheral address space could originally be accomplished only through specific expansion boards, plugged into the ISA expansion bus of the computer. Famous 1980's expanded memory boards were AST RAMpage, IBM PS/2 80286 Memory Expansion Option, AT&T Expanded Memory Adapter and the Intel Above Board. Given the price of RAM during the period, up to several hundred dollars per megabyte, and the quality and reputation of the above brand names, an expanded memory board was very expensive.
Later, some motherboards of Intel 80286-based computers implemented an expanded memory scheme that did not require add-on boards. Typically, software switches determined how much memory should be used as expanded memory and how much should be used as extended memory.
Beginning in 1987, the built-in memory management features of Intel 80386 processor freely modeled the address space when running legacy real mode software, making hardware solutions unnecessary. Expanded memory could be simulated only by the software.
A more efficient way to access address space beyond 640KiB on 80286 and later processors, was by using the DOS protected mode interface. DOS extenders were drivers that allowed applications to run in protected mode. Rather than trying to access more memory through banking tricks, the drivers switched the processor into protected mode when running the application program, and back to real mode when accessing MS-DOS services. This allowed programs to directly access all memory which was configured as extended memory.
The use of expanded memory by applications diminished through the early 1990's, as DOS extenders became more prevalent.
Contents |
Details
An expanded memory board being a hardware peripheral, it needed a software device driver, which exported its services. Such a device driver was called "expanded memory manager". Its name was variable; the previously mentioned boards used remm.sys (AST), ps2emm.sys (IBM), aemm.sys (AT&T) and emm.sys (Intel) respectively. Later, the expression became associated with software-only solutions requiring the 80386 processor, for example Quarterdeck's QEMM (see below).
Expanded memory was a common term for several incompatible technology variants. The Expanded Memory Specification (EMS) was developed jointly by Lotus, Intel, and Microsoft, so this specification was sometimes referred to as "LIM EMS". EEMS, a competing expanded memory management standard, was developed by AST Research, Quadram and Ashton-Tate. It allowed to also remap some or all of the lower 640 kB of memory, so that entire programs could be switched in and out of the extra RAM. The two standards were eventually combined as LIM EMS 4.0.
Software emulations
The first software expanded memory management (emulation) program was probably CEMM, available in November 1987 with Compaq DOS 3.31. A popular and well-featured commercial solution was Quarterdeck's QEMM. A contender was Qualitas' 386MAX. Functionality was later incorporated into MS-DOS 4.01 in 1989 and into DR-DOS 5.0 in 1990, as EMM386.
Software expanded memory manager in general offered additional, but closely related functionality. Notably, they could create ordinary memory areas (Upper Memory Blocks) in the high 384 KiB of real mode address space and provided tools for loading small programs, typically TSRs inside ("loadhi" or "loadhigh").
Interaction between extended memory, expanded memory emulation and DOS extenders ended up being regulated by the XMS, VCPI and DPMI specifications.
Certain emulation programs did not rely on motherboard or 80386 features at all. Instead, they reserved 64 KiB of the base RAM for the expanded memory window, where they copied data to and from extended memory or hard disk when application programs requested page switches. This was programmatically easy to implement but performance was low. This technique was offered by AboveDisk from Above Software and by several shareware programs.
Programming
A 64 KB block of memory called a page frame could be set to "point" to any block of expanded memory. Software would utilize this 64 KB block as desired, and then when a different block was desired, the EMS driver would point the page frame to a different 64 KB block.
Since software could only read from or write to a single 64 KB block at a time, utilizing expanded memory was onerous, and the task was feared and hated by all PC programmers. All data needed to be stored in chunks smaller than 64 KB, and only one of these chunks was actually accessible at a time. Still, it was a way to use more memory, and for memory-demanding software, using it in a grueling way was better than not using it at all. A constant design challenge was determining what data should be stored in the easy-to-use lower 640 KB of memory, and what data should be stored in expanded memory with its inherent management overhead.
Prior to the standardization imposed by LIM EMS, every memory card shipped with its own driver and different APIs. Ater LIM EMS, Microsoft slightly altered the implementation of LIM EMS on DOS 3.31, so that memory would be aligned on word boundaries instead of byte boundaries as the original LIM EMS specification determined, causing some applications to fail to function correctly. In practice, users had to alter the configuration of their computers to use LIM EMS or Microsoft EMS according to the application they wanted to use.
See also
- Unreal mode
- Conventional memory
- Upper Memory Area
- High Memory Area
- Extended memory
- Extended Memory Specification
- No Need To Speed Up The Processor
References
- A complete discussion of EMS and programming examples can be found in ["PC System Programming for developers", 1989, ISBN 1-55755-035-2 (Book only) and ISBN 1-55755-036-0 (Book and diskette)].
- Understanding EMS 4.0 by Lloyd Borrett, Technical Cornucopia, January–February 1989
- This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.
it:Expanded Memory Specification ja:Expanded Memory Specification