计算机系统——第6章:存储器层次结构

存储器系统是一个具有不同容量,成本和访问时间的存储设备的层次结构。
存储器:
1.CPU寄存器:保存着最常用的数据
2.高速缓存存储器:作为一部分存储在相对慢速的主存储器中的数据和指令的缓冲区域。
3.主存:暂时存放存储在容量较大的,慢速磁盘上的数据,
4.磁盘:这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域
存储器层次结构由此从高到低依次排列,层次越高,速率越快。
CPU寄存器:零个周期
高速缓存:1-30个周期
主存:50-200个周期
磁盘:几千万个周期
计算机系统中一个基本而持久的思想:编写的应用程序使得它们的数据项存储在层次结构中较高的地方。这个思想围绕着计算机程序的一个称为局部性的基本属性。
具有良好局部性的程序倾向于一次又一次地访问相同的数据项集合或是访问临近的数据项集合,从存储器层次结构中较高层次中访问数据项,因此运行得更快。

6.1存储技术:
1.随机访问存储器(RAM):
包含两类:静态RAM(SRAM),动态RAM(DRAM),SRAM比DRAM更快,也更贵。
SRAM用来作为高速缓存存储器
DRAM用来作为主存以及图形系统的帧缓冲区。

SRAM将每个位存储在一个双稳态的存储器单元里,如同钟摆一样,当钟摆倾斜到最左边或最右边时,它是稳定的,在其他任何位置,钟摆都会倒向一边或另一边。所以由于SRAM存储器单元的双稳态特性,只要有电,它就会永远地保持它的值,即使有干扰,当干扰消除时,电路就会恢复到稳定值。
DRAM将每个位存储为对一个电容的充电。DRAM对干扰非常敏感,当电容的电压被扰乱后,它就永远不会恢复了。
传统DRAM:DRAM芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个dxw的DRAM总共存储了dw位信息。
d个超单元被组织成一个r行c列的长方形阵列,rc=d,每个超单元有形如(i,j)的地址,i表示行,j表示列。
在一个16x8的DRAM芯片的组织中,有d=16个超单元,
分成了四行四列,w=8位
信息通过称为引脚的外部连接器流入和流出芯片,每个引脚携带位的信号
所以流入需要2个addr引脚,携带2位的行和列超单元地址
8个data引脚,他们能传送一个字节也就是8位到芯片或从芯片传出一个字节。
每个DRAM芯片都被连接到某个称为存储控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或一次从每个DRAM芯片传出w位,存储控制器将行地址i发送到DRAM,然后是列地址j。DRAM
把超单元(i,j)的内容发回给控制器作为响应。行地址称为RAS请求,列地址称为CAS请求,
注意RAS和CAS请求共享相同的DRAM地址引脚。
就是先发送行地址i,DRAM将行I的整个内容都拷贝到一个内部行缓冲区,再发送列地址j,DRAM从行缓冲区拷贝出超单元(i,j)中的w位,并把它们发送到存储控制器。
电路设计者将DRAM组织成二维阵列而不是线性数组的原因是:如果是线性数组会增加地址引脚。
但是二维阵列组织的缺点是必须分两步发送地址,这增加了访问时间。

存储器模块:
DRAM芯片包装在存储器模块中,插到主板的扩展槽上
存储器模块基本思想:图示为8Mx8的DRAM芯片,8个芯片编号为0-7,每个超单元存储主存的一个字节,而用相应超单元为(i,j)的8个超单元来表示主存中字节地址A处的64位双字,DRAM0存储第一个字节,DRAM7存储最后一个字节。
要取出存储器地址A处的一个64位双字,存储控制器将A转换成一个超单元地址(i,j),将它发送到存储器模块,然后存储器模块将i,j广播到每个DRAM,每个DRAM输出它的(i,j)超单元的8位内容,模块中的电路收集这些输出,将他们合并成一个64位双字,再返回给存储寄存器。图示:
在这里插入图片描述

如果断电,DRAM和SRAM会丢失他们的信息,从这个意义上说,它们是容易丢失的

非易失性存储器:
PROM,可擦写可编程ROM,闪存

访问主存:数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回。
每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务。
读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
总线是一组并行的导线,能携带地址,数据和控制信号

示例计算机系统配置:
主要部件:CPU芯片,I/O桥的芯片组(其中包括存储控制器),以及组成主存的DRAM存储器模块,这些部件由一对总线连接起来,其中一条总线是系统总线,它连接CPU和I/O桥,另一条总线是存储器总线,它连接I/O桥和主存
在这里插入图片描述

我们考虑一下CPU执行一个加载操作会发生什么:
movl A,%eax
这里,A是地址,地址A的内容被加载到寄存器%eax中,CPU芯片上称为总线接口的电路发起总线上的读事务:
1.CPU将地址A放到系统总线上,I/O桥将信号传送到存储器总线
2.主存感觉到存储器总线上的地址信号,从存储器总线读地址,从DRAM取出数据字,并将数据写到存储器总线,I/O桥将存储器总线信号翻译成系统总线信号,然后沿着系统总线传递
3.CPU感觉到系统总线上的数据,从总线上读数据,并将数据拷贝到寄存器%eax中

磁盘:磁盘是由盘片组成,每个盘片有两面,盘片中央有一个可以旋转的主轴
访问磁盘:在这里插入图片描述

6.2局部性:
一个便携良好的计算机程序常常具有良好的局部性,
局部性通常由两种不同的形式:
1.时间局部性:在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用
2.空间局部性:在一个具有良好空间局部性的程序中,如果一个存储器位置被引用过了一次,那么程序很可能在不远的将来来引用附近的一个存储器位置。

6.2.1对程序数据引用的局部性
在这里插入图片描述

变量sum在每次循环迭代中被引用一次,因此,对于sum来说,有好的时间局部性,但没有空间局部性。
向量v的元素是被顺序读取的,一个接着一个,按照它们的存储器顺序,因此具有很好的空间局部性,但是时间局部性很差,因为每个向量元素只被访问一次。
因此对于循环体中的每个变量,要么有好的空间局部性,要么有好的时间局部性,所以这个函数有好的局部性。
我们说像这个函数一样顺序访问一个向量每个元素的函数,具有步长为1的引用模式。一个连续向量中,每隔k个元素访问,就被称为步长为k的引用模式,一般而言,随着步长的增加,空间局部性下降。
比如双重嵌套循环,如果先读第一行的元素,再读第二行,就是步长为1的引用模式,具有良好的空间局部性
如果先读列的haul,就是步长为N的引用模式,空间局部性下降
6.2.2取指令的局部性
因为程序指令存放在存储器中,CPU必须取出这些指令,例如,上述图片for循环体里的指令是按照连续的存储器顺序执行的美因茨循环具有良好的空间局部性,因为循环体被执行多次,也有很好的时间局部性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值