Windows内核_内存

上传人:n**** 文档编号:50762343 上传时间:2018-08-10 格式:PPTX 页数:20 大小:1.38MB
返回 下载 相关 举报
Windows内核_内存_第1页
第1页 / 共20页
Windows内核_内存_第2页
第2页 / 共20页
Windows内核_内存_第3页
第3页 / 共20页
Windows内核_内存_第4页
第4页 / 共20页
Windows内核_内存_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《Windows内核_内存》由会员分享,可在线阅读,更多相关《Windows内核_内存(20页珍藏版)》请在金锄头文库上搜索。

1、Windows内核 原理与实现曹飞目录操 作 系 统 概 述Win dows 概 述进 程 和 线 程内 存 管 理存 储 系 统I/O 系 统系 统 服 务目录内存管理概述系统内存管理进程内存管理内存页面交换物理内存管理工作集管理内存管理概述指处理器可以直接访问但是位 于处理器之外的存储器内存管理目的有效的管理内存,当进程需要 时,可以分配足够多的内存单 元供其使用 不同进程的地址空间应该 相互 隔离三种地址类型逻辑 地址,包含段和偏移;段 指定了整个地址空间的基址和段 大小,以及访问权 限等其他属 性;偏移指定了相对基址的偏移 量 虚拟地址,intelx86在32位的机 器上定义了4G的线

2、性地址 物理地址,内存存储器的索引, 通过地址线管脚加上相应的电 信号来读写相应的内存单元内存管理方式页式内存管理核心是把虚拟地址转换为 物理地址 虚拟地址空间按页(page)管理,物 理按相同大小的页来管理(page frame) 物理空间只有一个,虚拟空间有多个 ,每个物理空间只能映射一个虚拟空 间组合管理方式,intelx86 的MMU结合了两种方法 ,逻辑地址被解析为虚 拟地址在解析为物理地 址段式内存管理物理内存划分为多个段, intelx86中有六个寄存器专门 指定段的地址,称为段选择 符 段选择 符表包含全局(GDT) 和局部的(LDT),每一项为 一个段描述符内存管理方式页式内

3、存管理核心是把虚拟地址转换为 物理地址 虚拟地址空间按页(page)管理,物 理按相同大小的页来管理(page frame) 物理空间只有一个,虚拟空间有多个 ,每个物理空间只能映射一个虚拟空 间组合管理方式,intelx86 的MMU结合了两种方法 ,逻辑地址被解析为虚 拟地址在解析为物理地 址段式内存管理物理内存划分为多个段, intelx86中有六个寄存器专门 指定段的地址,称为段选择 符 段选择 符表包含全局(GDT) 和局部的(LDT),每一项为 一个段描述符内存管理方式页式内存管理核心是把虚拟地址转换为 物理地址 虚拟地址空间按页(page)管理,物 理按相同大小的页来管理(pag

4、e frame) 物理空间只有一个,虚拟空间有多个 ,每个物理空间只能映射一个虚拟空 间组合管理方式,intelx86 的MMU结合了两种方法 ,逻辑地址被解析为虚 拟地址在解析为物理地 址段式内存管理物理内存划分为多个段, intelx86中有六个寄存器专门 指定段的地址,称为段选择 符 段选择 符表包含全局(GDT) 和局部的(LDT),每一项为 一个段描述符内存管理算法 位图标记 法,使用一个N/M位的位图,每一个的值来说 明M个单元是否被使用 空闲链 表法,有个数据结构来描述一个空闲块 ,所有的 空闲块组 成了一个空闲链 表 每次分配按照2的幂来分配 有一个数组记录 了不同大小的空闲链

5、 表的表头 分配后剩余的块插入到新的链表中,如果前后有伙伴则 合并本质而言,可以 分为两类 最优页 面替换算法,理论上存在 先进先出替换算法 最近最久未使用(LRU) 页面老化算法伙伴系统,前后 位置相同大小的 空闲块 互为伙 伴页面替换算法Windows内存管理概述4G的内存空间分为两部分,包括系统地址空间和进程地址空间,系统地址空间包含了 全局的系统代码和数据结构页帧编 号数据库(Page Frame Number Database,PFN)描述了物理内存的各个页面的 状态,每个物理页面对应 一个PFN项,记录 了该页 面的使用情况Windows定义了PDE和PTE来维护页 目录也页表的数

6、据结构应用程序在使用前必须申请,一段虚拟地址正真使用的时候才会分配页表和物理页面Windows采用了页式内存管理方案,但是访问 内存时必须要通过段描述符系统内存管理intelx86的Windows系统中,0x800000000xffffffff是所有进程共享 的系统地址空间系统地址空间初始化,在系统初始化过程中完成系统地址空间的内存管理,包括换页 和非换页 内存池的管理系统PTE区域,系统空间需要额外的物理内存时可以通过它来映 射物理内存,通过PTE的方式来管理其内存,既是把PTE当作资源 来管理系统地址空间初始化ntldr已经打开了intlex86的分页功能,建立了足够的页表共16MB 地址

7、空间使用内存MmInitSystem完成系统空间的初始化 0阶段完成数据结构初始化和全局变量的设置,完成了大多数工作 1阶段启动一些辅助线程,包括零化页面、平衡集管理器等 2阶段修改已加载模块的可换页 代码区变成可换页 的,使换页 内存池和非换页 内存池可以工作Windows的页目录自映射方案 Windows的页目录页 面当作一页页 表页面 整个虚拟地址空间的所有页表位于0xc00000000xc0400000 PTE的起始地址为0xc0000000, PDE的基址为0xc0300000系统内存空间管理一些部分提供给特殊模块使用的 会话空间,会话管理和Windows子系统使用 换页 内存池和非

8、换页 内存池,系统内核模块和设备驱动 程序使 用 系统非换页 内存池管理 利用空闲链 表的方式来管理内存空间 共有4个空闲链 表,每个对应 的空闲页 面数不一样 通过MiAllocatePoolPage和MiFreePoolPage来完成申请和归还系统换页 内存池管理 采用位图的方式来管理内存空间 两个位图,一个记录 是否分配,一个记录 是否为最后一个页面 通过MiAllocatePoolPage和MiFreePoolPage来完成申请和归还系统内存空间管理一些部分提供给特殊模块使用的 会话空间,会话管理和Windows子系统使用 换页 内存池和非换页 内存池,系统内核模块和设备驱动 程序使

9、用 系统非换页 内存池管理 利用空闲链 表的方式来管理内存空间 共有4个空闲链 表,每个对应 的空闲页 面数不一样 通过MiAllocatePoolPage和MiFreePoolPage来完成申请和归还系统换页 内存池管理 采用位图的方式来管理内存空间 两个位图,一个记录 是否分配,一个记录 是否为最后一个页面 通过MiAllocatePoolPage和MiFreePoolPage来完成申请和归还系统内存空间管理执行体内存池的管理 以页面为粒度对一般的代码逻辑 而言太大 一组快查表(lookaside list)的空闲链表分别记录 了各种大小的待分 配内存 分配时申请,释放时尽可能合并;如果大

10、于一个页面,则将页面交 给系统内存池系统PTE区域的管理 以PTE的方式来管理,并不是存放的是PTE而是以PTE的形式来管理, 把PTE当作资源来使用 申请了系统PTE的客户必须自己对这些PTE映射物理页面,释放的时 候需要自己解除 以空闲链表的方式来管理,连续的空闲PTE为一个簇 系统PTE用于IO、 内核栈、MDL等动态映射页面的情景,后面我们可 以看到些许应用进程内存管理每个进程都有自己独立的地址空间,数据是隔离的内存地址空间的创建 PspCreateProcess创建一个进程时,如果父进程不为NULL则要创建一个地址空间 MmCreateProcessAddressSpace创建进程的

11、地址空间,指定工作集大小和对应的 进程对象,输出页目录地址 申请4个物理页面,页目录、超空间、VAD位图、工作集链表内存地址空间初始化 超空间初始化,申请一个系统PTE区域的PTE映射超空间页面,填写对应的VAD 和工作集链表的页表项,释放PTE 页目录初始化,申请一个PTE,把系统空间的PDE复制到页目录页面中,然后映 射超空间的第一个PDE项,其余清零 初始化VAD树,初始化对应的PFN项 初始化工作集链表的对应的PFN项 把新进程加入到当前进程(父进程)的会话空间中进程内存管理地址空间切换 每个进程都有独立的页目录,前半部分隔离,后半部分共享 换页 内存池在不同的进程中可能有不同的视图

12、,采用延迟计 算的方 式来处理这些不同 超空间也是独立的,包括对应 的VAD位图和进程工作集链表,指向 当前进程的 新老进程切换的时候,只需切换页 目录页 面,CR3寄存器进程地址空间管理 应用程序经过 “保留”和“提交”后才能使用一段地址范围 可以使用VirtualLock来锁住一些已提交的物理页面使其常驻内存 进程地址空间通过VAD来管理,每个VAD描述了连续 的提交或保留页 VAD位图每一位代表了64KB(16页)是否出现在VAD树中物理内存管理PFN数据库 位于系统空间,是一个数组,用于管理物理地址 每一项都描述了一个物理页面的状态,以页帧编 号为索引 页面状态包括活动、备用、已修改、

13、修改但不写出、转移、空闲、 零化、坏页面等页面状态转 移 利用链表来管理,共有六种链表 零页面,空闲页 面,备用页面,修改页面,修改不写回页面,坏页 面 零页面和空闲页 面仅构成单链 表,活动和转移页面不需要链表 分配物理页面时,按照零页面空闲页 面备用修改状态的 顺序分配内存页面交换intelx86中的PTE Windows采用页式内存管理的方式,页表中存放的是PTE,记录对应 的页帧编 号和其他一些状态位 如果最后一位有效位为0,无效PTE会引发页面错误,会分配一个新的物理页 面,然后读入数据或直接清零页面错误处 理 遇到无效的PDE或PTE时,会触发14号系统异常,转到页面错误处 理例程

14、 页面错误情形包括地址转移不成功和访问控制检查不通过 进程访问违 例会导致进程退出写时复制 内存管理器将页面拷贝的动作推迟到页面被写入数据的时候 进程要对共享页面写入数据时才会复制一个页面让两个进程私有工作集管理可以修改的页面会加入带一个链表中,修建的时候找出一批符合条 件的,设置状态为转 移状态工作集管理器会定期检查各个进程的工作集,必要时会修剪占用内 存较多的进程的工作集每个进程都有专门的页面来存放他的工作集链表工作集指一个进程当前正在使用的物理页面的集合总结内存管理器 一方面有效的管理有限的资源并降低管理开销 一方面保持快速高效如何在系统空间中有效的管理可换页和不可换页内存如何为进程及那里独享的地址空间如何管理物理内存和解决页面错误

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号