03 物理内存的管理

1、物理内存
<1>最大物理内存
10-10-12分页,最多识别物理内存为4GB(32位操作系统)
2-9-9-12分页,最多识别物理内存为64GB(32位操作系统)
<2>操作系统限制
为什么xp系统中,2-9-9-12分页,任然无法超越4GB是受操作系统本身的限制
<3>实际物理内存
MmNumberOfPhysicalPages * 4 = 物理内存(K)
dd MmNumberOfPhysicalPages查看物理内存,以页为单位

2、物理内存如何管理
<1>全局数组(结构体数组)
数组指针:_MMPFN * MmPfnDatabase
数组长度:MmNumberOfPhysicalPages
dd MmPfnDatabase 查看这个数组的起始位置
<2>数组成员
kd> dt _MMPFN
nt!_MMPFN
+0x000 u1 : __unnamed
+0x004 PteAddress : Ptr32 _MMPTE
+0x008 u2 : __unnamed
+0x00c u3 : __unnamed
+0x010 OriginalPte : _MMPTE
+0x014 u4 : __unnamed

3、物理页状态
0:MmZeroedPageListHead
1:MmFreePageListHead
2:MmStandByPageListHead
3:MmModifiedPageListHead
4:MmModifiedNoWritePageListHead
5:MmBadPageListHead

4、操作系统的6个链表
坏链:
<1>MmBadPageListHead

零化链表:(是系统空闲时候进行零化的,不是程序自己清0的那种)
<2>MmZeroedPageListHead

空闲链表:(物理页是周转使用的,刚被释放的物理页没有被清0,系统空闲的时候有专门的进程从这个链表摘物理页,加以清零后挂入MmZeroedPageListHead)
<3>MmFreePageListHead

备用链表:(当系统内存不够的时候,操作系统会吧物理内存中的数据交换到硬盘上,此时页面不是挂到空闲链表上,而是挂到备用链表上,虽然我释放了,但里面的内容还是有意义的)
<4>MmStandByPageListHead

<5>MmModifiedPageListHead

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/87806215