【问题标题】:Definition/meaning of Aliasing? (CPU cache architectures)别名的定义/含义? (CPU 缓存架构)
【发布时间】:2011-08-22 06:31:45
【问题描述】:

我对 CPU 缓存和物理地址之间的“别名”的含义有点困惑。 首先我在维基百科上找到了它的定义:

但是,VIVT 存在别名问题,其中几个不同的虚拟地址可能引用相同的物理地址。另一个问题是同音异义词,同一个虚拟地址映射到几个不同的物理地址。

但过了一会儿,我在演示文稿上看到了不同的定义(ppt) DAC'05 的:“用于嵌入式处理器的节能物理标记缓存 虚拟内存”

缓存别名和同义词:

别名:来自不同上下文的相同虚拟地址映射到不同的物理地址同义词:不同的虚拟地址映射到相同的物理地址(数据共享)

由于我不是母语人士,我不知道哪个是正确的, 虽然我觉得维基的定义是正确的。

编辑:

CPU缓存中“aliasing”的概念通常是“同义词”,相反是“同义词”。在更通用的层面上,“混叠”是“混乱”或“混乱”或类似的东西。所以在我看来,“aliasing”正是指(X->Y)的映射是“非双射的”,其中

“X” = 已缓存的物理地址单元的子集。 (每个元素都是一行字节)

"Y" = 有效缓存行的集合。 (元素也是“线”)

【问题讨论】:

  • 哪个定义是正确的? 1v->np 还是 nv->1p?

标签: caching architecture cpu-architecture cpu-cache


【解决方案1】:

您需要先了解虚拟内存,但基本上是这样的:

  • 您的程序使用的内存地址不是 RAM 使用的物理地址;它们是由 CPU 虚拟地址映射到物理地址的。

  • 多个虚拟地址可以指向同一个物理地址。

这意味着您可以在不知情的情况下在缓存的不同部分拥有相同数据的两个副本……而且它们不会被正确更新,因此您会得到错误的结果。


编辑:

reference的摘录:

缓存别名发生在到内存物理页的多个映射具有冲突的缓存状态,例如缓存和未缓存。由于这些冲突状态,当处理器的缓存被刷新时,该物理页面中的数据可能会损坏。如果该页面正被驱动程序用于 DMA,这可能会导致硬件稳定性问题和系统锁定。


For those who are still unconvinced:

在 ARMv4 和 ARMv5 处理器上,缓存组织为虚拟索引、虚拟标记 (VIVT) 缓存,其中索引和标记均基于虚拟地址。这种方法的主要优点是高速缓存查找速度更快,因为翻译后备缓冲区 (TLB) 不参与匹配虚拟地址的高速缓存行。但是,这种缓存方法确实需要更频繁的缓存刷新因为缓存别名,其中同一物理地址可以映射到多个虚拟地址

【讨论】:

  • 我根本不明白这是如何回答这个问题的。 OP 想知道别名是否意味着“相同的虚拟地址(在不同的上下文中)被映射到不同的物理位置”或“多个虚拟地址被映射到一个物理位置”。我怀疑答案是“两者”,但没有参考。
  • 你能解释一下以上两个定义哪个是错误的吗?
  • @John, @Wu:我相信维基百科是正确的。别名是单个程序正确性的问题,解释2对此没有意义。
  • 致John:既然“Homonym”和“Synonym”不能同音同义,我想只有一个是正确的。
  • @Wu, @John:见我的消息来源。 :)
【解决方案2】:

@Wu 是的,您确实需要了解虚拟内存一点才能了解别名。先给大家解释几行:

假设我有一个 1GB 的 RAM(物理内存)。我想向我的程序员展示我有 4GB 内存然后我使用虚拟内存的观点。在虚拟内存中,程序员认为他/她有 4GB 并从这个角度编写他们的程序。他们不需要知道存在多少物理内存。优点是程序将在具有不同 RAM 量的计算机上运行。此外,该程序可以与其他程序一起在计算机上运行(也消耗物理内存)。

这就是虚拟内存的实现方式。我将给出一个简单的 1 级虚拟内存系统(Intel 有一个 2/3 级系统,这只是让解释变得复杂。

这里的问题是程序员有 40 亿个地址,而我们只有 10 亿个地方可以放置这 40 亿个地址。所以,地址都来自虚拟地址空间,需要映射到物理地址空间。这是使用称为页表的简单索引表完成的。您使用虚拟地址访问页表,它会为您提供该内存位置的物理地址。

一些细节:请记住,物理空间只有 1GB,因此系统仅将最近访问的 1GB 值保留在物理内存中,其余的保留在系统磁盘中。当程序请求特定地址时,我们首先检查它是否已经在物理内存中。如果是,则将其返回给程序。如果没有,则从磁盘中取出并放入物理内存,然后返回给程序。后者称为页面错误。

回到虚拟内存上下文中的别名:由于虚拟->物理地址之间存在映射,因此可以使两个虚拟地址映射到相同的物理地址。这就像说如果我查看虚拟页表 地址 X 和 Y,在这两种情况下我都会得到相同的物理地址。

我在下面展示了一个 8 条目页表的简单示例。假设有 8 个虚拟地址,只有 3 个物理地址。页表如下所示:

0:1 1:在磁盘上 2:2 3:1 4:在磁盘上 5:在磁盘上 6:在磁盘上 7:0 这意味着如果访问虚拟地址 4,您将遇到页面错误。 如果访问虚拟地址 3,会得到物理地址 1 在这种情况下,虚拟地址 0 和 3 对它们来说都是同一个物理地址 1 的别名

注意:我在各处都使用了术语物理地址和虚拟地址来简化概念。在实际系统中,虚拟到物理的映射不是基于每个地址的。相反,我们将虚拟空间块映射到物理空间。每个块称为页(这就是映射表称为页表的原因),块的大小是 ISA 的属性,例如,Intel x86 有 4Kbyte 的页。

【讨论】:

  • 页表肯定是。但是在缓存中不能超过 1 个在线,操作系统将进行上下文切换,因此缓存将被刷新,然后用另一个 v-tag 重新填充(足够以后)。
  • 这不是真的。操作系统不需要对每个上下文切换进行刷新。缓存通常在不同的上下文之间共享,例如,支持 SMT 的机器允许两个进程在同一个内核上同时运行,这意味着上下文切换不需要缓存行刷新。当页表发生变化时,确实需要刷新缓存,这是页面错误的结果。
  • 您是否认为在我的上一个回复中“稍后足够”具有相同的含义?更清楚一点,操作系统将进行上下文切换,以便准备好执行正确的缓存更新。
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2020-12-12
相关资源
最近更新 更多