V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
main1234
V2EX  ›  程序员

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

  •  
  •   main1234 · 268 天前 · 1244 次点击
    这是一个创建于 268 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2024-03-11 20:49:19 +08:00
    zengmingyang96
        1
    zengmingyang96  
       268 天前
    有了书架才能装书
    PTLin
        2
    PTLin  
       268 天前
    进入 ia32e 模式后,cpu 指令中的全部地址都是虚拟地址,都需要通过 mmu 进行翻译,mmu 自然就需要 cr3 中的一级页表,不是可不可以按需的问题,而是 x86 的设计上就不可能能按需创建。
    在一级页表中的目录项才可以指明是否存在,不存在的话发生缺页中断,进而从 cr2 读取到缺页的地址进行下一步操作。
    xiaozhaoz
        3
    xiaozhaoz  
       268 天前
    @PTLin
    我觉得也不是 cpu 设计的原因,是操作系统实现的原因。
    如果说的是 userspace process , 没必要一级页表也要动态分配,因为程序总是要用内存的。一级页表开销也不大。
    如果真的要实现 userspace process 一级页表也要动态分配,以前尝试过 cr3 放一个 reserved address ,然后触发 sigbus 后再分配 pdbr
    PTLin
        4
    PTLin  
       268 天前
    @xiaozhaoz 没太理解你说的,你说的是把 CR3[63:MAXPHYADDR]写入 1 触发 GP 异常,然后在这个异常处理里分配具体的一级目录和写入 cr3 吗?
    xiaozhaoz
        5
    xiaozhaoz  
       264 天前
    @PTLin 写入 reserved memory address ,然后如你所说的 gp 上捕获异常,写一级目录和 cr3. 这个方法老的 linux 版本上试过,可以走通但没什么用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.