当发生 mem 访问并且 PT 中的访问位为 0 时,它会触发微码辅助,遍历 PT 并设置每个级别中的访问位。
在oredr中,为了让辅助代码将访问的位写入PT的级别,它需要知道它们的虚拟地址。 但是 cr3 中的指针和 PT 中的下一级指针具有物理地址。
那么辅助代码如何获取虚拟地址呢?
访问使用了虚拟地址,所以我认为这就像页面错误,错误处理程序可以获取虚拟地址(在这种情况下从 CR2 )。
它是微代码,因此该机制不必在架构上可见。 但一般来说,故障/陷阱处理程序可以从触发它的事物中获取一些数据,包括使用某些内部寄存器的微代码辅助,这是正常的。