关于进程页表和页目录是存放在内核空间,还是用户空间,低端还是高端内存的思考和验证

本文探讨了在Linux内核中,进程页表和页目录在配置高端内存情况下的存储位置。在4.2内核版本中,通过分析代码发现,pgd、pud和pmd位于低端内存的内核空间,而pte可以使用高端内存。内核通过cr3和线性映射访问页目录,但大量进程可能导致低端内存不足。代码分析揭示了页表分配和页帧号转换的过程。
摘要由CSDN通过智能技术生成

首先,如果内核没有配置高端内存,那么进程页表肯定就是在低端内存了,也就是全部在内核空间了。
在配置了高端内存的情况下,进程页表的pgd,pud,pmd,pte这些,应该放在内核空间的低端内存,还是高端内存,内核空间还是用户空间?由于内核通过cr3能获得全局页目录中的物理地址,由于低端内存的线性映射,内核就能据此算出页目录的虚拟地址,进而实现对页目录的读写,但是,如果所有进程的页表都存放在低端内存,感觉进程一多,低端内存会着不住。而如果页表在用户空间(或在内核空间的非线性映射区),则会因为内核不知道页表的虚拟地址而无法完成对页目录的读写。
接下来来查看代码(4.2内核版本),从x86的__handle_mm_fault入手,里面会对缺页异常进行处理(如分配页目录,页表等):

3314         pud = pud_alloc(mm, pgd, address);

函数执行流:

pud_alloc-->__pud_alloc-->pud_alloc_one

126 static inline pud_t *pud_alloc_one(struct<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值