第六章------存储器层次结构
第六章------存储器层次结构
1.随机访问存储器
随机访问存储器(Random-Access Memory,RAM)分为两类:静态的和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多。SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。DRAM用来作为主存以及图形系统的帧缓冲区。典型地,一个桌面系统SRAM不会超过几兆字节,但是DRAM却有几百或几千兆字节。
●
静态RAM
SRAM将每个位存储在一个双稳态的存储器单元里。每个单元使用一个六晶体管电路来实现的。由于SRAM存储器单元的双稳态特性,只要有电,它就会永远的保持它的值。即使有干扰(例如电子噪音)来扰乱电压,当干扰消除时,电路就会恢复到稳定值。
●动态RAM
DRAM将每个位存储为对一个电容的充电。在这个电容非常小,通常只有大约30毫微法拉。与SRAM不同,DRAM存储器对于干扰非常敏感。
当电容的电压被干扰之后,它就永远不会恢复了。暴露在光线下会导致电容电压改变
。实际上,数码照相机和摄像机中的传感器本质上就是DRAM单元的阵列。
幸运的是,计算机运行的时钟周期是以纳秒来衡量的,所以相对而言这个保持时间是比较长的。内存系统必须周期性的通过读出,然后重写来刷新内存的每一位。
2.访问主存
数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回。每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务。读事务从主存传送数据到CPU。写事务从CPU传送数据到主存。
总线是一组并行的导线,能携带地址、数据和控制信号。
下图展示了一个示例计算机系统的配置。主要部件是CPU芯片、我们将称为I/O桥接器(I/O)的芯片组(其中包括内存控制器),以及组成主存的DRAM内存模块。这些部件由一对总线连接起来,其中一条是系统总线,它连接CPU和I/O桥接器,另一条总线是内存总线,它连接I/O桥接器和主存。I/O桥接器降系统总线和内存总线连接到I/O总线,像磁盘和图形卡这样的I/O设备共享I/O总线。
3.磁盘存储
磁盘是广为应用的保存大量数据的存储设备,存储数据的数量级可以达到几百到几千兆字节,而给予RAM的存储器只能有几百或几千兆字节。不过,从磁盘上都信息的时候为毫秒级,比从DRAM读慢了10万倍,比从SRAM读慢了100万倍。
1)磁盘构造
磁盘由盘片构成的。每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速度旋转,通常是5400~15000转每分钟。
下图a展示了一个典型的磁盘表面的结构。每个表面由一组称为磁道的同心圆组成的。每个磁道被划分为一组扇区。每个扇区包含相等数量的数据位(通常是512字节),这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙分隔开,这些间隙中不存储数据位,间隙存出用来标识扇区的格式化位。
磁盘是由一个或多个叠放在一起的盘片组成的,它们被封装在一个密封的包装里,如下图b,整个装置通常被称为磁盘驱动器,我们通常简称为磁盘。有时也称为旋转磁盘,以使之区别于基于闪存的固态硬盘(SSD)。
2)磁盘操作
如下图,磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到传动臂一端,如下图所示,通过沿着半径轴前后移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上。这样的机械运动称为寻道。一旦读/写头定位到了期望的磁道上,那么当磁道上的每个位通过它的下面时,读/写头就可以感知这个位的值(读该位)。
当操作系统想要执行一个I/O操作时,例如读一个磁盘扇区的数据到主存,操作系统会发送一个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速查表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一地标识了对应的物理扇区。控制器上的硬件会解释这个三元组,将读/写头移动到适当的柱面,等待扇区移动到读写/头下,将读/写头感知到的位放到控制器上的一个小缓冲区,然后将它们复制到主存中。
4.存储器层次结构
1)下图是一个典型的存储器层次结构
,一般而言,从高层往底层走,存储设备变得更慢、更便宜和更大。在最高层(L0),是少量快速的CPU寄存器,CPU可以在一个时钟周期内访问它们。
2)存储器层次结构中的缓存
一般而言,高速缓存(cache)是一个小而快速的存储设备,它作为存储器更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存。
存储器层次结构的中心思想是,对于每个K,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。换句话说,层次结构中的每一层都缓存来自较低一层的数据对象。
类似的,第k层的存储器被划分成较少的块(第k+1层的存储器被划分成连续的数据对象组块(chunk),称为块(block))的集合,每个块的大小与k+1层的块的大小一样。在任何时刻,第k层的缓存包含第k+1层块的一个子集的副本,如下图所示,第k层的缓存有4个块的空间,当前包含块4、9、14和3的副本。
缓存命中和缓存不命中:
当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个快种查找d。如果刚好缓存在第k层中,那么就是我们所说的缓存命中,否则为缓存不命中。