繁体   English   中英

英特尔处理器可以延迟TLB失效吗?

[英]Can Intel processors delay TLB invalidations?

参考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无效之后,对所讨论的线性地址的写访问也不会出错 (页面错误)吗?

还是仅当未发出页结构已更改的线性地址的“无效”指令时,“延迟无效”才会导致不可预测的结果?

透明地优化TLB不会被CR3更改取消缓存。 TLB条目用地址空间的唯一标识符标记,并留在TLB中,直到它们被错误的过程(在这种情况下TLB条目已被废弃)触摸或恢复了地址空间(在这种情况下, TLB在地址空间更改时被保留)。

这一切对CPU都是透明的。 您的程序(或操作系统)不能通过以下方式分辨出此行为与TLB无效而使TLB实际无效之间的区别:

  • A)时间安排-即TLB乐观地认为不取消缓存会更快(这就是他们这样做的原因)
  • B)在某些极端情况下,此行为有些不确定。 如果您修改了刚刚坐在的代码页或触摸了刚刚更改的内存,则TLB的旧值可能仍然存在(即使在CR3更改中)。

解决方案是:

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

请注意,这实际上是未定义的行为。 过渡到SMM可能会使TLB无效,也可能不会无效,从而使TLB处于竞争状态。 不要依赖这种行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM