最高级页表,也就是cr3或satp对应的一到两个页,是否会发生缺页异常呢?
目前讨论的一些成果:
这个问题涉及到进程管理,我们简化讨论。
- 如果进程还没有进入就绪状态(如在等待状态),与它相关的所有数据都有可能不在内存(包括第一级页表)。这不是执行程序代码时的缺页,而是操作系统内核修改进程状态时的缺页。
- 程序已经在执行中了,那这里第一级页表一定在内存的,否则前面的指令就无法工作了。
- 程序已经在执行中了,访问第一级页表中的页表项时,可能出现相应表项对应的二级页表缺页。
- “页表项缺页”的说法不准确。只有指令执行时要访问的页面无法访问时,才出现缺页;只有用 virtaddr 访问内存才会导致 PF,所有的 CR3 / PDE / PTE 都是 physaddr。
- 二级页表有可能不存在的。这种情况不应该叫缺页,叫 ”CR3 指向的物理地址并没有包含一个页表“ i.e. dangling CR3,应该算是用户代码缺页导致的页面加载的一个中间过程。好像ucore+中有相关代码(需要确认)。