The
640 KB barrier is an architectural limitation of
IBM PC compatible PCs. The
Intel 8088 CPU, used in the
original IBM PC, was able to address 1 MB (220 bytes), since the chip offered 20
address lines. In the design of the PC, the memory below 640 KB was for
random-access memory on the motherboard or on expansion boards, and it was called the conventional memory area. The first memory segment (64 KB) of the conventional memory area is named
lower memory or
low memory area. The remaining 384 KB beyond the conventional memory area, called the
upper memory area (UMA), was reserved for system use and optional devices. UMA was used for the
ROM BIOS, additional
read-only memory, BIOS extensions for fixed disk drives and video adapters, video adapter memory, and other
memory-mapped input and output devices. The design of the original IBM PC placed the
Color Graphics Adapter (CGA) memory map in UMA. The need for more RAM grew faster than the needs of hardware to utilize the reserved addresses, which resulted in RAM eventually being mapped into these unused upper areas to utilize all available addressable space. This introduced a reserved "hole" (or several holes) into the set of addresses occupied by hardware that could be used for arbitrary data. Avoiding such a hole was difficult and ugly and not supported by
DOS or most programs that could run on it. Later, space between the holes would be used as upper memory blocks (UMBs). To maintain compatibility with older operating systems and applications, the 640 KB barrier remained part of the PC design even after the 8086/8088 had been replaced with the
Intel 80286 processor, which could address up to 16 MB of memory in
protected mode. The 1 MB barrier also remained as long as the 286 was running in
real mode, since DOS required real mode which uses the segment and offset registers in an overlapped manner such that addresses with more than 20 bits are not possible. It is still present in IBM PC compatibles today if they are running in real mode such as used by DOS. Even the most modern Intel PCs still have the area between 640 and 1024
KB reserved. This however is invisible to programs (or even most of the operating system) on newer operating systems (such as
Windows,
Linux, or
Mac OS X) that use
virtual memory, because they have no awareness of physical memory addresses at all. Instead they operate within a
virtual address space, which is defined independently of available RAM addresses. Some motherboards feature a "Memory Hole at 15 Megabytes" option required for certain
VGA video cards that require exclusive access to one particular megabyte for video memory. Later video cards using the
AGP (PCI memory space) bus can have 256 MB memory with 1 GB
aperture size.
Additional memory One technique used on early
IBM XT computers was to install additional RAM into the video memory address range and push the limit up to the start of the
Monochrome Display Adapter (MDA). Sometimes software or a custom
address decoder was required for this to work. This moved the barrier to 704 KB (with MDA/HGC) or 736 KB (with CGA).
Memory managers on
386-based systems (such as
QEMM or MEMMAX (+V) in
DR-DOS) could achieve the same effect, adding conventional memory at 640 KB and moving the barrier to 704 KB (up to segment B000, the start of MDA/HGC) or 736 KB (up to segment B800, the start of the CGA). Only CGA could be used in this situation, because
Enhanced Graphics Adapter (EGA) video memory was immediately adjacent to the conventional memory area below the 640 KB line; the same memory area could not be used both for the
frame buffer of the video card and for transient programs. All Computers' piggy-back add-on
memory management units
AllCard for XT- and
Chargecard for 286/386SX-class computers, as well as MicroWay's ECM (Extended Conventional Memory) add-on-board allowed normal memory to be mapped into the A0000–EFFFF (
hex) 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. Therefore, the 640 KB barrier was removed at the cost of hardware compatibility. It was also possible to use
console redirection (either by specifying an alternative console device like
AUX: when initially invoking
COMMAND.COM or by using
CTTY later on) to direct output to and receive input from a
dumb terminal or another computer running a
terminal emulator. Assuming the
System BIOS still permitted the machine to boot (which is often the case at least with BIOSes for embedded PCs), the video card in a so called
headless computer could then be removed completely, and the system could provide a total of 960 KB of continuous DOS memory for programs to load. Similar usage was possible on many DOS- but not IBM-compatible computers with a non-fragmented memory layout, for example
SCP S-100 bus systems equipped with their
8086 CPU card CP-200B and up to sixteen SCP 110A memory cards (with 64 KB RAM on each of them) for a total of up to 1024 KB (without video card, but utilizing console redirection, and after mapping out the boot/BIOS ROM), the
Victor 9000/
Sirius 1 which supported up to 896 KB, or the
Apricot PC with more continuous DOS memory to be used under its custom version of MS-DOS. == DOS driver software and TSRs ==