【问题标题】:About TLB entries and Page table entries关于 TLB 条目和页表条目
【发布时间】:2019-05-13 01:48:53
【问题描述】:

来自一个关于 TLB 的网站:(https://www.bottomupcs.com/virtual_memory_hardware.xhtml#other-page-related-faults):

对于我强调的以下部分:

1:TLB条目的格式和PTE(页表条目)一样吗?而且还不清楚
页面中的“页面”可以标记为是指TLB入口还是PTE?

2:对于遍历所有页面中的“页面”,它们是TLB条目还是PTE?

3:为什么它移出而不是“移入”?

4:顺序是(1)设置两个位(2)放入TLB,还是相反?

TLB 通常会生成另外两个重要的错误,它们有助于管理访问和脏页。每个页面通常包含一个以单个位形式表示的属性,该属性标记该页面是否已被访问或脏。

被访问的页面就是任何被访问过的页面。 1当页面翻译最初加载到 TLB 时,可以将页面标记为已访问(否则为什么要加载它?[19])

2操作系统可以定期检查所有页面并清除访问位以了解当前正在使用哪些页面。当系统内存已满,操作系统需要选择要换出到磁盘的页面时,显然那些访问位尚未重置的页面是删除的最佳候选者,因为它们没有被使用的时间最长。

脏页是一个已写入数据的页面,因此与磁盘上已有的任何数据都不匹配。例如,如果一个页面从 swap 加载,然后由进程写入,3在将其移出 swap之前,它需要在磁盘上有副本更新。干净的页面没有任何变化,因此我们不需要将页面复制回磁盘的开销。

两者的相似之处在于它们帮助操作系统管理页面。一般概念是一个页面有两个额外的位;脏位和访问位。 4当页面被放入 TLB 时,这些位被设置以指示 CPU 应该引发故障。

当一个进程试图引用内存时,硬件会执行通常的转换过程。但是,它还会额外检查是否未设置访问标志。如果是这样,它会向操作系统提出错误,操作系统应该设置该位并允许进程继续。同样,如果硬件检测到它正在写入一个没有设置脏位的页面,它将引发操作系统错误将该页面标记为脏。

【问题讨论】:

  • 是的,“在它可以移出交换之前”的措辞是错误的。它正在谈论将脏页再次复制到交换空间。
  • 1.我不确定是否允许 TLB 将缓存修改写回 PTE 的 Accessed 和 Dirty 位,或者这些对内存的修改是否必须(逻辑上)立即变得可见,就像存储指令的结果一样。我马上就猜到了。
  • @PeterCordes:这是否意味着如果另一个进程想要使用该页面(所以换出),必须先写回脏页面?
  • 不,这没有意义。这种解释要求“它”是您要交换的其他页面的代词。但这没有任何意义,因为该主题尚未在该段落的任何地方引入,因此“它”显然仍然是肮脏的有问题的页面。有一个脏位的全部意义在于表明磁盘上的副本与内存中的副本不同步(对于内存映射文件或以交换作为后备存储的页面)。 “移出交换”听起来像是释放磁盘页面,而不是释放 RAM 页面,所以它是倒退的。

标签: memory-management operating-system cpu-architecture virtual-memory tlb


【解决方案1】:

我建议忽略该链接作为来源。这非常令人困惑。我没有看到任何关于具体实现的提及,但它清楚地描述了一个。

在任何合理设计的处理器中,TLB 对程序员(甚至系统程序员)都是完全透明的。它完全是一个硬件。

1:TLB条目的格式和PTE(页表条目)一样吗?

程序员永远不会看到 TLB 条目。它们可以具有与 PTE 相同的格式。他们可能不会。

2:对于遍历所有页面中的“页面”,它们是TLB条目还是PTE?

程序员无权访问 TLB 条目。他们必须参考 PTE。

3:为什么它被移出而不是“移入”?

可能,但您的链接似乎有很多混乱。

4:顺序是(1)设置两个位(2)放入TLB,还是相反?

这是描述一些特定的、未命名的实现。大多数处理器都有脏位,但并非所有处理器都有访问位。

【讨论】:

  • “完全透明”是夸大其词。在大多数架构中,您必须在修改 PTE 后显式地使 TLB 条目无效。在 x86 上,相关指令是 invlpg,如果 PTE 先前有效,则需要它,即使它只能被推测性缓存。但是 x86 ISA 规则会阻止负缓存,因此您可以在没有invlpg 的情况下使无效的 PTE 有效。 (如果您说 TLB 对 Accessed 和 Dirty 位是透明的,那么是的,我认为这是真的。但是您写的内容听起来更有说服力。)
  • 英特尔和 ARM 是我能想到的仅有的具有管理 TLB 的指令的处理器。
  • PowerPC 有tlbie(TLB 无效条目)和tlbia(全部无效)。 csit-sun.pub.ro/~cpop/Documentatie_SMP/Motorola_PowerPC/PowerPc/…。这个是正常的;如果你有分页,你通常会有手动 TLB 失效。一些 ISA 具有纯软件管理的 TLB 条目(没有 HW 页面遍历器,因此 SW 必须在内核提供的 TLB-miss 处理函数中设置 TLB 条目)。例如,MIPS 就是这样。 (一些现代嵌入式 MIPS CPU 可能根本没有分页,但我忘记了现代 MIPS 是否有硬件分页。)
  • 您能否命名一个具有分页 + TLB 但不需要内核在更改页表后手动使条目无效的 ISA?即窥探存储到页表以自动保持一致性?
  • 如果 VAX 没有使 TLB 条目无效的指令,我认为这意味着它只能通过安装新页表(或重新安装当前页表)来刷新整个缓冲区。像 x86 mov cr3, regcs.rice.edu/~alc/comp521/Papers/p113-black.pdf 引用 VAX 作为缓冲区刷新成本高昂的一种 ISA。如果 PTE 写入甚至在多处理器的内核中被窥探,则 VAX 上的 Mach 可以直接使用它,而无需为 TLB 击落做任何特殊的事情。
猜你喜欢
  • 2016-02-04
  • 2019-09-17
  • 2012-01-12
  • 2022-01-08
  • 2015-01-04
  • 2015-07-29
  • 2014-07-31
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多