Windows 3.1: Using Upper Memory Blocks (UMBs) (83031)



The information in this article applies to:

  • Microsoft Windows 3.1
  • Microsoft Windows 3.11

This article was previously published under Q83031

SUMMARY

Microsoft Windows version 3.1 running in 386 enhanced mode contains support for the use of upper memory blocks (UMBs) just as MS-DOS 5.0 does. With MS- DOS 5.0, you can make use of free addresses in the 384K upper memory area (UMA) by loading EMM386.EXE and using the LOADHIGH or DEVICEHIGH commands. Windows is compatible with this configuration, but cannot make use of free UMB space, once EMM386.EXE is loaded.

MORE INFORMATION

Windows 3.1 can use free UMBs in the same manner as MS-DOS 5.0. Both operating systems can access the UMA and provide UMB support for programs. Windows 3.0 does not have this feature and subsequently cannot make use of the UMA. This means that the application programming interface (API) translation buffers are always stored in conventional memory or lower memory if EMM386.EXE is loaded. With Windows 3.1, the translation buffers can be loaded into the UMA, and will be, if there is enough free memory in the UMA (4-34K).

This DOES NOT mean that you can load Windows 3.1 high into a UMA. What this means is that Windows 3.1 understands how to access and use the UMA itself, without any interaction on your part.

The available UMBs are used for things that would otherwise have a "low 640 KB conventional" memory footprint. This means that Windows can move things out of an application's way and make the contiguous available space for applications larger by placing things into the UMBs. Primarily, API translation buffers (because they are the largest items) are moved into the UMBs. These buffers are used to map things such as INT 21h, INT 10h, INT 13h, and INT 5Ch calls that are made by Windows- and MS-DOS-based applications. These buffers can take up between 4K and 32K of UMBs.

Modification Type:MajorLast Reviewed:10/15/2003
Keywords:KB83031