windows内核情景分析学习笔记6
来源:互联网 发布:淘宝店铺名字在哪里改 编辑:程序博客网 时间:2024/06/05 18:56
1、用于数据存储的内存区间分类
①全局数据所占空间。由编译器在编译链接时就静态分配好的,与整个进程共存亡。其分配和释放都是不可见、不可为的
②局部数据所占的空间。调用函数时自动从堆栈上动态分配的,其寿命取决于函数的作用域。其分配和释放是隐含的。
③通过malloc一类函数动态分配的内存。其会一直存在,直到通过free一类的函数加以释放(或进程终止运行)。
2、内核对用户空间的管理
对于windows来说,其用户空间的虚存地址从0到0x7fffffff,范围是2GB,每个进程都有这么一个2GB的用户空间。
一般来说,真正使用的只有其中很小一部分。所以,凡是不使用的虚存地址区间,就不需要物理映射。
事实上,只有当前正在受到访问的页面才必须映射到物理内存页面,暂时不受到访问的页面都可以映射到外设(硬盘)上的页面交换文件里,待到实际使用时,才倒换回物理内存页面中。
从原理上说,将一个空间中每一个已分配使用的区间作为节点,然后组成一个链表。需要时从头扫描这个链表,就可以知道哪一些区间被使用了。(实际应用中,是组成成一个AVL树)
每个进程的进程控制块中有个指针VadRoot,指向代表着这个用户空间的数据结构。其中有一个指针,指向一颗AVL树,这颗树的节点就是已分配使用的区间信息。其节点定义如下:
这颗以MEMORY_AREA数据结构为节点的AVL树,代表了用户空间。
结构图:
3、内核对用户空间的管理的相关函数
有了AVL树,其他操作和应用便接踵而来,最典型的莫过于MmLocateMemoryAreaByAddress()
此函数的作用是给定一个目标地址,如果此目标地址被使用(存在于AVL树中),则返回这个节点。否则,返回NULL。
另一个典型操作是MmFindGap(),此函数的作用是在地址空间中寻找一个给定长度的空闲地址区间。
需要从一个空间中分配一个地址区间时,可以通过MmCreateMemoryArea()在其AVL树种创建一个节点。其函数大致执行步骤是:
①在AVL树中搜索一块指定大小的区域(利用MmFindGap)
②为此区域建立MEMORY_AREA结构
③向AVL树种插入此MEMORY_AREA结构
这里的虚存区间分配并不意味着物理页面的分配,也不意味着页面映射的建立,仅仅是对于虚存地址资源的占用。
4、内存管理中的层次
在MEMORY_AREA结构中,其成分Data就是一个枚举类型,这个结构可取两种类型,SectionData和VirtualMemoryData,前者代表文件映射区或共享内存区,后者代表一个普通并已分配的内存区间(大部分情况下都是这个)。
VirtualMemoryData唯一的成分是RegionListHead,其值是一个“区块”链表头。
何谓“区块”?
一个已分配的区间指示一个地址连续的范围,却不一定都有映射,也不一定拥有同样的类型和保护模式。而区块则是地址连续、拥有相同类型和保护模式的子区间。
在使用中,一个区间可能包含若干个区块,所以需要一个链表来维护它们。链表的节点类型为_MM_REGION
其定义为:
区块由一组虚存页面组成,这些页面有着相同的保护模式。
综上所述,内存中有着这样的层次:空间、区间、区块、页面,示意图如下:
- windows内核情景分析学习笔记6
- windows内核情景分析学习笔记1
- windows内核情景分析学习笔记2
- windows内核情景分析学习笔记3
- windows内核情景分析学习笔记4
- windows内核情景分析学习笔记5
- windows内核情景分析学习笔记7
- windows内核情景分析学习笔记8
- windows内核情景分析学习笔记9
- windows内核情景分析学习笔记10
- windows内核情景分析学习笔记11
- windows内核情景分析学习笔记12
- Windows内核情景分析学习笔记P38---P41
- windows内核情景分析笔记1.3 IRQL
- Windows内核情景分析 学习日志之一
- windows内核情景分析
- windows 内核情景分析---说明
- windows内核情景分析 --APC
- Cannot drop the database 'databasename' because it is currently in use
- s3c2440存储控制器和地址以及启动的理解
- WIN_DOS经典大全
- MessageBox换行
- XP启用Guest却无法访问网络怎么办
- windows内核情景分析学习笔记6
- Table 单元格重叠变粗 使用border-collapse:collapse; 可以解决
- GLSL教程2
- VC 2010的重大变化
- 基于MSBuild的xnb资源预生成机制
- 实现可选可手输入的下拉框
- JSP的注释说明
- mysql常用操作
- 呼叫中心 无条件转接、忙转、超时转接模块