PC MEM LAYOUT

12/26/98

PC Memory Layout: The original IBM PC had to be built within the constraints of the 8086 CPU memory management. The 8086 required that RAM be present at address 0 and that the first 1K of memory space be used for Interrupt Vectors. It also required that a ROM be present at address FFFF0 to handle hardware reset. This is not an optimal layout since by putting a ROM high in the address space, it guaranteed that future expansion would be a problem.

Since the interrupt vector table had to be at 0, IBM allocated a chunk of memory starting at 0 to system tables including a BIOS communication table just above the interrupt vectors. It then loaded the operating system above those tables. The handling of the remainder of memory was left to the operating system.

Since FFFF0 was already required to be ROM, the BIOS ROM was placed at the Top of memory with space below it allocated to other ROMs and display adapter memory mapped at A0000-AFFFF and B0000-BFFFF. This arrangement allowed 640K of user memory between address 0 and 9FFFF.

This arrangement worked well for the first few years of PC usage. However, by the time the PC-AT was released in 1986, users were finding the 640K limit to be troublesome. The 80286 CPU used in the AT allowed up to 8Mb of memory and introduced the concept of real and protected modes. Real mode allowed programs coded for the 8086 to run in the lower 640K of memory. Protected mode allowed larger programs to be coded to use a large address space. Protected mode also prevents programs from doing their own I/O, usurping the operating system, and otherwise misbehaving. Unfortunately the 80286 neglected to provide a reasonable mechanism to return to Real Mode.

The PC-AT also allowed remapping of unused areas of the hardware area between A0000 to FFFFF into Real mode memory and allowed the address range FFFF0-10FFFEF (First 64K (nearly) of the area above 1mb) to be used by Real Mode Programs. These two features introduced two additional memory areas to user consciousness -- Upper Memory Blocks (UMB) between A0000 and FFFFF, and High Memory Blocks between FFFF0 and 10FFFEF. Memory management programs were introduced to manage these areas -- EMM386 and HIMEM in MSDOS, QEMM and 386MAX from third parties.

The 80386 introduced vastly improved Protected Mode handling as well as a Virtual 8086 mode that was intended to improve real mode program performance. An aside -- WIN3 Standard mode uses 80286 compatible memory management. 386 Enhanced mode requires a 386 or above CPU.

Return To Index Copyright 1994-2002 by Donald Kenney.