MMU / Kernel如何知道PTE是否有效?

时间:2017-04-18 11:42:18

标签: memory-management linux-kernel mmu

假设一个两级页表,假设该程序被分配了2页(8KB)

  GPD      PD1     PD2      PD3 
+-----+ +------+ +------+ +------+
+  1  + +  22  + +------+ +------+
+  0  + +  62  + +------+ +------+
+  0  + +  0   + +------+ +------+
+-----+ +------+ +------+ +------+

MMU /内核如何知道程序何时尝试访问PD1的第三个条目或类似于GPD的2,3条目? 它是否用一些值初始化未使用的PTE以区分未使用的PTE? (比如0或者什么)

我已阅读here并且pte标志中没有有效位或其他内容

1 个答案:

答案 0 :(得分:0)

有一个名为pte_none的函数。它可以测试PTE是否为空。如果PTE无效,其值将为零,函数pte_none将返回TRUE。

如果页表条目为零,则present bit也为零,因此不存在从虚拟地址到物理地址的映射。如果程序想要访问此无效虚拟地址,MMU将检查present bit并引发一个称为页面错误的异常,然后CPU将执行由Interrupt Descriptor Table(IDT)注册的异常处理程序。处理程序将执行的操作取决于此异常的类型。结果可能是加载所需的页面或终止程序。