是否可以在长模式下以直接方式为x86-64架构上的TLB提供给定虚拟地址的物理地址?
例如,假设我在PML4E中放置零,因此会触发页面错误异常,因为找到了无效的地址,在异常期间,CPU可以通过使用该虚拟地址所在的某些指令告诉TLB在X物理页面框架?
我想这样做是因为通过代码我可以很容易地判断出物理地址的位置,这样可以避免昂贵的页面遍历。
答案 0 :(得分:0)
不,你需要把一个页面放到TLB上。确切地说,您需要创建/更新适当的PTE(如果需要,使用PDE和PDPE)。 MMU管理的一切都以某种方式基于页表和TLB。甚至用户/主管保护模式也是作为映射页面的特殊标志完成的。
为什么你认为“页面漫步”是昂贵的操作?它根本不贵。要确定必须更新的PTE,您只需要解除引用4个指针:PML4E - > PDPE - > PDE - > PTE。这些条目只是相关表中的索引。要获得PML4E,您需要在页面错误处理期间使用39-47位地址,并将该值用作PML4表中的索引。要获得PDPE,您需要30-39位的地址作为PDE表中的索引,依此类推。这不是可以减慢系统速度的因素。我认为物理页面的分配需要更多的时间。