• 沒有找到結果。

存储器有三个主要性能指标:容量、速度和价格(每位价格),计算机对存储器性能指标 的基本要求是容量大、 速度快和成本低。 但是要想在一个存储器中同时兼顾这些指标是很困难 的,有时甚至是相互矛盾的。速度越快,每位价格就越高;容量越大,每位价格就越低;容量 越大,速度就越慢。为了解决存储器的容量、速度和价格之间的矛盾,人们在不断地研制新的 存储器件和改进存储性能的同时,还从存储系统体系上不断研究合理的结构模式。 

3.5.1  存储系统的层次结构

人们把各种不同存储容量、存取速度和价格的存储器按层次结构组织起来,并通过管 理软件和辅助硬件有机地组成统一的整体,使所存放的程序和数据按层次分布在各级存储 器中, 形成存储系统的多级层次结构。 一般计算机存储系统的多级层次结构如图 3­22 所示。

图 3­22  存储系统的多级层次结构

由图 3­22 可见,计算机存储系统的多级层次结构主要由 CPU 内部寄存器、高速缓冲存储 器 Cache、主存储器和辅助存储器组成。辅存、主存、Cache 以及 CPU 内部的寄存器都具有数 据存储功能,由它们构成的存储器组织能够充分发挥存储速度快、容量大、价格低的特点。 

CPU 内部寄存器可读可写,并与 CPU 速度相匹配。它们的功能很强,但是每位价格较高、

数量也不能太多。主要用于 CPU 执行指令过程中指令和数据的暂存。

主存的容量要比 CPU 内部寄存器的容量大得多,可作为 CPU 内部寄存器的后备支持。主 存是计算机工作时必不可少的存储部件,它和 CPU 一起构成主机的骨干部件。由于主存的每 位成本较高,数量也不能很大,并且在断电后 RAM 中的数据全部丢失,所以必须有更大容量 的非易失性存储后援的支持。

辅存由硬盘以及光盘、U 盘等可移动式存储器构成。相对于主存,它具有存储容量大、成 本低、断电后信息不丢失等优点,所以辅存作为海量存储器,主要用于计算机的大容量程序和 数据的长久保存。但是它也有如读写速度慢等缺点。

随着计算机技术的发展, CPU 的速度不断提高, 远远超过了以 DRAM 为基础的主存储器,

为了不影响 CPU 的效率, 人们在微型计算机的 CPU 与主存之间使用了高速缓冲存储器 Cache, 

Cache 以 SRAM 为存储介质,存取速度接近 CPU 的工作速度,作为主存储器的副本,可直接

低  CPU 内部寄存器

辅助存储器 主存储器 

Cache

向 CPU 提供程序和数据,从而进一步提高向 CPU 提供数据的速度。

如图 3­22 所示,在存储系统多级层次结构中,由上而下,其容量逐渐增大,速度逐级降 低,成本则逐次减少。这样构成的存储系统可以接近 CPU 的高速度,并获得大容量辅存的支 持, 价格也能为用户所承受。 如此, 多级层次结构的计算机存储系统有效地解决了存储器速度、

容量和价格之间的矛盾。

整个结构又可以看成两个层次:主存-辅存层次、Cache-主存层次。这两个层次系统中 的每种存储器都不再是孤立的存储器, 而是一个有机的整体。 它们在计算机操作系统和辅助硬 件的管理下工作, 可把主存-辅存层次作为一个存储整体, 形成的可寻址空间远远大于主存空 间,而且由于辅存容量大、价格低,使得存储系统的整体平均价格降低。另外,由于  Cache  的存取速度和 CPU 的工作速度相当,故 Cache-主存层次可以缩小主存与 CPU 之间的速度差 距,从整体上提高存储系统的存取速度。 

3.5.2  多体存储结构 

CPU  需要频繁访问主存储器,但是主存的存取速度跟不上系统需求,这是影响整个计算 机系统性能的重要问题。解决这个问题最直接的办法就是采用多个存储器并行访问和交叉访 问,从而使 CPU 在一个存储周期内可以同时访问多个数据。

例如,一般主存储器在一个存储周期内只能访问到一个存储字,如图 3­23(a)所示,把 多个这样的存储器组合后可构成多体存储结构,如图 3­23(b)所示。

图 3­23  多体存储器与一般存储器比较

对多体存储器交叉访问通常有两种工作方式:地址码高位交叉、地址码低位交叉。 

1.高位交叉访问存储器

以每个存储体内有 4 个存储单元、4 个这样的存储体构成的存储器为例,地址码高位交叉 访问存储器如图 3­24 所示。

地址码的低位部分直接送至各存储体,作为各存储体的体内地址;高位地址部分送至译 码器, 用来区分存储体的体号。 高位交叉访问存储器要求每个存储模块都有各自独立的存储体 和控制部件,控制部件包括地址寄存器、数据寄存器、驱动放大电路、地址译码电路和读写控

数据寄存器

存储体

地址寄存器

(m 字×n位)

(a)一般存储器 主存控制部件

(b)多体存储器 主存储器控制部件

总线控制

存储体 0 

地址寄存器 0 

(m 字×n 位)

存储体 1 

地址寄存器1 

(m 字×n 位)

存储体 2 

地址寄存器 2 

(m 字×n 位)

存储体 3 

地址寄存器 3 

(m 字×n 位)

制电路等, 每个独立存储模块均可独立工作。 因此高位交叉访问存储器具备了并行工作的条件,

低位交叉访问存储器的地址码的使用方法与高位交叉访问方式恰恰相反,其低位地址送 至译码器,用来区分存储体的体号;高位地址直接送存储体,作为各个存储体的体内地址。

低位交叉访问存储器的主要目的是提高存储器的访问速度。当然,在提高访问速度的同 时,由于增加了存储器模块的数目,也就增加了存储器的容量。 

3.5.3  高速缓冲存储器

高速缓冲存储器(Cache)是位于 CPU 和主存之间的一种存储器,容量比主存小,但速度 比主存快。它用来存放 CPU 频繁使用的指令和数据。由于使用 Cache 后可以减少对慢速主存 的访问次数,缓解了 CPU 与主存之间的速度差异,所以提高了 CPU 的工作效率。目前,在微 型计算机中广泛使用高速缓冲存储器技术。 

1.Cache 工作原理

在半导体存储器中,只有 SRAM 的存取速度与 CPU 的工作速度接近,但 SRAM 的功耗 大、价格较贵、集成度低,而 DRAM 的功耗小、成本低、集成度高,但是存取速度却跟不上  CPU 的工作速度。于是产生了一种折衷的分级处理办法:在以 DRAM 为基础的大容量主存与 高速 CPU 之间增加一个容量较小的 SRAM 作为 Cache,用于保存那些使用频率较高的主存副 本。CPU 需要数据时,首先在 Cache 中查找,Cache 中没有才从主存中读取。

由于程序执行和数据访问具有局域性, 通过指令预测和数据预取技术, 可以尽可能将 CPU  需要的指令和数据预先从主存中读出,存放在 Cache 中,据统计,CPU90%以上的存储器访问 都发生在 Cache 中,只有不到 10%的几率需要访问主存,即命中率可达 90%以上,因此少量  Cache 可以极大地提高存储系统的访问速度,缓解由于主存存取速度比  CPU 工作速度慢而产 生的性能瓶颈问题,进而提高系统性能。 

Cache-主存结构存储系统一般由高速缓冲存储器 Cache、 主存储器和 Cache 控制器组成,

如图 3­26 所示。

图 3­26    Cache 工作原理图

在高速缓冲存储系统中,所有数据和指令都存放在主存中,而使用频率较高的数据和指 令则复制到 Cache 中。Cache 的内容是在读写过程中逐步调入的,是主存中部分内容的副本。 

CPU  主存 

Cache 

AB 

DB  Cache 控制器

置换 控制部件

命中  Cache 

地址 未命中

换 

­Cach

器 

Cache

主存和 Cache 的存储区都划分成多个块, 每块由多个单元组成, 主存与 Cache 之间以块为单位 交换信息。

信息块调往  Cache  时的存放地址与它在主存时的地址不一致,但二者之间有一定的对应 关系,这种对应关系称为地址映射函数。将主存地址变换成  Cache  地址的过程是通过  Cache  控制器内的地址转换机构按照所采用的地址映射函数自动完成的。

当 CPU 访问存储器时,首先检查 Cache,如果要访问的信息已在 Cache 中,CPU 就能很 快地访问它,这种情况称为“命中” ,否则称为“未命中” 。若未命中,CPU  必须从主存中提 取信息,同时还要把含有这个信息的整个数据块从主存中取出送到 Cache 中。CPU 访问 Cache  时,找到所需要信息的百分比称为命中率,命中率是 Cache 的一个重要指标,命中率越高,在  Cache 中找到所需指令和数据的可能性就越大,CPU 去访问慢速主存的次数就越少。 

Cache 的全部功能由硬件实现,并且对程序员来说是“透明”的,就像不存在一样,程序 员不需要明确知道 Cache 及 Cache 控制器的存在。 

2.替换算法

当新的主存块需要调入 Cache,而它的可用位置已被占用时,就需要替换算法来解决。一 个好的替换算法既要考虑提高访问 Cache 的命中率,又要考虑容易实现替换,从而减少 CPU  访问主存的机率。替换算法有多种,通常采用以下两种算法:

(1)先进先出法(First Input First Output,FIFO)。这种算法是把最早调入 Cache 的信息 块替换掉。为了实现这种算法,需要在地址变换表中设置一个历史位,每当有一个新块调入  Cache 时,就将已进入 Cache 的所有信息块的历史位加 1。需要进行替换时,只要将历史位值 最大的信息块替换掉即可。这种算法比较简单,容易实现,但不一定合理,因为有些信息块虽 然调入较早,但可能仍需使用。

(2)最近最少使用法(Least Recently Used,LRU)。LRU 算法是把近期使用最少的信息 块替换掉。这种算法利用了程序访问的局部性原理:在时间上,程序即将用到的信息很可能就

(2)最近最少使用法(Least Recently Used,LRU)。LRU 算法是把近期使用最少的信息 块替换掉。这种算法利用了程序访问的局部性原理:在时间上,程序即将用到的信息很可能就

相關文件