In Windows 2000, a fair amount of the memory reserved specifically for the kernel is devoted to two things: the paged address pool and the kernel stack. The paged address pool is memory used by kernel-mode components, such as Ring 0 drivers. The kernel stack is memory reserved for use by each thread in the kernel for system calls. Both of these memory allocations use the same portion of 2-GB space reserved for the kernel, but the balance of the memory allocation between the two of them is "soft-wired" into Windows 2000.
On some servers with exceptionally high loads, or that have large numbers of users logging in via Terminal Services, you may notice unexpected errors, such as the computer refusing to accept new logins or the failure of kernel-level drivers. This is usually a sign of the paged address pool or kernel stack running out of memory. STOP 0x0000003F or STOP 0x000000D8 errors are another symptom of this problem.
The kernel stack area is set to be as large as possible when Terminal Services is in use, so if this problem is appearing on a system that uses Terminal Services a great deal, the paged address pool is probably running out of room. To fix this, you need to adjust the memory partition between the paged address pool and the kernel stack.
To change the partition, edit the following Registry key:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\SystemPages
If your computer does not already have the maximum amount of physical RAM installed, you may also want to look into adding RAM as another preventive measure, especially if the machine was in need of a RAM upgrade to begin with.
Serdar Yegulalp is the editor of the Windows 2000 Power Users Newsletter.
This was first published in June 2002