别名的定义/含义?(CPU 缓存体系结构)



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

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

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

缓存别名和同义词:

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

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

编辑:

CPU缓存中"混叠"的概念通常意味着"同义词",相反是"同音异义词"。在更通用的层面上,"别名"是"混乱"或"混乱"或类似的东西。所以在我看来,"混叠"确切地意味着(X->Y)的映射是"非双射的",其中

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

"Y" = 有效高速缓存行的集合。(元素 a 也是"行")

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

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

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

这意味着您可以在缓存的不同部分拥有相同数据的两个副本,而不知道...而且它们不会正确更新,所以你会得到错误的结果。

<小时 />

编辑:

参考资料:

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

<小时 />

对于那些仍然不相信的人:

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

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

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

因此,以下是虚拟内存的实现方式。我将给出一个简单的 1 级虚拟内存系统(英特尔有一个 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具有4KB页面。

最新更新