首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >英特尔处理器能延迟TLB失效吗?

英特尔处理器能延迟TLB失效吗?
EN

Stack Overflow用户
提问于 2011-07-28 12:03:06
回答 1查看 466关注 0票数 2

参照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的失效称为对问题中的线性地址的写访问之后,没有故障(页面故障)吗?

或者,“延迟失效”只会在页面结构更改的线性地址的“失效”指令尚未发出时才会导致不可预测的结果吗?

EN

回答 1

Stack Overflow用户

发布于 2012-05-15 20:36:58

TLB是透明的优化,而不是不通过CR3的变化。TLB条目被标记为地址空间的唯一标识符,并留在TLB中,直到它们被错误的进程(在这种情况下TLB条目被破坏)或地址空间被恢复(在这种情况下,TLB被保存在地址空间变化之上)。

这一切都以透明的方式发生在CPU上。您的程序(或操作系统)不应该能够区分这种行为与TLB实际上被TLB失效所导致的失效之间的区别,除非:

(

  • A)时间--也就是说,从乐观的角度来说,不扩散是更快的(这也是他们这么做的原因),

  • ,B)在一些边缘情况下,这种行为有些不明确。如果您修改刚才更改的内存所在的代码页或触摸内存,则TLB的旧值可能仍然存在(即使是跨CR3更改)。

解决这一问题的办法是:

  • 1)通过invlpg指令强制TLB更新。这将清除TLB条目,在页面下一次触摸时触发TLB读入。
  • 2)通过CR0寄存器禁用并重新启用分页。
  • 3)通过CR0中的缓存禁用位或TLB的所有页面将所有页面标记为不可持续的(TLB条目在使用后自动清除)。
  • 4)更改了
  • 的模式。

请注意,这是真正未定义的行为。转换到SMM可能会使TLB失效,或者可能无效,从而使TLB处于竞争状态。不要依赖于这种行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6858643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档