📜  直接映射、关联映射和集合关联映射之间的区别

📅  最后修改于: 2021-09-27 15:06:47             🧑  作者: Mango

先决条件 –缓存映射类型 – 直接映射、关联映射和集合关联映射

缓存:
添加在主存储器和处理器 (CPU) 之间以加快执行过程的一小部分 SRAM 存储器称为缓存存储器。它包括少量的 SRAM 和更多的 DRAM。它是一种高速且昂贵的内存。

缓存命中率衡量缓存如何有效地满足获取内容的请求。

Cache hit ratio = No of cache hits/ (No of cache hits + No. of cache Miss)

如果在缓存中找到数据,则为缓存命中,否则为缓存未命中。

缓存映射:
将主存块的数据带入缓存块的过程/技术称为缓存映射。
映射技术可以分类为:

  1. 直接映射
  2. 联想
  3. 集合关联

1.直接映射:
在这种技术中,来自主存储器的每个块在缓存组织中只有一个可能的位置。
例如:主内存的每个块 i 都可以使用以下公式映射到缓存的块 j:

j = i modulo m
Where : i = main memory block number
       j = cache block number
       m = number of blocks in the cache

这里的地址分为 3 个字段:Tag、Block 和 Word。

将内存地址映射到缓存
地址的 BLOCK 字段用于访问缓存的 BLOCK。然后,将地址中的标记位与块的标记进行比较。对于匹配,当在缓存中找到所需的词时会发生缓存命中。否则,会发生高速缓存未命中,并且必须将所需字从主存储器带入高速缓存。该词现在与新标签一起存储在缓存中(旧标签被替换)。

例子 –
如果我们有一个 8 KB 大小的完全关联映射缓存,块大小 = 128 字节,那么主内存的大小为 = 64 KB。 (假设字长 = 1 字节)然后:

物理地址的位数 = 16 位(因为内存大小 = 64 KB = 2 6 × 2 10 = 2 16)
WORD 的位数 = 7 位(作为块大小 = 128 字节 = 2 7 )
索引位数 = 13 位(因为缓存大小 = 8 KB = 2 3 × 2 10 = 2 13)
BLOCK 位数 = 索引位数 – WORD 位数 = 13 – 7 = 6bits

要么
(缓存块数 = 缓存大小/块大小 = 8 KB / 128 Bytes = 8×1024 Bytes/128 Bytes = 2 6个块 → 6bits)
标记位数 = 物理地址的位数 — 索引中的位数 = 16-13 = 3 位

2. 关联映射:
这里主存块的映射可以用任何一个缓存块来完成。内存地址在这里只有 2 个字段:字和标签。这种技术称为全关联缓存映射。

例子 –
如果我们有一个 8 KB 大小的完全关联映射缓存,块大小 = 128 字节,那么主内存的大小为 = 64 KB。然后 :
物理地址的位数 = 16 位(因为内存大小 = 64 KB = 2 6 × 2 10 = 2 16)
块偏移中的位数 = 7 位(因为块大小 = 128 字节 = 2 7 )
标签位数 = 物理地址的位数 – 块偏移中的位数 = 16-7 = 9 位
缓存块数 = 缓存大小/块大小 = 8 KB / 128 Bytes = 8×1024 Bytes/128 Bytes = 2 6个块。

3.设置-关联映射:
它结合了直接映射和关联映射的优点。
在这里,缓存由多个数字集组成,每个数字集由多个块组成。关系是:

n = w * L
i = j modulo w
where
i : cache set number
j : main memory block number
n : number of blocks in the cache
w : number of sets
L : number of lines in each set

这称为 L 路集关联映射。块 Bj 可以使用此映射转换为集合 j 中的任何块。

将内存地址映射到缓存 –
使用内存地址中的 set 字段,我们访问缓存的特定集合。然后,将地址中的标记位与该组中所有 L 块的标记进行比较。对于匹配,当在缓存中找到所需的词时会发生缓存命中。否则,会发生高速缓存未命中,并且必须将所需字从主存储器带入高速缓存。根据使用的替换策略,如果缓存已满则进行替换。

示例:如果我们有一个 8 KB 大小的完全关联映射缓存,块大小 = 128 字节,并且主存的大小为 = 64 KB,并且我们有“2 路”集合关联映射(假设每个单词都有8 位)。然后 :

物理地址的位数 = 16 位(因为内存大小 = 64 KB = 2 6 * 2 10 = 2 16)
缓存块数 = 缓存大小/块大小 = 8 KB / 128 字节 = 8×1024 字节/128 字节 = 2 6 个缓存块。
主内存块数 = MM 大小/块大小 = 64 KB / 128 字节 = 64×1024 字节/128 字节 = 2 9 MM 块。
大小为 2 的集合数 = 缓存块数/ L = 2 6 /2 = 2 5 个缓存集。(L = 2 因为它是 2 路集合关联映射)

直接映射、关联映射和集合关联映射之间的区别:

  Direct-mapping Associative Mapping Set-Associative Mapping
1. Needs only one comparison because of using direct formula to get the effective cache address. Needs comparison with all tag bits, i.e., the cache control logic must examine every block’s tag for a match at the same time in order to determine that a block is in the cache/not. Needs comparisons equal to number of blocks per set as the set can contain more than 1 blocks. 
2. Main Memory Address is divided into 3 fields : TAG, BLOCK & WORD. The BLOCK & WORD together make an index. The least significant TAG bits identify a unique word within a block of main memory, the BLOCK bits specify one of the blocks and the Tag bits are the most significant bits. Main Memory Address is divided into 1 fields : TAG & WORD. Main Memory Address is divided into 3 fields : TAG, SET & WORD.
3. There is one possible location in the cache organization for each block from main memory because we have a fixed formula. The mapping of the main memory block can be done with any of the cache block. The mapping of the main memory block can be done with a particular cache block of any direct-mapped cache.
4. If the processor need to access same memory location from 2 different main memory pages frequently, cache hit ratio decreases. If the processor need to access same memory location from 2 different main memory pages frequently, cache hit ratio has no effect. In case of frequently accessing two different pages of the main memory if reduced, the cache hit ratio reduces.
5. Search time is less here because there is one possible location in the cache organization for each block from main memory. Search time is more as the cache control logic examines every block’s tag for a match. Search time increases with number of blocks per set.