Upper memory block

from Wikipedia, the free encyclopedia

UMB ( English " U pper M emory B lock" upper memory block ) is a term from the memory management of DOS and describes the freely usable areas in the UMA ( U pper M emory A rea, English for "upper memory area") above the conventional memory of 640  KB (= 655,360 bytes) and below the 1 MB limit (= 1,048,576 bytes).


The address space above the memory address A0000 hex (corresponds to 640 KB) is reserved for additional hardware (graphics cards, SCSI controllers and similar) and for the BIOS . In the case of the first IBM PCs (such as the IBM 5150 ), which only had 64 KB of RAM as main memory , this was not a significant limitation. Later, however , the programs became more and more memory-hungry, with many demanding that a very large part of the conventional memory (below A0000 hex ) be available for themselves. This posed a problem when various drivers and TSR programs were to be loaded into the conventional memory - the remaining memory was then ultimately too small for many programs. At the same time, the address space above A0000 hex was only completely occupied by additional hardware and the BIOS in the rarest of cases; mostly between 128 and 256 KB remained unused, not directly after the end of the conventional memory at A0000 hex (the graphics card is located here), but in the middle of the reserved area, a maximum of C8000 hex to F8000 hex .

Conventional DOS programs can address this special address space and use it without any problems, but there is no working memory here, since the area is kept free for additional hardware. If you want to programs, drivers or TSR programs do not load into conventional memory but use, for UMBs, you need a driver with the help of special registers of the chipset at 80286 -based PC or with the help of from the i386 existing MMU ordinary RAM from higher addresses (beyond the 1 MB limit) "moved" to this address space. Such drivers are for example EMM386.EXEor UMBPCI.SYS. These then ensure that RAM is visible in the UMBs. The conventional memory must always be a single contiguous address space under DOS, so the UMBs cannot be used directly as part of the conventional memory. So that drivers and TSR programs can still be loaded into this RAM, the operating system must also play along; it provides the new commands DEVICEHIGH(for drivers) and LOADHIGH(for short LH, for TSR programs) that each load their target into UMBs. In addition, a new system call was introduced in MS-DOS 5.0 (via interrupt 21 hex , function 5803 hex ) with which a program signals to the operating system that it also accepts memory from the UMA for memory requests. Alternatively, the XMS driver ( e.g. HIMEM.SYS ) can be addressed explicitly in order to reserve 10 hex memory areas in the UMA via the API function . In this way, the amount of conventional memory that remains free can be increased, so that more memory remains for ordinary application programs and games.

UMB use was introduced by Digital Research in May 1990 with DR DOS 5.0, and Microsoft followed suit in June 1991 with MS-DOS 5.0.

Confusion of terms

In the German-language MS-DOS versions that supported the High Memory Area (HMA), this was referred to as the "upper memory area". When support for UMBs was added, the name “high storage area” was used for them. The naming was handled the other way around in German than in English, which, together with the overall difficult understanding of the MS-DOS memory management, led to a lot of confusion among users. It was not until Windows 95 that the German terms were swapped so that they now corresponded more directly to the English.

Individual evidence

  1. http://www.phatcode.net/res/219/files/xms30.txt