当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 系统资源泄漏的问题和对策

安全基础
text2html格式转换软件转换txt为网页
Gmail邮件搬家:Gmail邮件直接搬家到网易邮箱
木马下载器导致大量的同名进程wmisqtu.exe
百度知道文档分享:上传下载需要的文档
局域网里固定IP地址无法上网故障解决方法
警告:XP系统赶快停止使用IE6
删除火狐浏览器保存的表单密码
Windows7系统下怎么修改explorer.exe文件
取消ESET NOD32开机扫描的设置技巧
查看垃圾邮件信头找到真正的发件人
输入法技巧:Ctrl+Shift灵活运用
网络时代坐在家里能时刻掌握火车票剩票信息
安全删除USB设备 做到一键删除
安全专家:网络购物过程中的十大“陷阱”
禁用Adobe Reader和Acrobat里javascript功能
屏幕分辨率和显示屏调节工具调节屏幕分辨率
退出路由或者交换机使用正确退出命令exit
上网计算机查漏洞方法和相应处理措施
XP系统下IE7默认首页改变的方法
新手入门:QQ邮件常见问题问答

安全基础 中的 系统资源泄漏的问题和对策


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 51 ::
收藏到网摘: n/a

有人说,如果使用Windows98,那么在使用了3个小时以后,最好能重新启动一次,因为它太累了。事实上确实如此,但并不是因为它太累了,而是因为系统资源的泄漏。

  一、系统资源

  谈到Windows时,有一个必说的话题--系统资源(System Resource),但系统资源到底是什么,有人说是指CPU,有人说是指硬盘空间,有人说是指内存……

  当应用程序在Windows中运行时,Windows必须实时"跟踪"该应用程序的运行,并保留与之相关的许多信息,如按钮、光标、菜单的位置和位图、窗口的状况等,这些信息由Windows保留在一种叫堆的内存块中,堆的英文为Heap。简单地说,堆是采用特殊机制管理的内存块。由Windows的一个系统内核User.exe管理的堆叫作User资源堆(User Resource Heap),由另一个系统内核Gdi.exe管理的堆叫作GDI资源堆(Graphical Device Interface Resource Heap,简称GDI Resource Heap),User资源堆和GDI资源堆合称为系统资源堆(System Resource Heap),习惯上就把它们叫作系统资源(System Resource)。

  微软将Windows的系统资源(堆)分为五个堆,其中User资源堆为三个,而GDI资源堆为两个。

  三个User资源堆分别是:16位的用户堆(User Heap,64KB);32位的窗口堆(Windows Heap,2MB);32位的用户菜单堆(User Menu Heap,2MB)。

  两个GDI资源堆分别是:16位的GDI堆(GDI Heap,64KB);32位的GDI堆(GDI,2MB)。

  从这里的系统资源分类和大小我们应该明白,不管CPU是P4还是486,内存是8M还是1G,所有Windows的用户都拥有同样大小的系统资源(堆),用户不能自己增加或减少系统资源的大小,这是由操作系统决定的,与硬件档次没有任何关系。

  Windows的User资源堆和GDI资源堆的可用(Free)空间称为可用 User资源和可用GDI资源,Windows中以百分数表示它们,用户可以选择 "开始/附件/系统工具/资源状况"(见图),来实时查看它们的大小。注意,"资源状况"不是Windows的默认安装组件,使用典型安装的用户需自己添加上去。

  二、为什么可用系统资源不断减少

  当一个应用程序在Windows中被加载时,Windows自动地将可用User资源堆和可用GDI资源堆中的一部分空间分配给它,而当应用程序退出时,这部分空间也应该由Windows收回以交给别的应用程序使用。但实际上几乎所有的Windows 用户都发现:一个应用程序加载前和退出后可用系统资源的值是不相等的,而且随着应用程序的不断加载和退出,随着Windows使用时间的增加,附图中资源状况显示的可用系统资源也在不断减少。

  微软的正式解释是:

  * 系统初始化

  Windows在启动时要进行系统初始化(System Initialization)的过程, Windows的系统初始化属于延时初始化。例如,Windows在启动时只初始化当前使用的字体,以后当应用程序要使用到尚未被初始化的字体时, Windows才会初始化该字体,这种由应用程序根据需要提出要求而发生的初始化服务就是所谓的延时初始化。对于属于延时初始化的服务, Windows还采用了特别的管理方式,当向Windows提出延时初始化服务的应用程序退出后,与延时初始化服务相关的系统资源(例如上面提到的与新字体有关的系统资源)不会随着应用程序的退出而马上释放,这是造成应用程序加载前和退出后可用系统资源的值不相等的原因之一。Windows不马上收回与延时初始化服务,是为了防止该应用程序或别的应用程序以后又向系统提出同样的初始化服务而导致系统不断重复服务而浪费时间。例如对于加载同一应用程序,第二次加载的时间会明显少于第一次,显然延时初始化功不可没。

  * 兼容性

  在Windows中运行的所有16位应用 程序共享相同的地址空间,当其中某一个16位应用程序正常退出或出现错误而被关闭时, Windows 9X并不马上收回这个应用程序所占用的系统资源,这也是造成一个应用程序加载前和退出后可用系统资源的值不相等的又一个原因。只有当所有的16位应用程序全部退出后,Windows才能安全地收回被这些程序占用的系统资源,此时可用系统资源才会恢复到原值。之所以这样设计,主要是考虑到要让Windows 9X能继续运行大量的16位应用程序。

  * 资源泄漏

  按上述解释,可用系统资源的不断减少是正常的,这是 Windows的设计目的之一。但是许多程序员在实际工作中还发现在其他一些情况下Windows也会不能完全收回系统资源,这也导致可用系统资源不断减少,程序员们称这种现象为资源泄漏(Resource Leak)。微软开始并未承认,但是随着证据的不断增加,最后还是不得不承认其中的一些现象是存在的。

  比如一个程序还未完成其加载过程时(即还没有启动完毕)就关闭它会造成资源泄漏,而且只有重新启动才能回收。

  另外一些应用程序退出后Windo