[计算机系统结构]层次存储

程序访问的局部性原理:时间局部性,空间局部性

存储系统的多级层次结构

CPU->M1->M2–。。。。。。.>Mn

在存储层次中,各存储器中一般满足包含关系,即任何一层存储器中的内容都是其下一层存储(离CPU更远一级)中内容的子集

CPU与M1一般以字为单位传递,M1以外一般以块/页为单位传递数据

存储系统性能参数

存储容量S

一般来说,整个存储系统的存储容量即为最后一级存储器的容量,eg:cache + 主存的存储系统容量为主存容量

存储系统的平均每位价格C

命中率H

CPU 访问该存储系统时,在M1中找到所需信息的概率

平均访存时间$T_A$

命中时间
不命中开销:访一级时间 + 数据传送时间

三级存储系统:Cache + 主存 + 磁盘

  • cache-主存层次:为了弥补主存速度的不足,一般是硬件完成的,对应用程序员和系统程序员是透明的
  • 主存-辅存层次:为了弥补主存容量的不足,常被用于实现虚拟存储器,向编程人员提供用不完的程序空间,主要由软件完成

存储层次的四个问题

  • 映像规则
  • 查找算法
  • 替换算法
  • 写策略

Cache

cache 基本结构及原理

cache是按块管理的,cache和主存均被分成大小相同的块,信息以块为单位调入cache中

主存地址: 块地址(块号) | 块内偏移

主存地址寄存器–》主存-Cache地址转换部件

–》 命中,Cache块地址,根据偏移在Cache存储体中查到对应的数据指令送给CPU

-》 未命中,访主存储器,调入Cache(是否需要替换),送给CPU,或者直接送给CPU提高效率

Cache 映像规则

全相联映射

主存中的人意块可以放到Cache中的任意一个位置

直接映射

主存中每一块只能放到Cache中的唯一一个位置,对应关系依次循环分配
主存的第i块(块地址为i)映射到Cache的第j块
$$j = i mod M$$
M为Cache的快数, 若$M = 2^m$,则j实际上是i的低m位(注意是块地址的低m位),可用这m位去进行选择(索引)

组相连映像

Cache被分为若干组,每个组由若干块组成,主存中每一个块可以放到Cache中唯一一个组的任意一个位置。组的选择通常采用位选择方法

对于主存中的第i个块,若它映射到Cache中的组号为j,则
$$j = i mdo G$$
G为Cache的组数,当$G=2^g$时,k为块号i的低g位,这里的低g位称为索引

如果每组有n 个块,则称该映像规则为n路组相联

n值越大,Cache的空间利用率就越高,块冲突的概率就越低

查找方法

Cache中设置有一个目录表,每一个Cache块在该表中均有唯一的一项,用于指出当前该块存放的信息是哪个主存块的(一般有多个主存块映射到该Cache块,它实际上记录了该主存块的块地址的高位部分,称为标识),每个主存块能唯一地由其标识来确定

1
2
主存地址:  标识 | 索引 | 块内偏移
____块地址__

经典的CPU性能公式

现在我们可以用指令数、CPI和时钟周期时间来写出基本的性能公式:

CPU时间=指令数×CPI×时钟周期时间

CPI(clock cycles per instruction):每条指令的时钟周期数,表示执行某个程序或者程序片段时每条指令所需的时钟周期平均数。

指令数(instruction count):执行某程序所需的总指令数量。

CPU时间=指令数×CPI/时钟频率

永远记住,唯一能够被完全可靠测量的计算机性能指标是时间。例如,对指令集减少指令数目的改进可能降低时钟周期时间或提高CPI,从而抵消了改进的效果。类似地,CPI与执行的指令类型相关,执行指令数最少的代码其执行速度未必是最快的。

写分配法

张晨曦

(1) 按写分配法:写失效时,先把所写单元所在的块调入 Cache,然后再进行写入。这与读失效类似。这种方法也称为写时取方法。

(2) 不按写分配法:写失效时,直接写入下一级存储器而不将相应的块调入 Cache。这种方法也称为绕写法。

写策略

写Cache时何时更新主存中的内容

  • 写直达法: 执行写操作时,不仅把数据写入Cache中对应的块,还把数据写入下一级存储器
  • 写回法: 拷回法,只把数据写回cache,Cache块被替换时写回下一级存储器
打赏