缓存和主存系统(Cache and Memory)

本文介绍了缓存和主存系统,包括经典的PC架构、内存层次、Cache的基础概念如基本结构、地址转换、优化策略,以及DRAM系统结构,如DIMM、Rank、Bank和DRAM arrays。探讨了如何减少Miss Rate,以及Cache写策略。

                                缓存和主存系统(Cache and Memory)

1、总览经典PC架构


用于后续联系各个部件之间的关系,不然经常讲完某个部件却不知道在整个系统中的位置。

观察上图产生的几个疑问:

(1)cache在cpu和主板上?以什么介质形式存在?(主板不大肯定无法提供大空间)

(2)DRAM(Memory)在哪里,又以什么介质形式存在?

先扔在这。

2、内存层次


ps:Tape虽然已经慢慢退伍,但还是一项比较常用的存储方式。(最大的缺点就是运输过程中易损坏)


关注点:实现技术,管理方式,存取类型。

一个疑惑:随机存储中的随机是什么意思?

本篇接下来主要讲述两个部分(Cache and DRAM)

3、Cache Basics

Basic Concepts:


注意:主板上面的chip不只一片,chip主要分为南,北桥,以及cpu芯片。

Cache lines or Cache blocks



cache类型:


VM(虚拟内存)Virtual Memory


地址转换:



### 主存Cache的三种映射方式 #### 1. **直接映射** 直接映射是一种简单的映射方法,其中主存中的每一个块都固定地映射到 Cache 中的一个特定位置。这种方式通过计算主存地址的一部分来决定其对应的 Cache 行号,从而减少了查找时间。 - 地址格式通常分为三部分: - **主存字块标志**(Tag):用于唯一标识主存块。 - **块内地址**(Offset):表示块内的具体偏移量。 - **索引位数**(Index):指定 Cache 的行号[^2]。 优点: - 实现简单,硬件开销低。 - 查找速度快,因为只需要比较一个固定的 Cache 行。 缺点: - 存在冲突问题,即多个主存块可能竞争同一个 Cache 行,导致频繁替换命中率下降。 --- #### 2. **组相联映射** 组相联映射是介于直接映射全相联映射之间的一种折中方案。在这种模式下,主存被划分为若干组,每组可以容纳一定数量的 Cache 块。主存中的每个块可以根据其地址映射到某个特定的组,但在该组内部的位置是可以自由选择的。 - 地址格式同样分为三部分: - **主存字块标志**(Tag):用于区分不同主存块。 - **组号**(Set Number):指示主存块应属于哪个组。 - **块内地址**(Offset):定位块内的具体数据项[^3]。 优点: - 提高了灵活性,降低了因直接映射带来的冲突概率。 - 平衡了性能实现复杂度。 缺点: - 需要更多的比较逻辑,增加了硬件成本。 --- #### 3. **全相联映射** 全相联映射允许主存中的任意一块都可以放置在 Cache 的任何位置。这意味着不需要通过索引来限定主存块的具体位置,只需匹配标签即可完成访问。 - 地址格式仅需两部分: - **主存字块标志**(Tag):完全依赖此字段进行匹配。 - **块内地址**(Offset):指向具体的内存单元[^4]。 优点: - 最大限度地利用了 Cache 容量,理论上具有最高的命中率。 - 不受固定位置约束的影响。 缺点: - 硬件实现复杂,需要大量的并行比较器。 - 成本高昂,不适合大规模应用。 --- ### 示例分析 假设主存容量为 \(256 \, K\) 字节 (\(2^{18}\))Cache 容量为 \(2 \, K\) 字节 (\(2^{11}\)),块大小为 \(4\) 字节 (\(2^2\)): 1. **Cache 可容纳的数据块数目** 每个 Cache 数据块占用 \(4\) 字节空间,因此总共有 \(2^{11} / 2^2 = 2^9 = 512\) 个数据块。 2. **直接映射下的主存地址格式** - 总共 \(18\) 位地址。 - 块内地址占 \(2\) 位(\(log_2(4)\))。 - 缓存索引占 \(9\) 位(\(log_2(512)\))。 - 标志位占剩余 \(7\) 位(\(18 - 2 - 9 = 7\))。 3. **四路组相联映射下的主存地址格式** 如果采用四路组相联,则每组有 \(4\) 个块,总共分 \(512 / 4 = 128\) 组。 - 组号占 \(7\) 位(\(log_2(128)\))。 - 标志位增加至 \(10\) 位(\(18 - 2 - 7 = 9\))。 4. **全相联映射下的主存地址格式** 所有 \(18\) 位均作为标志位或块内地址分配,无需索引。 --- ```python def calculate_cache_mapping(memory_size_bits, cache_size_bits, block_size_bits): total_blocks_in_cache = (2 ** cache_size_bits) // (2 ** block_size_bits) direct_mapped_tag_bits = memory_size_bits - block_size_bits - int(math.log(total_blocks_in_cache, 2)) set_associative_set_bits = int(math.log(total_blocks_in_cache // associativity, 2)) fully_assoc_tag_bits = memory_size_bits - block_size_bits return { 'Direct Mapped': {'tag bits': direct_mapped_tag_bits}, 'Set Associative': {'set bits': set_associative_set_bits}, 'Fully Associative': {'tag bits': fully_assoc_tag_bits} } ``` --- ### 结论 综上所述,三种映射方式各有优劣,实际选用取决于应用场景技术需求。对于高性能处理器而言,倾向于使用更复杂的组相联映射;而对于嵌入式设备来说,直接映射因其低成本而更为常见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值