windows内核情景分析学习笔记7
来源:互联网 发布:nginx限制ip段访问 编辑:程序博客网 时间:2024/06/05 23:42
1、内核对于物理页面的管理
物理内存的管理和使用以页面为单位,所以物理内存的管理实际上是对物理页面的管理。
在内核中,物理页面是以数据结构PHYSICAL_PAGE代表的,其定义如下:
每个PHYSICAL_PAGE代表一个物理页面,在系统初始化时,会构建起一个元素为PHYSICAL_PAGE的数组MmPageArray,这是一个全局变量,系统中有多少物理页面,这个数组就有多大。
这样,以一个物理页面的页面号(pfn)为下标,就可以找到这个物理页面对应的PHYSICAL_PAGE(MmPageArray[pfn])。
物理地址与其所在页面的页面号有着固定的关系,因为一个页面就是4KB,所以有如下定义:
PHYSICAL_PAGE中的Type字段标示物理页面的性质:
显然,物理页面有三种,即空闲的页面、使用中的页面、用于BIOS的页面。
ListEntry字段用于将这个PHYSICAL_PAGE链入某个队列,内核中定义了如下物理页面队列:
①物理地址0x100000以下即最低1MB范围中的页面用于BIOS,所以都在BiosPageListHead队列中。
空闲队列有两个:
②FreeZeroedPageListHead已清零页面。
③FreeUnzeroedPageListHead未清零页面。如刚被释放的物理页面时未经清0处理的。
内核线程MmZeroPageThreadMain受调度运行后,会从FreeUnzeroedPageListHead队列中摘取物理页面,清零后将其挂入FreeZeroedPageListHead队列。
④使用中的页面队列UsedPageListHeads是个队列数组,MC_MAXIMUM定义为4。其实是按照物理页面的用途分为4个队列。
其四个用途定义如下:
所以,最为典型的物理页面周转过程为:
①从FreeZeroedPageListHead队列开始
②经分配用于某个用户空间虚存页面的映射,所以该物理页面进入UsedPageListHeads[MC_USER]队列
③使用后释放,该物理页面进入FreeUnzeroedPageListHead队列
④内核线程MmZeroPageThreadMain受调度运行后,该页面又回到FreeZeroedPageListHead队列
2、常用函数
物理页面的分配使用MmAllocPage()函数,其函数实现如下:
参数Consumer表明页面用途,决定了分配成功的物理页面挂入哪一个队列。SavedSwapEntry标示页面交换文件的位置,取0标示没有倒换文件。
- windows内核情景分析学习笔记7
- windows内核情景分析学习笔记1
- windows内核情景分析学习笔记2
- windows内核情景分析学习笔记3
- windows内核情景分析学习笔记4
- windows内核情景分析学习笔记5
- windows内核情景分析学习笔记6
- windows内核情景分析学习笔记8
- windows内核情景分析学习笔记9
- windows内核情景分析学习笔记10
- windows内核情景分析学习笔记11
- windows内核情景分析学习笔记12
- Windows内核情景分析学习笔记P38---P41
- windows内核情景分析笔记1.3 IRQL
- Windows内核情景分析 学习日志之一
- windows内核情景分析
- windows 内核情景分析---说明
- windows内核情景分析 --APC
- sizeof()【整理】
- mysqldump备份和还原数据库
- suse linux 10 oracle 10g 安装
- UNIX与Windows的本质区别
- 一个报表存储过程
- windows内核情景分析学习笔记7
- sql中in与exists的区别
- Emacs常用命令整理
- html5
- 两台linux文件拷贝
- CreateInstall5.7.2 帮助文档翻译
- 央行上调存贷款基准利率0.25个百分点
- char 和 wchar_t
- FCKEditor自动过滤的解决办法