假设一个两级页表,假设该程序被分配了2页(8KB)
GPD PD1 PD2 PD3
+-----+ +------+ +------+ +------+
+ 1 + + 22 + +------+ +------+
+ 0 + + 62 + +------+ +------+
+ 0 + + 0 + +------+ +------+
+-----+ +------+ +------+ +------+
MMU /内核如何知道程序何时尝试访问PD1的第三个条目或类似于GPD的2,3条目? 它是否用一些值初始化未使用的PTE以区分未使用的PTE? (比如0或者什么)
我已阅读here并且pte标志中没有有效位或其他内容
答案 0 :(得分:0)
有一个名为pte_none
的函数。它可以测试PTE是否为空。如果PTE无效,其值将为零,函数pte_none
将返回TRUE。
如果页表条目为零,则present bit
也为零,因此不存在从虚拟地址到物理地址的映射。如果程序想要访问此无效虚拟地址,MMU将检查present bit
并引发一个称为页面错误的异常,然后CPU将执行由Interrupt Descriptor Table(IDT)注册的异常处理程序。处理程序将执行的操作取决于此异常的类型。结果可能是加载所需的页面或终止程序。