存储器层次结构


高速缓存存储器
我们假设一个简单的存储器层次结构,cpu和主存之间只有一个L1高速缓存。
一个计算机系统,存储器地址有m位,形成2^m个地址。
缓存是一个S=2^s个高速缓存组的数组。
每个组包含E个高速缓存行(cache line)。
每个行由B=2^b字节的数据块组成,其中一个有效位指明这个行是否包含有意义的信息,还有t=m-b-s个标记位。

当一条指令想要读取地址A时,A中的s个组索引位告诉我们A的内容可能会缓存在哪个组中。
然后A中的t个标记位告诉我们哪一行包含这个数字,当且仅当设置了有效位并且该行的标记位与A中的标记位相匹配时,缓存才算命中。
然后根据b个偏移位,找到缓存中对应偏移处的数据。
为什么S位在地址中间,而不是高位?
如果用高位,那么连续的内存块就会映射到相同的高速缓存块。相比较而言,以中间位所谓索引,相邻的块总是映射到不同的高速缓存行。

写的问题
直写:立即将高速缓存块协会到低一层中
写回:延迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到低一层中
写不命中的问题:(即要写的区域不在缓存中)
- 非写分配:避开高速缓存,直接写入低一层中
- 写分配:加载相应的块到高速缓存块中,更新高速缓存块
直写通常是非写分配的。
写回通常是写分配的。
存储器层次结构中较低层的缓存更可能用写回而不是直写。
一个真实的解剖


数据读取过程
这里只说DRAM
DRAM芯片

超单元被组织成一个r行c列的长方形阵列,这里rc=d。
一次可以传送w位到DRAM芯片,或一次从每个DRAM芯片读取w位。
读取过程:
- 将行地址r发送到DRAM,DRAM将整行都复制到一个内部行缓冲区。
- 发送列地址l,从行缓冲区复制出超单元中的w位,并把他们发送到内存控制器。

内存模块
DRAM芯片封装在内存模块内。 要取出内存模块地址A处的数据,内存控制器将A转换成地址(i,j),然后广播到每个DRAM,每个DRAM输出它的(i,j)超单元的w位内容,并合并,返回给内存控制器。
