存储器层次结构

随机访问存储器(Random Access Memory,RAM)

RAM分为两种:静态的和动态的。

SRAM,用来作为高速缓存存储器,既可以放在CPU芯片上,也可以放在片下。由于SRAM存储器单元的双稳态特性,只要有电,它就会永远地保持它的值。即使有干扰来扰乱电压,当干扰消除时,电路就会恢复到稳定值。

DRAM,用来作为主存以及图形系统的帧缓冲区。DRAM将每一个位存储为对一个电容的充电。当电容的电压被扰乱后,它就永远不会恢复了。

传统的DRAM

DRAM由若干个DRAM芯片组成,每个DRAM芯片被分成d个超单元,每个超单元中存放w位。一个d×w的DRAM总共存储dw位信息。

下面是一个16×8的DRAM芯片的高级视图:

DRAM中的超单元被组织成一个r行c列的矩阵,rc=d。

信息通过被称为引脚(pin)的外部连结器流入和流出芯片。每个引脚携带一个位的信息。

每个DRAM芯片被连接到某个称为内存控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或一次从每个DRAM芯片传出w位。

为了读取超单元(i,j)中的内容,内存控制器将行地址 i (RAS)发送到DRAM,然后是列地址 j (CAS)。RAS和CAS共享同一个DRAM地址引脚。所以每次访问超单元都需要将行地址和列地址分两次传输。

下面是一个超单元的读取流程:

由DRAM芯片组成的内存模块

下面是一个用8块DRAM芯片组成的内存模块的示意图:

其中DRAM 0存储第一个字节(低位),DRAM 7存储最后一个字节。

要取出内存地址A处的一个字,内存控制器将A转换成一个超单元地址(i,j),并将它发送到内存模块,然后内存模块再将 i 和 j 广播到每个DRAM芯片中。作为响应,每个DRAM芯片输出其(i,j)超单元的8位内容。模块中的电路收集这些输出,并把它们合并成一个64位的字,再返回到内存控制器。

非易失性存储器

所谓易失的,就是说如果断电,存储器会丢失它们的信息。另一方面,非易失性存储器即使是在关电后仍然保存着它们的信息。

这种类型的存储器都被称为只读存储器(Read-Only Memory,ROM),尽管ROM中有些类型既可以读也可以写。

PROM,可编程ROM,只能被编写一次。

EPPROM,可擦写可编程ROM,可以擦出重写。主要借助于一个独立的光学设备。

EEPROM,电子可擦除ROM,类似于EPPROM,但它不需要一个独立的物理设备。闪存就是一种基于EEPROM的存储设备。

CPU与主存的数据交换方式

数据通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回。

总线是一组并行的导线,能携带地址、数据和信号。

系统总线连接CPU和I/O桥接器,I/O桥接器是一组芯片结构,其中就包括内存控制器。它的功能除了内存控制器外,还将系统总线的电子信号翻译成内存总线的电子信号。

内存总线连接I/O桥接器和主存。

磁盘存储

下面给出一个磁盘的结构示意图:

寻址顺序:磁盘→盘片→面→磁道→扇区→字节

所以一个磁盘的容量大小为:

磁盘容量=(每扇区的字节数)*(每磁道的扇区数)*(每面的磁道数)*(每盘片的面数)*盘片数

通常一个盘片有两个面。

磁盘的访问时间

磁盘的访问时间分为三个部分:

寻道时间:为了读取某个目标扇区的内容,传动臂首先将读写头定位到包含目标扇区的磁道上。移动传动臂的时间称为寻道时间。

旋转时间:定位了磁道后,旋转磁片到需要的扇区,这段时间称为旋转时间。

传送时间:读写数据的时间。

一次平均的磁盘访问时间=Tavg seek + Tavg rotation + Tavg transfer = Tavg seek +  30/RPM + 60/RPM * 1/(每磁道的扇区数)

固态硬盘(Solid State Disk,SSD)

固态硬盘是一种基于闪存的存储技术,在某些情况下是磁盘的替代产品。

固态硬盘的一个典型的特征就是:读比写快。

随机写很慢,原因有两个:首先擦出块需要相对较长的时间,比访问页所需时间要高出一个数量级。其次,如果写操作试图修改一个包含已经有数据的页,那么这个块中所有带有有用数据的页都必须复制到一个新的块中。

局部性(Locality)

局部性:倾向于引用邻近于其他最近用过的数据项的数据项,或者最近引用过的数据本身。这种倾向性,被称为局部性原理,对硬件和软件系统的设计和性能都有着极大的影响。有良好局部性的程序比局部性差的程序运行的更快。

时间局部性:在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用。

空间局部性:在一个具有良好空间局部性的程序中,如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置。

量化评价局部性的一些简单原则:

  • 重复引用相同变量的程序由良好的时间局部性。
  • 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在内存中以大步长跳来跳去的程序空间局部性会很差。
  • 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

高速缓存的访问原理

下图是一个高速缓存的结构图:

高速缓存是一个高速缓存数组。每个组包含一个或多个行,每个行包含一个有效位(有效位用于标记这一行是否有效,即这一行中是否存放数据项),一些标记位,以及一个数据块,而每个数据块中又包含多个字节(寻址的最小单位就是字节)。

一般而言,高速缓存的结构可以用元组(S,E,B,m)来描述。高速缓存的大小(或容量)C指的是所有块的大小的和。标记位和有效位不包括在内。因此C=S×E×B。

下图是一个m为的地址:

一个 m 位的地址被分成 t 位的标记位,s 位的组索引和b 位的块偏移位。

组索引位用于在高速缓存数组中确定组号,标记位用于在一个确定的组中确定行号,块偏移用于在一个确定的行中确定最终需要的字节。

原文地址:https://www.cnblogs.com/TheFutureIsNow/p/11081744.html