Adding memory would not be counterproductive. The OS will ignore
anything it doesn't like. (There are even boot.ini options, to
make the OS ignore more of the memory.) Like I said, install 4GB,
reports 3GB. Install 8GB, reports 3GB. And that's in x32 Windows.
Other OSes would do this differently. Intel PAE has been around
for years, but it didn't become a strategic problem for Microsoft,
until big memory DIMMs became available.
This is where I got the information. This developer "hacked"
the OS, such that x32 would run with more than 4GB. But the hack is
not public domain, and there was no intention to damage Microsoft's
interests financially.
http://www.geoffchappell.com/notes/windows/license/memory.htm
You can shrink available address space, by using a "big" video card.
That's a hardware way of causing a crisis. I use a 512MB video card
in my current system, but they're available with up to 2GB of video
memory onboard. If you buy such a card, a 64 bit OS is recommended.
On a 32 bit OS, there's no address space left for system memory.
There is even at least one video card, which has 4GB of memory onboard
(a limited edition card), which would make it impossible to boot
a 32 bit Windows OS. There would be no room for the ability
to address system memory. The Asus MARS video card was the first one,
but I noticed one announced just the other day, so they're still
trying to do stuff like that. Only a Windows x64 need be used with
that, for gaming. It has less of an issue with address space.
*******
In terms of running out of resources, your database may need a large
amount, but any utilities that attempt to reach the database may need
some too.
On older OSes, resources are chopped up and bounded. Paged pool has limits,
such that with fragmentation and lack of recovery of resources, you could
run out. A reboot can fix that temporarily. Programs can also run out of
stack or heap. Only when an OS design "unlimits" how all kinds of memory
are allocated, do starvation issues like this go away.
To give an example of that, when the computer starts, the hardware
storage cards, the ones with their own BIOS chips, get to share a 128KB
region in low memory. Even if the computer has 4GB installed, the same
128KB region is made available. Some hardware storage cards can't load their BIOS
code, because the available space is too small. And that's an example of
a static allocation that is too small. All part of the "640K architecture".
Just because something runs out of RAM, does not imply you're
actually out of RAM. It just means a barrier was erected which
prevented the program or process from getting what it wanted.
One of the first OSes I worked on (written by our own developers),
had the static stack/static heap problem. When writing programs,
you were constantly adjusting stuff like that. And all because
everything was done statically. I had to learn what a stack
and what a heap was, to get my simple programs to run :-)
On Unix, the OS can apply "quotas" to RAM. On my old SunOS
or Solaris boxes, you could limit any single processor to say,
512MB. This would prevent a runaway process from taking all
available memory. I don't think a Windows desktop has that feature
(no quota for RAM on a per-process basis).
On my WinXP x32 system, I've never had a program use more than
1.8GB. Which lines up with the 2GB/2GB split between virtual
address space as set up by default for the OS. Your 2GB physical
RAM machine, should not have been affected by that, and lines up
pretty well with those limits. But your problem seems to be,
even the current amount of RAM, is not being made available.
And the config options for Windows, should not impact a 2GB installed
machine, as far as I know.
You can shoot yourself in the foot, with the /maxmem switch,
but you have no reason to be adding a thing like that. Win98
also had a mechanism like this, in a different file, but there
were legit reasons for ordinary users to be using such options.
I had a 2GB machine, dual booting Win98, where the usage of
such switches prevented Win98 from using more than 512MB (which
is a comfortable limit for Win98 usage).
http://msdn.microsoft.com/en-us/library/windows/hardware/ff557127(v=vs.85).aspx
I've also read articles like this, and played around with the
tools, but didn't find this particularly helpful. This is
still valuable information - make no mistake about that.
But I didn't have any "Aha!" moments when trying this stuff.
I remained as blind as I was before :-)
"Pushing the Limits of Windows: Virtual Memory"
http://blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx
Paul