每个进程可以利用Win32函数SetProcessWorkingSet来更改这些缺省值,但必须拥有“增大调度优先级”的用户权限。工作集的最大规模不能超过系统初始化时
计算出的并保存在
内核变量MmMaximumWorkingSetSize中的最大值。
当缺页错误发生时,先要检测进程的工作集限制和系统中空闲内存的数量。如果情况允许,内存管理器允许进程把工作集规模增加到最大值(如果有足够的空闲页,也可以超过这个最大值)。然而,如果内存紧张,缺页错误发生时Windows2000/XP则替换而不是增加工作集中的页面。
当
频繁地发生页面修改,或需要更多的内存来满足内存需求时,Windows2000/XP可以通过将修改过的页面写回外存来保持更多可用内存。因此,当
物理内存变得很低时(MmAvailablePages少于MmMinimumFreePages),“
工作集管理器”自动修剪工作集,以增加系统中可用的空闲
内存数量。工作集管理器是运行在乎衡集管理器系统线程环境下的一个例程。(利用前面提到的Win32函数SetProcessWorkingSet,也可以在应用程序初始化后修剪自己进程的工作集。)
工作集管理器检测可用内存,并决定哪个工作集需要被修剪。如果有充足的内存,工作集管理器将计算有多少页面需要从工作集中被移出。.如果修剪是必须的,它选择大于其最小值的
工作集。它也会动态调整检查工作集,并按优先顺序排列候选的待
修剪进程链表。例如,已经等待较长时间的大进程比频繁运行的小进程优先修剪;前台运行的应用程序应最后
修剪等等。影响
工作集扩展和修剪的一些
内核变量列于表4—15,这些变量的值是确定的,或由系统设置的,不能被注册值调整。