Memory management on the IBM family was made complex by the need to maintain backward compatibility to the original PC design[1] and real-mode DOS, while allowing computer users to take advantage of large amounts of low-cost memory and new generations of processors.
Since DOS has given way to Microsoft Windows and other 32-bit operating systems not restricted by the original arbitrary 640 KiB limit of the IBM PC, managing the memory of a personal computer no longer requires the user to manually manipulate internal settings and parameters of the system.
Starting at the lowest end of the address space, the PC had read/write random access memory (RAM) installed, which was used by DOS and application programs.
This part of the address space is called "conventional memory" since it is accessible to all versions of DOS automatically on startup.
The 128 KiB region between 0xC0000 and 0xDFFFF was reserved for device Option ROMs, including Video BIOS.
The starting address is loaded into the program counter of the CPU after a hardware reset and must have a defined value that endures after power is interrupted to the system.
Mapping two devices to use the same physical memory addresses could result in a stalled or unstable system.
Virtual memory in the 8088 and 8086 was not supported by the processor hardware, and disk technology of the time would make it too slow and cumbersome to be practical.
Expanded memory was a system that allowed application programs to access more RAM than directly visible to the processor's address space.
Enabling the A20 line is one of the first steps a protected mode x86 operating system does in the bootup process, often before control has been passed onto the kernel from the bootstrap (in the case of Linux, for example).
Starting with versions 5.0 of DR-DOS (1990) and of MS-DOS (1991), parts of the operating system could be loaded into HMA as well, freeing up to 46 KiB of conventional memory.
Other components, such as device drivers and TSRs, could be loaded into the upper memory area (UMA).
The Intel 80486 and Pentium added a special pin named A20M#, which when asserted low forces bit 20 of the physical address to be zero for all on-chip cache or external memory accesses.
[4] Intel processors from the 386 onward allowed a virtual 8086 mode, which simplified the hardware required to implement expanded memory for DOS applications.
Installing and configuring a memory manager might involve hours of experimentation with options, repeatedly rebooting the machine, and testing the results.
Such memory is not directly available to DOS applications running in the so-called "real mode" of the 80286 and subsequent processors.