Conventional memory

From Free net encyclopedia

Revision as of 02:51, 19 April 2006; view current revision
←Older revision | Newer revision→

Template:Cleanup-date Conventional Memory is the first 640 kilobytes of an IBM PC's memory. Prior to extended memory such as EMS, XMS, and HMA, real mode applications could use only this part of the memory. Even when extended memory is present, real-mode applications have to be specially programmed to use it using a complex system of overlays; consequently, many applications continued to use only conventional memory.

As DOS applications grew larger and more complex in the late 1980s, it became common practice to free up as much conventional memory as possible by moving device drivers and TSRs into Upper Memory Blocks (UMBs). For more information on this, see the article on the Upper Memory Area.

With modern operating systems and 32-bit machines the distinction between conventional and extended memory is rarely relevant, since all memory can be accessed uniformly in protected mode, but for older real mode OSes such as MS-DOS it was often worthwhile to tune the system to load drivers and other system components into Upper Memory Blocks - chunks of extended memory remapped into the Upper Memory Area (UMA) - in order to leave as much conventional memory as possible free for running large applications. This is detailed in the article on the UMA.

640 KB barrier

The 640 KB barrier is an aspect of the IBM PC and compatible personal computers when running under MS-DOS or DR-DOS, which could only address up to 640 KB of memory for running applications. This is due to limitations of the original IBM PC, which used the Intel 8088 CPU.

The term refers to the size of the PC's conventional memory. The 8088 and 8086 were only capable of addressing 1 MB of memory, of which IBM reserved the upper 384 KB for system purposes — the Upper Memory Area. This left only the lower 640 KB for user programs and data. At the time of the PC's release in 1981, 640 KB would have seemed more than plenty for the typical user. Keep in mind that the most popular home computer of that era, the Commodore 64, had only 64 KB, of which only 38 KB were available to the user.

To maintain compatibility with older OSes, the 640 KB barrier remained part of the PC design even after the 8088 had been replaced with the Intel 286 processor, which could address up to 16 MB of memory. Indeed it is still present in PC compatibles based on the 80386 and newer processors, even today, if they are running DOS.

Note that it is neither a limitation of the PC compatible nor of MS-DOS itself, but only the combination of the two. Non-DOS operating systems such as Xenix and Netware did not suffer from the restriction, nor did MS-DOS running on Non-PC compatible X86 computers.

The barrier was only overcome with the arrival of DOS extenders, which allowed DOS applications to run in Extended Memory, but these were not very widely used. The first PC operating system to integrate such technology was Windows/386 2.1, released in 1988. Windows applications did not suffer from the 640 KB barrier.

Prior to DOS extenders, if a user installed additional memory and wished to use it under DOS, they would first have to install and configure drivers to create either Expanded Memory Specification (EMS) or Extended Memory Specification (XMS) RAM, and applications could only store data in the additional space, not executable code.

One technique used on early IBM XT computers with MDA or CGA displays was to add more memory to the motherboard and use a custom address decoder PROM to make it appear at 640 KB; this moved the barrier to 704 KB [1]. Memory managers on 386-based systems (such as QEMM or MemoryMax in DR-DOS) could achieve the same effect, adding conventional memory at 640 KB and moving the barrier to 704 KB or 736 KB. Video modes using the memory between 640 KB and 704 KB (ie, all graphics modes except those supported by the CGA) could not be used in this situation.

The AllCard, an add-on MMU for XT-class computers, allowed normal memory to be mapped into the &A0000-&EFFFF address range, giving up to 952 KB for DOS programs. Programs such as Lotus 1-2-3 which accessed video memory directly needed to be patched to handle this memory layout - the 640 KB barrier was removed at the cost of IBM hardware compatibility.

This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.

See also

References