进程内存管理
MmCreateProcessAddressSpace 初始化进程的系统空间部分
1.先做一些检查,检查系统是否有足够的页面
2.申请四个物理页面分别用于:页目录,超空间页表,VAD位图,工作集链表
3.初始化EPROCESS中的一些结构_MMSUPPORT Vm.MinimumWorkingSetSize; DirectoryTableBase WorkingSetPage
4.利用系统PTE映射超空间页表 在超空间页表页中配置相应VAD位图和工作集链表的页表 完成之后释放PTE
5.在PFN数据库中设置页目录PTE
6.将进程插入MmProcessList 有独立进程空间的进程0都在这个链表中有所体现
7.初始化页目录(利用PTE映射),系统空间的PTE直接复制,映射超空间部分中的第一个PDE,0xc0000000页目录指向自己(自映射),物理页面开销记录,然后释放PTE映射
8.MiSessionAddProcess 将新进程加入到父进程的会话空间中 就是MmSessionSpace,更新会话的进程计数器和会话空间的进程链表。
MmInitializeProcessAddressSpace 初始化进程的用户空间部分,父进程调用
1.判断是否需要更新新进程的系统PDE
MmCreateProcessAddressSpace 初始化进程的系统空间部分
1.先做一些检查,检查系统是否有足够的页面
2.申请四个物理页面分别用于:页目录,超空间页表,VAD位图,工作集链表
3.初始化EPROCESS中的一些结构_MMSUPPORT Vm.MinimumWorkingSetSize; DirectoryTableBase WorkingSetPage
4.利用系统PTE映射超空间页表 在超空间页表页中配置相应VAD位图和工作集链表的页表 完成之后释放PTE
5.在PFN数据库中设置页目录PTE
6.将进程插入MmProcessList 有独立进程空间的进程0都在这个链表中有所体现
7.初始化页目录(利用PTE映射),系统空间的PTE直接复制,映射超空间部分中的第一个PDE,0xc0000000页目录指向自己(自映射),物理页面开销记录,然后释放PTE映射
8.MiSessionAddProcess 将新进程加入到父进程的会话空间中 就是MmSessionSpace,更新会话的进程计数器和会话空间的进程链表。
MmInitializeProcessAddressSpace 初始化进程的用户空间部分,父进程调用
1.判断是否需要更新新进程的系统PDE