7. 多模块存储器

第 3 版 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 7. 多模块存储器

采用多模块存储器的目的是为了提高访存速度,通过使多个存储模块并行工作可以达到目的。为使多个模块并行工作,每个模块除了有各自独立的存储阵列,还必须有独立的地址缓存器、数据缓存器、地址译码器和读写控制电路等。

多模块存储器有连续编址和交叉编址两种组织方式。连续编址方式下,按高位地址划分模块,地址在一个存储模块内连续编号,因此同一个访存请求内的信息在同一个模块中,无法并行,只有同时有多个访存请求时才能并行;交叉编址方式下,按低位地址划分模块,地址在所有存储模块之间交叉编号,因此同一个访存请求内的信息分布在不同模块中,可并行访问所有模块,因而可加快访问速度。

## 8. 外部辅助存储器

常用的外部辅助存储器有磁盘、闪存盘、磁带库和光盘库等。磁盘主要用作主存的辅助存储器,存放计算机系统的所有信息;闪存盘以 U 盘、外接硬盘或内装的固态硬盘形式出现;磁带库和光盘库主要用作备份数据的后备存储器。

磁盘和磁带都是磁表面存储器,其基本存储原理一样。磁盘存储器的主要技术指标如下。

(1) 记录密度:道密度是指单位长度上的磁道数;位密度为磁道中单位长度上的位数。

(2) 平均存取时间:是平均寻道时间和平均等待时间之和(数据传输时间相对较小,可忽略不计)。平均寻道时间是指将磁头移动到所读写磁道起始处所需的平均时间;平均等待时间是指要读写的扇区旋转到磁头下方所需的平均时间,它等于磁盘旋转一圈所需时间的一半。

(3) 数据传输率:分为内部数据传输率和外部数据传输率。内部数据传输率与磁盘转速有关,指寻道和旋转等待后,单位时间内从存储介质上读出或写入的二进制信息量;外部数据传输率与磁盘转速无关,是指磁盘接口(磁盘控制器)和磁盘缓存之间进行数据交换的数据传输率。

## 9. 冗余磁盘阵列(RAID)

RAID 技术的主要实现思想是通过多个物理盘的交叉存储和访问,提高访问速度,并增


<!-- page: 191 -->

182

加存储容量;同时,通过在盘上增加校验信息,以提高磁盘的可靠性。根据交叉存储块大小的不同,可以有小条带分布方式和大条区分布方式。对于小条带分布方式,因为一个 I/O 请求分布在所有物理盘中,而所有盘都可以并行访问,所以其数据传输率比单个盘的情况要高很多倍,因而适合应用于流媒体播放系统;对于大条区分布方式,因为每个交叉存储的数据块较大,使得小数据量的 I/O 请求只要访问一个物理盘,多个物理盘可以响应多个 I/O 请求,所以其 I/O 响应速度较快,适合应用于银行、证券等事务处理系统。

RAID 级别有 RAID0~RAID7,并派生出了 RAID10、RAID30 和 RAID50 等。目前广泛使用的是 RAID0、RAID1 和 RAID5 等。

## 10. 数据校验方式

常用的数据校验方式有 3 种:奇偶校验、海明校验和循环冗余码校验。

奇偶校验方式根据数据的奇偶性变化来检错,只能检测奇数个错;海明校验采用分组奇偶校验,SEC 只能纠正一位错,SEC-DED 可纠正一位错并检测两位错;循环冗余码校验(CRC)通过某种数学运算在数据和校验位之间建立约定关系,它可以对较长数据块进行校验而不增加校验位开销,因此,主要用于对大批量数据的存储或传输校验。

## 11. 高速缓存 (cache)

cache 是在 CPU 的寄存器和主存之间设置的高速小容量的存储器。引入 cache 的目的是为了提高访存速度。与多模块存储器通过并行来提高速度不同,cache 之所以能提高速度,是因为程序执行时代码和数据的存储访问具有局部性特点。程序访问的局部性特点体现在时间局部性和空间局部性两方面。时间局部性是指某个单元在一个很短的时间段内被重复访问的可能性很大;空间局部性是指某个单元被访问后其周围单元不久也将被访问的可能性很大。这样,只要将刚被访问的单元及其邻近单元一起复制到 cache 中,那么,在最近一段时间内 CPU 访问的信息都可以在 cache 中访问到,而不需要访问慢速的主存。

实现 cache 时需要解决一系列问题,例如,将主存中的一个局部信息块装入 cache 时,信息块大小多大?装入到 cache 的何处?CPU 如何根据主存地址找到 cache 中相应的信息?cache 装满的情况下又要复制新的主存块到 cache 时,原来在 cache 中的哪些主存块应被替换出来?写信息时如何保证主存中和 cache 中的同一个信息块完全一致?

### 1) cache 和主存间的映射关系

将主存地址空间划分成大小相等的信息块,从 0 开始给每个块编号。cache 由若干行组成,每一行中有一个用于存放主存块的槽,其大小与主存块大小一样,cache 行也从 0 开始编号。在将主存块复制到 cache 行中时,主存块号和 cache 行号之间可采用直接映射、全相联映射和组相联映射三种映射关系。

直接映射时,每个主存块对应一个固定的 cache 行,其映射关系为:cache 行号 = 主存块号 mod cache 行数。此时,主存地址划分为标记、cache 行号(行索引)和块内地址三个字段:全相联映射时,每个主存块可复制到任何一个 cache 行中,主存地址划分为标记和块内地址两个字段:组相联映射时,cache 分若干组,每组有多行,各主存块存放到固定组的任意行中,其映射关系为:cache 组号 = 主存块号 mod cache 组数,主存地址划分为标记、cache 组号(组索引)和块内地址三个字段。

### 2) CPU 访存过程

CPU 给出主存地址后,首先根据映射方式对主存地址进行划分,根据行索引或组索引


<!-- page: 192 -->

的值,确定将主存地址高位上的标记字段与哪些 cache 行中的标记进行比较。显然,对于直接映射,只需比较一个 cache 行;对于全相联映射,则需与所有行进行比较;对于组相联映射,则与组内所有行比较。若存在某个 cache 行中的标记与主存地址中的标记字段相等,并且该行中的有效位为 1,则访问命中,此时,根据主存地址中低位上的块内地址访问该行中相应的信息;若所有行中的标记都不等于主存地址中的标记字段,或有相等的行但对应的有效位为 0,则访问不命中(缺失),此时,需要将该主存地址所在的块从主存取到 cache,并根据主存块的位置在 cache 行中置标记,且置有效位为 1。

3)替换算法

当需要调入一个新的主存块而对应的 cache 行全满时,需要将这些 cache 行中某个主存块替换出来。常用的替换算法有先进先出(FIFO)、最近最少用(LRU)等。FIFO 算法的基本思想是,总是把最先调到 cache 的那个主存块淘汰掉;LRU 算法的基本思想是,总是把最近最少用到的那个主存块淘汰掉。

4)写策略

CPU 执行写操作时,为了保证主存和 cache 中的同一个主存块的一致性,可采用回写法 (write back) 和全写法 (write through) 两种写策略。回写法的基本思想是,暂时只写 cache,替换时一次性将 cache 中的主存块写回主存;全写法的基本思想是,每次写 cache 的同时也写主存,为了加快写的过程,可在 cache 和主存间加一个写缓冲 (write buffer)。

当写不命中时,有写分配法 (write allocate) 和非写分配法 (not write allocate) 两种方式。采用写分配法时,需要分配一个 cache 空行,以将主存块复制到 cache;采用非写分配法时,不将主存块复制到 cache。因此,回写策略下,一定采用写分配法,而全写策略下,两种分配方式都可以采用。

5)主存块大小的选择

主存块大小是主存和 cache 之间进行信息交换的基本单位,主存块大小与命中率和缺失损失关系极大,因而块大小的选择非常重要。主存块太小,则不能很好地利用空间局部性,进而影响命中率;主存块太大,则增加主存块的读取时间,即缺失损失变大,而且,由于块变大,使得 cache 行数减少,映射到同一个 cache 行的主存块数增加,进而会使缺失率上升。

12. 虚拟存储器

虚拟存储管理是现代计算机系统中普遍采用的存储管理方式。在采用虚拟存储管理的计算机系统中,每个进程具有一个一致的、极大的、私有的虚拟地址空间,虚拟地址空间按等长的页来划分,主存也按等长的页框划分。进程执行时将当前用到的页面装入主存,其他暂时不用的部分放在外存,通过页表建立虚拟页和主存页框之间的对应关系。对于不在主存的页面,在页表中记录其在外存的地址。在指令执行过程中,由特殊的硬件(MMU)进行地址转换,从而实现存储访问。

虚拟存储器的实现方式有分页式、分段式和段页式三种。CPU 执行指令时,通过指令寻址方式计算得到的有效地址通常是一个虚拟地址(逻辑地址)。CPU 中的地址转换部件根据虚拟地址中的虚页号,找到对应的页表项,然后通过页表项得到该虚页号对应的页框号(物理页号、实页号),最后将它和页内地址拼接得到物理地址(主存地址、实地址)。

每个进程有一个页表,每个页表项由有效(装入)位、使用位、修改位、存取权限位、主存页框号或外存地址等组成。在地址转换过程中,若对应页表项中的有效位为 0,则说明该页


<!-- page: 193 -->

面不在主存中,即“缺页”,此时CPU调出操作系统的缺页处理程序执行,该程序从外存读入所需页面到主存,并修改页表。缺页处理后,必须回到原来发生缺页的指令重新执行。

为了减少从主存访问页表的次数,通常将常用页表项放在CPU的一个高速缓存中,这个高速缓存称为TLB(快表)。

可以利用虚拟存储管理机制进行存储保护,主要有地址越界和访问越权两种内存保护错误,通常称为访问违例或存储器访问异常。

## 7.3 基本术语解释

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

随机访问存储器根据地址译码结果选择某个单元进行读写,对于一个存储器芯片来说,所有单元的地址位数一样,所以每个单元的地址译码所用时间一样。从这个角度来说,这种存储器中每个单元的存取时间与存储单元的物理位置无关。

### 相联存储器(Associate memory, Content Addressed Memory, CAM)

相联存储器已知要访问信息的部分内容,通过比较找到需访问信息的位置,然后读写信息,如全相联cache。相联存储器的特点就是按内容访问,而不是像RAM或ROM那样按地址访问。

### 静态随机访问存储器(Static RAM, SRAM)

静态随机访问存储器靠触发器的双稳态的正负反馈电路存储信息,因而速度快,是非破坏性读出,但电路中元器件多,因而集成度小,适合作高速小容量的高速缓冲存储器(cache)。

### 动态随机访问存储器(Dynamic RAM,DRAM)

动态随机访问存储器靠电容存储电荷来保存信息。若电容上存有足够多的电荷表示存“1”,电容上无电荷表示存“0”。是破坏性读出,读后需要再生,而且需要定时刷新。

### 刷新(refresh)

DRAM芯片中,MOS管栅极电容上的电荷会被逐渐放电,只能维持几毫秒到几十毫秒,因此,即使电源不掉电,也会自动消失,所以,需要定时对所有存储单元进行充电/放电,以恢复原来的电荷,这个过程称为刷新。

### 易失性存储器(volatile memory)

易失性存储器在电源掉电后,存储器中的信息全部消失,如cache、RAM等。

### 非易失性存储器(nonvolatile memory)

非易失性存储器中的信息不会因为电源掉电而消失,如ROM、磁盘、光盘、闪存(Flash存储器)等。

### 记忆单元(memory cell)

记忆单元也称为存储基元、存储元。记忆单元是具有两种稳态的能够表示二进制数码0和1的物理器件,一个记忆单元表示1位信息。

### 存储单元(memory unit)

主存中具有相同地址的那些位构成一个存储单元。因此,存储单元的宽度等于一个编址单位的长度,可以是8位、16位、32位等。现在,大多数计算机是按字节编址的,即每一个


<!-- page: 194 -->

字节(8位)有一个地址,编址单位就是1字节,所以一个存储单元的宽度是8位。

## 存储器地址寄存器(Memory Address Register, MAR)

存储器地址寄存器是CPU中用来存放存储器地址的寄存器。地址在送到存储器总线的地址线之前,先寄存在MAR中。因此,它的宽度应该等于地址线的宽度,也等于主存地址位数,其值决定了主存最大的寻址空间。

## 存储器数据寄存器(Memory Data Register, MDR)

存储器数据寄存器是CPU中用来存放写入主存或从主存读出的数据的寄存器,数据在送到存储器总线的数据线之前,或从主存读到CPU时,都先寄存在MDR中。因此,它的宽度应该等于数据线的宽度。

## 存取时间(access time)

存取时间即执行一次读操作或写操作的时间,分读出时间和写入时间。读出时间为从主存接收到有效地址开始到数据取出有效为止的时间;写入时间是从主存接收到有效地址开始到数据写入被写单元为止的时间。

## 存储周期(memory cycle time)

存储周期是存储器进行连续两次独立的读或写操作所需的最小时间间隔。

## 存储器带宽(bandwidth)

存储器带宽指每秒从存储器进/出信息的最大数量。假设存储周期为 50ns,每个存储周期最多可存取64位数据,则带宽为 1.28Gb/s。通常存储器被组织成多模块存储器,能够多个模块同时进行读写,因而存储器带宽为一个存储模块带宽的若干倍。

## 片选信号(chip select signal)

一个存储芯片的容量往往满足不了计算机对存储容量的要求,所以需要将一定数量的芯片按一定方式连接成一个完整的存储器。在访问某个字时,必须“选中”该字所在的芯片,而其他芯片不被“选中”,控制芯片是否被选中的信号即片选信号CS。

## 地址引脚复用(address pin multiplexing)

DRAM芯片采用二维译码方式,为了减少引脚个数,把行地址和列地址用同一组地址引脚线分时进行传送。靠行地址选通信号和列地址选通信号来区分在地址引脚线上传送的是行地址还是列地址。

## 行地址选通信号(Row Address Strobe, RAS)

DRAM芯片中,行地址选通信号有效时,说明在地址引脚线上传输的是行地址信号。

## 列地址选通信号(Column Address Strobe, CAS)

DRAM芯片中,列地址选通信号有效时,说明在地址引脚线上传输的是列地址信号。

## 只读存储器(Read Only Memory, ROM)

只读存储器的原始信息一旦被写入,在程序执行过程中,只能对其内容进行读出,而不能写入。只读存储器通常用来存放固定不变的信息。

## 掩膜ROM(mask ROM)

掩膜ROM是由厂家在生产过程中一次形成的。即信息已经完全固化在芯片中,无法修改。结构类似于字片式RAM,没有写入机构。这类ROM适合于大批量生产。

## 可编程只读存储器(Programmable ROM, PROM)

可编程只读存储器在使用时由使用者专门一次写入,以后再也不能改变。


<!-- page: 195 -->

## 可擦除可编程只读存储器(Erasable PROM、EPROM)

可擦除可编程只读存储器可以用特殊的装置反复擦除和重写。一般将芯片放在紫外线下照射 15~20 分钟,信息全部擦除。

## 电可擦除可编程只读存储器(Electrically Erasable PROM、EEPROM)

电可擦除可编程只读存储器使用电可擦除技术(加高电压擦除),可擦除个别单元。写操作比读操作要花费更多的时间。集成度比EPROM低,而且更贵。

## 闪存(flash memory)

闪存是一种新型的非易失性存储器。不像RAM那样需要电源支持才能保存信息,又像RAM一样具有可写性。在某种低电压下,其内容可读、不可写,此时类似于ROM;在一种高电压下,信息可更改或删除,这时又类似于RAM。常用于存储主板BIOS程序,或用作数码相机存储卡和优盘,也可做成固态硬盘以代替磁盘存储器作为辅助存储器使用。

## 双口RAM(dual-port RAM)

双口RAM是并行存储结构中的一种。双口RAM利用的是空间并行技术,它为一个存储体提供两组独立的读写控制电路和两个读写端口,因而可以对两个数据进行并行的读写。

## 多模块存储器(multi-module memory)

多模块存储器中包含多个小体,但每个体有其自己的 MAR、MDR 和读写电路,可独立组成一个存储模块。根据不同的编址方式可分为连续编址和交叉编址。

## 低位交叉编址(low-order interleaving)

低位交叉编址也称交叉编址,低位表示存储器模块号,高位表示存储器模块内地址,使地址交叉分散在各模块内。

## 高位交叉编址(high-order interleaving)

高位交叉编址也称连续编址,主存地址高位表示存储器模块号,低位表示存储器模块内地址,使地址在同模块内连续编址。

## 磁道(track)

磁盘在高速旋转时,磁头相对于磁盘表面做相对运动。相对运动时磁头在盘面上所经过的路径构成一个磁道。磁头在不同的位置,磁盘表面就形成不同半径的同心圆,因此每个同心圆为一个磁道。每个磁道都有一个编号,最外面的是0磁道。

## 柱面(cylinder)

在一个磁盘驱动器中的若干盘片都连到同一个中心轴上,每个可读写的盘面上都有一个磁头,这些不同盘面上的磁头被连在一起且同时按相同的轨迹移动。因此,在不同盘面上的磁头总是处在相同半径的磁道上,所有盘面上的这些磁道构成一个柱面。因此,柱面号和磁道号是一样的。磁头号和盘面号是一样的。

## 扇区(sector)

每个磁道被划分为若干段(段又称扇区),每个扇区的存储容量为512B或4096B。每个扇区都有一个编号。扇区是磁盘的最小编址单位,因此到磁盘上寻找数据时,只需定位到相应的扇区。读写数据时可能会以多个扇区为单位进行传输。

## 道密度(track density)

沿磁盘半径方向单位长度上的磁道数称为道密度。道密度的单位是道/英寸(Track


<!-- page: 196 -->

Per Inch, TPI)或道/毫米(TPM)。道密度是相邻磁道间距的倒数。

## 位密度(bit density)

沿磁道方向上单位长度所记录的二进制信息位称为位密度或线密度。早期的磁盘,每个磁道所含信息量一样。这样的磁盘因为每个磁道的周长不同,使得每个磁道的位密度也不同。一般磁盘的位密度是指最内圈上的位密度。单位是位/英寸或位/毫米。现在也有一些磁盘的磁道采用固定位密度方式,因而在外圈的磁道上可以比内圈的磁道上多记录一些信息。

## 磁盘平均存取时间(average access time)

操作系统必须通过三个步骤对磁盘进行操作:寻道(seek)、旋转(rotation)、读写数据。因为读写数据所用时间相对于前两个操作而言,可以忽略不计,所以,通常将前两个操作时间的平均值之和称为磁盘平均存取时间,即平均存取时间等于平均寻道时间加平均旋转时间。

## 平均寻道时间(average seek time)

移动磁头使磁头定位到要读写的磁道上的操作称为寻道(seek)。平均寻道时间取决于相邻两道之间的寻道时间,称为道间移动时间,工业上也把它称为最小寻道时间。平均寻道时间有很多种测量方法,最简单的方法就是把最长寻道时间除以2。最长寻道时间就是从最内(外)移过所有磁道到最外(内)的时间。

## 平均旋转时间(average rotational latency/delay)

磁头定位在要读写的磁道后,磁盘开始旋转直到磁头正好落在要读写的数据上方,通常把完成这个过程的时间称为旋转(等待)时间。平均旋转时间是磁盘转一圈的时间的一半。

## 传输时间(transfer time)

当磁头正好落在要读写数据的起点后,就开始读/写数据,磁盘读/写一块数据(即一个扇区)的时间为传输时间。它是扇区大小、旋转速度、磁道上位密度的函数。

## 磁盘数据传输率(transfer rate)

磁盘数据传输率分为外部数据传输率和内部数据传输率两种。外部数据传输率是指主机接口从(向)硬盘缓存读出(写入)数据的速度;内部数据传输率是指磁头定位在要读写的数据块的始端后,单位时间内连续从磁道中读出或写入的二进制数据的位数。

## 磁盘控制器(disk controller)

磁盘控制器是指用来控制磁盘进行数据读写,并控制数据在磁盘和主存间进行传输的部件。因此,一次磁盘读写操作除了寻道、旋转、传输三个操作时间以外,还要加上磁盘控制器所用的时间。

## 廉价磁盘冗余阵列(Redundant Arrays of Inexpensive Disk, RAID)

廉价磁盘冗余阵列是将多个独立操作的磁盘按某种方式组织成磁盘阵列,以增加容量,利用类似于主存中的多体交叉技术,将数据存储在多个盘上,通过使这些盘并行工作来提高数据传输速度,并用冗余磁盘技术提高系统可靠性。

## 检错和纠错(error detection and correction)

数据在计算机内部被处理的过程中会因为硬件故障而产生差错。因此,需要采用数据校验方法来发现是否有错,即检错。有些数据校验方法可以准确发现错误的位置,从而可以将二进制值取反,即纠错。


<!-- page: 197 -->