tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
阅读:7483回复:21

[原创]windows的内存管理

楼主#
更多 发布于:2009-01-02 00:26
我本来只是在某个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跟踪调试的命令啊输出啊什么的
==============================================================

嗯......各位,新年快乐

最新喜欢:

sunseasunsea asdfslwasdfsl... iamclqiamclq
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
沙发#
发布于:2009-01-03 20:21
期待。。。。。t
netlawe
驱动牛犊
驱动牛犊
  • 注册日期2009-01-04
  • 最后登录2009-01-07
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-01-04 19:36
windows核心编程里面,这方面介绍得应该是比较细的。
pilixuanke
驱动中牛
驱动中牛
  • 注册日期2005-10-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1018分
  • 威望626点
  • 贡献值0点
  • 好评度512点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-01-04 21:53
引用第2楼netlawe于2009-01-04 19:36发表的  :
windows核心编程里面,这方面介绍得应该是比较细的。


相信tiamo大大能够写出比核心编程中更精彩的东西出来的。tiamo实力超雄厚,否则也不会进入VIP专家组了。

期待 && 学习。。。
向底层开发进军!!!
meteor2520
驱动牛犊
驱动牛犊
  • 注册日期2009-01-07
  • 最后登录2009-01-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-01-07 13:46
对这些都处于一知半解状态,期待。。。
jununfly
驱动牛犊
驱动牛犊
  • 注册日期2008-10-17
  • 最后登录2010-06-01
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望560点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-01-07 16:14
大仙,多开几个帖子吧,期待ing
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2009-01-15 17:54
引用第1楼x-star于2009-01-03 20:21发表的  :
期待。。。。。t
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
idcdong
驱动牛犊
驱动牛犊
  • 注册日期2009-01-15
  • 最后登录2009-01-16
  • 粉丝0
  • 关注0
  • 积分-6分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-01-16 11:33
用源代码,购买虚拟主机,找动雷100M=6元/月,30元/年免费5天试用(www.idcdong.com) 销售QQ:838788058
动雷主机5元起www.idcdong.com
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-01-25 01:07
,全都是不懂的东西,
提问归提问,还是只能靠自己
shoooo
驱动牛犊
驱动牛犊
  • 注册日期2008-10-07
  • 最后登录2010-01-16
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望136点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2009-02-02 13:21
引用第1楼x-star于2009-01-03 20:21发表的  :
期待。。。。。t
http://www.ccgCN.com/bbs/
lihaixiao_83110
驱动牛犊
驱动牛犊
  • 注册日期2009-02-09
  • 最后登录2009-02-25
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望311点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-02-10 18:43
期待你的开始
sudami
驱动牛犊
驱动牛犊
  • 注册日期2007-03-01
  • 最后登录2010-03-05
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2009-02-17 11:25
附件呢????
ahbbshenfeng
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2009-03-03
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2009-03-02 16:44
期待中.........................
guard366
驱动牛犊
驱动牛犊
  • 注册日期2009-04-30
  • 最后登录2010-10-21
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望351点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2009-05-01 11:52
果然是牛人
成熟的产品!
1423567
驱动牛犊
驱动牛犊
  • 注册日期2005-10-15
  • 最后登录2009-11-29
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望92点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2009-05-24 16:56
好久了 楼主大牛人呢?
nuaapjy
驱动牛犊
驱动牛犊
  • 注册日期2007-11-13
  • 最后登录2010-05-06
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2009-05-25 15:42
期待..
weolar
驱动牛犊
驱动牛犊
  • 注册日期2007-05-14
  • 最后登录2012-11-30
  • 粉丝1
  • 关注0
  • 积分48分
  • 威望445点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分1分
16楼#
发布于:2009-12-01 09:17
大仙,内容些写完没呢……
iamclq
驱动牛犊
驱动牛犊
  • 注册日期2007-07-30
  • 最后登录2010-02-18
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2010-02-15 20:20
严重关注!!!
tiamo的文章已经拜读过了,写得不错,继续努力......
madaxian
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2010-04-04
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2010-02-16 21:14
引用第16楼weolar于2009-12-01 09:17发表的  :
大仙,内容些写完没呢……



盟主 叫我?
guenli
驱动牛犊
驱动牛犊
  • 注册日期2009-12-18
  • 最后登录2010-02-19
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2010-02-18 14:09
很期待啊!
上一页
游客

返回顶部