Home > Articles > Here

Version 6.9 — Last Updated May 8, 2009
Click here to refresh this page & its menu bar.

“System Resources” are among the most misunderstood elements of Win95, Win98, and Win ME. Most otherwise good references don’t touch on the subject — the first two Windows textbooks I picked up do not even have “resources” in the index. And, to make things even more confusing, Windows NT/2000/XP uses the phrase “System Resources” to mean something entirely different than it means in Win 95/98/ME. This FAQ file is intended to address some of the common questions about this topic in Windows 95, 98, and ME.

Please explain what is meant by:
     a) Windows “System Resources”
     b) “Memory”

System Resources are of two kinds: User Resources, and GDI (Graphic Device Interface) Resources. In the Windows 98 Resource Kit, check the article titled “Core System Components.” Much of what follows comes from that article. The Win9x Core consists of User Resources, GDI Resources, and the Kernel.

The User component manages input from the keyboard, mouse, and other input devices and output to the user interface (windows, icons, menus, and so on). It also manages interaction with the sound driver, timer, and communications ports. Windows 98 uses an asynchronous input model for all input to the system and applications. As the various input devices generate interrupts, the interrupt handler converts these interrupts to messages and sends the messages to a raw input thread area, which in turn passes each message to the appropriate message queue. Although each Win32-based thread can have its own message queue, all Win16-based applications share a common one.

User Resources are limited to a fixed 64 KB. You cannot increase this.

The Graphics Device Interface (GDI) is the graphical system that manages what appears on the screen. It also provides graphics support for printers and other output devices. It draws graphic primitives, manipulates bitmaps, and interacts with device-independent graphics drivers, including those for display and printer output device drivers.

GDI Resources are limited to a fixed 64 KB. You cannot increase this.

Why these 64 KB limits? They are used to ensure backward compatibility for 16-bit programs originally written for DOS and Windows 3.x. This backward compatibility is one of the main reasons Windows 95/98/ME would be chosen by a user instead of Windows NT (which has much poorer and less reliable backward compatibility for 16-bit programs). Note that the 64 KB limitation on User and GDI Resources does not exist in Windows NT/2000 (which, however, may not be able to run some of the particular programs causing the “Resources drain” in Windows 95/98/ME).

The Win98 Resource Kit article “Understanding System Performance” gives more details of this that you might want to examine.

In contrast to this, “Memory” is generally used to mean RAM (although, technically, there are several kinds of ‘memory’).

NOTE: In Win95 and later, there are also 32-bit Resource heaps that do not have the 64 KB size limitation. I mention them only for completeness, but hereafter will ignore them, since they are never what cause the System Resource problems that likely brought you to this page. Those problems are caused by the two legacy 16-bit Resource heaps that remain in constant use in Win9x, and are limited to 64 KB each.

I’ve always lumped “Resources” and “Memory” together.

This is a very common misunderstanding.

My Resources drop as low as 50-60% much of the time. What’s wrong? Should I worry?

Having only 50-60% Resources available is not a problem at all. You can easily have Resources drop to 10-15% without a problem. I have run the computer with less than that (on one occassion, as low as 0%!). When Resources get in the 15% range, it is maybe time to think about shutting down some programs for a while.

What you say doesn’t match my experience. When Resources reach a certain low level, my computer runs very slowly, freezes, or otherwise misbehaves. Are you sure you can run a computer with Resources that low?

Yes. I am sure — provided Resources is the only problem. However, there are often other things going on a the same time that Resources get low. Especially with today’s advanced hardware, users are easily tempted and encouraged to run more and more programs, of increasing sophistication, at the same time. Resources are consumed when this happens — but Resources are not the only thing consumed! They may be just a symptom.

At the same time the Resources are dropping, you are probably consuming more RAM. You may be pushing your swap file functioning much harder. Also, not all programs “play well together.” That is, some of them tend to interfere with each other (especially if they include older 16-bit DOS or Windows 3.x programs). Using more programs at once increases the chance that you will encounter this type of conflict. But Resources are not the problem in this situation. (I emphasize this because it is more likely you will find out what is really causing your problem if you do not persist in believing it is something else!)

You may benefit from examining how your Windows memory management is configured. Especially in versions of Windows later than Win95, zealous memory management commonly causes problems resulting in system slowdowns and even freezes or lockouts.

Where does one see the amount of System Resources consumed, as opposed to “memory”? Does Norton System Doctor show this, for example?

Yes, you can set Norton System Doctor monitors for “User Resources” and “GDI Resources.” These show as “USER Free” and “GDI Free.” I recommend setting them. Also, the Windows Resource Meter (RSRCMTR.EXE) will monitor these nicely with very little overhead; and there are several freeware utilities that do the same thing. (Note that any utilities to monitor Resources will, themselves, consume System Resources — at least a little.)

Why do System Resources not return to their full value after I exit all programs?

There are two kinds of reasons for this: good reasons and bad reasons. These are discussed in the Knowledge Base article “Free System Resources Do Not Return To Previous Value.” In brief, the reasoning is this:

The bad reasons System Resources do not always return to their full value after exiting all programs are that a particular program sometimes will not free Resources upon exit, as it is supposed to do, perhaps because it was badly written. This is, surprisingly, relatively rare.

The good reasons involve particulars of how Windows handles system initialization. Windows defers much of system initialization until the first time a program asks for a particular service. For example, each font is initialized when a program first asks for it, rather than initializing all fonts at system startup. Then, if a program requests a service that uses deferred initialization, the service remains initialized after the program has exited — the System Resources associated with that service are not freed. The system keeps the service initialized so that the next program that requests the service does not have to wait for the service to be initialized. (This behavior is by design.)

In addition, for compatibility reasons, Windows does not free System Resources abandoned by 16-bit programs until all 16-bit modules have been closed. Only when there are no 16-bit modules running can Windows safely release their abandoned System Resources. This behavior is also by design. (16-bit applications cannot take advantage of preemptive multitasking. Their processes are scheduled cooperatively. They share memory, System Resources, and common input and message queues. This means that you cannot “pull the plug” on one of them without “pulling the plug” on all of them.) Please understand that “16-bit modules” includes not only DOS and Win3.1-based programs, but also any 16-bit Windows modules. To see just how many 16-bit modules you are running at any given time, I recommend the free WinTop utility available as part of the Windows Kernel Toys. Running WinTop, you may be surprised at just which Windows components rely on 16-bit code! For example, MSGSRV32.EXE, despite the “32” in its name, is a 16-bit module. So is RUNDLL.EXE, in contrast to RUNDLL32.EXE. Another common 16-bit component is MMTASK.TSK, which supports multimedia background tasks.

How can I manage applications that consume large amounts of System Resources?

Be careful about loading several of these programs at once, and completely close any program you are not still using. These Resources are finite. The “big three” types of programs that are Resource guzzlers are:

“What?!” (you may exclaim). “That’s pretty much all I run, except the occasional word processor! That’s mostly why I have a computer!!” For many people, this is quite true. Additionally, more and more business software includes increased Internet inter-connectivity, more dynamic graphical elements, etc. This is one of the reasons more people are encountering more serious problems with System Resources issues with each passing year.

According to the Knowledge Base article “System Resource Decrease After Starting and Quitting a Program,” additional decrease in Resources (without their release) can occur if you start to load a program and then quit it before it has completely started.

In a similar vein, as MS-MVP Richard G. Harper has pointed out, using Ctrl-Alt-Del and “End Task” is not the recommended method of shutting down a program, and is almost certain to leave Resource allocations (as well as memory allocation) in an unknown and therefore unreleased state.

If you suspend and resume your computer repeatedly, it can cause a more extreme Resource depletion — but this is only known to occur in the Japanese version of Win 98 SE. See KB Article 258191.

Can I just throw more memory at them? How can I be sure that Windows actually uses my 256 MB of RAM?

You cannot effectively throw RAM at System Resources, because the size of the two categories of Resources is limited to a specific amount. Whether you have 16 MB, 128 MB, or 1,024 MB of RAM will not affect this.

Are there third party apps that help “handle” Resource-guzzling applications?

There are programs that claim to do this, but probably Win98/ME Resource allocation cannot be improved while maintaining full backward and lateral compatibility. Memory managers and Resource managers are, first of all, programs that demand memory and Resources! Secondly, they do not tend to work that well (if at all). And one thing that is certain is that they cannot increase Resources per se. Note that Win98 and Win ME releases Resources back to the system far more efficiently than Win95 did, though there are still limits to this and you ultimately will need to reboot. (My reboot cycle on Win98 was about once every 5-6 days of normal use, and on Win ME about every 1-2 days of normal use.)

Would it help if I switched to Windows 2000, Windows ME, or Windows XP?

Windows 2000: Yes, in most case, this will resolve the problem completely. As it is based on the NT Kernel, Windows 2000 does not strive for the type of “legacy” compatibility that is vital in Win9x. It, therefore, does not have the 64 KB limitations retained in all versions of Win9x. That is, it doesn’t have the System Resources limitations that cause the problems we are discussing here. However, there is another side to the issue: Windows 2000 will not necessarily run (or run well) all of the programs that may be causing your Resource problem in the first place. Many games, multimedia programs, and especially older 16-bit applications may not run, or run as well, in Windows 2000.

Windows Millennium Edition: I’m afraid that the news here is much worse. Not only does Win ME have the same built-in limitations as Win95/98 (being part of the Win9x family), but it handles them much worse. Let me clarify this: Resources drop much more quickly in Win ME. We are told, however, that Win ME handles low Resources much better than its predecessors and, indeed, it does seem to survive somewhat better, without fatal plummit, at the very lowest levels. Nonetheless, on balance, there are very serious Resource-management problems that plague Win ME that do not plague Win95 or Win98. It has been suggested that the most promising solution centers on disabling Win ME’s single best innovation, System Restore. Unfortunately, after disabling System Restore for a week, I found no improvement in the Resource issue on Win ME. I have abandoned all hope for any resolution of this issue, other than moving to a different operating system (back to Win98, or forward to Win XP, for example).

Windows XP: Here the news is very much better! Like Windows 2000, Win XP is based on the NT Kernel, which does not have the 64 KB System Resource limitation architecture. Therefore, Win XP has all of the advantages, in this regard, of Windows 2000. Furthermore, Microsoft has put particular focus on overcoming the limitations on running the games, multimedia programs, and older 16-bit applications that perform poorly (if at all) in Windows 2000. To get out from under the System Resources issue altogether — once and for all! — and have full support for this type of software, Windows XP is the way to go.

It seems that “Resources being drained” and “memory disappearing” into the murky waters of Windows 98 or ME are two entirely separate entities!

Absolutely! You’ve got it!

Can you recommend any further reading on this subject?

The following three sites each have an article on this subject very much worth reading if you want to go further.

Visit Microsoft.com

  Top of Page   Home   Site Map   Search   Forums   Feedback   Donate