计算机组成原理笔记

第 1 章 计算机系统概述

1.1 计算机的功能与软硬件

1.1.1 计算机的功能

计算机的基本功能包括数据处理、数据存储和数据传送。

1.1.2 计算机的软硬件

1.2 计算机的发展历程

1.3 计算机的硬件组成

1.3.1 冯 · 诺依曼计算机

硬件结构

冯·诺依曼计算机由运算器、控制器、存储器、输入设备和输出设备组成,运算器、控制器常合称为中央处理器

工作方式

冯·诺依曼计算机采用“存储程序”工作方式。存储程序的基本思想是:程序和数据预先存放在存储器中,机器工作时,自动、逐条地从存储器中取出指令并执行。

存储器结构

冯·诺依曼计算机中,存储器可以存放程序和数据,因此,计算机中只需一个存储器。根据存储程序工作方式的要求,存储器需要按地址进行访问。由于存储器中无须区分指令和数据(CPU中才需要区分),因此,存储器可为由定长单元组成的一维空间。

1.3.2 计算机的结构与部件

现代计算机结构的主要特点是以存储器为中心、多种存储器共存。采用以存储器为中心的硬件结构,可以实现数据传送与数据处理的并行,使 CPU 专注于执行程序,以此来提高计算机的性能。

存储器 

存储器的主要功能是存储信息,可以通过操作实现信息的写入和读出。

现代计算机中,存储器由主存、辅存构成,计算机硬件中的存储器通常指主存,而将辅存归类为一种外部设备。

运算器

运算器的主要功能是对信息或数据进行处理或运算,并暂存处理或运算结果。

由于最频繁的运算为算术运算和逻辑运算,而算术运算是在逻辑运算基础上实现的,故两种运算常用同一个部件来实现,因此,运算器中都包含一个算术逻辑单元。

控制器

控制器的主要功能是指挥和控制各部件协调工作,来实现程序的自动执行。

程序执行过程是循环的指令执行过程,指令执行过程分为取指令、分析指令和执行指令三个阶段,循环变量为指令地址,下条指令地址由当前指令产生。

I/O 设备

I/O 设备的主要功能是实现信息的输入和输出,以及外部媒体信息与内部二进制信息的格式变换。

1.3.3 计算机的部件互连

总线结构

总线是设备(或部件)间进行信息传输的一组公共信号线。总线上的设备通过地址(设备编号)来进行识别。

总线运输

总线上连接有多个设备(部件),不同设备通过地址进行识别,因此,总线传输过程一般分为两个步骤。对于主设备而言,总线命令只有读、写两类。

1.4 计算机系统的层次结构

1.4.1 计算机的层次结构

1.4.2 软件与硬件的关系

1.4.3 计算机的结构与组成

计算机系统结构是指机器语言程序员或编译程序编写者所看到的计算机系统的属性,包括概念性结构和功能特性两个方面,常简称为计算机结构。

计算机组成是指计算机硬件设计人员所看到的计算机系统的属性。

计算机实现是指计算机制造人员所看到的计算机系统的属性。

1.5 计算机系统的工作过程

1.5.1 计算机的工作方式

计算机都采用存储程序工作方式。存储程序方式的基本思想是:程序和数据预先存放在存储器中,机器工作(程序执行)时,自动、逐条地从存储器中取出指令并执行。

1.5.2 程序执行过程

1.6 计算机系统的性能指标

第 2 章 数据的表示与运算

2.1 数据的编码

2.1.1 数制及其转换

进位计数制

进位计数制又称进制,是用一组固定的符号和统一的规则来表示数值的方法。

有数码、基数和位权 3个参数,数码为计数的符号,基数为进位的单位,位权为不同数码位的权值。

书写时,需要用后缀字母标识该数的进制,十进制数的后缀字母通常会省略,如 324D、324H、324 分别表示八进制、十六进制、十进制的 324。

C 语言中,可以用 0x 作为十六进制数的前缀,如 0x324与324H 表示的是同一个数。 

不同进制数之间的转换 

不同进制数之间的转换实质上是基数转换带来的数码转换。

转换所依据的原则是:若两个不同进制数的值相等,则两个数的整数部分和小数部分的值一定分别相等。因此,转换时可以对整数部分和小数部分分别进行转换。

2.1.2 机器数及其编码

我们知道,数学上的数是由符号、小数点、数码位构成的,其中符号、小数点可以缺省,例如 (1011)_2,(+1011)_2,(-0.1011)_2,(+101.1)_2 等。

根据符号是否缺省,数据分为有符号数和无符号数两种类型。

由于计算机只能识别和表示二进制的 0 和 1,因此,符号(正/负)也只能用 0 和 1 表示,这种处理方式称为数字化。由于实数的小数点位置不固定,小数点也无法用 0 和 1 表示,通常用隐含小数点、约定其位置的方法来处理,如数据可分为定点数、浮点数两种类型,定点数又可分为整数、小数两种。

通常,将计算机内部用编码表示的数称为机器数,对应地,把数学上的数称为真值。例如用 0 表示符号正时,(+1011)_2 的机器数为 01011。

有符号数进行手工运算时,需要将符号与数值分开运算,而计算机采用相同方法运算时,会很麻烦,且性能较差。例如,对于(+x)+(-y),需先进行 x-y,再判结果符号,最后进行 x-y 或 y-x 运算,其实第一次 x-y 时,就已经得到运算结果了,只是结果符号不确定而已。因此,硬件实现运算时,最好能够做到:符号与数值可以一起运算,减法运算不需要先比较大小。

那么,是否有新的数据编码方法,可以提高硬件实现运算的性能呢?答案是肯定的,不同的编码方法对硬件实现运算的支持程度有所不同。

下面,我们就讨论常见的原码、补码、反码、移码的编码方法,及其定点数表示方法。为了便于阅读,真值和机器数无说明时都为二进制数,小数机器数中的小数点是不存在的,是为了便于阅读而添加的。

原码表示法

原码的编码思想是:机器数的最高位为符号位(0 表示正、1 表示负),其余各位为真值的绝对值。

设整数X=\pm x_{n-2}\cdots x_0x_i =0或1,则整数原码的定义为:

即 [X]原 = x_{n-1} x_{n-2} \cdots x_0,最高位 x_{n-1} 由 X 的符号决定,其余各位与 X 的数值位相同。 

+2^{n-1} 相当于在最高位+1,这里即把0+1=1

设小数 X=\pm 0.x_{-1}\cdots x_{-(n-1)}x_i=0或1,则小数原码的定义为:

即[X]原 =\pm 0.x_{-1}\cdots x_{-(n-1)},最高位 x_0 由 X 的符号决定,其余各位与 X 的数值位相同。由于小数的整数部分为0,因此,编码时只需要符号位,整数部分的 0 可以隐含。 

原码表示法的优点是直观易懂。原码表示法有以下两个特性:

(1)原码表示值的范围与真值相同,但[+0]原≠[-0]原。

(2)运算时符号与数值分开运算,加减运算时需要先比较大小。

补码表示法

补码的编码思路是利用有模运算中的补数来表示负数。补码是一种符号与数值可以一起运算、减法不需要比较大小的机器数编码方法。下面,我们先介绍一下有模运算的相关概念。

(1)有模运算

模运算系统中,模是指计量器的容量(计数范围),例如,钟表中的 12 就是模。若运算时只计量小于模的部分,其余部分被丢弃,这种运算称为有模运算,或模M运算。

有模运算的典型特征是同余。若A、B、M满足如下关系:A=B+kM(k为整数),则记为 A=B(mod M),称 B 和 A 为模 M 的同余,即除以 M 后的余数相同。

例如,有关钟表的运算为模 12 运算,将时间从 10 点拨向 7 点有两种方法,一种是倒拨 3 小时,即 10-3=7;另一种是顺拨 9 小时,即10+9=7+12=7(mod 12)。

利用同余特性,一个负数可以用其正补数表示。这一表示方法的好处是,数据的符号与数值可以一起运算,例如,c+(-3)=c+9(mod 12)。

数学上,若a、b、M满足关系:a+b=M,则称 a、b互为模M的补数,又称 a 为 b 模 M 的补数。例如,3 是 9 模 12 的补数,2 是 8 模 10 的补数。

利用同余特性,一个负数可以用其正补数表示。这一表示方法的好处是,数据的符号与数值可以一起运算,例如,c+(-3)=c+9(mod 12)。

利用补数概念,减法运算可以转化为加法运算。

若a、b互为模M的补数,则 c-a= c-(M-b)=c+b(mod M),即减去一个数等于加上这个数的补数。

例如,c-3=c+9 (mod 12)。

补数这一特性的好处是,减法运算不再需要比较大小,非常易于硬件实现。

(2)补码的定义

补码的编码思想是:正数的补码为其本身,负数的补码为其正补数。

设整数 X=\pm x_{n-2}\cdots x_0,则其补码为 n 位,模为 2^n,整数补码的定义为:

(3)真值与补码的关系

根据公式 [X]补= 2^n+X 求补码时,运算很不方便。下面我们以整数为例,来分析真值与补码的对应关系,找出求补码的简便方法。

由真值求补码的简便方法是:

若 X 为正数,则 [X]补 的符号位为0,数值位与 X 的各位相同;

若 X 为负数,则 [X]补 的符号位为1,数值位由 X 的各位取反、末位加 1 得到。

同理,由原码求补码的简便方法是:

若 [X]原 的符号位为0,则 [X]补 = [X]原,

若 [X]原 的符号位为1,则 [X]补 符号位为1,数值位由 [X]原 的数值位各位取反、末位加 1 得到。

反之,由补码求真值的简便方法是:

若 [X]补 的符号位为 0,则 X 的符号为正,数值部分与 [X]补 的数值位相同;

若 [X]补 的符号位为1,则 X 的符号为负,数值部分由 [X]补 的数值位各位取反、末位加 1 得到。 

 注意,上述“各位取反、末位加1”都是针对数值部分而言,不包括符号位。

反码表示法

反码的编码思想与补码一致,只是模比补码少1。反码是一种过渡性编码,常用作补码变换的中间表示形式。

设 X=\pm x_{n-2}\cdots x_{0},则模为2”-1,整数反码的定义为:

 可见,X 为正数时,[X]反 = [X]补;X为负数时,[X]反 = [X]补 -1,即反码的数值位仅为真值的各位取反,少了补码的“末位加1”。

反码表示中,0的表示不唯一,表示范围比补码少一个最小负数。

根据原码、补码及反码的定义,原码、补码及反码在数轴上的表示特征如下图所示。 

综上所述,原码、补码及反码表示法有如下特点:

(1)三种编码的最高位都为符号位,0表示正、1表示负。

(2)真值 X 为正数时,[X]原 = [X]补 =[X]反。 

(3)真值 X 为负数时,[X]补 = [X]反 +1,[X]反 = [X]原 除符号位外各位求反。

(4)补码比原码、反码多表示一个最小负数,原因是 [+0]补 = [-0]补。

移码表示法

由上图可见,原码与补码沿数轴方向的编码是不连续的,比较两个机器数的大小 时,必须通过有符号运算进行。那么,是否有直接比较编码判断大小的编码方式呢?

移码的编码思想是:机器数等于真值加上一个常数。

可见,移码是一种可以直接比较编码来判断大小的编码方法。移码主要用来表示浮点数的阶,便于浮点运算的对阶实现,因此,移码只用来表示整数。

X=\pm x_{n-2}\cdots x_{0},则其移码为 n 位,移码的定义为:[X]移 = 2^n-1 +X。其中,2^n-1 称为偏置常数,这也是移码得名的由来。

 可见,移码可表示数的范围为 -2^{n-1}\le X <2^{n-1},数0的表示是唯一的。

对比上图可以发现,同一真值的移码与补码仅最高位不同、其余位完全相同,这可以从两种编码的定义看出。因此,由真值求移码的简便方法是:先求真值的补码,再将最高位取反。

例如,若 X=+10110、Y=-10110,

则 [X]补 = 0 10110,[Y]补 = 1 01010,

 [X]移 = 1 10110,[Y]移 = 0 01010。

综上所述,原码、补码、反码及移码这4 种编码中,

原码的特征是直观,补码便于加减运算的硬件实现,反码仅是补码的一种过渡编码,移码在比较大小时效率很高。因此,大多数计算机中,整数使用补码表示,浮点数的阶使用移码表示,浮点数的尾数使用原码表示。

2.1.3 十进制数编码

计算机对十进制数的处理方法有两种:

一种是存储采用二进制数,I/O 时进行二-十进制转换;

另一种是存储采用十进制数,运算后立即转换为十进制数。

前一种方法对计算密集型应用很好,但对财会、数据库等 I/O 密集型应用则不好,大量时间花费在了进制转换上。因此,计算机内部通常可以直接表示十进制数。

用二进制形式表示十进制数的编码方式,称为二-十进制编码方式。

每个十进制数位需要 4 位二进制编码,在 2^4=16 个码点中,表示 0~9 只需10个码点,根据这10个码点的选择方法,BCD码有多种类型编码。

BCD码的类型可分为有权码、无权码两种

有权码指编码的每位都有一定的权重,如 8421 码各位的权重为 2^32^22^1 及 2^0,常见的有权码还有 2421、5211、4311 码等。

无权码指编码的各位无权重,用总体编码表示十进制数,如余 3 码、格雷码等。

余 3 码是 8421 码加 3 后形成的,余 3 码作加法时能自动产生十进制数对应的进位,同时具有对 9 的自补性,即 0 与 9、1 与 8 等互为反码。

十进制数用 BCD 码进行表示时,通常的方法是:十进制数的每个数字对应 4 位二进制编码,数符用特定编码表示、放在最低数值位之后。为了便于按字节存储,这种表示方式还约定,数符与数字的个数之和必须为偶数,为奇数个时须在最高数值位之前补数字 0。

以 8421 码为例,8421 码用 1100、1101 表示正号、负号,-123 的 BCD 码为 0001 0010 0011 1101,+27 的BCD码为 0000 0010 0111 1100,其中的0000就是将两位数27转变为三位数 027。

计算机中,十进制数还可用字符形式表示,字符通常为 ASCII码。如 +7 的字符编码为2B、37,占2个字节;-123的字符编码为2D、31、32、33,占4个字节。

2.1.4 字符编码

字符泛指字母和符号,多个字符的集合称为字符集,不同字符集的字符数量不同,如 ASCII字符集包含128个字符。

字符编码指字符在字符集中的唯一数字化代码,表示字符在字符集中的序号或特征号。因此,字符编码为无符号数据,这一点需要特别注意。

计算机中,字符通常有输入码、字模码、内码及交换码 4 种编码类型,各种字符编码的种类及应用如下图所示。

输入码主要用于字符的输入,编码由一至几个按键码组成,如输入码'd、'a'及'1',英文输入法时对应 3 个字符,拼音输入法时对应1 个汉字“大”。输入码的长度与字符集大小、键盘按键数量及输入法等有关。 

交换码主要用于字符的索引、传送,编码为字符在字符集中的序号,如字符'A'的 ASCII 码为65,'3'的 ASCII 码为51。交换码的长度只与字符集大小有关。

内码主要用于字符的存储和处理,编码由交换码及扩展码组成。扩展码可用于支持多个字符集,使编码长度为主存单元长度的倍数。内码的长度与字符集大小、支持的字符集个数、主存单元长度有关。

字模码主要用于字符的输出,由一定长度的二进制位串组成,如 16×16 点阵的字模码占 32 个字节,二进制位串中的 1 表示相应位置有黑点,所有字符的各种字模码构成了字符集的字模库。字模码的长度与字符的字体、字号、字形等有关。

可见,字符编码指字符的交换码,是表示字符在字符集中位置的编码;字符的内码指交换码在计算机内部存储和处理时的编码,常称为字符数据。

ASCII码(美国国家信息交换标准字符码)的字符集包含 128 个字符(码点),包 括26个英文字母、10个数字和若干专用符号。因此,ASCII 码长为 log_2 128=7 位。

GB2312-80 码是汉字信息交换时使用的编码,其字符集有 7445 个码点,定义了 6763 个常用汉字及 682 个非汉字符号,由我国 1981 年的国家标准发布(编号为 GB2312-80),故又称为国标码,或GB2312-80码。国标码长为14位。

Unicode 码是一种可容纳世界上所有文字和符号的字符编码,支持 UCS-2、UCS-4 两种字符集,交换码长分别为16 位和 32 位,UCS-4 编码的低 16 位与 UCS-2 编码相同。基于跨平台、节约空间的考虑,其内码通常采用 UTF-8、UTF-16、UTF-32 格式。 UTF-8 码是一种变长编码,转换UCS-2 编码时为1~3个字节,转换UCS-4 编码时可能为6个字节,兼容 ASCII码的表示;UTF-16码在转换 UCS-2 编码时为2个字节,转换UCS-4编码时为4个字节,转换很简单,但不兼容 ASCII码的表示。

2.1.5 数据校验码

2.2 数据的表示

计算机需要处理的各种信息,如数字、符号、声音、图像等,在机器内部都以二进制编码的形式存在,因此,统称为数据。根据数据的应用特征,计算机中的数据可分为数值数据和非数值数据两种类型。

数值数据包括自然数、整数、实数,运算类型为数学运算;

非数值数据包括逻辑数、字符、图像等数据,运算类型包括逻辑运算、关系运算、特殊数学运算等。

2.2.1 数据的表示方法

数据有数值数据、非数值数据两种类型,计算机中,非数值数据也必须用二进制编码表示,可以理解为无符号、无小数点的数值数据,只是运算类型不是算术运算而已,因此,可以从数值数据角度出发,来分析所有数据的表示方法。

数据主要包含进制、符号、小数点、编码、长度 5个属性。实际应用中,数据可以有多种进制,如十进制、二进制等;数据可以没有符号,如整数+123、123;数据的小数点可以隐含、小数点位置可变,如+12.3,-123;数据采用绝对值编码方式;数据的长度可根据需要任意变化,如进位时自动增加长度,运算永远不会溢出。

计算机硬件有许多特征,指令和数据都用二进制方式表示,运算也采用二进制方式;二进制中只有0和1,没有正/负符号及小数点;数据的存储和处理采用定长方式,导致所有运算都是有模运算,运算结果可能溢出。

小数点的表示

机器的二进制中只有 0 和1,小数点本身必须隐含表示,因而约定的小数点位置必须是固定的。可根据数据类型约定少量位置,如整数、自然数在最低位之后,纯小数在最高数值位之前。但实数需要另外处理,如数据由尾数、阶组成,尾数和阶的小数点位置固定。

通常的方法是,小数点本身隐含表示,小数点位置支持定点、浮点两种表示格式。

2.2.2 整数的表示

2.2.3 实数的表示

实数都是有符号数,小数点位置不固定,在计算机中表示时,只能采用浮点格式。

任意一个实数都可描述成 X=M\times R^E 形式,其中,M 称为尾数,E称为指数或阶,R 称为基数(或基),基是尾数的进制。通常,尾数为纯小数,即 M=\pm 0.m_{-1}\cdots m_{k-1};阶为有符号整数,即 E=\pm e_{l-1}\cdots e_0;基为二进制,即R=2。

2.2.4 非数值数据的表示

非数值数据包括逻辑数、字符、声音、图像等类型,运算类型大多不是算术运算, 如逻辑运算、关系运算等。

逻辑数的表示

从值域角度看,逻辑数的长度只需 1 位即可;从存储角度看,逻辑数的长度须为 m 位(m>1),如一个主存单元长度。为了提高表示效率,每一位可以表示一个逻辑值, m 位的逻辑数可以表示 m 个逻辑值。

2.2.5 数据表示举例

2.3 定点数的运算

2.3.1 常用的逻辑部件

数字逻辑电路有组合逻辑电路、时序逻辑电路两种类型。

组合逻辑电路的输出只依赖于输入,功能为计算或操作,故称为操作单元。

时序逻辑电路的输出依赖于当前的输入以及此前的状态,即带有输出到输入的反馈回路,因而能够保存信息,故称为状态单元。

计算机中,常用的组合逻辑电路有三态门、译码器、数据选择器、加法器,常用的时序逻辑电路有触发器、寄存器、计数器。

三态门

所谓三态是指正常 0 态、正常1 态、高阻态 Z,高阻态等价于断开状态。

三态门是三态输出门的简称,其输出端可以输出上述三种状态。

三态门是在常规门电路的基础上附件控制电路来实现的,用控制端来控制输出是正常还是高阻。三态门的输出可以为正相或反相,控制端可以高电平或低电平有效。

输出反相、低电平控制的三态门功能表及逻辑图如图(a)所示,\bar{G}=0Y=\bar{A}\bar{G}=1Y=Z

输出正相、高电平控制的三态门功能表及逻辑图如图(b)所示。

三态门主要用作开关电路,如总线接口电路。总线是一种共享信号线,同时最多有一个部件可以输出信息到总线上,因此,所有部件的输出端都必须通过三态门连接到总线上。

译码器

译码器的功能是将输入的每个二进制代码都译成不同的控制电位。若译码器有 n 个输入,则有 2^n 个输出;任何一种输入组合,都只有一个输出为0(或1),其余输出都为 1(或0);每一种输入组合,输出为0(或1)的输出端都不同。

下图是译码器的功能表及内部逻辑。译码器中常设置“使能”控制端E,控制是否禁止译码功能,E=0 时正常译码,E=1 时输出全部无效。

数据选择器 

数据选择器又称多路选择器或多路复用器,功能是在选择信号的作用下,从多个输入通道中选择一个通道的数据输出。若数据选择器的输入有 n 个,则需要 log_2n 个选择信号。多路选择器可以带三态输出功能,此时常称为多路开关。

下图是三态 4 选 1 数据选择器的功能表及内部逻辑,其中,S_1S_0 为通道选择信号,\bar{G} 为三态控制端。\bar{G} 的另一个作用是可以用来扩展通道数。

触发器 

时序逻辑电路内部包含状态单元,一个状态单元至少有两个输入和一个输出,两个输入分别为待写入数据及写入控制信号。

触发器的种类很多,按控制方式分,有电位触发、边沿触发、主从触发等;按功能分,有RS型、D型、JK型等。同一触发器的功能可以用不同的触发方式来实现,如同步写入、异步清零,使用时要注意。

电位触发方式触发器

当控制端 E 为约定电平(如 1)时,触发器接收输入数据,输出端的值随输入端而变化;当 E 为非约定电平时,触发器的状态保持不变,这种触发器又称为锁存器。

下图带反馈回路的两个与非门构成了基本 RS触发器,E端用来控制 D 是否能够写入,Q_0 表示之前的输出状态。

锁存器的结构简单,常用它来组成作暂存器。

边沿触发方式触发器

当时钟脉冲端 CP 上的约定跳变(如上升沿)到来时,触发器接收输入数据;当 CP 处于非约定跳变状态(如1/0/下降沿)时,触发器的状态保持不变。

D触发器是常用的正边沿触发器,其功能表、内部逻辑及写入时序如图2.11所示, 其中,\bar{R}_0 及 \bar{S}_0 为异步清零及异步置位端。所谓异步指控制立即生效、不受CP影响。

2.3.2 加减运算

补码加减运算

(1)运算规则

对补码加法运算,由补码定义 [X]补 =2^n+X 及同余公式,可以得到补码加法公式:

上式表明,真值相加可以用补码相加实现,并且不必考虑真值的符号。 

对补码减法运算,由 A-B=A+(-B) 及加法公式,可以得到补码减法公式: 

上式表明,真值相减可以用补码加法实现,同样不必考虑真值的符号。

由于 B是用补码表示的,[-B]补 可用 [B]补 求得:包括符号位在内,各位取反、末位加1。 

真值加减可以用补码加减运算实现,补码加减运算时,数值与符号可以一起运算,减法运算可以用加法运算实现。运算结果的位数与源操作数相同,结果不超出补码表示范围时,结果是正确的。 

若 B 改为+10111,则 [A+B]补 = 001101,[A-B]补 = 011111,验证运算结果可知,[A-B]补结果错误,因为-33 超出了6位补码的表示范围,结果发生了溢出。 

(2)运算的逻辑实现

 (3)溢出判断

有符号加减运算溢出的特征是:同号相加或异号相减时,结果符号与被加(减)数符号不同。有符号运算结果是否溢出,常用标志 OF(Overflow Flag)表示,OF=1 表示结果溢出,OF=0 表示结果正确。

第一种方法,用一个符号位判断溢出。Z 正溢出时有 a_{n-1}=b'_{n-1}=0z_{n-1}=1,负溢出时有a_{n-1}=b'_{n-1}=1z_{n-1}=0,即 Z 溢出时有 a_{n-1}=b'_{n-1}\neq z_{n-1},因此,溢出的判断条件是

第二种方法,用进位位判断溢出。若加法器的最高位进位为 C_{n-1}、次高位进位为 C_{n-2},则 Z 正溢出时有 C_{n-1}=0C_{n-2}=1,负溢出时有 C_{n-1}=1C_{n-2}=0,因此,溢出的判断条件是OF=C_{n-1}\oplus C_{n-2}。 

无符号加减运算

原码加减运算

2.3.3 移位运算

从数学上看,二进制定点数左移或右移 n 位,相当于乘以或除以 2^n。移位运算是一种位级运算,通常归类到逻辑运算中。

是数字左右移而不是小数点左右移

计算机中,数据是定长表示的,移位必然会产生空位,空位补 0 还是补 1,取决于数据是否有符号。通常有符号数的移位称为算术移位,无符号数的移位称为逻辑移位,因此,基本的移位运算有算术左移、算术右移、逻辑左移、逻辑右移4 种类型,通常用 <<_A, >>_A,<<_L, >>_L 表示。如1001 >>_L 2表示1001逻辑右移2位。

逻辑移位运算

算术移位运算

其他移位运算

2.3.4 乘法运算

机器乘法的实现思路是:

(1)乘法运算用循环的加法运算及右移运算实现。

(2)每次相加时,根据乘数当前位的值,确定是加被乘数还是加0。

(3)每次右移时,加法的进位、部分积高位、部分积低位一起右移。

2.3.5 除法运算

与乘法不同,除法运算包含3 个步骤:判断异常,计算结果符号,求商和余数。有两种情况会导致异常发生:除数为0 时称为除零异常,|被除数的高n位| ≥ |除数| 时称为溢出异常。发生异常时除法中止,并发出“除零”或“溢出”异常信号。

类似于机器乘法运算,机器除法运算的实现思路是:

(1)除法运算用循环的减法运算及左移运算实现。

(2)每次相减时,判断是否够减,来确定上商,并计算余数。

(3)每次左移时,余数、被除数低位同时左移。

根据余数计算方法的不同,除法运算有恢复余数法、不恢复余数法两种类型。

恢复余数法的思想是,本轮循环的商为 0 时,立即加上除数来恢复余数,求商操作永远为减去除数。

不恢复余数法的思想是,本轮循环的商为 0 时,恢复余数放在下轮循环中实现,下轮的求商操作变为加上除数;商为 1 时,下轮的求商操作仍为减去除数。 其原理是,下轮循环中,恢复余数应该是 +(除数<<1) = +除数×2,求商操作则变成: +除数×2 - 除数= +除数。

2.4 浮点数的运算

实数可以写成 M\times r^E,浮点表示方法中,浮点数由尾数 M 和阶码 E 组成,基数 r 通常为 2,M常用补码或原码编码的纯小数表示,E 常用移码或补码编码的整数表示。 浮点数的数据类型有单精度和双精度两种。

2.4.1 浮点加减运算

对阶

对阶的目的是使两个浮点数的小数点对齐,即两个浮点数的阶相同。

对阶的规则是小阶对大阶,用大阶作为运算结果的阶,小阶浮点数的尾数右移,右移位数等于两个数的阶差。

尾数加减

对阶后两个数的阶相同,尾数可直接进行加减运算,运算时附加位一同参与。

由于可以通过规格化改变小数点的位置,因此,尾数运算溢出不能算出错,进而常采用双符号位进行运算。

规格化

规格化的目的是使运算结果的精度最大化,即 0.5≤|M|<1。

根据尾数加减的结果,相应的规格化操作为:

(1)当|M|≥1.0时,1次右规,即尾数算术右移1位、阶码加1。

(2)当0.5≤|M|<1.0时,不需要规格化,尾数已是规格化数。

(3)当|M|<0.5时,多次左规,直到|M|≥0.5,即尾数逐次左移、阶码逐次减1。

判断是否为规格化数的方法中,原码尾数的判断条件是最高数值位为 1,补码尾数的条件是最高数值位与符号位相反。

尾数舍入

尾数舍入的目的是减小运算误差,根据运算后附加位的值,来决定尾数的值。 舍入的方法有许多种,常见的有截断法、恒置 1 法、舍入法、查表舍入法 4 种。

(1)截断法:无论附加位的值如何,尾数都不变。

(2)恒置 1 法:无论附加位的值如何,都将尾数的末位真值置为1。

(3)舍入法:当附加位最高位真值为 1 时尾数加1,否则尾数不变。

(4)查表舍入法:用尾数末尾几位及附加位查表,确定采用舍入法还是恒置 1 法。

溢出判断

2.4.2 浮点乘除运算

2.5 十进制数的加减运算

2.6 运算器的组成

2.6.1 ALU的组成

由于所有的算术运算都以加减运算为基础,而加减运算又是通过逻辑运算实现的,因此,算术运算和逻辑运算功能可以用同一部件实现,这个部件被称为算术逻辑单元 ALU。若以 ALU 为核心,加上移位器、寄存器等器件,及相应的控制逻辑,就可以构成实现复杂运算的运算部件,如乘法器、除法器。

ALU 主要完成定点加减法算术运算及基本逻辑运算。因此,ALU 具有两个数据入端、一个数据出端。同时,ALU还应能够输出算术运算结果的状态,如是否为零、是否为负、是否溢出等,以支持关系运算用减法运算及逻辑运算实现。ALU 属于多功能部件,还需设置控制端用来选择功能。

2.6.2 运算器的组织

第 3 章 存储系统

存储器的功能是存放指令和数据,存储器使计算机具有了记忆能力,进而具备自动进行操作的能力。存储器设计中,采用什么存储介质、怎样控制操作过程是一个基本问题;怎样进行结构组织,使存取速度较快、总成本较小是另一个重要问题。

3.1 存储系统概述

3.1.1 存储器的分类

按存储介质分类

存储介质指可用两个稳定的物态来表示二进制0和1的物质或元器件。目前主流的存储介质有半导体器件、磁性材料和光介质材料3种。

半导体存储器利用电平高低表示信息。

磁性材料存储器利用剩磁状态表示信息,有磁芯、磁表面两种类型,磁表面存储器又可分为磁盘、磁带两种。

光介质存储器利用不同物态的反光性表示信息,常见的是光盘。

除半导体存储器为易失性存储器外,其余两类都是非易失性存储器。

按存取方式分类

存取方式指存储器中信息的定位方法及操作方式。按照存取方式,存储器可分为随机存取、顺序存取、直接存取和只读4种类型。

按应用功能分类

按照存储器在计算机中的应用功能,存储器可分为主存储器、辅助存储器、高速缓冲存储器和控制存储器4种类型。

3.1.2 存储器的主要技术指标

存储器的主要技术指标是存储容量、存取速度及传输速度。

3.1.3 层次结构存储系统

3.2 半导体存储技术

3.2.1 静态存储器

3.2.2 动态存储器

3.2.3 半导体只读存储器

3.3 主存储器

3.3.1 主存储器的基本组成

我们知道,主存容量=主存单元长度×主存单元个数。这个主存地址空间是一个线性空间,通常用位或个表示,如32 位空间或 2^{32} 个地址,它限定了主存的最大可寻址空间。

由于主存是 CPU 唯一可以直接访问的存储器,因此,CPU 设计时,访问存储器(访存)时的地址位数、数据位数都需要受计算机结构规定的约束,与实际配置的主存容量无关。从CPU角度看,CPU的可寻址空间的大小等于主存地址空间的大小。

为了保证访问速度,主存通常由 SRAM或 DRAM 芯片组成。由于它们都是易失性存储器,无法解决计算机启动时,最先执行的程序和数据的存储问题,因此,主存空间由只读区域、读写区域组成,分别用 ROM 芯片、SRAM 或 DRAM 芯片实现。计算机启动完成后,系统通常会将 ROM 中的内容复制到 RAM 中,用来提高只读区域的访问速度。

因此,主存由ROM及RAM组成。

3.3.2 主存储器的逻辑设计

3.3.3 主存储器与CPU的连接

3.3.4 提高访存速度的技术

3.4 高速缓冲存储器

3.4.1 Cache的基本原理

3.4.2 Cache的地址映射

3.4.3 Cache的替换算法

3.4.4 Cache的写策略

3.4.5 Pentium的Cache组织

3.5 虚拟存储器

3.5.1 存储管理的相关概念

3.5.2 虚拟存储器的基本原理

虚拟存储器的组成

虚拟存储器(VM)是一个以透明方式为程序提供的、比主存空间大得多的存储空间。通常,将虚拟存储器的存储单元地址称为虚拟地址(虚地址),将虚拟存储器的地址空间称为虚拟地址空间,主存地址相应地称为物理地址(实地址)。

虚拟存储器的基本思想是,借助于辅存来扩充主存的存储空间,并能够按虚拟地址来进行访问。可见,虚拟存储器是用主存与辅存实现的、按虚拟地址访问的存储器模型。

虚拟存储器的工作过程

3.5.3 虚拟存储器的存储原理

3.5.4 页式虚拟存储器的实现

第 4 章 指令系统

4.1 指令系统组成

计算机系统中有多种编程语言,硬件能够直接识别和执行的只有机器语言一种。高级语言程序都要翻译成机器语言程序,才能在计算机硬件上执行。

通常,将硬件能够直接识别和执行的命令称为机器指令,命令内容包括执行的操作及具体的操作数。机器指令是机器语言的基本单位,所有机器指令的集合称为指令系统。可见,指令系统的功能包括了硬件能够实现的所有操作功能。

通常,将表示指令所有信息的编码格式称为指令格式。因此,机器指令的实质是指令功能与指令格式之间的约定。

4.1.1 指令功能

指令功能指机器指令能够实现的操作,操作包含操作类型、操作数类型两个属性。

计算机中,数据的表示方法决定了操作的实现方法,因此,操作是针对具体的操作数类型的,例如,定点、浮点加法是不同的操作,16位、32位定点加法也是不同的操作。

指令的操作数

高级语言中,通常支持整数、浮点数、字符、指针等基本数据类型,以及数组、结构等高级数据类型,整数、浮点数又根据数据长度分为几种数据类型。

指令的操作

不同指令系统所支持的操作类型有所不同,通常包括数据传送、输入/输出、算逻运算、移位运算、浮点运算、十进制运算、转移控制、CPU控制等。

为了便于描述指令功能,本教材借鉴 Intel 80x86汇编语言的部分表示方法,对指令中操作、操作数的表示作如下约定:

(1)第 a 个寄存器用 Ra 表示,寄存器的内容用 (Ra) 表示,如R0、(R0)。

(2)第 b 个存储单元用 M[b] 表示,存储单元的内容也用 M[b] 表示,如 M[1000H]。

(3)指令的功能表示为“目的操作数 \leftarrow 源操作数 1 OP 源操作数 2”,源操作数用存放部件(寄存器或存储单元)的内容表示,目的操作数用存放部件本身表示,如 R2 \leftarrow (R0)+(R1),M[1000H] \leftarrow (R0)+M[1000H]。

(4)指令的操作用 C 语言的运算符表示,如十、一、×、/、&、|、~、^、<<,右移操作略有不同,有 >>_L,>>_A 两种。

4.1.2 指令格式

4.2 操作数的存放方式

4.3 寻址方式

4.3.1 指令寻址方式

4.3.2 数据寻址方式

4.3.3 指令格式分析及其应用

4.4 指令系统举例

4.4.1 MIPS指令系统

4.4.2 Pentium指令系统

4.5 指令系统发展

第 5 章 中央处理器

5.1 CPU的组成与工作流程

5.1.1 CPU的功能

冯·诺依曼计算机采用存储程序工作方式,要求 CPU 循环地执行指令,而每条指令实现的功能都是指令系统中机器指令的功能,指令执行顺序由当前指令的类型决定。可见,CPU的基本任务就是实现存储程序工作方式及指令系统。

顺序型指令主要实现数据操作,转移型指令主要控制执行顺序。具体来说,CPU就有如下6种功能。

(1)指令控制。指控制指令的执行顺序。程序是有序的指令序列,CPU 必须能够按照程序指定顺序、循环地完成指令执行过程(取指令、分析指令及执行指令),下条指令地址在当前指令执行过程中产生。

(2)操作控制。指产生指令执行所需的操作控制信号。

(3)时间控制。指对操作控制信号进行时序控制。指令执行的所有操作都有严格的次序要求,每个操作的时长可能不同,CPU 必须能够控制这些操作控制信号产生的次序及时长。

(4)数据加工。指实现指令约定的数据运算。对指令系统约定的所有运算功能,CPU 都必须提供相应的运算部件来实现。

(5)外部访问。指实现对存储器和 I/O 设备的访问。

(6)异常及中断处理。指实现异常及中断的检测及处理。CPU与 I/O 设备之间通常采用中断方式 I/O,I/O设备随时会提出中断请求,并且指令执行过程中可能会发生异常情况,如除零、访存缺页等,CPU 必须提供相应的硬件,来实现异常及中断的检测与处理。

5.1.2 CPU的组成

基本组成

CPU 的基本功能有指令控制、操作控制、时间控制、数据加工、外部访问、异常及中断处理6大功能,除数据加工、外部访问外,其余功能都由控制器实现。不难想象:

(1)为了实现指令控制,控制器中必须设置用于存放指令地址的程序计数器 PC、用于存放指令内容的指令寄存器 IR,以及用于分析指令的指令译码器 ID。

(2)为了实现操作控制和时间控制,控制器中必须设置能够产生各种时序信号的电路,以及能够产生操作控制信号的电路,操作控制信号是基于时序信号产生的。

(3)为了实现数据加工,必须设置用于完成算术和逻辑运算的 ALU、完成浮点运算的 FPU、用于存放结果的寄存器组、用于存放结果状态的状态寄存器等部件。

(4)为了实现外部访问,必须设置能够进行总线传输控制的总线逻辑电路、与 ALU 等交互的缓冲寄存器,以及实现地址变换的存储器管理单元MMU。

(5)为了实现异常及中断处理,控制器中必须设置用于异常及中断处理的中断机构部件。

因此,CPU 由运算器、总线接口单元 BIU、存储器管理单元 MMU、指令部件、控制单元CU及中断机构 6 个部分组成。

5.1.3 CPU的工作流程

5.1.4 指令的执行过程

5.2 数据通路的组织

5.2.1 数据通路的组成

5.2.2 数据通路的设计方法

5.2.3 单周期数据通路的设计

5.2.4 多周期数据通路的设计

5.3 控制器的组成

5.3.1 控制器的基本结构

5.3.2 时序信号的形成

5.3.3 μOP控制信号的形成

5.4 硬布线控制器的设计

5.4.1 控制单元的设计步骤

5.4.2 单周期控制单元的设计

5.4.3 多周期控制单元的设计

5.5 微程序控制器的设计

5.5.1 微程序控制思想

5.5.2 微程序控制器的组成与工作原理

5.5.3 微指令格式

5.5.4 微程序控制单元的设计

5.6 异常及中断的处理

5.6.1 异常及中断的基本概念

5.6.2 异常及中断的处理过程

5.6.3 支持异常处理的CPU设计

5.7 指令流水线技术

5.7.1 指令流水线概述

5.7.2 指令流水线的冒险处理

5.7.3 指令流水线的设计

5.7.4 指令流水线的并行技术

第 6 章 总线

6.1 总线概述

计算机中的部件互连方式有两种。

一种是分散连接,不同部件间使用单独的信号线连接,其优点是不同部件间可以同时通信,缺点是可扩展性差。

另一种是总线连接,各个部件通过一组公共的信号线连接,其优点是传输控制简单、可扩展性好,缺点是不同部件间只能分时通信,总线传输效率较低。

随着计算机应用的普及,外设的种类和数量越来越多,可扩展性成为计算机系统很重要的特性,因此,总线连接是最常见的部件互连方式。

由于总线的信号线是共用的,任何时刻只能有一个设备发送信号、其他设备接收信号,否则会产生信号冲突,因此,设备的输出信号线需要通过三态门连接到总线,输入信号线可以直接连接总线,如下图所示。

通常,将总线上一对设备之间的一次信息交换过程称为一个总线事务,将发出总线事务请求的设备称为主设备,如 CPU,将响应总线事务 请求的设备称为从设备,如主存、键盘。总线事务总是由主设备发起、从设备响应,总线事务是通过一系列交互的操作来实现的,如 CPU 发送地址及命令,存储器按命令进行读/写操作,然后双方进行数据传送等。

6.1.1 总线的分类

按信号线功能分类

按照信号线的功能,总线可以分为数据总线、地址总线、控制总线三种。

1)数据总线

数据总线用来承载设备间传输的数据内容,是双向传输线,读/写事务的数据传输方向是相反的。数据总线的位数称为数据总线宽度,它决定了可以同时传输的二进制位数,是衡量总线性能的一个重要技术指标,又称为总线宽度。

2)地址总线

地址总线用来指出传输的数据所在的主存单元地址或外设地址,即从设备中数据所在的地址。地址总线是单向传输线,只有主设备才会发出地址信息。地址总线的位数称为地址总线宽度,它决定了可寻址的地址空间大小,如地址线为 32 位时,总线可寻址的地址空间为 2^{32}=4G

3)控制总线

控制总线用来控制传输过程中主/从设备如何使用地址总线和数据总线。由于信息传输是一个交互过程,一部分信号(如传输命令)由主设备发出,另一部分信号(如完成状态)由从设备发出,因此,控制总线的信号线有控制线、状态线两种类型,它们都是单向传输线。常见的控制总线信号线有时钟、存储器读、存储器写、设备就绪、操作完成、总线请求、总线允许等,时钟信号线用于总线操作的同步,总线请求、总线允许信号线用于总线使用权的请求及分配,其余为控制线或状态线。

按连接部件分类

按照总线连接的部件,总线可以分为片内总线、系统总线、通信总线三种。

1)片内总线

指芯片内部的总线,用于连接芯片内部的元器件,如 CPU 数据通路中的总线结构。从信号线的功能来看,片内总线只有数据总线,没有地址总线及控制总线。

2)系统总线

指计算机内部连接 CPU、主存、外设等主要部件的总线。由于这些部件通常都安放在主板或插件板/卡上,故又称为板级总线。系统总线大都由数据总线、地址总线及控制总线组成,如下图所示,图中控制总线用两根单向线分别表示控制线和状态线。 

目前,系统总线大都采用信号线复用方法,来减少信号线的数量。如采用地址/数据线复用时,系统总线由数据总线、控制总线组成,地址信息通过数据总线来传送。

3)通信总线

指连接主机与外设之间、计算机之间的总线,如快速串行通信的 USB 总线等。这类总线涉及许多方面,如设备的类型、距离、速度等,因而总线种类较多。通信总线通常只有数据线和控制线,有时只有数据线,控制信息通过数据线来传送。

系统总线连接计算机内部的主要部件,由于不同部件的速度相差很大,为了提高部件间的传输性能,现代计算机通常采用多总线结构,将不同速度的部件连接到不同总线 上。

例如,总线可以分为 HOST总线和 I/O总线,HOST总线又称为处理器-主存总线或主机总线,只连接CPU、主存等快速部件,速度快、距离短,如 PCI 总线;I/O 总线连接各种中速或慢速设备,速度慢、距离可以较长,如 ISA 总线;I/O 总线通过总线桥与 HOST 总线相连,总线桥的功能类似于网络交换机。

6.1.2 总线的特性

1)物理特性

物理特性又称机械特性,指总线在部件连接时表现出来的特性。如连线类型、连线数量,接插件的形状、尺寸及引脚排列等。从连线类型看,总线有电缆式、主板式、底板式3类;从连线数量看,总线有串行总线、并行总线2种。

2)功能特性

功能特性是指每根信号线的功能。如地址总线用来表示传输的从设备地址,数据总线用来表示传输的数据内容,控制总线用来表示传输的操作命令、操作状态等,控制总线中不同信号线的功能不同。

3)电气特性

电气特性是指每根信号线上的信号传递方向及信号电平有效范围。通常,主设备发出的信号为输出信号(OUT),主设备接收的信号为输入信号(IN)。数据信号和地址信号定义高电平为逻辑 1、低电平为逻辑 0,控制信号有效的电平则没有固定的约定,可以定义为高电平有效(逻辑1),也可以定义为低电平有效。

信号电平的表示方式有单端、差分两种。单端方式用信号线相对于公共地线的电压来表示,如 TTL 电平的接收端用≥2.0V、≤0.8V 分别表示高、低电平。差分方式用两根信号线的电压差来表示,如 USB 总线的接收端用>+200mV、<-200mV分别表示高、低电平。通常,通信总线的信号电平用差分方式表示,其余总线用单端方式表示。

4)时间特性

时间特性又称逻辑特性,指总线传输过程中每一根信号线上的信号在什么时间内有效。所有信号线上的有效信号存在一种时序关系,这种时序关系约定,确保了总线传输的正确进行,又称为传输协议。

6.1.3 总线的性能指标

1)总线宽度

总线宽度指数据总线的位数,它反映了可同时传输的二进制位数,通常用位(bit)表示,如8位、16位等。

2)总线带宽

总线带宽指总线的最大数据传输率,即总线在进行数据传输时,单位时间内最多可传输的数据位数,通常用Mb/s(Mbps)或MB/s(MBps)表示。

总线的数据传输率可表示为:数据传输率=总线宽度×数据传输次数/秒,数据传输次数/秒又称为工作频率。注意,总线带宽的工作频率不考虑总线仲裁、地址传送等非数据传输操作的时间,而总线数据传输率的工作频率考虑总线所有操作的时间。

对于同步总线,总线带宽 B=w×f/m,其中,w 为总线宽度,f 为总线时钟频率,m 为一次数据传输所需的时钟周期数,f/m 表示总线的工作频率。

例6.1 某32位同步总线的时钟频率为33.3MHz,每个时钟周期可传送一次数据,该总线的带宽是多少?若需将总线带宽提高到266MB/s,可以采用哪些实现方法?

解:依题意,总线宽度为32位,该总线的带宽=32bit×33.3MHz/1=133 MB/s。

根据总线带宽公式,将总线带宽提高到266MB/s 的方法有三种,可以将数据总线宽度增加到 64 位,或者将总线时钟频率提高到 66.6MHz,或者在一个时钟周期内传送 2 次数据(如 DDR SDRAM)。

3)总线负载能力

总线负载能力指总线信号的电平保持在有效范围内时,所能连接部件或设备的数量,常用“个”表示。这个指标反映了总线的驱动能力。

6.1.4 总线的操作过程

6.2 总线仲裁

连接到总线的所有设备中,只有主设备才会提出总线请求,而且同时可能有多个总线请求产生,总线仲裁的策略通常是公平策略或优先级策略。 按照总线仲裁器的位置不同,总线仲裁方式有集中式和分布式两种。

6.2.1 集中式仲裁

采用集中式仲裁时,每个主设备与总线仲裁器连接的信号线起码有两根:总线请求线 BR、总线允许线 BG。BR 线表示主设备有/无总线请求,BG 表示主设备是/否拥有总线使用权。常见的集中式仲裁方式有3种。

链式查询方式

总线忙线 BS 表示总线是/否忙(BS=0 表示总线空闲),BR、BS 常采用“线或”方式接收信号,即 BR=\sum BR_iBS=\sum BS_i。为了实现总线的分时共享,主设备 i 应在获得总线使用权时使 BSi=1,在总线传输周期结束时才使 BSi \leftarrow 0,进而仲裁器在总线空闲时开始仲裁。

链式查询方式因主设备采用链式连接而得名,如上图中虚线部分所示,仲裁时需要轮询各个主设备。

链式查询方式的基本思想是,仲裁通过自动轮询各个主设备来实现,有总线请求、被询问的主设备获得总线使用权。仲裁在有总线请求、总线空闲时开始,在总线忙时结束。

假设主设备 i 的输入、输出仲裁线分别为 BGi_{IN}BGi_{OUT},则链式查询仲裁的实现方法是:

BR\cdot \bar{BS}=1 时开始仲裁,操作为 BG \leftarrow 1;仲裁过程中,当 BRi\cdot BGi_{IN}=1 时 BSi \leftarrow 1、BGi_{OUT}\leftarrow 0 ,否则 BSi \leftarrow 0、BGi_{OUT}\leftarrow BGi_{IN} ;

当 BS=1 时结束仲裁,操作为 BG \leftarrow 0。可见,各个主设备在无总线请求时传递仲裁信号,即 BGi_{OUT}= \bar{BRi}\cdot BGi_{IN},以 实现自动轮询。

可见,这种仲裁方式实现的是固定优先级策略,优先级由主设备与总线仲裁器的距离决定。链式查询仲裁方式的特点是,仲裁信号线最少(2 根),但不能保证公平性 (固定优先级策略所致),对电路故障很敏感,容易产生断链现象。 

计数器定时查询方式

与链式查询方式基本相同,不同的是用设备号总线( log_2n 根)代替菊花链连接,以避免断链现象。

计数器定时查询方式也需要轮询主设备,且轮询需要通过多次询问来实现,由于主设备在有总线请求时才有反馈信号(BSi=1),因此,不同次的询问需要定时进行,故得此名。

计数器定时查询方式的基本思想与链式查询基本相同,不同的是轮询方法从自动轮询改为逐次、定时询问。 

独立请求方式

总线状态通过控制总线来表示,而不使用 BS 线。独立请求方式因每个主设备的请求线分别与总线仲裁器连接而得名。

独立请求方式的基本思想是,根据请求引脚的连接次序来进行仲裁,因而无须询问主设备,仲裁结果直接发送到相应的主设备。 

6.2.2 分布式仲裁

分布式仲裁不需要集中式的总线仲裁器,总线仲裁逻辑分散在各个主设备中。每个主设备有自己的仲裁号(相当于ID)和仲裁器,仲裁器通过仲裁总线来进行仲裁。

自举式仲裁

自举式仲裁的基本思想是,主设备用总线请求线表示优先级,各个仲裁器只连接更高优先级的总线请求线,没有接收到总线请求信号时可以获得总线使用权。

自举式仲裁的仲裁总线由 n 根请求线 BR1~BRn、一根总线忙线 BS 组成,每个主设备的总线请求信号连接到不同的请求线上。假设主设备 1 到主设备 n 的优先级递增,则自举式仲裁的请求信号线及仲裁器信号线的连接如下图所示,其中BS=ΣBSi。

竞争式仲裁

竞争式仲裁的基本思想是,主设备用仲裁号表示优先级,各个仲裁器都连接仲裁总线,仲裁时从高位到低位逐位竞争,每位竞争时发送自身的该位仲裁号,并与仲裁总线上的该位仲裁号进行比较,两者不等时竞争失败、退出竞争(不再发送其余仲裁号)。

根据仲裁号的产生方式,竞争式仲裁有并行竞争、串行竞争两种。

6.3 总线定时与传输

6.3.1 总线定时方式

6.3.2 总线传输模式

6.3.3 总线标准

6.4 总线结构与互连

6.4.1 总线结构

6.4.2 总线互连

第 7 章 输入/输出系统

输入/输出系统(以下简称 I/O系统)的任务是实现主机与外设的信息交换,涉及主机与外设的连接、信息交换的传送控制两个方面。

7.1 I/O系统概述

7.1.1 I/O系统的组成

I/O 系统的任务是实现主机(CPU及主存)与外设的信息交换,具体内容涉及主机与外设的连接、I/O 的传送控制。主机与外设的连接指外设如何连接到主机,I/O的传送控制指何时可以传送信息、如何传送。

主机与外设的连接由硬件来实现,I/O 的传送控制需要软件及硬件相互作用,因此,I/O 系统由硬件和软件组成,I/O 硬件负责实现信息传送,I/O 软件负责实现 I/O的传送控制。

I/O 系统的性能通常用响应时间、吞吐率来衡量,响应时间指 I/O 请求从发出到 I/O 操作完成的时间,吞吐率指单位时间内完成 I/O 操作的个数。I/O 通常采用排队模型,因此,响应时间与吞吐率是有矛盾的。I/O 系统的另一个性能指标是 I/O 操作所占 CPU 时间,它反映 I/O 系统对整个计算机性能的影响。

7.1.2 外设与主机的联系

7.1.3 I/O的传送控制方式

7.2 外部设备

7.2.1 输入设备

7.2.2 输出设备

7.2.3 存储设备

7.3 I/O接口

7.3.1 I/O接口的功能

7.3.2 I/O接口的组成

7.3.3 对I/O接口的访问

7.4 程序直接控制I/O方式

7.4.1 程序查询方式的I/O控制流程

7.4.2 程序查询方式的I/O接口组织

7.4.3 直接传送方式的I/O组织

7.5 程序中断I/O方式

7.5.1 中断的概念

中断有多种含义,中断可以指由CPU外部的设备产生的请求事件,也可以指处理事件引起的程序控制流改变。

异常及中断的处理过程包括响应、处理、返回三个环节,其中,响应是由硬件 (CPU 的中断机构)实现的,处理、返回是通过执行程序实现的。对于中断而言,响应、处理、返回常称为中断响应、中断服务、中断返回,由于中断返回是通过执行指令 实现的,因此,中断服务及中断返回通常合称为中断处理。能够产生中断请求的外设 (I/O接口)称为中断源,不同中断请求的中断服务程序有所不同。

7.5.2 中断接口的组织

7.5.3 中断系统的结构

7.5.4 多重中断与中断屏蔽的组织

7.6 DMA方式

中断方式的 I/O 性能比查询方式要好很多,两者实现的都是 CPU-外设间的数据传送,适用于传输速率较低的字符设备。对于快速字符设备及块设备而言,中断方式的 I/O 性能不够理想,适宜使用 DMA方式。

DMA(存储器直接存取)方式指由 DMA 接口来控制外设-主存间传送数据的 I/O 方式,数据传送不通过 CPU。由于是外设(DMA 接口)与主存间的数据传送,DMA 方式可以每个总线周期传送一个数据,比每个指令周期传送一个数据要快得多;由于传送不通过 CPU,DMA 方式可以每次传送一批数据。为了方便应用,DMA 方式每次传送的批量由 CPU 来指定,因此,DMA方式中,CPU干预一次可以传送一批数据,数据传送所占CPU时间很少。

为了提高 DMA 方式下的CPU 工作效率,存储系统应采用层次结构,通过增设 Cache,使 CPU 可以在让出(HOST)总线控制权时,照样可以访问 Cache 来执行程序,而此时 DMA 接口可以占用总线进行外设-主存间的数据传送,实现数据传送与数据加工的并行。

7.6.1 DMA的传送方式

7.6.2 DMA接口的功能与结构

7.6.3 DMA的传送过程

7.6.4 DMA接口的组织

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值