Lec24-27 Caches
最近更新:2025-01-26
|
字数总计:1.1k
|
阅读估时:3分钟
|
阅读量:次
Binary Prefix
- Binary Prefix(二进制前缀)是一种用于表示计算机存储和数据传输中数量的单位,特别是在涉及二进制系统时。它们基于2的幂次方,通常用于描述计算机存储容量、内存大小和文件大小等。

- 在网络传输、硬盘大小中一般使用右侧的10进制,其它的领域一般使用左侧的2进制
- KiB (Kibibyte):
- 1 KiB = 2^10 字节 = 1024 字节
- MiB (Mebibyte):
- 1 MiB = 2^20 字节 = 1024 KiB = 1,048,576 字节
- GiB (Gibibyte):
- 1 GiB = 2^30 字节 = 1024 MiB = 1,073,741,824 字节
- TiB (Tebibyte):
- 1 TiB = 2^40 字节 = 1024 GiB = 1,099,511,627,776 字节
- PiB (Pebibyte):
- 1 PiB = 2^50 字节 = 1024 TiB = 1,125,899,906,842,624 字节
- EiB (Exbibyte):
- 1 EiB = 2^60 字节 = 1024 PiB = 1,152,921,504,606,846,976 字节
- ZiB (Zebibyte):
- 1 ZiB = 2^70 字节 = 1024 PiB = 1,180,591,620,717,411,303,424 字节
- YiB (Yobibyte):
- 1 YiB = 2^80 字节 = 1024 ZiB = 1,208,925,819,614,629,174,706,176 字节
Memory Hierarchy
- 由于CPU和内存的速度差异太大,产生了缓存的想法

- 缓存是一个临时存储数据的快速存储区域,是一个内存中部分数据的副本,比内存小且快
Locality, Design, Management
- 缓存的工作原理是时间和空间局部性
- 时间局部性:刚使用过的东西很有可能很快被再次使用
- 空间局部性:大多数时候,访问内存不是完全随机的,如果你在某个位置访问内存,你很可能很快访问它的邻居
Direct-Mapped Cache
- Direct-Mapped Cache(直接映射缓存)是一种缓存存储结构,用于提高计算机系统的数据访问速度。它的基本原理是将主存中的数据块映射到缓存中的特定位置。
- 每一个内存地址都对应一个块(block)。

- 改变块大小时,一次调用块大小的内存到缓存中

- 缓存中的块应该有标签,表明来自内存中的哪个位置

- 将内存地址直接拆分成三段,即可表明以上信息

Direct-Mapped Cache Example
- 如图所示

Cache Terminology
- Cache Temperature:一些非正式缓存形容词

- 习惯用$表示缓存
- 使用一个有效位来标识当前块是否有效
Writes, Block, Sizes, Misses
- 使用门电路和选择器来具体实现缓存的读操作

- 写操作时,分为两种
- 写直达(Write-Through):在写操作时,同时将数据写入缓存和主存。
- 写回(Write-Back):写操作只更新缓存,而不是立即更新主存。只有当缓存行被替换时,才会将数据写回主存。需要使用脏位告知操作系统哪些块是旧的

- 块太小会损失空间局部性,太大会损失时间局部性

Fully Associative Cache
- 可以映射到任何位置
- 没有索引(index)部分了,标签(tag)直接表示映射到哪一行

- miss的种类
- 冷启动未命中(Cold Miss / Compulsory Miss):当缓存为空或者刚开始使用时,所有第一次访问的数据都会导致未命中,因为它们尚未被加载到缓存中。
- 容量未命中(Capacity Miss):当缓存的容量不足以存储所有活跃的数据时,导致一部分数据被替换出缓存,从而在后续的访问中产生未命中。
- 冲突未命中(Conflict Miss):在某些映射策略(如直接映射或组相连映射)中,多个数据块被映射到同一个缓存位置。当一个新的数据块替换掉已经存在的数据块时,访问旧数据块将导致未命中。
组相联缓存
- 介于直接映射和全相联之间

- 能够处理冲突未命中
块替换
- 直接映射直接踢出即可
- 全相联和组相联在其组内进行N路替换
- LRU:最近最少使用
- FIFO:先进先出
- 随机
平均内存访问时间:AMAT

- 更大的块意味着更大的失效代价和更小的失效率
- 通过添加二级三级缓存减小失效率和失效代价