存储器系统(memory system)是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器(cache memory)作为一部分存储在相对慢速的主存储器(main memory)中的数据和指令的缓冲区域。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器或磁盘上的数据的缓冲区域。
作为一个程序员,需要理解存储器层次结构。如果程序需要的数据是存储在CPU寄存器中,那么在指令的执行周期间,在零个周期内就可以访问到它们。如果存储在高速缓存中,需要1~30个周期。如果存储在主存中,需要50~200个周期。如果存储在磁盘上,大约需要几千万个周期!
一、随机访问存取器
随机访问存储器(RAM)分两类:静态和动态。静态(SRAM)比动态RAM(DRAM)更快,但也更贵。SRAM用作高速缓存存储器;既可以在片上,也可以在片下。DRAM用作主存
1)访问主存
数据通过称为总线(bus)的共享电子电路在CPU和DRAM主存之间来来回回。每次CUP和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务(bus transaction)。读事务(read transaction)从主存传送数据到CPU。写事务(write transaction)从CPU传送数据到主存。
CPU到主存之间的通信主要的部件是CUP芯片、称作I/O桥的芯片组(包含存取控制器)、以及组成主存的DRAM存取器模块。这些部件由一对总线连接。其中一条总线是系统总线(system bus),它连接CPU和 I/O 桥,另一条总线是存储器总线(memory bus),它连接I/O桥和主存。总线是一组并行的导线,能携带地址、数据和控制信号。取决于总线的设计,数据和地址信号可以共享同一组导线,也可以使用不同的。(貌似分别称作冯诺依曼体系结构和哈佛体系结构)。
I/O 桥将系统总线的电子信号翻译成存取器总线的电子信号。
二、磁盘存储
磁盘有盘片((platter)构成。每个盘片有两面(surface),表面覆盖着磁性记录材料。每个表面是由一组称为磁道(track)的同心圆组成。每个磁道被划分成一组扇区(sector)。每个扇区包含相等数量的数据位。扇区之间由一些间隙(gap)分隔开。
旁注:1G字节有多大?不幸地,像K (kilo), M (mega), G (giga) 和 T (tera) 这样的前缀的含义依赖上下文。对于DRAM和SRAM容量相关的计量单位,通常 K=2^10, M=2^20, G=2^30, T=2^40。对于与磁盘和网络这样的 I/O 设备容量相关的计量单位,通常 K=10^3, M=10^6, G=10^9, T=10^12。
1)连接到 I/O 设备
像图形卡、监视器、鼠标、键盘和磁盘这样的输入/输出(I/O)设备,都是通过I/O总线,例如Intel的外围设备互连PCI总线,连接到CPU和主存的。系统总线和存储总线和CPU相关,但是像PCI这样的 I/O总线与CPU无关。虽然 I/O 总线比系统总线和存储总线慢,但是它可以容纳种类繁多的第三方I/O设备。有三类不同的设备连接到总线。
* 通用串行总线(Universal Serial Bus, USB)控制器是一个连接到USB总线的设备的中转机构。USB 2.0总线的最大带宽为60MB/s, USB 3.0总线最大带宽为600MB/s
* 图形卡(或适配器)包含硬件和软件逻辑,他们负责代表CPU在显示器上显示像素
* 主机总线适配器将一个或多个磁盘连接到I/O总线上。两个最常用的磁盘接口是SCSI和SATA。SCSI磁盘比SATA驱动器更快也更贵。
* 其他设备,如网络适配器,可以通过扩展槽,连接到 I/O总线。
2)访问磁盘
CPU使用一种称为存储器映射I/O (memory-mapped I/O) 的技术向I/O设备发出命令。在使用存储器映射I/O的系统中,地址空间中有一块是为了与I/O 设备通信设备保留。每个这样的地址称为一个I/O端口。
a) CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关的存储器映射地址,发起一个磁盘读。
b) 磁盘控制器读扇区,并执行到主存的DMA传送
c) 当DMA传送完成时,磁盘控制器用中断的方式通知CPU
注:设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,这个过程称为直接存储器访问(Direct Memory Aceess, DMA)。这种数据传送方式为DMA传送(DMA transfer)。之所以有DMA,是因为CPU运行速度快(1ns=10^-9s),而读写磁盘需要16ms(16*10^-3s),故意思就是让磁盘先读写,CPU去干自己的活,磁盘干好了通知CPU一声就好。