【发布时间】: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