Caching 缓存寻址方法混乱

Caching 缓存寻址方法混乱,caching,cpu-architecture,cpu-cache,Caching,Cpu Architecture,Cpu Cache,我一直在阅读有关缓存寻址的四种方法: 物理索引物理标记(PIPT) 物理索引虚拟标记(PIVT) 虚拟索引物理标记(VIPT) 虚拟索引虚拟标记(VIVT) 以下哪些缓存会遇到同义词和同音词问题? 我知道VIVT会受到这些问题的困扰,而PIPT不会。但是PIVT和VIPT呢?由于同义词是在不同的虚拟地址映射到同一物理地址时出现的(人们希望避免错误的未命中),因此在VIPT缓存中,同义词可能(实际上)被索引到不同的缓存集(在这种情况下,数据不一致是可能的,例如,通过写入一个集合中的同义词,然后读取

我一直在阅读有关缓存寻址的四种方法:

  • 物理索引物理标记(PIPT)
  • 物理索引虚拟标记(PIVT)
  • 虚拟索引物理标记(VIPT)
  • 虚拟索引虚拟标记(VIVT)
  • 以下哪些缓存会遇到同义词和同音词问题?
    我知道VIVT会受到这些问题的困扰,而PIPT不会。但是PIVT和VIPT呢?

    由于同义词是在不同的虚拟地址映射到同一物理地址时出现的(人们希望避免错误的未命中),因此在VIPT缓存中,同义词可能(实际上)被索引到不同的缓存集(在这种情况下,数据不一致是可能的,例如,通过写入一个集合中的同义词,然后读取另一个集合中的同义词[相同的物理地址,不同的虚拟地址]),而在PIVT缓存中,同义词始终映射到同一集合,但虚拟地址的标记部分的差异可能导致指示未命中

    (直接映射的PIVT缓存在未命中is服务之前对受害块进行写回,可以避免同义词问题,因为实际内存已访问[物理地址]必须强制逐出任何同义词,因为物理地址索引是相同的,并且该索引处只有一个块。直写映射PIVT缓存出于相同的原因将表现出类似的行为;最新的数据值将位于后备存储器[L2或内存]。这假设任何写入缓冲区或二级缓存都已进行物理标记。如果在未命中进行维修之前未更新备份存储,则错误的未命中[虚拟地址与标记不匹配,但具有相同的物理地址]可以从备份存储读取过时数据。)

    (注意:PIVT通常仅在虚拟索引与物理索引相同时才有意义,即,当使用页偏移量内的虚拟位时。如果一个人已经足够早地知道完整的物理地址以索引缓存,则没有理由不将物理地址用于标记。)

    只要同义词可以映射到缓存中的不同块,使用直写不会消除同义词问题。如果任何索引位可能不同(使用虚拟索引)或者提供了多个方法,则当使用不同的虚拟地址探测缓存时,过时值可能会保留在该备用位置,并且找不到。读a、写B、读a序列(其中a和B是同义词)可能会使第二次读a在第二次读a命中缓存时看不到写B结果。(即使使用直接映射直写缓存,也需要对任何写入缓冲区进行物理标记[物理索引不是问题,因为写入缓冲区相对较小]。)

    虽然一级缓存中同时存在两个同义词,且先写入一个同义词,然后读取另一个同义词的概率可能极低,但仍有一种预期,即此类情况将得到正确处理

    由于当相同的虚拟地址映射到不同的物理地址(人们希望避免错误命中)时会出现同音词,因此在VIPT缓存中同音词会映射到相同的缓存集,但标记会不同(因此没有错误命中),而在PIVT缓存中同音词会映射到相同的缓存集(如果索引物理位恰好匹配)并将在虚拟标记中错误匹配

    总之,不太可能的PIVT设计受到同义词和同音词问题的影响,而VIPT设计只受到同义词问题的影响。VIVT设计具有不现实的PIVT等所有问题(即使是特殊的直接映射情况也不起作用,因为当用于索引的虚拟地址位不同时,同义词可以映射到不同的块)

    (对于多核/处理器,一致性通常由物理地址处理。虽然可以提供TLB模拟,将物理地址转换为虚拟地址[至少一个PA-RISC处理器可能已经这样做了],从该翻译缓存中逐出将强制逐出任何标记有该虚拟地址的缓存块,这与ASID耗尽导致的逐出类似。)

    同义词和同音词的出现 一般来说,可写同义词可能并不常见,但它们出现的一种方式是,如果一个文件由多个进程进行内存映射,那么显然,如果一个进程已经映射(例如,堆内存)另一个进程用于映射文件的地址范围,则一个进程无法将文件映射到另一个进程正在使用的同一虚拟地址范围

    只读同义词可能更常见。一些操作系统在整个系统中使用单个零填充页面,并将多个虚拟页面映射到同一物理零页面(当程序尝试写入该页面时使用写入时复制)。如果地址空间布局随机化(一种安全功能)如果应用于每个进程,则不同的进程可能会对相同的代码/文本物理页使用不同的虚拟地址

    最常见的同音词形式可能与具有多个地址空间有关。在普通操作系统中,每个进程都有自己的地址空间(尽管操作系统通常为自己保留部分地址空间,并在不同的进程中使用相同的映射)。通过向虚拟地址添加地址空间标识符,可以减少此类同音词的问题。通过这种方式,只有当ASID被重新用于特定的虚拟标记缓存时,才需要对此类同音词进行特殊处理。(ASID降低了特殊缓存管理的频率,以避免同名问题,但通常不会消除该问题。然而,即使降低频率,也会降低性能要求,从而降低软件的复杂性;高度优化的代码通常更难生成,也更难维护。)

    另一个表格o