解析Winndows 2000/XP物理内存管理
解析Winndows 2000/XP物理内存管理 |
||||||||
物理内存是相对比较紧张的资源,合理利用将是一个操作系统的性能的关键。Windows 2000/XP内部使用一个称为页框数据库(Page Frame Database)的结构用于描述物理内存的状态。本文将从这一结构入手详述Windows物理内存的组织与管理。
Windows将物理内存按PAGE_SIZE(在x86上,为0x1000字节,即4K)为单位,将其划分,每一单元在页框数据库中均有一项描述其状态及用途等。页框数据库实际上是由这些描述每一页情况结构的数组。页框数据库由内核变量MmPfnDatabase指定,而数据库中的项数则由MmNumberOfPhysicalPages指定,项数索引叫Page Frame Number(PFN)来表示。MmNumberOfPhysicalPages通常略低于系统实际拥有的物理内存页数,系统在初始化阶段保留部分页面让操作系统本身使用。需要指出的是页框数据库只描述狭义上的物理内存,不包含其他映射的物理设备的内存。 Windbg的!pfn命令用于对任一页内存的状态及用途等进行分析,如下所示: kd> dd MmPfnDatabase l 1 《Inside Windows 2000》中将PFN的各个字段解释的已经非常清楚了。这里我只是简要进行说明: flink与blink用于将特定状态的页面连成一个链表,系统中内核变量MmZeroedPageListHead、MmFreePageListHead、MmStandbyPageListHead、MmModifiedPageListHead、MmModifiedNoWritePageListHead、MmBadPageListHead用于指示这些状态的页面的链表头。从这些变量名很容易明白各链表的页面状态,在Windows中页框数据库中共有8个状态,另两个为:Active与Transition状态。这8个状态由pfn的type(offset:0xd,size:byte)字段中的前3bit指示。 pteaddress是指向这一页面的pte地址。经过分析,主要有如下三种情况: a. pteaddress为0或0xffffffff,根据pfn指示的状态,可识别是ZeroedPage或是FreePage。 restore pte,在《Inside Windows 2000》中称为original pte。其作用是指示这一页面的back-store位置,即数据在磁盘中某一pagefile或是mapped file中的位置。譬如在上面提及的情况c中,其一般是指向mapped file的某一subsection,所以在内部其称为Subsection PTE,由MMPTE_SUBSECTION结构定义。而另外一种情况其可能是一个指向pagefile的pte,由MMPTE_SOFTWARE结构定义。这一点,上次我提及时存在错误。MMPTE_SUBSECTION的具体bit定义如下: Valid : Pos 0, 1 Bit 最高位WhichPool是指示这个Subsection位于哪个pool中(NonPagedPool或是PagedPool中),Valid为0,指示这不是一个x86硬件可以识别的pte,由MiDispatchFault分析。由Subsection pte转换成Subsection地址的算法我在底下提供的代码中给出了。 这一描述基本阐述了Subsection PTE的作用,用于定位由PFN所指定的页面位于相应的Mapped File的位置。为了更好的解释好这一过程,《Inside Windows 2000》中使用了一个框图来解释内存管理器内部的这几个千丝万缕的联系,但各个数据结构,如PFN,SEGMENT等等介绍的不够详尽,并且之间的转换算法均没有提及。下图是我根据Windows XP Professional Build 2600的情况,重新制作的一幅图. Windbg提供了一个!memusage命令通过分析subsectin pte得到系统中各个mapped file的使用内存情况,底下的代码,只是详细的列出了某些页面由哪些mapped file使用,并没有像!memusage有详细的统计功能,不过通过这一代码与我先前提供的文章,也能基本上明白上面这幅图之间复杂关系。 /* #define MmPfnDatabase 0xffb7f000 //Please redefine it on your machine. /* unsigned int MiGetSubsectionAndProtoFromPte(int pte) /* void memusage() unsigned int restorepte,pfn=0,ppte,subsection; unsigned char flag=0; for(;pfn<numberphys;pfn++){ DbgPrint("/nMemUsage:/n"); pfndatabase = MmPfnDatabase; if(ppte>=0xE1000000&&ppte<0xF0000000){ 本文只是基本上说明了Windows 2000/XP下物理内存的组织管理,对于restore pte,正向前面介绍的其实他还指向pagefile,未加以叙述,着实因为这部分内容还很多,看我自己学习的进程,我会另行介绍。需要感谢的是wuzq(wuzq@legend.com.cn)给我提供的思路,才可能有我对此的一些粗浅的理解,再次感谢他。 |
||||||||
|
解析Winndows 2000/XP物理内存管理相关推荐
- 解析Windows 2000/XP进程工作集
解析Windows 2000/XP进程工作集 在<解析Windows 2000/XP物理内存管理>中我详细的介绍了页框数据库(Page Frame Database)的概念,提到在 ...
- 浅议Windows 2000/XP Pagefile组织管理
任何时候系统内存资源相对磁盘空间来说都是相形见拙的.因为虚拟内存机制,使我们可以有相对丰富的地址资源(通常32bit的虚拟地址,可以有4G的寻址 空间),而这些资源对物理内存来说一般情况是总是绰绰有余 ...
- Windows 2000/XP/2003超级工具
Windows 2000/XP/2003超级工具 轉載于:[url]http://space.netexpert.cn/index.php/2038/action_viewspace_itemid_1 ...
- 2000/XP/2003常见问题集锦
第一部分:安装启动问题 1.关于所有版本XP在安装进度还剩下34分钟进度条就停止不动的说明以及解决方法 在安装还剩34分钟,也就是安装设备时屏幕会一直定在那儿不走,硬盘灯不亮!造成这种现象的原因极有可 ...
- 2000/XP/2003操作系统常见问题集锦一
第一部分:安装启动问题 1.关于所有版本XP在安装进度还剩下34分钟进度条就停止不动的说明以及解决方法 在安装还剩34分钟,也就是安装设备时屏幕会一直定在那儿不走,硬盘灯不亮!造成这种现象的原因极有可 ...
- 2000/XP/2003操作系统常见问题集锦
第一部分:安装启动问题 1.关于所有版本XP在安装进度还剩下34分钟进度条就停止不动的说明以及解决方法 在安装还剩34分钟,也就是安装设备时屏幕会一直定在那儿不走,硬盘灯不亮!造成这种现象的原因极有可 ...
- 关闭Windows 2000/XP/2003默认共享
Windows 2000/XP/2003版本的操作系统提供了默认共享功能,这些默认的共享都有"$"标志,意为隐含的,包括所有的逻辑盘(C$,D$,E$--)和系统目录Winnt或W ...
- Windows 2000/XP 注册表终极修改(转载)
Microsoft Windows 2000/XP 是一个强大的操作系统,为我们提供了以往Windows 9x从未有过的安全性能,可是你是否感觉某些地方的设置还不够呢,这里就对Windows 2000 ...
- windows 9X, 2000, xp所有版本注册表设置(1)
<开始菜单及相关设置> [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer] "No ...
最新文章
- 1. VIM 系列 - 简单入门,拾起兴趣
- SAP S/4HANA里如何创建Customer主数据以及执行后续处理
- 增加无线模块传输距离的方法
- STM32——SPI接口
- 【Flink】改进的BLOB存储架构
- 二十大数据可视化工具(二)
- 运用li元素进行斑马色显示
- 【SQL精彩语句】按某一字段分组取最大(小)值所在行的数据
- 计算机网络的分类 ppt,认识计算机网络ppt
- java 权重_java实现权重的简单算法
- 哈佛邓云天:Cascaded Text Generation with Markov Transformers
- HDU 5285:wyh2000 and pupil
- SpringMvc导入Excel
- storm的核心组件,编程模型,一般机构图
- STM32学习之I2C协议(读写EEPROM)
- 纽约大学计算机与科学,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」...
- 北航计算机学院非全日制双证研究生,北京航空航天大学有非全日制双证专业吗?...
- 信息时代碎片化学习的理解
- [Nginx] – 安全优化 – 配置文件优化 [二]
- C#treeview树形菜单
热门文章
- 2021年中国电影营销数字化发展分析
- 2021年中国在线旅游直播专题分析
- 利用这些心理学效应,轻松拿到满意offer
- 如何绘制逻辑图 — 5. 要素的属性:系统与模块
- 科学数据中心资源和用户访问控制体系
- 专题导读:医学大数据
- 作者:谭昊翔(1990-),男,华南师范大学计算机学院硕士生。
- 华岗(1977-),男,博士,宁波市智慧城市规划标准发展研究院副研究员。
- 【Python】处理 TypeError: ‘FirefoxWebElement‘ object is not iterable
- 【Java】不使用比较运算符构造max()和min()