虚拟内存一直以来的疑问,为什么一级页表不能按需创建

66 天前
 main1234

假如多级页表是二级的,第二级可以不存储不存在的页表项,也就是按需创建,那么为啥一级页表不能按需再创建

1045 次点击
所在节点    程序员
5 条回复
zengmingyang96
66 天前
有了书架才能装书
PTLin
66 天前
进入 ia32e 模式后,cpu 指令中的全部地址都是虚拟地址,都需要通过 mmu 进行翻译,mmu 自然就需要 cr3 中的一级页表,不是可不可以按需的问题,而是 x86 的设计上就不可能能按需创建。
在一级页表中的目录项才可以指明是否存在,不存在的话发生缺页中断,进而从 cr2 读取到缺页的地址进行下一步操作。
xiaozhaoz
66 天前
@PTLin
我觉得也不是 cpu 设计的原因,是操作系统实现的原因。
如果说的是 userspace process , 没必要一级页表也要动态分配,因为程序总是要用内存的。一级页表开销也不大。
如果真的要实现 userspace process 一级页表也要动态分配,以前尝试过 cr3 放一个 reserved address ,然后触发 sigbus 后再分配 pdbr
PTLin
66 天前
@xiaozhaoz 没太理解你说的,你说的是把 CR3[63:MAXPHYADDR]写入 1 触发 GP 异常,然后在这个异常处理里分配具体的一级目录和写入 cr3 吗?
xiaozhaoz
63 天前
@PTLin 写入 reserved memory address ,然后如你所说的 gp 上捕获异常,写一级目录和 cr3. 这个方法老的 linux 版本上试过,可以走通但没什么用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1021912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX