阅读:7733回复:21
[原创]windows的内存管理
我本来只是在某个qq群里面吹吹牛
结果被znsoft抓到.. 一定要我写下来.. 于是我只好写下来 东西很多请大家多一点耐心慢慢的看 写之前就有很多人说 让我不要写什么虚拟地址到物理地址转换啊一类的网上到处都有的东西都已经烂大街的东西 当然了.写那些也没意义. 我可以保证 这里面的东西一定会有很多你已经在不同的其他地方网上书上看到过的东西 同样的这里面一定有你没看到过的东西,甚至有你从来就不知道的东西 ============================================================== 大纲 说到内存管理,就必须先说说硬件上的内容 所以最开始的部分是x86和x64的内存管理的硬件(mmu) 这个部分涵盖了逻辑地址线性地址物理地址转换关系 分页,pae,ia32-e,large page,tlb,data cache等等的基础知识.在解读windows的内存管理之前必须要知道的东西 接着是windows使用的递归映射(recursive page directory). 这个是整个windows内存管理的计算的基础 他定义了一个简单的计算公式就能从一个线性地址得到这个线性地址对应的pte的线性地址,pde的线性地址 从一个pte的线性地址就能得到这个pte映射的线性地址 接下来是windows的虚拟地址的内核空间分布 描述windows如何划分内核空间 windows将内核空间分成了若干个不同的区域 每个区域都有固定的用处,比如有些区域是paged pool有些是system cache有些是nonpaged pool 根据区域的用途不同,windows区别对待每个区域 不同的区域有不同的分配算法,不同的区域有不同的初始化算法 比如有些区域的pde和pte是一开始就初始化好就永远不会去修改的 而有些区域是在需要的时候才初始化,使用完了包括pte,pde都会释放的 接着是描述windows的物理内存管理用的page frame number database windows的物理内存管理严重依赖于这个pfn database 这个部分会详细描述pfn的每个字段的含义,这些字段都是在什么条件下设置,他们又是怎么控制windows的内存管理行为 其中pfn database的初始化和内核空间划分都是在系统启动的时候完成的 所以有一部分专门描述他们两个初始化过程 附带的会有一段ntldr这个boot loader的行为描述,当然主要是描述ntldr在内存管理方面的行为. 接着是windows的物理内存分配方式 这里主要是描述windows如何按需分配用于page table用于pool等等除开设备io以外的物理内存分配策略 接着就是重头戏 根据windows的内核空间的划分,详细描述每个部分的分配策略,释放策略,初始化策略 接着是windows的vm,cache,file system的基石----section 详细描述什么是一个section,section是怎么工作的,windows怎么去purge一个section怎么去flush一个section windows又是怎么去map一个section 这个部分其实是跟prototype pte关联在一起的.所以这两个部分会交叉引用 接着描述windows如何处理共享内存 也就是大家都知道的prototype pte 详细描述prototype pte的工作原理 跟踪描述物理页的状态变迁,以及windows如何处理prototype pte的page fault 接着是两个最重要的系统线程 modified page writer和mapped page writer 接着是某人特别点名一定要看的windows的cache管理 描述windows的cache模块的工作方式 什么是copy interface,什么是mdl interface,什么又是pin interface,write behind是怎么回事,purge cache又是怎么回事 描述cache是怎么跟mm一起协同工作的 接着是windows如何为设备io比如磁盘dma分配物理内存 设备io的物理内存要求稍微有些差别 这中间就有特殊要求的ISA DMA分配 有不支持scatter gather的设备dma分配 还有大家都熟悉的mdl物理内存分配 最后描述windows的working set manager 描述windows怎么强制回收进程的内存 描述windows怎么平衡物理内存的使用 其实还剩下一部分 就是windows如何分配管理用户模式的虚拟内存 这个部分是一个单独的非常简单的模块 暂时还没计划要把他写出来 ============================================================== 都看到了 想要写的东西很多很多 不可能是一天就全都写完的. 所以我计划是个长篇连载 毕竟我现在也工作了 不比以前在家闲着整天没事 ============================================================== 代码请参考windows research kernel 如果research kernel里面没有,就参考windows 2002 source code 而我的分析的windows版本是windows 2003 enterprise sp1 硬件则是x86的pae 东西很多很复杂.所以最好是有个windbg实时的调试跟踪 我也会在各个部分都留下一些我用windbg跟踪调试的命令啊输出啊什么的 ============================================================== 嗯......各位,新年快乐 |
|
沙发#
发布于:2009-01-03 20:21
期待。。。。。t
|
|
板凳#
发布于:2009-01-04 19:36
windows核心编程里面,这方面介绍得应该是比较细的。
|
|
地板#
发布于:2009-01-04 21:53
引用第2楼netlawe于2009-01-04 19:36发表的 : 相信tiamo大大能够写出比核心编程中更精彩的东西出来的。tiamo实力超雄厚,否则也不会进入VIP专家组了。 期待 && 学习。。。 |
|
|
地下室#
发布于:2009-01-07 13:46
对这些都处于一知半解状态,期待。。。
|
|
5楼#
发布于:2009-01-07 16:14
大仙,多开几个帖子吧,期待ing
|
|
6楼#
发布于:2009-01-15 17:54
引用第1楼x-star于2009-01-03 20:21发表的 : |
|
|
7楼#
发布于:2009-01-16 11:33
用源代码,购买虚拟主机,找动雷100M=6元/月,30元/年免费5天试用(www.idcdong.com) 销售QQ:838788058
|
|
|
8楼#
发布于:2009-01-25 01:07
,全都是不懂的东西,
|
|
|
9楼#
发布于:2009-02-02 13:21
引用第1楼x-star于2009-01-03 20:21发表的 : |
|
|
10楼#
发布于:2009-02-10 18:43
期待你的开始
|
|
11楼#
发布于:2009-02-17 11:25
附件呢????
|
|
12楼#
发布于:2009-03-02 16:44
期待中.........................
|
|
13楼#
发布于:2009-05-01 11:52
果然是牛人
|
|
|
14楼#
发布于:2009-05-24 16:56
好久了 楼主大牛人呢?
|
|
15楼#
发布于:2009-05-25 15:42
期待..
|
|
16楼#
发布于:2009-12-01 09:17
大仙,内容些写完没呢……
|
|
17楼#
发布于:2010-02-15 20:20
严重关注!!!
tiamo的文章已经拜读过了,写得不错,继续努力...... |
|
18楼#
发布于:2010-02-16 21:14
|
|
19楼#
发布于:2010-02-18 14:09
很期待啊!
|
|
上一页
下一页