菜鸟必看 揭开系统资源的神秘面纱

许多朋友对计算机里头的“当红”名词“系统资源”可能并不陌生 , 在报刊或书籍上我们经常可以看到它的影子 , 但对于这位朝夕相处的朋友 , 你究竟了解多少呢?不少朋友一直存在认识上的误区 , 他们把系统资源和内存占用当作一回事了 。真实的情况如何呢?想弄清楚问题的答案 , 那就随本文一起揭开系统资源的神秘面纱 。

一、溯本清源 , 弄清各类资源的含义
“物以类聚 , 人以群分” , 对于资源的概念划分 , 我们听得最多的主要有:CPU资源、内存资源、系统资源、用户资源、GDI资源 , 这些不同名称的资源 , 彼此间究竟有没有联系?要走出认识上的误区 , 首先必须弄清楚它们的含义 。
先从系统资源说起吧 。简单地说 , 当应用程序运行时 , 内存需要一块空间来追踪、保留正在执行的程序的状态 , 比如按钮、光标、菜单位置和位图、窗口状态等 , 存储这些信息的空间有个专有名词来形容 , 那就是我们熟悉的“系统资源” , 而存储这些信息的空间是一种称为“堆”的内存块 , 你可以把“堆”理解成采用特殊机制管理的内存空间 。
根据存储对象类型的不同 , 系统资源分为两个方面:用户资源和GDI(Graphic Device Interface , 图形设备接口)资源 。由系统内核程序“User.exe”管理的堆叫作用户资源堆 , 用来存储窗口状态、菜单位置等信息;由系统内核程序“Gdi.exe”管理的堆叫作GDI资源堆 , 用来存储画刷、画笔、字体、调色板等图形对象信息 。用户资源堆和GDI资源堆合称为系统资源堆 , 习惯上我们称之为系统资源 。
现在大家应该明白 , 系统资源和内存资源并不是同一回事 。我们说一个程序使用了多少内存资源 , 实际上就是指该程序运行时须要占用多少内存空间 , 依据软件设计的优化程度、功能强弱等因素 , 有的只需几百KB , 有的却需要几十MB甚至数百MB , 通常比系统资源要大得多 。
CPU资源就更好理解了 , 它实际上指的是CPU使用率 , 软件运行时都要通过CPU进行数据运算 , 占用一定的CPU执行时间 , CPU使用率是衡量软硬件设计的重要指标 。某些设计不完善或陷入死循环的程序 , 往往会让系统处于无反应状态 , 原因就是它们的CPU使用率很高 。在某些软件评测文章里 , 我们通常还可以看到“资源占用过高”的评语 , 但实际上这种提法并不全面 , 应该具体指出是哪类资源占用过高 , 比如CPU资源、内存资源或系统资源 。
二、寻根把脉 , 探讨系统资源管理机制
“瘟酒五”、“瘟酒八”的不稳定是众所周知的 , Windows 2000/XP的稳定性就好多了 。事实上 , 引发Windows 9x不稳定的罪魁祸首就是系统资源的管理方式 。基于NT内核设计的Windows 2000/XP , 同使用Win9x内核的Windows 95/98/ME相比 , 管理系统资源的机制是完全不同的 。
1.Windows 9x
【菜鸟必看 揭开系统资源的神秘面纱】在Windows 9x系统下 , 微软将系统资源分为五个堆 , 其中用户资源堆占据三个 , GDI资源堆为两个 。三个用户资源堆分别是:16位的用户堆 , 大小为64KB;32位的窗口堆 , 大小为2MB;32位的菜单堆 , 大小为2MB 。两个GDI资源堆分别是:16位的GDI堆 , 大小为64KB;32位的GDI堆 , 大小为2MB 。从划分类型来分析 , 我们不难发现有16位和32位两种 , Windows 9x如此设计系统资源的原因 , 就是为了让旧的16位程序能在新的操作系统上正常运行 。
著名的“木桶原理”大家都知道吧?如果组成木桶的木板长短不一 , 那么这个木桶的最大容量不取决于长的木板 , 而取决于最短的那块木板 。木桶原理同样适用于系统可用资源 , 道理很简单 , 当某个类型可以分配的资源被占尽时 , 即使其它部分剩下的资源还很多 , 系统也会因资源不足而出现问题 。所以说 , 可用的系统资源一定等于可用用户资源和可用GDI资源中较小的那一个 。为了保持与16位应用程序的兼容性 , Windows 9x的大量数据要占用16位的64KB的资源堆 , 这部分资源首先被大量消耗 , 限制系统资源使用的是64KB的资源堆而不是2MB的资源堆 。

推荐阅读