| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • Alumin远程访问控制软件 让你…

  • 打造更完美的Firefox

  • 浏览器操作记录工具Internet…

  • 集成专业网络书签的Sail Bro…

  • AOL二合一: Browser + Deskt…

  • 网页打不开 Windows的Hosts表…

  • windows IE浏览器精典技巧两…

  • 实现了!中文WinXP安装IE7 B…

  • 集成专业网络书签的Sail Bro…

  • AOL Browser网页浏览器抢先预…

  • Q
    您现在的位置: 我是IT人 >> 应用学院 >> 操作系统 >> Win2000 >> 教程正文
    解析Windows 2000/XP进程工作集           
    解析Windows 2000/XP进程工作集
    作者:网络 文章来源:转载 点击数: 更新时间:2005-8-15
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:

        在《解析Windows 2000/XP物理内存管理》中我详细的介绍了页框数据库(Page Frame Database)的概念,提到在物理内存的组织与管理方面对于每个页面系统都在页框数据库中保存一个结构,用于跟踪页面状态等。但页框数据库并不能真正协调物理内存的使用。我们知道,Windows是一个多任务的操作系统,而物理内存却是一个相对贫乏的资源,为避免某个进程(或是系统)耗尽这一资源,引入了工作集(WorkingSet)的概念。WorkingSet是内存管理一个相当重要的术语,在Windows 2000/XP中通常分为两种即进程工作集与系统工作集,分别用于跟踪各个进程与系统的物理内存使用情况。由于终端服务的引入,另有一种工作集会话(Session)工作集,用于跟踪各个Session使用物理内存的情况。本文从进程工作集的内部组织方式出发,简要阐述工作集在Windows 2000/XP中的组织与管理。

        EPROCESS是描述进程的结构,所以从EPROCESS入手,肯定也能找到进程工作集的表示方式。实际上位于EPROCESS中的子结构MMSUPPORT就是关于进程与内存子系统相关的一些关键内容,进程工作集自然也在此。对于早期的内核版本这些内容没有集成至MMSUPPORT结构中,而且各版本间MMSUPPORT的定义是不相同的,底下列出MMSUPPORT在Windows XP Build 2600 SP0中的定义(本文中所有结构都可能只适用于这一版本):

        typedef struct _MMSUPPORT {
            LARGE_INTEGER   LastTrimTime;
            MMSUPPORT_FLAGS Flags;
            ULONG           PageFaultCount;
            ULONG           PeakWorkingSetSize;
            ULONG           WorkingSetSize;
            ULONG           MinimumWorkingSetSize;
            ULONG           MaximumWorkingSetSize;
            PMMWSL          VmWorkingSetList;
            LIST_ENTRY      WorkingSetExpansionLinks;
            ULONG           Claim;
            ULONG           NextEstimationSlot;
            ULONG           NextAgingSlot;
            ULONG           EstimatedAvailable;
            ULONG           GrowthSinceLastEstimate;
        } MMSUPPORT, *PMMSUPPORT;

        MMSUPPORT中PeakWorkingSetSize、WorkingSetSize、MinimumWorkingSetSize与MaximumWorkingSetSize分别表示此进程的工作集峰值、当然工作集大小、允许工作集的最大值与最小值。性能监视器(perfmon.msc)与任务管理器(taskmgr.exe)都可对这些数据进程跟踪显示。Win32 API GetProcessWorkingSetSize(Ex)和SetProcessWorkingSetSize(Ex)在具有相应PROCESS_QUERY_INFORMATION与PROCESS_SET_QUOTA权限后即能获取或设置MinimumWorkingSetSize与MaximumWorkingSetSize等。

        进程在建立时,进程工作集总为空的,CreateProcess等在建立进程过程中有责任初始化进程工作集。它会分配一个物理页面,然后调用MiInitializeWorkingSetList初始化进程工作集。后者以刚建立的EPROCESS作为参数初始化我们上面提到的MMSUPPORT结构。这里要提到一个很重要的成员VmWorkingSetList(结构MMWSL),定义如下:

       +0x000 Quota            : Uint4B
       +0x004 FirstFree        : Uint4B
       +0x008 FirstDynamic     : Uint4B
       +0x00c LastEntry        : Uint4B
       +0x010 NextSlot         : Uint4B
       +0x014 Wsle             : Ptr32 _MMWSLE
       +0x018 LastInitializedWsle : Uint4B
       +0x01c NonDirectCount   : Uint4B
       +0x020 HashTable        : Ptr32 _MMWSLE_HAS

    [1] [2] [3] [4] 下一页  

    教程录入:小秦    责任编辑:小秦 
  • 上一篇教程:

  • 下一篇教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |