首页
社区
课程
招聘
[求助]关于Windows NT中进程PDE的存储问题
发表于: 2013-4-19 15:20 3907

[求助]关于Windows NT中进程PDE的存储问题

2013-4-19 15:20
3907
阅读WRK中KiAttachProcess的源码可以发现MS采取了很巧妙的处理:如果目标进程不在内存中,就让附加上的线程暂时等待,直到目标进程被换入内存中。这样子似乎很安全,但其中有一个问题:一个进程(不考虑系统进程)的页表(或者页目录)一定在内存中么。
KiSwapProcess/KiSwapContext/SwapContext中,似乎都没有看到探测目标进程的页表是否在内存中的代码,基本上都是直接Load CR3完事。由于CR3中存储的是页表物理地址的高位,个人认为这里一旦出错(页表压根不再物理内存中)系统应该会崩溃,由于虚拟内存机制已经起效,一旦页表是完全无效的连继续执行指令的机会都没有,不可能再采取其它措施处理这个问题了。这里先不考虑TLB……



那么如果假设所有进程的第一级页表都始终在物理内存中,看上去这和合理,上述问题都可以解决,但这内存开销似乎有点大,按最节约内存的情形计算(32位,关闭PAE),一个进程的PDE也有4KB,MS会在这方面付出几百KB-几MB(几十个到几百个进程,假设每个进程都有独立的地址空间)而不是采取别的机制?

假设非系统进程的页表是可换出的话,那么线程调度/附加时对于页表换入换出的处理在何处?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
2
可能俺没描述清楚。。。问题简而言之就是:是不是所有内存的页目录或者页目录指针(开启PAE时)都一定存在于物理内存中,不会被换出
2013-4-20 21:20
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
页表不像你想象的那样占用内存
2013-4-20 21:24
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
4
非PAE模式下PDE至少4KB吧,256个进程就1MB去了。。。Windows NT设计之初内存不像现在这么充裕,几MB浪费不起……
2013-4-20 23:52
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
大致上跟踪了下切换线程的过程,木有发现从页交换文件载入页表的行为……
2013-4-22 23:18
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
PDE一定在内存里面的,Pte是按需分配的,PDE占那点没关系的
2013-4-23 06:48
0
游客
登录 | 注册 方可回帖
返回
//