《计算机组成的基本硬件设备》 《计算机组成原理 — 冯诺依曼体系结构》 《计算机组成原理 — 中央处理器》 《计算机组成原理 — 指令系统》
存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。
基本术语:
存储器:存放程序和数据的器件。存储位:存放一个二进制数位的存储单元,是存储器最小的存储单位。存储字:计算机可寻址(作为一个整体存入或取出)的最小信息单位。存储单元:存放一个存储字的若干个记忆单元组成一个存储单元。存储体:大量存储单元的集合组成存储体。存储单元地址:存储单元的编号。字编址:对存储单元按字编址。字节编址:对存储单元按字节编址。寻址:通过地址寻找数据,从对应地址的存储单元中访存数据。首先我们有必要来了解一下存储器的分类。
半导体存储器:用半导体器件组成的存储器。 磁表面存储器:用磁性材料做成的存储器。 激光存储器:信息以刻痕的形式保存在盘面上,用激光束照射盘面,靠盘面的不同反射率来读出信息。
随机存储器(RAM,Random Access Memory):可随机访问任意存储单元,且存取时间与存储单元的物理位置无关。主要充当高速缓冲存储器和主存储器。
动态随机存储器(DRAM):只能将数据保持很短的时间。为了保持数据,DRAM 使用电容存储,所以必须隔一段时间刷新(Refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失,关机就会丢失数据。常用于主存储器。DRAM 只含一个晶体管和一个电容器,集成度非常高,可以轻松做出大容量(内存),但是因为靠电容器来储存信息,所以需要不断刷新补充电容器的电荷,充电放电之间的时间差导致了 DRAM 比 SRAM 的反应要缓慢得多。
静态随机存储器(SRAM):所谓的 “静态”,指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,DRAM 里面储存的数据需要周期性地 Refresh。然而,当电力供应停止(关机)时,储存的数据还是会消失,所以也称为 Volatile Memory(易失性存储器),这与在断电后仍能储存数据的 ROM 或闪存不同的。但是 SRAM 也有它的缺点,即它的集成度较低,功耗较 DRAM 大,相同容量的 DRAM 内存可以设计为较小的体积,但是 SRAM 却需要很大的体积。同样面积的硅片可以做出更大容量的 DRAM,因此 SRAM 显得更贵。常用于高速缓存。SRAM 相比 DRAM 的复杂度就高了不止一筹,所以导致 SRAM 的集成度很低,前期 CPU 缓存不能集成进 CPU 内部也有这个原因。SRAM 的特点就是快,有电就有数据,不需要刷新时间所以凸显其数据传输速度很快,缺点就是占据面积大、成本低。假如一个 DRAM 占据一个单位的地方,一个 SRAM 就要占据六个单位的地方,差别还是挺大的。
串行访问存储器(SAS):在存储器中只能按某种顺序来进行存取,存取时间与存储单元的物理位置有关。
顺序存取存储器(SAM):是完全的串行访问,如:磁带,读写时要待磁带移动到合适位置之后才能顺序读写。由于价格便宜,主要用于数据备份容灾系统。直接存取存储器(DAM):是部分的串行访问,如:HHD 机械硬盘,对信息的存取有两步操作。首先,磁头直接移动到目标区域(磁道),然后再从磁道的合适位置开始读写,它介于顺序存取和随机存取之间。主要用于辅助存储器。只读存储器(ROM):是一种只能读不能写入的存储器,即预先一次性写入的存储器。通常用来存放固定不变的信息,如微程序控制存储器。
非永久记忆(易失性)的存储器:掉电后数据消失的存储器,如:半导体读/写存储器 RAM。 永久性记忆(非易失性)的存储器:掉电后仍能保存信息的存储器,如:磁性材料做成的存储器以及半导体 ROM。
存储系统的性能在计算机中具有非常重要的地位,主要因为:
冯诺伊曼体系结构是建筑在 “存储程序” 概念的基础上,访存操作约占中央处理器(CPU)时间的 70% 左右。存储管理与组织的好坏影响到整机效率。现代的信息处理,如图像处理、数据库、知识库、语音识别、多媒体等对存储系统的要求很高。计算机的主存储器(内存)来存放当前正在执行的应用程序及数据,但主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统,这就是 “缓存-主存-辅存” 三层存储结构。
其中,高速缓冲存储器(Cache)用来改善主存储器与中央处理器的速度匹配问题(主存和 CPU 一直保持了大约一个数量级的差距),高速缓存-主存层级拥有接近于缓存的速度和接近于主存的容量,解决了速度和成本之间的矛盾,主要用于提高 CPU 的访问速度;而辅助存储器(外存)则使用来存放当前不在运行的大量程序及数据,主存-辅存层级拥有接近于主存储器的速度和接近于辅存储器的容量,解决了大容量和低成本的需求,主要用于扩大存储空间。
高速缓存通常为半导体存储器、静态随机存储器(SRAM)和非永久性记忆存储器。高速缓存的提出建立在著名的局部性原理之上,局部性原理表示:程序访问的地址往往集中在存储器逻辑地址空间很小的范围之内。这是因为程序的地址分布本来就是连续的,再加上循环程序流、子程序调用程序流的重复执行,所以程序的地址访问自然就会相对的集中了。在主存和 CPU 之间设置了 Cache 之后,如果当前正在执行的程序和数据存放在 Cache 中,则当程序运行时不必再从主存储器读取指令和数据,访问 Cache 即可。
Cache 的工作原理有三点值得我们注意:
主存和 Cache 都会采用分字块的方式进行管理,Cache 中保存的就是对应的主存字块的一个副本。每一个 Cache 字块都会有一个标记位,用于表示当前字块里存放的是哪一个内存字块的副本。通过这个标准位,CPU 就可以判断出希望访问的内存字块是否已经存在于 Cache 中了。当 Cache 已经用满,但主存还将新的字块调入 Cache 时,就会执行一次 Cache 字块的替换。这种替换遵守一定的规律,最好使得被替换的字块是下一个时间段内估计最小使用的,这种规则成为替换策略或替换算法,有替换部件实现。当程序对 Cache 的字块执行写入时,如何保证 Cache 字块和内存字块的一致性。通常的有两种写入方式:一个是先写 Cache 字块,待 Cache 字块被替换出去时再一次性写入内存字块;在一个是在写 Cache 字块的同时也写入内存字块。内存通常为半导体存储器、动态随机存储器(DRAM)和非永久记忆存储器。具有两个非常重要的特性:“可随机访问任意存储单元” 和 “掉电即失去数据”,这些特性均服务于冯诺依曼体系 “存储程序” 的核心理想。
主存储器和 CPU 的连接是由总线来支持的,包括数据总线、地址总线和控制总线。CPU 通过 AR(地址寄存器)& AB(地址总线)、DR(数码寄存器)& DB(数据总线)和主存进行数据传输。若 AR 为 K 位字长,表示 CPU 的寻址宽度,即允许主存包含有 2**K 个可寻址存储单位;若 DR 为 n 位字长,则表示在一个存储周期内,CPU 和主存之间通过总线进行 n 位数据传输。控制总线包括控制数据传输的读(READ)、写(WRITE)和表示存储器功能完成的(READY)的三种控制线。
CPU 读取主存数据:当 CPU 从存储器读取一个存储字时,CPU 必须指定该存储字的地址,将该地址送到 AR 再经 AB 送到存储器,同时,CPU 通过控制线发送 READ 信号到存储器。此后,CPU 等到存储器通过控制线发来一个 READY 信号,表示已经完成了数据的读,并将数据经 DB 放到 DR 上了,CPU 再从 DR 取出相应的数据。以此来完成了一个存储器字的读与取。
** CPU 存放数据到主存**:CPU 为了存放一个字到存储器,首先将存储字在存储器中的存放地址通过 AR 经 AB 发送到存储器,并将存储字放到 DR,同时发出一个 WRITE 信号到存储器。此后,CPU 等到接收 READY 信号。存储器会根据 AB 收到的地址来存放 DB 接收到的存储字,然后通过 READY 控制线发送 READY 信号给 CPU 接收。以此完成了一个存储字的存放。
可见,主存和 CPU 之间采用的是异步工作方式,以 READY 信号表示以此访存操作的结束。
外存通常为磁表面存储器、串行访问存储器和永久性记忆存储器,有磁盘存储器和古老一些的磁带已经光盘。磁盘存储器有 HDD(Hard Disk Drive)和 HDC(Hard Disk Controller)组成,而当下比较时髦的 SSD(Solid-state Drive)是一种主要以闪存(NAND Flash)作为永久性存储器的计算机存储设备,区别于以机械臂带动磁头转动实现读写操作的磁盘存储器,NAND 或者其他固态存储以电位高低或者相位状态的不同记录 0 和 1。辅存的只要技术指标有:存储密度、存储容量、寻址时间、数据传输率、误码率和价格。
值得注意的是,HDD 的存取时间为毫秒(ms)级别,为主存储器的存取时间为纳秒(ns)级别,两种的速度差别十分大。因此 I/O 系统成为了整个计算机系统的瓶颈,所以为了进一步拉近距离,在主存储器和辅存储器之间也引入了缓存层,即磁盘 Cache。磁盘 Cache 同样基于局部性原理,对数据使用了预读策略。现在的 HDD 通常会带有高速缓存介质,并且通常也为 SRAM 或 DRAM,容量为十几 MB 以上。但又因为 RAM 是易失性存储器,所以为了防止掉电时数据丢失的问题,一些 HDD 还会带有不间断电设备。
双通道(Two-channel),即双通道内存,就是在北桥(又称之为 MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道。对这两个内存通道,CPU 均可分别寻址、读取数据,从而使内存的带宽增加一倍,数据存取速度也相应增加一倍(理论上)。
双通道内存技术其实是一种内存控制与管理技术,它依赖于芯片组的内存控制器,在理论上能够使两条同等规格内存所提供的带宽增长一倍。它并不是什么新技术,早就被应用于服务器和工作站系统中了,只是为了解决台式机日益窘迫的内存带宽瓶颈问题它才走到了台式机主板技术的前台。
Intel 曾经推出了支持双通道内存传输技术的 i820 芯片组,它与 RDRAM 内存构成了一对黄金搭档,所发挥出来的卓绝性能使其一时成为市场的最大亮点,但生产成本过高的缺陷却造成了叫好不叫座的情况,最后被市场所淘汰。由于英特尔已经放弃了对 RDRAM 的支持,所以目前主流芯片组的双通道内存技术均是指双通道 DDR 内存技术。一般我们说到的双通道内存就是 DDR 内存。
目前流行的双通道内存构架是由两个 64bit DDR 内存控制器构筑而成的,其带宽可达 128bit。因为双通道体系的两个内存控制器是独立的、具备互补性的智能内存控制器,因此二者能实现彼此间零等待时间,同时运作。两个内存控制器的这种互补可让有效等待时间缩减 50%,从而使内存的带宽翻倍。
虽然这项新规格主要是芯片组与主机板端的变化,然而双通道存在的目的,也是为了解决内存频宽的问题,使主机板在即使只使用 DDR 400 内存的情况下,也可以达到频宽 6.4GB/s。双通道是一种主板芯片组(Athlon 64 集成于 CPU 中)所采用新技术,与内存本身无关,任何 DDR 内存都可工作在支持双通道技术的主板上。
DDR(双倍速率同步动态随机存储器)是内存的一种类型。区别于 S/DRAM(高速缓存/主存),S/DRAM(高速缓存/主存)在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输的;而 DDR 内存则是一个时钟周期内传输两次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。DDR 内存可以在与 S/DRAM 相同的总线频率下达到更高的数据传输率。
与 S/DRAM 相比,DDR 运用了更先进的同步电路,使指定地址、数据的输送和输出主要步骤既独立执行,又保持与 CPU 完全同步。DDR 使用了 DLL(Delay Locked Loop,延时锁定回路提供一个数据滤波信号)技术,当数据有效时,内存控制器可使用这个数据滤波信号来精确定位数据,每 16 次输出一次,并重新同步来自不同存储器模块的数据。DDR 本质上不需要提高时钟频率就能加倍提高 S/DRAM 的速度,它允许在时钟脉冲的上升沿和下降沿读出数据,因而其速度是标准 S/DRAM 的两倍。
从外形体积上 DDR 与 S/DRAM 相比差别并不大,他们具有同样的尺寸和同样的针脚距离。但 DDR 为 184 针脚,比 S/DRAM 多出了 16 个针脚,主要包含了新的控制、时钟、电源和接地等信号。DDR 内存采用的是支持 2.5V 电压的 SSTL2 标准,而不是 S/DRAM 使用的 3.3V 电压的 LVTTL 标准。