参照InteI的“软件开发人员手册”(订单编号: 325384-039US 2011年5月),4.10.4.4节“延迟失效”描述了TLB条目失效的潜在延迟,这种延迟会在访问分页结构条目已被更改的内存时导致不可预测的结果。
手册上说..。“在某些情况下,所需的失效可能会延迟。软件开发人员应该理解,在修改分页结构条目和执行第4.10.4.2节建议的失效指令之间,处理器可以使用基于分页结构条目的旧值或新值的翻译。以下项目描述了延迟失效的一些潜在原因:如果对分页结构条目进行修改以将R/W标志从0更改为1,则写入访问到其转换受此条目控制的线性地址可能或不会导致页面故障异常。”
让我们假设一个简单的情况,对于一个线性地址,修改页面结构条目(r/w标志从0到1),然后立即调用相应的TBL无效指令。我的问题是--作为TLB的延迟失效的参考,可能甚至在将TLB的失效称为对问题中的线性地址的写访问之后,没有故障(页面故障)吗?
或者,“延迟失效”只会在页面结构更改的线性地址的“失效”指令尚未发出时才会导致不可预测的结果吗?
发布于 2012-05-15 20:36:58
TLB是透明的优化,而不是不通过CR3的变化。TLB条目被标记为地址空间的唯一标识符,并留在TLB中,直到它们被错误的进程(在这种情况下TLB条目被破坏)或地址空间被恢复(在这种情况下,TLB被保存在地址空间变化之上)。
这一切都以透明的方式发生在CPU上。您的程序(或操作系统)不应该能够区分这种行为与TLB实际上被TLB失效所导致的失效之间的区别,除非:
(
,
解决这一问题的办法是:
请注意,这是真正未定义的行为。转换到SMM可能会使TLB失效,或者可能无效,从而使TLB处于竞争状态。不要依赖于这种行为。
https://stackoverflow.com/questions/6858643
复制相似问题