CPU执行指令。
存储器系统为CPU存放指令和数据。
存储器系统(memory system):是一个具有不同容量、成本和访问时间的存储器设备的层次结构。
CPU寄存器(register):保存着最常用的数据。
高速缓存存储器(cache memory):作为一部分存储在相对慢速主存储器(main memory,主存)中的数据和指令的缓存区域。
主存:暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。
6.1、存储技术
6.1.1、随机访问存储器
RAM(Random-Access Memory):
Ø 静态RAM (Static Random Access Memory):
Ø 动态RAM (Dynamic Random Access Memory):
(1) 静态RAM
SRAM 将每个位存储在一个双稳态的(bitstable)存储器单元里。可以无限期的保持在两个不同的电压配置或状态之一。
即使有干扰,在干扰消除时,电路就会恢复到稳定值。
(2) 动态RAM
DRAM 将每个位存储为对一个电容的充电。对干扰非常敏感,当电容的电压被扰乱之后,就永远不会恢复。
| 每位晶体管数 | 相对访问时间 | 持续的? | 敏感的? | 相对花费 | 应用 |
SRAM | 6 | 1* | 是 | 否 | 100* | 高速缓存存储器 |
DRAM | 1 | 10* | 否 | 是 | 1* | 主存,帧缓冲区 |
如果断电,DRAM和SRAM会丢失他们的信息,从这个意义上说,它们是易失的(volatile) |
(3) 传统的DRAM
(4) 存储器模块
DRAM芯片包装在存储器模块(memory module)中,插到主板的扩展槽上。
(5) 增强的DRAM
(6) 非易失性存储器
如果断电,DRAM和SRAM会丢失他们的信息,从这个意义上说,它们是易失的(volatile)。
非易失性存储器(nonvolatile memory):即使在关电后吗,,也仍然保存着它们的信息。
只读存储器(Read-Only Memory,ROM)由于历史原因,虽然ROM中有的类型既可以读也可以写,但是它们整体上都称为只读存储器(Read-OnlyMemory,ROM)。
① PROM(Programmable ROM,可编程ROM)
② EPROM(Erasable Programmable ROM,可擦写可编程ROM)
③ EEPROM(Electrical Erasable ProgrammableROM,电子可擦写可编程ROM)
④ flash memory(闪存):是一类非易失性存储器,基于EEPROM。
固件(firmware):存储在ROM设备中的程序。当计算机系统通电以后,它会运行存储在ROM中的固件。例如PC的BIOS(基本输入输出系统)。
(7) 访问主存
总线(bus):一组并行的导线,能携带地址、数据和控制信号。
总线事务(bus transaction):每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务。
读事务(read transaction):从主存传送数据到CPU。
写事务(write transaction):从CPU传送数据到主存。
数据流通过总线在CPU和DRAM主存之间来来回回。
系统总线:连接CPU和I/O桥
存储器总线:连接I/O桥和主存
I/O桥:系统总线的电子信号和存储器总线的电子信号之间的连接和翻译。
6.1.2、磁盘存储
磁盘是保存大量数据的存储设备。
(1) 磁盘构造
(2) 磁盘容量
(3) 磁盘操作
(4) 逻辑磁盘块
(5) 连接到I/O设备
三个不同类型的I/O设备:
l 通用串行总线控制器(Universal Serial Bus,USB):是一个连接到USB总线的设备的中转机构。USB2.0总线的最大带宽为60MB/s。USB3.0总线的最大带宽为600MB/s。
l 图形卡(或适配器):包含硬件和软件逻辑,负责代表CPU在显示器上画像素。
l 主机总线适配器:将一个或多个磁盘连接到I/O总线,使用的是一个特别的主机总线接口定义的通信协议。
l 其他的设备:例如网络适配器,通过将适配器插入到主板上空的扩展槽中,从而连接到I/O总线,这些插槽提供了到总线的直接电路连接。
(6) 访问磁盘
存储器映射I/O(memory-mapped I/O):CPU通过存储器映射I/O技术来向I/O设备发出命令。
在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的。每个这样的地址称为一个I/O端口(I/O port)。当一个设备连接到总线时,它与一个或多个端口相关联(或它被映射到一个或多个端口)。
直接存储器访问(Direct Memory Access,DMA):这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为"DMA控制 器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都 处于并行操作。因此,使整个计算机系统的效率大大提高。
(7) 商用磁盘的剖析
6.1.3、固态硬盘
固态硬盘(Solid State Disk,SSD)是一种基于闪存的存储技术。
SSD包 插到I/O总线上 标准硬盘插槽 中,行为和其他硬盘一样,处理来自CPU的读写逻辑磁盘块的请求。
一个SSD包 由一个或多个闪存和闪存翻译层组成。
6.1.4、存储技术趋势
6.2、局部性
局部性(locality)有两种不同的形式:
l 时间局部性(temporal locality):在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。
l 空间局部性(spatial locality):在一个具有良好空间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来引用附近的一个存储器位置。
有良好局部性的程序比局部性差的程序运行的更快。
(1) 对程序数据引用的局部性
顺序访问,具有 步长为1的引用模式 称为顺序引用模式。
步长为K的引用模式,每个K个元素进行访问。
随着步长的增加,空间局部性下降。
C数组在存储器中是按照行顺序来存放的。
(2) 取指令的局部性
循环有良好的空间局部性和时间局部性。
6.3、存储器层次结构
存储器体系结构()---见图6-23 书本P405
6.4、高速缓存存储器
SRAM高速缓存存储器:
L1高速缓存(一级缓存)
L2高速缓存(二级缓存)
L3高速缓存(三级缓存)
6.5、编写高速缓存友好的代码
好的程序员总是应该试着去编写高速缓存友好的代码。基本方法:
l 让最常见的情况运行得快
l 在每个循环内部缓存不命中数量最小---局部性
6.6、综合:高速缓存对程序性能的影响
6.6.1、存储器山
读吞吐量(read throughput),也叫读带宽(read bandwidth):一个程序从存储系统中读数据的速率。典型的单位兆字节每秒(MB/S)。
存储器山(memory mountain):读带宽的时间和空间局部性的二维函数。
每个计算机都有表明它存储器系统的能力特色的唯一的存储器山。
存储器系统的性能不是一个数字就能描述的,而是一座时间和空间局部性的山。
明智的程序员会试图构造他们的程序,使得程序运行在山峰而不是低谷。目标就是利用:
① 时间局部性,使得频繁使用的字从L1中取出。
② 空间局部性,使得尽可能多的字从一个L1高速缓存行中访问到。
5.6.2、重新排列循环以提高空间局部性
5.6.3、在程序中利用局部性
6.7、小结