7.3 外部辅助存储器

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

#### 7.3 外部辅助存储器
通常把系统运行时直接和主存交换信息的存储器称为辅助存储器,简称辅存。因为它
不能和 CPU直接进行信息交换,所以,相对于直接和CPU进行信息交换的内部主存储器
来说,它属于外部存储器,在电源掉电时,可以保证信息不丢失,因而所有的外部辅助存储器


<!-- page: 236 -->

存储器层次结构
都是非易失性的。目前常用的外部辅助存储器主要包括磁盘存储器、U盘和固态硬盘。
7.3.1磁盘存储器的结构
磁盘存储器主要由磁记录介质、磁盘驱动器、磁盘控制器3部分组成,图7.15 是磁盘驱
动器的物理组成示意图。
磁道
主轴
移动臂
硬盘片
柱面
磁头
接口插座
控制电路
图7.15 磁盘驱动器的物理组成
如图7.15所示,磁盘驱动器主要由多张硬盘片、主轴、主轴电机、移动臂、磁头和控制电
路等部分组成,通过在接口插座上的电缆与磁盘控制器连接。每个盘片的两个面上各有一
个磁头,因此,磁头号就是盘面号。磁头和盘片相对运动形成的圆,构成一个磁道(track),
磁头位于不同的半径上,则得到不同的磁道。多个盘面上的相同磁道形成一个柱面
(cylinder),所以,磁道号就是柱面号。信息存储在每个盘面的磁道上,每个磁道被分成若干
扇区(sector),以扇区为单位进行磁盘读写。在写磁盘时,总是在一个柱面的所有磁道上写
完后,再移到下一个柱面的各磁道上写信息。磁道从外向里编址,最外面的为磁道0。
图7.16 是磁盘驱动器的内部逻辑结构。
来自或送到
磁盘控制器
写命令
写入数据
读出数据
读命令
盘地址
寻道结束
写入电路
读出电路
磁盘地址
寄存器
磁头选择
读写磁头
道地址
磁头定位
伺服系统
扇区符合
扇区号
扇区符合
比较器
扇区
计数器
图7.16 磁盘驱动器的内部逻辑结构
扇区标志脉冲
磁盘读写指根据磁盘地址寄存器中的盘地址(柱面号、磁头号、扇区号)读写目标磁道中
的指定扇区。因此,其操作可归纳为寻道、旋转等待和读写3个步骤。
(1)寻道操作。磁盘控制器把磁盘地址送到磁盘驱动器的磁盘地址寄存器后,便产生
寻道命令,以启动磁头定位伺服系统根据柱面号移动磁头到指定的柱面(磁道),并选择指定
第7章
219


<!-- page: 237 -->

计算机组成与系统结构(第3版)
220
的磁头准备进行读写。此操作完成后,发出寻道结束信号给磁盘控制器,并转入旋转等待
操作。
(2)旋转等待操作。盘片旋转开始时,首先将扇区计数器清零,以后每来一个扇区标志
脉冲,扇区计数器加1,把计数内容与磁盘地址寄存器中的扇区号进行比较,如果一致,则输
出扇区符合信号,说明要读写的信息已经转到磁头下方。
(3)读写操作。扇区符合信号送给磁盘控制器后,磁盘控制器的读写控制电路开始动
作。如果是写操作,就将数据送到写入电路,写入电路根据记录方式生成相应的写电流脉
冲;如果是读操作,则由读出放大电路读出内容送磁盘控制器。
磁盘控制器是主机与磁盘驱动器之间的接口。磁盘存储器是高速外设,所以磁盘存储
器和主机之间采用成批数据交换方式。
数据在磁盘上的记录格式分定长记录格式和不定长记录格式两种。目前大多采用定长
记录格式。图7.17是温切斯特磁盘的磁道格式示意图,它采用定长记录格式。最早的硬盘
由IBM公司开发,称为温切斯特盘(Winchester是一个地名),简称温盘,它是几乎所有现代
硬盘产品的原型。
索引
扇段
物理扇段0
物理扇段1
物理扇段29
间隙ID域间隙数据域|间隙
0
2
0
3
间隙ID域间隙
1
2
数据域
1
间隙
3
间隙ID域间隙数据域间隙
1
29
2
29
3
字节
7
17
41
515
20
17
7
41
515
20
17
7
41
515
20
同步道号头号段号
同步
CRC
数据CRC
字节
#
#
#
字节
字节1
2
1
1
2
1
512
2
图 7.17 温切斯特磁盘的磁道记录格式
600字节/扇段
如图7.17所示,每个磁道由若干扇区(也称扇段)组成,每个扇区记录一个数据块,每个
扇区有头空(间隙1)、ID域、间隙2、数据域和尾空(间隙 3)组成。头空占17字节,不记录
数据,用全1表示,磁盘转过该区域的时间是留给磁盘控制器作准备用的;ID域有同步字
节、磁道号、磁头号、扇段号和相应的CRC码(关于CRC码的概念参见7.4.4节)组成;数据
域占515字节,有同步字节、数据和相应的CRC码组成,其中真正的数据区占512字节;尾
空是在数据块的CRC 码后的区域,占20字节,也用全1表示。
7.3.2磁盘存储器的性能指标
磁盘存储器的性能指标包括记录密度、存储容量、数据传输速率和平均存取时间等。
1.记录密度
记录密度可用道密度和位密度来表示。在沿磁道分布方向上,单位长度内的磁道数目
叫道密度。在沿磁道方向上,单位长度内存放的二进制信息数目叫位密度。低密度存储方
式下,所有磁道上的扇区数相同,因此每个磁道上的位数相同,因而内道上的位密度比外道
位密度高;高密度存储方式下,每个磁道上的位密度相同,因此外道上的扇区数比内道上扇


<!-- page: 238 -->

存储器层次结构
区数多,因而整个磁盘的容量比低密度盘高得多。
2.存储容量
存储容量指整个存储器所能存放的二进制信息量,它与磁表面大小和记录密度密切
相关。
磁盘的未格式化容量是指按道密度和位密度计算出来的容量,它包括了可利用的所有
磁化单元的总数,未格式化容量(或非格式化容量)比格式化后的实际容量要大。
对于低密度存储方式,因为每个磁道的容量相等,所以,其未格式化容量的计算方法
如下:
磁盘总容量=记录面数×理论柱面数×内圆周长×最内道位密度
格式化后的实际容量只包含数据区。通常,记录面数约为盘片数的两倍。假定按每个扇区
512字节算,则磁盘实际数据容量(也称格式化容量)的计算公式为
磁盘实际数据容量=2×盘片数×磁道数/面×扇区数/磁道×512B/扇区
早期扇区大小一直是512字节,但现在已逐步更换到更大、更高效的4096字节扇区,通常称
为4K扇区(这里1K=2l°)。
注意,关于硬盘容量和文件大小的计量单位,不同的硬盘制造商和操作系统所指的含义
不同,例如,Microsoft Windows操作系统使用二进制前缀(2的幂次),而苹果操作系统在
2009年以前使用十进制前缀(10的幂次),因此,对应1MB的文件大小,在Windows系统中
是指2“字节,但在苹果系统中则是指10°字节。本书中,将采用国际电工委员会IEC规定
的数据单位字母含义(见表 2.6)。
3.数据传输速率
数据传输速率(data transfer rate)指磁盘存储器完成磁头定位和旋转等待以后,单位时
间内从存储介质上读出或写入的二进制信息量。为区别于外部数据传输率,通常称之为内
部传输速率(internal transfer rate),也称为持续传输速率(sustained transfer rate)。而外部
传输速率(external transfer rate)是指主机中的外设控制接口从(向)外存储器的缓存读出
(写人)数据的速度,由外设采用的接口类型决定。通常称外部传输速率为突发数据传输速
率(burst data transfer rate)或接口传输速率。
4.平均存取时间
磁盘响应读写请求的过程如下:首先将读写请求在队列中排队,出队列后由磁盘控制
器解析请求命令,然后进行寻道、旋转等待和读写数据3个过程。
因此,总响应时间的计算公式为
响应时间=排队延迟+控制器时间+寻道时间+旋转等待时间+数据传输时间
磁盘上的信息以扇区为单位进行读写,上式中后面3个时间之和称为存取时间T。即
存取时间=寻道时间+旋转等待时间+数据传输时间
寻道时间为磁头移动到指定磁道所需时间;旋转等待时间指要读写的扇区旋转到磁头下方
所需要的时间;数据传输时间(transfer time)指传输一个扇区的时间。由于磁头原有位置
与要寻找的目的位置之间远近不一,故寻道时间和旋转等待时间只能取平均值。磁盘的平
均寻道时间一般为5~10ms,平均等待时间取磁盘旋转一周所需时间的一半,大约4~6ms。
假如磁盘转速为6000RPM(转/分),则平均等待时间约为5ms。因为数据传输时间相对于
寻道时间和等待时间来说非常短,所以,磁盘的平均存取时间通常近似等于平均寻道时间和
第7章
221


<!-- page: 239 -->

计算机组成与系统结构(第3版)
222
平均等待时间之和。而且,磁盘第一位数据的读写延时非常长,相当于平均存取时间,而以
后各位数据的读写则几乎没有延迟。
7.3.3磁盘存储器的连接
现代计算机中,通常将复杂的磁盘物理扇区抽象成固定大小的逻辑块,物理扇区和逻辑
块之间的映射由磁盘控制器来维护。磁盘控制器是一个内置固件的硬件设备,它能将主机
送来的请求逻辑块号转换为磁盘的物理地址(柱面号、磁头号、扇区号),并控制磁盘驱动器
进行相应的动作。
通常磁盘控制器位于主板上的芯片中,因而磁盘控制器直接和主板上的I/O总线相连
接,I/O总线与其他系统总线(如处理器总线、存储器总线)之间用桥接器连接。磁盘驱动器
与磁盘控制器之间的接口有多种,一般文件服务器使用SCSI接口,而普通的个人计算机前
些年多使用并行 ATA(即IDE)接口,目前大多使用串行ATA(即SATA)接口。
磁盘与主机交换数据的最小单位是一个扇区,因此,磁盘总是按成批数据交换方式进行
读写,这种高速成批数据交换设备采用直接存储器存取(direct memory access,DMA)方式
进行数据的输入输出。这种输入输出方式用专门的DMA接口硬件来控制外设与主存间的
直接数据交换,数据不通过CPU。通常把专门用来控制总线进行 DMA传送的接口硬件称
为DMA控制器。在进行 DMA传送时,CPU让出总线控制权,由DMA控制器控制总线,
通过“窃取”一个主存周期来完成和主存之间的一次数据交换,或独占若干主存周期完成一
批数据的交换。有关DMA方式的实现参见 8.4.3节。
*7.3.4冗余磁盘阵列
为了改善磁盘存储器的性能,1988年美国加州大学伯克利分校一个研究小组提出了一
种称为 RAID(redundant arrays of inexpensive disk,廉价磁盘冗余阵列)的技术,大大改善
了外存的性能。
RAID技术的基本思想是,将多个独立的物理磁盘驱动器按某种方式组织成磁盘阵列,
以增加容量,在操作系统下这些物理磁盘驱动器被视为单个逻辑驱动器;采用类似于主存中
的多模块交叉技术,使数据按小条带或大数据块交叉分布存储在多个盘体上,通过让磁盘并
行工作来提高数据传输速度;并用冗余磁盘技术来进行错误恢复以提高系统可靠性。
目前已知的RAID方案分为8级(0~7级),并由此派生出RAID10(结合0和1级)和
RAID30(结合0和3级)和RAID50(结合0和5级)。这些级别不是简单地表示层次递进
关系,而是表示不同的设计结构。
RAID0没有冗余盘,即没有校验信息,数据分布在多个物理磁盘上,适用于容量和速
度要求高的非关键数据存储场合。
RAID1采用镜像盘实现一对一冗余。一个读请求可由其中一个定位时间更少的磁盘
提供数据;一个写请求对两个磁盘中对应的信息并行更新,故写性能由两次中较慢的一次写
来决定。
RAID2用海明校验生成多个冗余校验盘,实现纠正一位错误、检测两位错误的功能。
因为采用海明码,所以校验盘与数据盘成正比,因而冗余信息开销太大,价格较贵,所以
RAID 2已不再被使用。


<!-- page: 240 -->

存储器层次结构
RAID3采用按位奇偶校验生成单个冗余盘,采用小条带交叉分布方式,数据传输率
高,但I/O响应时间较长,大多用于大数据集数据(如多媒体和大数据科学计算等)的存储。
与RAID3一样,RAID4也采用一个冗余盘存放奇偶校验位,不过RAID4采用的是
大数据块交叉方式,每个磁盘的操作独立进行,所以多个小数据量的操作可以在多个磁盘上
并行进行,以同时响应多个I/O请求,具有较快的I/O响应时间,可用于银行、证券等事务
处理系统。RAID4的数据恢复方式与RAID3相同,比较容易。但对于写操作,因为每次
写都要对校验盘进行相应的校验数据更新,所以校验盘成为I/O瓶颈。因为RAID 4采用
的是大数据块交叉方式,所以,通常发生的是“少量写”,因此写开销比较大。
RAID5与RAID4的组织方式类似,只是奇偶校验块分布在各个磁盘中,所以,所有磁
盘地位等价,这样可提高容错性,并且避免了使用专门校验盘时潜在的I/O瓶颈。与RAID 4
一样,RAID5采用独立存取技术和大数据块交叉分布方式,I/O 请求的响应速度快。由此
可见,RAID5成本不高但效率高,因而被广泛使用于服务器中。
与RAID4和RAID5一样,RAID6采用独立存取技术和大数据块交叉分布方式。所
不同的是,RAID6的冗余信息分布在所有磁盘上,且采用双维块奇偶校验,因而RAID6容
许双盘出错。因此,可用于要求数据绝对不能出错的场合。由于引入了两个奇偶校验值,因
而控制器的设计变得十分复杂,写入速度也比较慢,用于计算奇偶校验值和验证数据正确性
所花费的时间比较多。由此可见,RAID6以增大时间开销为代价保证了高度可靠性。
RAID7是带 cache的磁盘阵列,它在RAID6的基础上,采用cache 技术使传输率和响
应速度都有较大提高,cache分块大小和磁盘阵列中数据分块大小相同,一一对应。有两个
独立的cache,双工运行。在写入时将数据同时分别写入两个独立的cache,这样,即使其中
有一个 cache 出故障,数据也不会丢失。写入磁盘阵列以前,先写入cache中,然后,同一磁
道的信息在一次操作中完成;读出时,先从cache中读出,cache中没有要读的信息时,才从
RAID中读。RAID7将 cache和RAID技术结合,弥补了 RAID的不足,从而将高效、快
速、大容量、高可靠性以及灵活方便的存储系统提供给用户。
*7.3.5Flash存储器和U盘
计算机中有一些相对固定的信息,需要存放在只读存储器(ROM)中,例如,系统启动时
用到的 BIOS(basic input/output system,基本输入/输出系统)是永久保存在ROM中的。
早期的ROM BIOS芯片采用烧录器写入方式,一旦安装在计算机主板中,便不能更改,除非
更换芯片;而现在主板都用Flash存储器芯片来存储 BIOS,可通过使用主板厂商提供的擦
写程序,直接在计算机中进行擦除,然后再重新写入。
早期的烧录器写入方式只读存储器有 MROM(mask ROM)、PROM(programmable ROM)、
EPROM(erasable programmable ROM)和 EEPROM(electrically erasable programmable
ROM,E2PROM)等类型。MROM不可编程,故可靠性高,但生产周期长、不灵活;PROM
只可编程一次,不灵活;EPROM可擦除可编程多次,但采用MOS工艺,且擦除时所有信息
被全部抹除,故不灵活且速度慢;EEPROM是电可擦除可编程的,可以选择个别字擦除,擦
除次数可达数千次,且所存放的数据可维持一二十年。
Flash 存储器也称为闪存,是高密度非易失性读写存储器,它兼有RAM和ROM的优
点,而且功耗低、集成度高,不需后备电源。这种器件沿用了 EPROM的简单结构和浮栅/
第7章
223


<!-- page: 241 -->

计算机组成与系统结构(第3版)
224
热电子注入的编程写入方式,又兼备 EEPROM的可擦除特点,且可在计算机内进行擦除和
编程写入,因此又称为快擦型 EEPROM。目前被广泛使用的U盘和存储卡等都属于 Flash
存储器。
1.Flash 存储元
Flash 存储元是在 EPROM存储元基础上发展起来的。如图7.18所示是一个 Flash 存
储元,每个存储元由单个 MOS管组成,包括漏极 D、源极 S、控制栅和浮空栅。当控制栅加
上足够的正电压时,浮空栅将储存大量电子,即带有许多负电荷,可将存储元的这种状态定
义为0;当控制栅不加正电压,则浮空栅少带或不带负电荷,将这种状态定义为1。
2.Flash 存储器的基本操作
闪存有3种基本操作:编程(充电)、擦除(放电)、读取。
编程操作:最初所有存储元都是1状态,通过编程,在需要改写为0的存储元的控制栅
加上一个正电压Vy,如图7.19(a)所示。一旦某存储元被编程,则存储的数据可保持100年
而无须外电源。
浮空栅
控制栅,
D
S
浮空栅
控制栅、
e
e
D
S
+Va
浮空栅
控制栅、
闾
+Vp
0V
ee e
oV
+Va
(a)0 状态
(b)1状态
图7.18 Flash 存储元
(a)编程:写0
(b)擦除:写1
图7.19 Flash 存储元的写入
擦除操作:采用电擦除。即在所有存储元的源极S加正电压Vr,使浮空栅中的电子被吸
收掉,从而使所有存储元都变成1状态,如图7.19(b)
所示。因此,写的过程实际上是先全部擦除,使全都
变成1状态后再在需要的地方改写为0,即先全部放
电,再在写0的地方充电。
+Va
+Va
浮空栅
控制栅、
0
+Pg
+Ve
电流/
读取操作:在控制栅加上正电压Vg,若原存为
e
0,则如图 7.20(a)所示,读出电路检测不到电流;若原
存为1,则如图7.20(b)所示,浮空栅不带负电荷,控
制栅上的正电压足以开启晶体管,电源V。提供从漏
极D到源极S的电流,读出电路检测到电流。
oV
0V
(a)读0
(b)读1
从上述基本原理可以看出,Flash 存储器的读操
作速度和写操作速度相差很大,其读取速度与半导体
RAM芯片相当,而写数据(擦除一编程)的速度则比
RAM芯片慢很多。
图7.20 Flash存储元的读出


<!-- page: 242 -->

存储器层次结构
*7.3.6固态硬盘
近年来,一种称为固态硬盘(solid state disk,SSD)的外部存储器越来越流行,它也被称
为电子硬盘。这种硬盘并不是一种磁表面存储器,而是一种使用NAND闪存组成的外部存
储系统,与U盘并没有本质差别,只是容量更大,存取性能更好。它用闪存颗粒代替了磁盘
作为存储介质,利用闪存的特点,以区块写入和抹除的方式进行数据的读取和写入。
固态硬盘的接口规范和定义、功能及使用方法与传统的硬磁盘完全相同。目前接口标
准使用USB,SATA和IDE,因此 SSD通过标准磁盘接口与I/O总线互连。在SSD中有一
个闪存翻译层,它将来自CPU的逻辑磁盘块读写请求翻译成对底层 SSD物理设备的读写
控制信号。因此,这个闪存翻译层相当于磁盘控制器。
SSD中一个闪存芯片由若干区块(block)组成,每个区块由若干页(page)组成,通常,页
大小为512B~4KiB,每个区块由32~128个页组成,因而区块大小为16~512KiB,数据按
页为单位进行读写。SSD有三个限制:①对某页写信息之前,必须先擦除该页所在的整个
区块;②擦除后区块内的页必须按顺序写入信息;③只有有限的擦除/编程次数。
某一区块进行了几千到几万次重复写之后,就会被磨损而变成坏的区块,不能再被使
用。因此,闪存翻译层中有一个专门的均化磨损(wear leveling)逻辑电路,试图将擦除操作
平均分布在所有区块上,以最大限度地延长 SSD的使用寿命。
电信号的控制使得固态硬盘的内部传输速率远远高于常规硬盘。SSD随机读时间为
几十微秒,而随机写的访问时间为几百微秒。硬盘由于需要寻道和旋转等待,所以其访问时
间是几毫秒到几十毫秒,因此,SSD随机读写时延比硬盘要低两个数量级。有测试显示,使
用固态硬盘以后,Windows的开机速度可以被提升至20s以内,这是基于常规硬盘的计算
机系统难以达到的速度性能。
7.4存储器的数据校验
数据在计算机内部进行存取和传送过程中,由于元器件故障或噪声干扰等原因会出现
差错。为了减少和避免这些错误,一方面要从计算机硬件本身的可靠性入手,在电路、电源、
布线等各方面采取必要的措施,提高计算机的抗干扰能力;另一方面要采取相应的数据检错
和校正措施,自动地发现并纠正错误。数据检错和纠正(error checking and correcting)通常
简写为 ECC。ECC内存就是指运用了ECC技术的内存。
7.4.1数据校验基本原理
目前为止提出的数据校验方法大多采用一种“冗余校验”的思想,即除原数据信息外,还
增加若干位附加的编码,这些新增编码称为校验位。图7.21给出了一般情况下的处理
过程。
当数据被存入存储器或从源部件开始传输时,对数据M进行某种运算(用函数F来表
示),以产生相应的代码P=F(M),这里P就是校验位。这样原数据信息M和相应的校验
位P一起被存储或传送。当数据被读出或传送到目标部件时,和数据信息一起被存储或传
送的校验位也被得到,用于检错和纠错。假定读出后的数据为M',通过同样的运算 F 对
第7章
225


<!-- page: 243 -->

计算机组成与系统结构(第3版)
出错信号
226
数据输出
M
纠错器
数据输入
M
F
P
存储器
或
传输线路
M'
F
P"
P"
比较
图7.21 数据校验过程
M'也得到一个新的校验位P'=F(M'),假定原来被存储的校验位P取出后其值为P",将
校验位 P”与新生成的校验位P'进行比较运算,生成一个故障字,根据故障字可以确定是否
发生了差错。故障字可以反映以下3种情况之一。
(1)没有检测到错误。此时,把得到的数据位M'直接传送出去。
(2)检测到差错并可纠错。数据位M'和故障字一起送入纠错器,将产生的正确数据位
传送出去。
(3)检测到错误,但无法确认哪位出错,因而不能进行纠错处理,此时,报告出错情况。
为了判断一种码制的冗余程度,并评估它的查错和纠错能力,引入了“码距”的概念。由
若干位代码组成的一个字叫“码字”,将两个码字逐位比较,具有不同位的个数叫作这两个码
字间的“距离”。一种码制可能有若干码字,各码字间的最小距离称为“码距”。例如8421码
中,2(0010)和3(0011)之间距离为1,所以8421码的码距为1,记作d=1。在数据校验码
中,一个码字是指数据位和校验位按照某种规律排列得到的代码。
一般来说,合理地增加校验位、增大码距,就能提高检错/纠错的能力。例如,如果采用
4位二进制编码0000~1111表示16种状态,则码距为1,因为这组编码的任何一个4位码
中出现一位或多位错误,都会变成另一个合法编码,因此,这种编码没有检错/纠错能力。如
果采用4位二进制表示8个状态:0000、0011,0101,0110、1001、1010、1100、1111.其余的4
位编码都是非法的。本来8个状态只要3位就够了,现在增加一个冗余位,并使码距为2,
这样,这8个合法编码中如果某个编码发生了一位错误,那么就会变成一个非法编码,因而
就能检测出来。
上述例子说明码距与检错、纠错能力之间存在一定的关系。当码距1<d≤4时,关系
如下。
(1)如果码距d为奇数,则能发现d—1位错,或者能纠正(d-1)/2 位错。
(2)如果码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错。
常用的数据校验码有奇偶校验码、海明校验码和循环冗余校验码。
7.4.2奇偶校验码
最简单的数据校验方法是奇偶校验。实现原理如下:假设将数据M=M,-M,⋯
M?M。从源部件传送至目标部件或存储在存储器中,在目标部件接收到或从存储器取出的


<!-- page: 244 -->

存储器层次结构
数据为M'=M-?M。-?⋯M’M。,为了判断数据M在传送或存储中是否发生了错误,可以
按照如下步骤来判断。
第一步,在源部件求出奇(偶)校验位P。若采用奇校验位,则P=M。-④M-2+⋯④
M?④M?④1。即当M有奇数个1时P取0,否则,P取1。若采用偶校验位,则P=M,-④
M?-2+⋯④M?+M。。举例如下:若传送的是字符A,编码为100 0001B,在前面增加奇校
验位后的编码为1100 0001B,而加上偶校验位后的编码为0100 0001B。
第二步,在目标部件求出奇(偶)校验位P'。
第三步,计算最终的校验位P*,并根据其值判断有无奇偶错。假定P在目标部件接收
到的值为P",则P*=P'④P"。若P*=1,则表示有奇数位错;若P'=0,则表示正确或有
偶数个错。
在奇偶校验码中,若两个数据中有奇数位不同,则它们相应的校验位就不同;若有偶数
位不同,则虽校验位相同,但至少有两位数据位不同,因而任意两个码字之间至少有两位不
同,即码距d=2。奇偶校验码只能发现奇数位出错,不能发现偶数位出错,而且也不能确定
发生错误的位置,不具有纠错能力。
因为一字节长的代码中一位出错的概率相对较大,两位以上出错情况则很少,所以,奇
偶校验码多用于校验一字节长的代码。
“7.4.3海明校验码
前面所述的奇偶校验码是对整个数据编码生成一位校验位。因此这种校验码检错能力
差,并且没有纠错能力。海明码(Hamming code)由理查德·海明(Richard Hamming)于
1950年提出,其主要思想是:将数据按某种规律分成若干组,对每组进行相应的奇偶检测,
以提供多位校验信息,从而可对错误位置进行定位,并将其纠正。海明校验码实质上就是一
种多重奇偶校验码。
1.校验位的位数的确定
假定被校验数据的位数为n,校验位为k位,则故障字的位数也为k位。k位的故障字
所能表示的状态最多是2*种,每种状态可用来说明一种出错情况。对于最多只有一位错的
情况,其结果可能是无错或n位数据中某一位出错或k位校验码中某一位出错。因此,共有
1+n+k种情况。综上可知,要能对一位错的所有结果进行正确表示,则n和k必须满足下
列关系:
2≥1+n+k,即2?-1≥n+k
例如,对于单个位纠错的情况,当数据位n=8时,校验位和故障字位数k=4。4位的故障
字最多可以表示16种状态,而单个位出错情况最多只有12种可能(8个数据位和4个校验
位),加上无错,一共有13种情况。用16种状态足以表示13种情况。
2.分组方式的确定
数据位和校验位按某种方式排列为一个n+k 位的码字,将该码字中每一位的出错位
置与故障字的数值建立关系,就可通过故障字的值确定该码字中哪一位发生了错误,从而将
其取反来进行纠正。
根据上述基本思想,可以按以下规则来解释各故障字的值。
(1)如果故障字各位全部是0,则表示没有发生错误。
第7章
227


<!-- page: 245 -->

计算机组成与系统结构(第3版)
228
(2)如果故障字中有且仅有一位为1,则表示校验位中有一位出错,不需要纠正。
(3)如果故障字中多位为1,则表示有一个数据位出错,其在码字中的出错位置由故障
字的数值来确定。纠正时只要将出错位取反即可。
这里以8位数据进行单个位的检错/纠错为例说明。假定一个8位数据M=
M?M?M?M?M?M?M?M?,其相应的4位校验位为P=P?P?P?P?。根据上述规则将数据
M和校验位P按照一定的规律排到一个12位的码字中。根据上述第一个规则,故障字为
0000时,表示无错,因此没有和位置号0000对应的出错情况,所以位置号从0001开始。根
据第二个规则,校验位中有一位出错时的故障字只可能是0001、0010,0100、1000,分别代表
校验位P?、P?、P?、P、发生错误,因此,P?、P?、P?、P,分别位于码字第0001(1)、0010(2)、
0100(4)、1000(8)位。根据最后一个规则,将其他多位为1的故障字依次表示数据位M?~
M?发生错误的情况,即数据位M?~M,分别位于码字的第0011(3)、0101(5)、0110(6)、
0111(7)、1001(9)、1010(10)、1011(11)、1100(12)位(从左往右数)。综上所述,得到码字的
排列如下:
M?M?M?M?P M?M?M?P?M?P?P:
通过对各种出错情况的分析,可以得到故障字S=S?S?S?S;的各个状态和出错情况的对
应关系,如表7.1所示。因为故障字的值决定了哪位出错,所以,某位出错一定会影响与之
相对应的故障字中为1的位所在组的奇偶性。例如,若位于码字第3位的M,出错,则对应
故障字S?S?S?S?=0011,因此一定会改变S,和S?所在分组的奇偶性,故M?应同时被分
到与S:对应的第1组和与S?对应的第2组。同理,P,对应故障字0001,故P,应被分到
与S?对应的第1组;M。对应故障字1100,故应分到与S,对应的第3组和与S,对应的第
4组。第i组中有一个对应的奇偶校验位P;。
表7.1 故障字和出错情况的对应关系
分组
序号1