第一章 概论
1.1 电子计算机与存储程序控制
1.1.1 电子计算机的发展
- 公共的:内存,寄存器(内置),都是存储器,都可以进行数值存储
- 私有的:对应soc的控制参数,学习soc的使用,即学习对应各寄存器的用法
{/collapse-item}
1.1.2 存储程序概念
存储程序概念是芬·诺伊曼等人于1945年6月首先提出来的,它可以简要地概括为以下3点:
1.计算机(硬件)由 运算器 , 存储器 , 控制器 , 输入设备 , 输出设备 五大基本部件组成
2.计算机内部采用二进制来表示指令和数据
3.将编好的程序和原始数据事先存入存储器中,然后再启动计算机工作,这就是存储程序的基本含义
存储程序控制
由 冯·诺依曼 提出和实现
70多年来,大部分计算机仍建立再存储程序概念的基础上
通常把符合“存储程序概念”的计算机统称为冯诺依曼型计算机
1.2 计算机的硬件组成
原始冯诺依曼计算机以运算器为中心
现在,转向以存储器为中心
1.2.1 计算机的主要部件
1. 输入设备
键盘,鼠标,扫描仪,摄像头,手写输入板等
辅助存储器(磁盘,磁带)也可以视为输入设备
3. 输出设备
打印机,显示器,绘图仪等
4. 存储器
存储器是用来存放程序和数据的部件,它是一个记忆装置,是计算机能够实现“存储程序控制”的基础
主存储器(主存)
主存储器可由CPU直接访问
存取速度快,但容量较小,一般用来存放当前正在执行的程序和数据
辅助存储器(辅存)
CPU不可直接访问辅存,辅存中的程序和数据在需要时才传送到主存
设置在主机外部,存储容量大,价格较低,存取速度较慢,一般用来存放暂时不参与运行的程序和数据
5. 运算器
运算器是对信息进行处理和运算的部件。经常进行的运算是算术运算和逻辑运算,所以运算器又称为算术逻辑运算部件( Arithmetic and Logical Unit,ALU)。
核心是 加法器 。运算器中还有若干个通用寄存器或累加寄存器,用来暂存操作数并存放运算结果。寄存器的存取速度比存储器的存取速度快得多。
6. 控制器
控制器是整个计算机的指挥中心
从主存中逐条地取出指令进行分析,根据指令的不同来安排操作顺序,向各部件发出相应的操作信号,控制它们执行指令所规定的任务。
控制器中包括一些专用的寄存器。
1.2.2 计算机各大部件之间连接
- 总线结构(小、微型机的典型结构)
总线( Bus)是一组能为多个部件服务的公共信息传送线路
它能分时地发送与接收各部件的信息
最简单的总线结构是单总线结构
- 大、中型计算机的典型结构
分为四级:主机、通道、设备控制器和外部设备
通道是承担I/O操作管理的主要部件,每个通道可以接一台或几台设备控制器
1.2.4 冯·诺依曼结构和哈佛结构的存储器设计思想
- 冯·诺依曼结构
也称普林斯顿结构
是一种传统的存储器设计思想
即指令和数据是不加区别地混合存储在同一个存储器中的,共享数据总线 哈佛结构
指令和数据是完全分开的
至少有两组总线:程序存储器(PM)的数据总线和地址总线混合使用
许多现代微型计算机中的高速缓冲存储器(Cache)采用哈佛结构,将 Cache分为指令 Cache和数据 Cache两个部分
而主存储器采用冯·诺依曼结构
1.3 计算机系统
1.3.1 硬件与软件的关系
除了硬件和软件,还有固件(firmware)
指那些存储在能永久保存信息的器件(如ROM)中的程序,是具有软件功能的硬件
1.3.3 计算机系统的多层次结构
1.4 计算机的工作过程和主要性能指标
1.4.2 计算机的主要性能指标
- 机器字长
由加法器、寄存器的位数决定
一般等于内部寄存器的大小。字长标志着精度,字长越长,计算的精度就越高。
以字节( Byte)为基本单位,字节用大写字母B表示。一个字节等于8位二进制位( bit) - 数据通路宽度
数据总线一次所能并行传送信息的位数,称为数据通路宽度。
它影响到信息的传送能力,从而影响计算机的有效处理速度。 - 主存容量
一个主存储器所能存储的全部信息量称为主存容量。 - 运算速度
计算机的运算速度与许多因素有关,如机器的主频、执行什么样的操作以及主存本身的速度等。
第二章 数据的机器层次表示
除了是2进制的倍数,还是常见计算机的字长的基数,特别是十六进制,综合的缩位效果最好,因此最常用
无符号数/带符号数
无符号:没有符号位
带符号:需要一个字长来表示正/负号
原码表示法(需要带符号数)
正数:最高位(符号位)为0
负数:最高位(符号位)为1
数值部分都相同
X=-0.0110
[X]原 = 1.0110
反码和补码
原码 | 反码 | 补码 |
---|---|---|
001010 | 001010 | 001010 |
101010 | 110101 | 110110 |
机器数的定点表示 & 浮点表示
涉及小数时
根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示
定点数
定点小数 :小数点的位置固定在最高有效数位之前、符号位之后,位置是隐含约定的,小数点并不需要真正地占据一个二进制位
定点整数 :小数点位置隐含固定在最低有效数位之后
浮点数
浮点数是一种用于表示实数的数据格式,它由尾数(Mantissa)和阶码(Exponent)两部分组成。规格化浮点数是为了使浮点数的表示具有唯一性和高效性而采用的一种标准形式。
对于二进制浮点数,规格化的目的是保证尾数最高位为 1(对于原码和补码表示)。例如,在规格化的原码表示中,正数的尾数范围是0.1xxxx(x为 0 或 1),负数的尾数范围是1.1xxxx。
表示范围
规格化浮点数
提高精度:通过规格化,使得尾数部分能够最大限度地利用有效数位来表示数值,从而提高了浮点数的精度。
便于比较和运算:规格化后的浮点数在进行比较大小和算术运算(如加法、减法、乘法、除法)时,更容易实现算法,因为它们具有统一的格式。
原码规格化
正数:0.1xxxx(x为 0 或 1),即尾数最高位为 1。
负数:1.1xxxx,同样尾数最高位为 1。
补码规格化
正数:与原码正数相同,0.1xxxx。
负数:符号位与尾数最高位不同,即1.0xxxx。
浮点数阶码的移码表示法
便于比较大小:移码的大小顺序与真值的大小顺序一致。例如,若x1>x2,则
[x1]移>[x2]移。
这对于浮点数的阶码比较(在对阶操作等过程中)非常方便。
唯一的 0 表示:在移码表示中,0 的表示是唯一的,这与原码和补码中 0 有两种表示方式(正 0 和负 0)不同。
浮点数尾数的基数
浮点数尾数的基数是指在浮点数表示中,尾数部分所采用的进制数。最常见的是二进制(基数为 2),但在一些特殊的计算环境或理论研究中,也可能采用其他进制。
例如,对于一个二进制浮点数N=Mx2^E,这里的 2 就是尾数的基数,M是尾数,E是阶码。
不同基数的特点
二进制(基数为 2)
硬件实现简单:计算机的基本存储和运算单元(如触发器、逻辑门等)天然地适合处理二进制数。在二进制浮点数运算中,乘法和除法等运算可以通过简单的移位和加法操作来实现。
与计算机存储和运算机制契合度高:计算机内部的存储单元(如字节、字等)都是按照二进制进行组织的,所以二进制浮点数能够很好地利用这些存储单元。
其他进制(如十进制等)
在某些特定领域有优势:例如在金融计算等对数字精度和人类可读性要求较高的领域,十进制浮点数可能更合适。因为它可以直接表示人们熟悉的十进制数值,减少了二进制与十进制转换过程中可能出现的精度损失。
基数对浮点数表示范围和精度的影响
表示范围 :基数越大,在相同的位数下,浮点数的表示范围可能越大。例如,比较二进制浮点数和十进制浮点数,在相同的位数分配给阶码和尾数的情况下,十进制浮点数能够表示的数值范围可能更宽。
精度 :精度与基数和尾数的位数有关。在尾数位数固定的情况下,基数越小,精度相对越高。因为较小的基数可以更细致地划分数值区间。
IEEE 754 标准浮点数
IEEE 754 是 电气和电子工程师协会 (IEEE)制定的二进制浮点数算术标准。它规定了浮点数的格式、运算规则以及异常处理等内容,被广泛应用于计算机的浮点数运算。
单精度(32 位)
符号位 (1 位):0 表示正数,1 表示负数。
阶码 (8 位):采用移码表示,偏移量为 127。实际的阶码值需要减去 127 得到真值。
尾数 (23 位):表示小数点后的有效数字,隐含了最高位的 1(除了特殊情况如 0 和非规格化数)。
双精度(64 位)
符号位 (1 位):同单精度。
阶码 (11 位):采用移码表示,偏移量为 1023。
尾数 (52 位):提供更高的精度。
特殊值表示
零 :符号位可以是 0 或 1,阶码全为 0,尾数全为 0,表示正零或负零。
无穷大 :符号位表示正负,阶码全为 1,尾数全为 0,表示正无穷或负无穷。
非规格化数 :阶码全为 0,尾数不为 0,用于表示非常接近 0 的数。
运算规则
IEEE 754 标准规定了浮点数的加、减、乘、除等基本运算规则。在运算过程中,需要考虑对阶、尾数运算、结果规格化和舍入等操作。
对阶 :比较两个浮点数的阶码,通过移动较小阶码的浮点数的尾数,使两个浮点数的阶码相等。
尾数运算 :在对阶后,对尾数进行相应的加、减、乘、除运算。
结果规格化 :将运算后的结果规格化,使其符合 IEEE 754 标准的格式要求。
舍入 :根据一定的舍入规则(如就近舍入、向零舍入等)处理尾数运算后的多余位。
定点,浮点表示法与定点,浮点计算机
1.定点,浮点表示法的区别
(1) 数值的表示范围
假设定点数和浮点数的字长相同,浮点表示法所能表示的数值范围将远远大于定点表示法。
浮点数阶码部分的位数占得越多,可表示的数值范围就越大,但是相应尾数部分的位数将减少,这将使精度下降。因此,阶码和尾数部分各占多少位,必须全面权衡,合理分配。
注意:
● 不管定点数还是浮点数,每个数值都对应于数轴上的一个点。所谓数的表示范围,实际上指的只是数的上、下限,它们之间是一些不连续的点,而不是一段连续的区间。
·对于定点整数而言,各个点在数轴上的分布是均匀的;而对于浮点数而言,各个点在数轴上的分布是不均匀的,越靠近数轴的原点,两个相邻数之间的距离就越近。
(2) 精度
所谓精度是指一个数所含有效数值位的位数。一般来说,机器字长越长,它所表示的数的有效位数就越多,精度就越高。对于字长相同的定点数与浮点数来说,浮点数虽然扩大了数的表示范围,但这正是以降低精度为代价的,也就是数轴上各点的排列更稀疏了。
(3) 数的运算
浮点数包括阶码和尾数两部分,运算时不仅要做尾数的运算,还要做阶码的运算,而且运算结果要求规格化。因此,浮点运算要比定点运算复杂,关于具体运算的讨论将在第4章中进行。
(4) 溢出处理
在定点运算时,当运算结果超出数的表示范围时,就发生溢出;而在浮点运算时,运算结果超出尾数的表示范围却并不一定溢出,只有当阶码也超出所能表示的范围时,才发生溢出。
2.定点机与浮点机
(一) 定点机
运算特点 :定点计算机主要用于处理定点数。在定点机中,所有的运算(加、减、乘、除等)都是基于定点数的运算规则进行的。例如,定点加法需要考虑溢出问题,当两个定点数相加的结果超出了定点数的表示范围时,就会发生溢出
应用场景 :适用于对数据范围和精度要求相对固定,且主要涉及整数运算的场合。如简单的计数器、控制系统中的某些固定参数计算等
(二) 浮点机
运算特点 :浮点计算机专门用于处理浮点数。它能够自动地处理浮点数的对阶、尾数运算、规格化和舍入等复杂操作。浮点运算比定点运算复杂,因为它需要考虑更多的因素,如阶码和尾数的不同处理方式。
应用场景 :广泛应用于科学计算(如物理、化学中的数值模拟)、图形图像处理(如 3D 建模中的坐标变换)等需要处理大范围数值和高精度要求的领域
非数值数据的表示
字符和字符串的表示
(一) 字符编码
ASCII 码 :是最基本的字符编码标准,使用 7 位二进制数表示 128 个字符,包括数字、英文字母、标点符号和一些控制字符。例如,字符‘A’的 ASCII 码值是 65(二进制为 1000001)。
扩展 ASCII 码:使用 8 位二进制数,在 ASCII 码基础上增加了一些特殊字符和符号,可表示 256 个字符。
(二) 字符串表示
字符串是由多个字符组成的序列。在计算机中,通常以字符编码的形式依次存储字符。例如,在 C 语言中,字符串以 '\0'(ASCII 码值为 0)作为结束标志,便于程序对字符串进行处理。
汉字的表示
(一) 汉字编码类型
输入码 :用于汉字输入,如拼音码、五笔字型等。不同的输入方法有不同的编码规则,主要是为了方便用户根据自己熟悉的方式输入汉字。
国标码:是中华人民共和国国家标准汉字信息交换用编码,将汉字分为 94 个区,每个区 94 个位,用两个字节表示一个汉字,其中高字节表示区号,低字节表示位号。
机内码 :是计算机内部存储和处理汉字的编码。为了与 ASCII 码区分,通常将国标码的每个字节的最高位置为 1 形成机内码。
(二) 汉字字库
汉字字库是存储汉字字形信息的数据库。有点阵字库和矢量字库等。点阵字库用点阵的方式描述汉字的形状,不同字号的汉字需要不同的点阵来表示;矢量字库则通过数学公式描述汉字的轮廓,可实现无级缩放。
统一代码
Unicode :是一种国际标准字符编码方案,旨在涵盖世界上所有的字符,包括各种语言的文字、符号等。它为每个字符分配一个唯一的代码点。例如,常用汉字在 Unicode 中有对应的代码范围。
UTF - 8、UTF - 16 等编码格式 :UTF - 8 是一种变长的 Unicode 编码方式,它可以用 1 到 4 个字节表示一个字符,对于 ASCII 字符,它与 ASCII 码兼容,只用 1 个字节。UTF - 16 则通常用 2 个字节或 4 个字节表示字符,适用于对内存要求较高但处理效率要求也高的环境。
十进制数和数串的表示
十进制数的编码
BCD 码 (Binary - Coded Decimal)
8421 BCD 码 :是最常用的一种 BCD 码。它用 4 位二进制数表示一位十进制数,每位的权值从高到低分别为 8、4、2、1。例如,十进制数 9 的 8421 BCD 码是 1001。这种编码方式简单直观,便于十进制数和二进制数之间的转换。
其他 BCD 码 :还有 2421 BCD 码、余 3 BCD 码等。2421 BCD 码每位的权值为 2、4、2、1,余 3 BCD 码是在 8421 BCD 码的基础上加上 3(0011)得到的,它们各有特点,适用于不同的应用场景。
十进制数串
非压缩十进制数串 :每个字节只存放一位十进制数的 ASCII 码,字节的高 4 位通常为 0。例如,十进制数 123 在非压缩十进制数串中表示为 31H、32H、33H(H 表示十六进制)。这种表示方式占用空间较大,但处理方便。
压缩十进制数串 :一个字节存放两位十进制数,用 BCD 码表示。例如,十进制数 12 在压缩十进制数串中用一个字节表示,其值为 12H。压缩十进制数串节省存储空间,但处理相对复杂一些
不同类型的数据表示举例
C语言中的数据表示
(一) 基本数据类型
整型 :包括短整型(short)、整型(int)、长整型(long)等,它们在不同的编译器和计算机系统中占用的字节数可能不同。例如,在 16 位系统中,short 通常占用 2 个字节,int 可能占用 2 个字节;在 32 位系统中,int 一般占用 4 个字节。整型数据以二进制补码形式存储。
浮点型 :有单精度浮点型(float)和双精度浮点型(double)。float 通常遵循 IEEE 754 标准的 32 位单精度浮点数格式,double 则是 64 位双精度浮点数格式。
字符型:用 char 类型表示,占用 1 个字节,存储字符的 ASCII 码值。
(二) 数据存储方式
在 C 语言中,变量在内存中的存储是按照其数据类型所规定的格式进行的。例如,对于整型数组,数组元素在内存中是连续存储的,并且根据字节顺序(大端序或小端序)存储数据
现代微型计算机系统中的数据表示
(一) 内存中的数据存储
内存以字节为基本存储单元,数据在内存中的地址是字节地址。不同类型的数据根据其大小和对齐要求存储在内存中。例如,对于 32 位的数据(如 int 类型),在 32 位系统中通常按 4 字节对齐存储,以提高数据访问效率。
数据在内存中的存储顺序可能因系统而异。大端序(Big - Endian)是指数据的高位字节存于低地址,低位字节存于高地址;小端序(Little - Endian)则相反。
(二) 数据在磁盘等存储介质中的表示
在磁盘存储中,数据以扇区、磁道等为单位进行组织。文件系统将文件中的数据按照一定的格式存储在磁盘上,可能涉及到数据的分块、索引等。例如,FAT 文件系统和 NTFS 文件系统有不同的数据存储和管理方式。
数据校验码
奇偶校验码
(一) 原理
奇偶校验是一种简单的数据校验方法。它通过在数据位后添加一位校验位,使整个数据(包括数据位和校验位)中 1 的个数为奇数(奇校验)或偶数(偶校验)。例如,对于数据 1010,若采用偶校验,则校验位为 0,因为原数据中 1 的个数为 2,是偶数;若采用奇校验,则校验位为 1。
(二) 特点
简单易行:实现成本低,只需增加一位校验位。但只能检测出奇数个错误,对于偶数个错误无法检测。
汉明校验码
(一) 原理
汉明校验码是一种能够纠正一位错误的校验码。它通过在数据位中插入多个校验位,并根据特定的算法确定校验位的值。这些校验位与数据位之间存在一定的关系,使得在接收端可以通过计算校验位和数据位的关系来检测和纠正错误。例如,对于 7 位数据,可能需要插入 4 位校验位。
(二) 特点
可纠错:相比奇偶校验码,汉明校验码不仅能检测错误,还能纠正一位错误,提高了数据传输的可靠性,但增加了数据的冗余度和计算复杂度。
循环冗余校验码
(一) 原理
CRC 校验是基于多项式除法的一种校验方法。发送方将待发送的数据看成一个多项式的系数,用一个生成多项式去除该多项式,所得的余数作为校验码附加在数据后面一起发送。接收方用相同的生成多项式去除接收到的数据(包括数据和校验码),若余数为 0,则认为数据正确,否则数据在传输过程中出现错误。例如,常用的 CRC - 16 生成多项式可以用于对数据进行 16 位的 CRC 校验。
(二) 特点
高可靠性:CRC 校验具有很强的检错能力,能检测出多位错误、突发错误等,广泛应用于数据存储和传输领域,但计算过程相对复杂,需要硬件或软件实现 CRC 计算模块。
第三章 指令系统
指令格式
机器指令的基本格式
组成部分 :机器指令一般由操作码和地址码两部分组成。操作码规定了指令要执行的操作类型,如加法、减法、数据传送等。地址码则指出操作数的地址或操作数本身(立即数),也可能包含下一条指令的地址信息。
格式示例 :不同类型的计算机可能有不同的指令格式,常见的有定长指令格式和变长指令格式。定长指令格式的每条指令长度固定,便于硬件设计和指令的读取与译码;变长指令格式则能更灵活地利用存储空间,但硬件实现相对复杂。
地址码结构
零地址指令 :地址码部分为空,操作数通常隐含在累加器或堆栈中。例如,某些堆栈操作指令,操作数是栈顶元素,不需要额外的地址信息。
一地址指令 :只有一个地址码,它既可以是源操作数地址,也可以是目的操作数地址,另一个操作数可能隐含在累加器中。
二地址指令 :有两个地址码,分别表示源操作数地址和目的操作数地址。这种指令格式在很多计算机中广泛应用,如常见的算术运算和逻辑运算指令。
三地址指令 :包含三个地址码,分别指定两个源操作数地址和一个目的操作数地址,使指令更加灵活,但会增加指令的长度。
指令的操作码
定长操作码 :操作码的长度固定,这种方式简单,但指令集的扩展性较差。例如,如果操作码长度为 4 位,则最多只能表示 16 种不同的操作。
变长操作码 :操作码长度可变,可以根据指令类型灵活分配。例如,对于一些简单的指令可以使用较短的操作码,对于复杂或功能特殊的指令使用较长的操作码,有利于扩展指令系统,但译码过程相对复杂。
寻址技术
编址方式
字编址 :以字(通常是计算机处理的基本数据单位,如 16 位、32 位或 64 位)为单位对内存进行编址。每个字有一个唯一的地址,这种方式适用于处理数据字长固定的情况,可提高数据访问效率。
字节编址 :以字节为单位对内存进行编址,每个字节都有一个地址。字节编址通用性强,能方便地处理各种长度的数据,但在访问字数据时可能需要进行字节对齐操作。
指令寻址和数据寻址
指令寻址 :是指确定下一条要执行的指令的地址。常见的指令寻址方式有顺序寻址和跳跃寻址。顺序寻址是按照指令在内存中的顺序依次执行,下一条指令的地址是当前指令地址加上当前指令的长度;跳跃寻址则通过转移指令改变指令执行的顺序,可实现分支、循环等程序结构。
数据寻址 :是指确定操作数的地址。不同的数据寻址方式决定了操作数在内存中的位置获取方法,对于提高程序的执行效率和灵活性至关重要。
基本的数据寻址方式
立即寻址 :操作数直接包含在指令中,作为指令的一部分。这种寻址方式速度快,因为不需要访问内存获取操作数,但操作数的大小受到指令长度的限制。
直接寻址 :指令的地址码部分直接给出操作数在内存中的地址。其优点是简单直接,但地址空间有限,且修改操作数地址需要修改指令。
间接寻址 :指令的地址码部分给出的是操作数地址的地址。通过访问内存中指定的地址来获取真正的操作数地址,增加了寻址的灵活性,但访问速度相对较慢,且可能需要多次访存。
寄存器寻址 :操作数存放在寄存器中,指令的地址码部分指定寄存器编号。这种方式访问速度快,因为寄存器在 CPU 内部,数据传输延迟小。
寄存器间接寻址 :指令中指定的寄存器内容是操作数的地址,结合了寄存器寻址和间接寻址的特点,既有较快的访问速度,又有一定的灵活性。
变型或组合寻址方式
相对寻址 :以程序计数器(PC)的内容为基地址,加上指令中给出的位移量形成操作数的地址。常用于实现程序的相对转移,可使程序在内存中的重定位更加方便。
基址寻址 :以基址寄存器的内容为基地址,加上指令中给出的偏移量来确定操作数地址。基址寄存器的内容可以在程序执行过程中修改,适用于处理不同大小的数据结构或数组。
变址寻址 :以变址寄存器的内容和指令中给出的偏移量相加得到操作数地址。变址寄存器的值通常在程序执行过程中动态变化,常用于访问数组元素,通过改变变址寄存器的值可以方便地遍历数组。
复合寻址方式 :如基址加变址寻址,将基址寻址和变址寻址相结合,通过基址寄存器、变址寄存器和偏移量共同确定操作数地址,提供了更高的寻址灵活性,常用于处理多维数组等复杂数据结构。
堆栈与堆栈操作
堆栈结构
堆栈是一种特殊的数据存储结构,按照 后进先出(LIFO) 的原则存储数据。它可以用硬件寄存器实现(硬堆栈),也可以在内存中开辟一段区域实现(软堆栈)。
栈顶指针:用于指示堆栈中当前的栈顶位置。在数据入栈和出栈操作时,栈顶指针会相应地移动。
堆栈操作
入栈(PUSH)操作:将数据压入堆栈顶部,栈顶指针减(对于栈顶向低地址方向增长的堆栈)或加(对于栈顶向高地址方向增长的堆栈),使新数据成为栈顶元素。
出栈(POP)操作:将栈顶元素弹出堆栈,栈顶指针相应地加或减,栈顶下一个元素成为新的栈顶。
应用场景:堆栈在程序调用和返回机制、中断处理、表达式求值等方面有广泛应用。例如,在函数调用时,将返回地址、参数等信息压入堆栈,函数返回时从堆栈中弹出这些信息。
指令类型
数据传送类指令
功能:用于在寄存器、内存和 I/O 设备之间传送数据。常见的数据传送指令包括将内存数据传送到寄存器(如 MOV 指令)、寄存器之间的数据传送、将寄存器数据传送到内存等。
特点:这类指令是程序中最基本的指令之一,数据传送的方向、源和目的操作数的类型和寻址方式多种多样,以满足不同的编程需求。
运算类指令
算术运算指令 :包括加法、减法、乘法、除法等基本算术运算,以及求补、自增、自减等相关运算指令。算术运算指令的操作数可以是整数、浮点数等不同类型的数据,并且需要考虑运算结果的溢出和进位等情况。
逻辑运算指令 :执行逻辑与、逻辑或、逻辑非、逻辑异或等逻辑操作,常用于对数据的位操作,如设置或清除数据中的某些位、数据的加密和解密等。
移位运算指令 :有算术移位、逻辑移位和循环移位等类型。算术移位用于对有符号数进行乘以或除以 2 的幂次方的运算,逻辑移位用于无符号数的位操作,循环移位则将移出的数据位重新移回数据的另一端。
程序控制类指令
无条件转移指令 :使程序无条件地跳转到指定的地址继续执行,可用于实现程序的长跳转、函数调用后的返回等功能。
条件转移指令 :根据条件码(如标志寄存器中的进位标志、零标志、正负标志等)的值来决定是否进行跳转。常用于实现分支结构,如 if - else 语句、switch 语句等在汇编语言中的实现。
循环控制指令 :专门用于实现循环结构,可指定循环的条件、循环次数等,如某些计算机中的 LOOP 指令,通过递减计数器并根据计数器的值和其他条件判断是否继续循环。
输入输出类指令
功能:用于实现 CPU 与外部设备(如键盘、显示器、磁盘等)之间的数据传输。输入指令将外部设备的数据传送到 CPU 或内存,输出指令则将 CPU 或内存中的数据传送到外部设备。
特点:输入输出指令的实现方式与计算机的 I/O 接口和设备的特性密切相关,可能涉及到直接内存访问(DMA)、中断驱动 I/O 等不同的 I/O 控制方式。
80x86 指令系统举例
80x86 指令系统是复杂指令集计算机(CISC)的典型代表,具有丰富的指令类型和寻址方式。例如,它有多种数据传送指令、复杂的算术和逻辑运算指令、功能强大的程序控制指令以及专门用于处理内存分段和保护模式的指令。
指令示例:如 MOV 指令用于数据传送,ADD 指令用于加法运算,JMP 指令用于无条件转移等。这些指令在不同的寻址方式下可以实现复杂的程序功能,同时 80x86 指令系统还在不断发展和扩展。
指令系统的发展
x86架构的扩展指令集
MMX 指令集 :主要用于多媒体数据处理,如音频、视频数据的处理。它可以对多个数据同时进行相同的操作,提高了多媒体处理的效率,通过对整数数据的并行处理来加速多媒体应用中的计算。
SSE 指令集 :是一种流式单指令多数据扩展指令集,支持对单精度浮点数的并行处理,在图形处理、3D 游戏等对浮点数运算要求较高的领域有广泛应用,可提高数据处理速度和精度。
AVX 指令集 :是对 SSE 指令集的进一步扩展,增加了向量寄存器的宽度和操作数的数量,能更高效地处理向量数据,进一步提升了多媒体、科学计算等领域的性能。
从复杂指令系统到精简指令系统
复杂指令系统(CISC)特点 :指令集庞大、复杂,一条指令可以完成多个操作,指令长度和执行时间差异较大。优点是编程容易,对于高级语言的支持较好;缺点是硬件设计复杂,指令执行效率在某些情况下较低。
精简指令系统(RISC)特点 :指令集精简,指令长度固定,格式简单,大多为单周期指令。RISC 强调指令的简单性和执行效率,通过优化编译器和硬件设计,使大部分指令在一个时钟周期内完成,虽然单个指令功能相对简单,但通过组合可以完成复杂的任务。
VLIW 和 EPIC
VLIW(超长指令字) :将多条指令组合成一条超长指令,这些指令在一个时钟周期内同时执行,通过编译器对指令进行调度和优化,充分利用处理器的资源。但 VLIW 对编译器的要求很高,需要编译器能够准确地预测指令之间的并行性。
EPIC(显式并行指令计算) :与 VLIW 类似,也是一种并行指令处理技术。它在指令中显式地指定指令的并行性,编译器在编译过程中根据程序的逻辑和数据相关性对指令进行分组和调度,使处理器能够高效地执行并行指令,提高计算性能。
第四章 数值的机器运算
4.1 基本算术运算的实现
4.1.1 加法器
半加器 :实现两个一位二进制数相加,输出本位和与向高位的进位。逻辑表达式为:和 = A⊕B,进位 = A∧B(其中 A、B 为输入的两个一位二进制数,⊕表示异或运算,∧表示与运算)。
全加器 :考虑了低位进位的情况,实现三个一位二进制数(本位两个数及低位进位)相加。逻辑表达式为:和 = A⊕B⊕Cin,进位 = (A∧B)∨(A∧Cin)∨(B∧Cin)(其中 Cin 为低位进位)。
多位加法器 :由多个全加器级联组成,可实现多位二进制数的加法运算。常见的有串行进位加法器(进位依次传递,速度较慢)和超前进位加法器(通过提前计算进位,提高运算速度)。
4.1.2 进位的产生和传递
进位产生函数 :对于全加器,若输入的两个本位二进制数 A、B 都为 1,则会产生进位,用 G = A∧B 表示(G 为进位产生函数)。
进位传递函数 :若本位的一个输入与低位进位 Cin 能产生向高位的进位,则用 P = A⊕B 表示进位传递函数。因为当 P 为 1 时,低位进位 Cin 能通过本位传递到高位。
串行进位方式 :在串行进位加法器中,进位依次从低位向高位传递,下一位的进位取决于本位的进位产生函数和进位传递函数以及低位的进位情况。例如,第 i 位的进位 Ci = Gi + PiCi - 1(其中 Gi 为第 i 位的进位产生函数,Pi 为第 i 位的进位传递函数,Ci - 1 为第 i - 1 位的进位)。
超前进位方式 :通过逻辑电路提前计算出各位的进位,不依赖于低位进位的依次传递,从而大大提高加法运算速度。例如,对于四位超前进位加法器,可根据输入的 A、B 和初始进位 Cin 直接计算出各位的进位,然后进行本位和的计算。
4.2 定点加减运算
4.2.1 原码加减运算
规则 :原码表示的两个数进行加减运算时,首先要判断两数的符号。若两数符号相同,则进行加法运算,结果的符号与原数相同;若两数符号不同,则进行减法运算,此时要先比较两数绝对值大小,用绝对值大的数减去绝对值小的数,结果的符号取绝对值大的数的符号。
示例 :设 A = +0.1011(原码),B = -0.0101(原码),因为两数符号不同,先比较绝对值,|A| > |B|,则运算为 | A| - |B| = 0.1011 - 0.0101 = 0.0910,结果的符号取 A 的符号,即 + 0.0910(原码)。
4.2.2 补码加减运算
规则 :补码的加减运算可以统一用加法来实现,即 [A] 补 + [B] 补 = [A + B] 补。在运算时,将参与运算的数都用补码表示,然后直接进行加法运算,得到的结果就是和的补码。
示例 :设 A = +0.1011(补码),B = -0.0101(补码),[A] 补 = 0.1011,[B] 补 = 1.1011,[A] 补 + [B] 补 = 0.1011 + 1.1011 = 10.0110,由于结果的最高位产生了进位,此进位在补码运算中可自动舍弃,所以最终结果为 0.0110(补码),对应的真值为 -0.1010。
4.2.3 补码的溢出判断与检测方法
溢出概念 :在补码运算中,当运算结果超出了机器所能表示的范围时,就会发生溢出。溢出会导致结果错误,所以需要进行判断和检测。
检测方法 :
单符号位法 :通过观察运算结果的符号位与参与运算的两个数的符号位来判断。若两个正数相加结果为负,或两个负数相加结果为正,则发生溢出。例如,设 A = +0.1100(补码),B = +0.1000(补码),[A] 补 + [B] 补 = 0.1100 + 0.1000 = 1.0100,两个正数相加结果为负,说明发生了溢出。
双符号位法 :也叫变形补码法,采用两个符号位来表示一个数的补码。正常情况下,两个符号位相同,若运算结果的两个符号位不同,则发生溢出。例如,设 A = +0.1100(补码),B = +0.1000(补码),用双符号位表示 [A] 补 = 00.1100,[B] 补 = 00.1000,[A] 补 + [B] 补 = 00.1100 + 00.1000 = 01.0100,结果的两个符号位不同,发生溢出。
4.2.4 补码定点加减运算的实现
硬件实现 :一般通过加法器来实现补码的定点加减运算。将参与运算的数用补码表示后,输入到加法器中进行加法操作,同时根据溢出判断方法对运算结果进行溢出检测,若发生溢出则进行相应处理(如报错或采取特殊的修正措施)。
4.3.1 带符号数的移位操作
算术移位 :
左移 :对于补码表示的带符号数,算术左移时,符号位保持不变,低位依次向高位移动,高位舍弃。每左移一位,相当于将原数乘以 2(在未发生溢出的情况下)。例如,设 A = +0.1010(补码),左移一位后变为 +0.0100(补码),相当于 A 的值乘以 2。
右移 :算术右移时,符号位保持不变,高位依次向低位移动,低位舍弃。每右移一位,相当于将原数除以 2(在未发生溢出的情况下)。例如,设 A = +0.1010(补码),右移一位后变为 +0.0101(补码),相当于 A 的值除以 2。
逻辑移位 :不考虑符号位,对整个二进制数进行移位操作。左移时,低位补 0,高位舍弃;右移时,高位补 0,低位舍弃。常用于对无符号数的操作或对数据进行位处理。
4.4 定点乘法运算
4.4.1 原码一位乘法
规则 :原码一位乘法是模拟手工乘法运算过程。设被乘数为 A,乘数为 B,乘积为 P。运算时,先将被乘数和乘数都用原码表示,然后从乘数的最低位开始,若乘数的某一位为 1,则将被乘数加到部分积上;若为 0,则不加。每进行一次这样的操作,部分积就向右移一位,直到乘数的所有位都处理完。最后,乘积的符号由被乘数和乘数的符号按异或运算确定。
示例 :设 A = +0.1011(原码),B = +0.0101(原码),先确定乘积符号为 +,然后按上述规则进行运算,经过一系列步骤后得到部分积逐步变化的情况,最终得到乘积为 +0.00110111(原码)。
4.4.2 补码一位乘法
规则 :补码一位乘法也有其特定的运算规则。与原码一位乘法不同的是,它是基于补码的运算特点进行的。运算时,要先将被乘数和乘数都用补码表示,然后根据乘数的最低位以及被乘数的补码等情况进行相应的加法和移位操作,同时还要考虑部分积的符号等问题。
示例 :设 A = +0.1011(补码),B = +0.0101(补码),按照补码一位乘法规则进行运算,通过一系列步骤得到最终的乘积为 +0.00110111(补码),对应的真值为 +0.00110111。
4.4.3 补码两位乘法
规则 :补码两位乘法是在补码一位乘法基础上发展而来的,它每次处理乘数的两位,根据这两位的不同组合情况(00、01、10、11)以及被乘数的补码等情况进行相应的加法和移位操作,从而提高乘法运算的速度。
示例 :设 A = +0.1011(补码),B = +0.0101(补码),采用补码两位乘法进行运算,按照其规则进行一系列操作后得到最终的乘积,其运算速度相对补码一位乘法有所提高。
4.4.4 阵列乘法器
原理 :阵列乘法器是一种基于硬件电路的乘法实现方式。它通过将乘法运算分解为多个加法和移位操作,并利用多个全加器等电路元件按照一定的阵列布局排列,从而实现快速的乘法运算。例如,一个简单的 4×4 阵列乘法器可以将两个 4 位二进制数相乘,通过阵列中的全加器等元件快速得到乘积结果。
特点 :阵列乘法器的优点是运算速度快,因为它采用并行处理的方式,同时处理多个加法和移位操作。缺点是硬件成本较高,需要较多的电路元件来构建阵列。
4.5.1 原码除法运算
规则 :原码除法运算模拟手工除法过程。设被除数为 A,除数为 B,商为 Q,余数为 R。运算时,先将被除数和除数都用原码表示,然后从被除数的最高位开始,若被除数的某一位与除数比较,够除(即被除数的这一位及以后几位组成的数大于等于除数),则商为 1,并将除数从被除数中减去;若不够除,则商为 0。每进行一次这样的操作,被除数就向左移一位,直到被除数的所有位都处理完。最后,商的符号由被除数和除数的符号按异或运算确定,余数的符号与被除数的符号相同。
示例 :设 A = +0.1011(原码),B = +0.0101(原码),按照上述规则进行运算,经过一系列步骤后得到商为 +0.1001(原码),余数为 +0.0001(原码)。
4.5.2 补码除法运算
规则 :补码除法运算也是基于补码的运算特点进行的。与原码除法运算不同的是,它在运算过程中要考虑补码的表示形式、进位等情况。运算时,先将被除数和除数都用补码表示,然后根据被除数的某一位与除数的比较情况以及补码的相关规则进行相应的加法、减法和移位操作,同时还要考虑商的符号、余数的符号等问题。
示例 :设 A = +0.1011(补码),B = +0.0101(补码),按照补码除法运算规则进行运算,经过一系列步骤后得到商为 +0.1001(补码),余数为 +0.0001(补码),对应的真值为 +0.1001 和 +0.0001。
4.5.3 阵列除法器
原理 :阵列除法器与阵列乘法器类似,是一种基于硬件电路的除法实现方式。它通过将除法运算分解为多个加法、减法和移位操作,并利用多个全加器等电路元件按照一定的阵列布局排列,从而实现快速的除法运算。例如,一个简单的 4×4 阵列除法器可以将两个 4 位二进制数相除,通过阵列中的全加器等元件快速得到商和余数结果。
特点 :阵列除法器的优点是运算速度快,因为它采用并行处理的方式,同时处理多个加法、减法和移位操作。缺点是硬件成本较高,需要较多的电路元件来构建阵列。
4.6 规格化浮点运算
4.6.1 浮点加减运算
步骤 :
对阶 :比较参与运算的两个浮点数的阶码,通过移动较小阶码的浮点数的尾数,使两个浮点数的阶码相等。例如,设 A = M1×2^E1,B = M2×2^E2,若 E1 > E2,则将 B 的尾数 M2 向右移(E1 - E2)位,同时将 B 的阶码 E2 调整为 E1;若 E1 < E2,则将 A 的尾数 M1 向右移(E2 - E1)位,同时将 A 的阶码 E1 调整为 E2。
尾数运算 :在对阶后,对两个浮点数的尾数进行相应的加减运算。若采用补码表示尾数,则按补码加减运算规则进行;若采用原码表示尾数,则按原码加减运算规则进行。
结果规格化 :将运算后的结果尾数进行规格化处理,使其符合规格化浮点数的要求。例如,对于二进制浮点数,若尾数最高位不是 1(对于原码和补码表示),则需要进行相应的移位操作使其最高位为 1。
舍入处理 :根据一定的舍入规则(如就近舍入、向零舍入等)对尾数运算后的多余位进行处理,得到最终的浮点运算结果。
4.6.2 浮点乘除运算
步骤 :
阶码运算 :在进行浮点乘除运算时,先对两个浮点数的阶码进行相应的运算。对于乘法,阶码相加;对于除法,阶码相减。例如,设 A = M1×2^E1,B = M2×2^E2,若进行乘法运算,则新的阶码为 E1 + E2;若进行除法运算,则新的阶码为 E1 - E2。
尾数运算 :同时对两个浮点数的尾数进行相应的乘除运算。若采用补码表示尾数,则按补码乘除运算规则进行;若采用原码表示尾数,则按原码乘除运算规则进行。
结果规格化 :将运算后的结果尾数进行规格化处理,使其符合规格化浮点数的要求。例如,对于二进制浮点数,若尾数最高位不是 1(对于原码和补码表示),则需要进行相应的移位操作使其最高位为 1。
舍入处理 :根据一定的舍入规则(如就近舍入、向零舍入等)对尾数运算后的多余位进行处理,得到最终的浮点运算结果
4.6.3 浮点运算器的实现
硬件组成 :浮点运算器通常由浮点加法器、浮点乘法器、浮点除法器、阶码运算部件、尾数运算部件、舍入部件等组成。这些部件协同工作,完成浮点运算的各项任务,如对阶、尾数运算、结果规格化和舍入等。
实现方式 :浮点运算器的实现方式有多种,常见的有采用专用的浮点运算芯片(如早期的一些计算机系统),或在 CPU 内部集成浮点运算功能(如现代大多数计算机系统)。在实现过程中,要考虑运算速度、精度、硬件成本等因素。
4.7 十进制整数的加法运算
4.7.1 一位十进制加法运算
规则 :一位十进制加法运算通常采用 BCD 码(Binary - Coded Decimal)进行。先将十进制数用 BCD 码表示,然后按照 BCD 码的加法规则进行运算。例如,对于 8421 BCD 码,两个一位十进制数相加时,若结果大于 9,则需要进行调整,因为 8421 BCD 码用 4 位二进制数表示一位十进制数,正常情况下结果应在 0 - 9 之间。若结果大于 9,则要加上 6(0110)进行调整,使其符合 BCD 码的表示要求。
示例 :设用 8421 BCD 码表示的两个一位十进制数分别为 3(0011)和 5(0011),相加后得到 0110,大于 9,所以要加上 6(0110),得到 1000,即十进制数 8 的 8421 BCD 码。
4.7.2 十进制加法器
原理 :十进制加法器用于实现十进制数的加法运算。通常基于 BCD 码实现,其核心是对每一位十进制数(以 BCD 码形式)进行加法操作并处理进位和调整。它可以由多个一位十进制加法电路组成,每个电路负责处理一位数字的加法。
实现方式 :一种常见的实现方式是使用 4 位二进制加法器来实现一位 BCD 码加法。当两个 BCD 码相加结果大于 9(1001)或产生进位时,需要进行加 6(0110)调整。例如,对于两个一位 BCD 码表示的十进制数 3(0011)和 7(0111)相加,结果为 1010,大于 9,此时需要加 6 调整为 1100(即十进制 12 的 BCD 码形式)。在多位十进制加法中,这些一位加法器级联,低位向高位产生进位,同时每一位都进行相应的调整操作。
4.7.3 多位十进制加法
运算步骤 :
逐位相加 :将多个十进制数用 BCD 码表示后,从最低位开始逐位相加。每一位的加法操作遵循一位十进制加法规则,即使用十进制加法器进行计算。
进位处理 :在相加过程中,若某一位产生进位,则将进位传递到下一位。与二进制加法类似,但这里的进位是在十进制加法的情境下,每一位是 BCD 码表示。
调整操作 :每一位相加后,若结果大于 9 或有进位,则需要进行加 6 调整,以保证结果仍然是正确的 BCD 码表示的十进制数。例如,在计算 35(0011 0101) + 47(0100 0111)时,先加个位,得到 12(0001 0010),需要调整为 0001 0010 + 0110 = 0001 0100(即十进制 4),同时向十位进位;然后加十位,考虑进位后得到 8(0100),最终结果为 82(0100 0010)。
4.8 逻辑运算与实现
基本逻辑运算 :
逻辑与(AND) :对两个二进制数按位进行与操作,只有当两个相应位都为 1 时,结果位才为 1,否则为 0。例如,0101 AND 1010 = 0000。
逻辑或(OR) :对两个二进制数按位进行或操作,只要两个相应位中有一个为 1,结果位就为 1。例如,0101 OR 1010 = 1111。
逻辑非(NOT) :对一个二进制数按位取反,0 变为 1,1 变为 0。例如,NOT 0101 = 1010。
逻辑异或(XOR) :对两个二进制数按位进行异或操作,当两个相应位不同时,结果位为 1,相同时为 0。例如,0101 XOR 1010 = 1111。
逻辑运算实现 :在计算机中,逻辑运算可以通过逻辑门电路来实现。与门实现逻辑与操作,或门实现逻辑或操作,非门实现逻辑非操作,而异或门实现逻辑异或操作。这些逻辑门可以组合成更复杂的逻辑电路来完成各种逻辑功能,如数据的比较、选择、编码和解码等。例如,在一个简单的数字比较电路中,可以利用逻辑门来判断两个数是否相等,通过对两个数的每一位进行异或操作,若所有位的异或结果都为 0,则两个数相等。
4.9 运算器的基本组成与实例
4.9.1 运算器结构
基本组成部分 :
算术逻辑单元(ALU) :是运算器的核心部件,负责执行算术运算(如加法、减法、乘法、除法)和逻辑运算(如与、或、非、异或)。它接收操作数并根据控制信号执行相应的运算操作。
寄存器组:包括通用寄存器和特殊寄存器。通用寄存器用于暂存操作数和运算结果,可提高运算速度,减少对内存的访问次数。特殊寄存器如程序计数器(PC)、指令寄存器(IR)等有特定的功能,如 PC 用于指示下一条要执行的指令地址,IR 用于存放当前正在执行的指令。
数据通路 :是连接各个部件的通道,用于在 ALU、寄存器组和其他相关部件之间传输数据。数据通路包括内部总线、数据选择器等,它决定了数据的流向和传输方式。
结构类型 :
单总线结构 :所有部件都连接到一条公共总线上,数据通过这条总线在部件之间传输。这种结构简单,但由于多个部件共享总线,可能存在总线争用问题,影响运算速度。
双总线结构 :有两条独立的总线,例如一条用于传输操作数,另一条用于传输运算结果,可在一定程度上提高数据传输效率。
三总线结构 :具有三条总线,可进一步提高数据传输的并行性,使不同的操作数和结果能够同时在不同的总线上传输,加快运算速度。
4.9.2 ALU举例
74181 芯片 :是一种常用的 4 位算术逻辑单元芯片。它可以实现 16 种算术运算和 16 种逻辑运算功能。它有两个 4 位数据输入端(A 和 B),一个 4 位数据输出端(F),还有控制信号输入端(如功能选择控制端 S0、S1、S2、S3,进位输入端 Cin 等)。通过设置不同的控制信号,可以选择执行不同的运算,如加法、减法、与、或等。例如,当设置 S0 = 0,S1 = 0,S2 = 0,S3 = 1,Cin = 0 时,可实现 A 和 B 的逻辑与运算;当设置为其他组合时,可以实现不同的算术或逻辑运算。多个 74181 芯片可以级联组成多位的 ALU,用于处理更多位数的数据运算。
现代 CPU 中的 ALU :现代 CPU 中的 ALU 更加复杂和高效。它通常采用超前进位技术、并行处理等手段来提高运算速度。例如,一些高性能 CPU 的 ALU 可以在一个时钟周期内完成多种复杂的算术和逻辑运算。而且,ALU 与其他部件(如寄存器、缓存等)紧密协作,通过优化的数据通路和控制逻辑,实现高效的指令执行。同时,为了满足不同的数据类型(如整数、浮点数)和运算要求(如向量运算),现代 CPU 的 ALU 可能有多个功能单元,分别负责不同类型的运算。
4.9.3 浮点运算器举例
Intel 80x86 系列浮点运算器 :在早期的 80x86 系列处理器中,浮点运算通过协处理器(如 8087、80287、80387 等)实现。这些协处理器专门用于处理浮点数的运算。它们有自己的寄存器组和运算电路。例如,8087 协处理器有 8 个 80 位的寄存器,用于存储浮点数和中间运算结果。在进行浮点运算时,主处理器将浮点运算指令和相关数据传递给协处理器,协处理器执行浮点加法、减法、乘法、除法等运算,并将结果返回给主处理器。随着技术发展,后来的 80x86 处理器将浮点运算功能逐渐集成到 CPU 内部,提高了浮点运算的效率和性能。
现代高性能浮点运算器 :现代高性能处理器中的浮点运算器通常具有更高的精度和更快的运算速度。例如,一些用于科学计算、图形处理等领域的处理器,浮点运算器支持双精度甚至更高精度的浮点数运算。它们采用先进的算法和电路设计,如并行乘法器、除法器,以及优化的舍入和规格化电路。同时,为了满足图形处理中对向量和矩阵运算的需求,浮点运算器可能具备专门的向量浮点运算单元,可以同时对多个浮点数进行相同的运算,大大提高了图形渲染、物理模拟等计算密集型应用的处理速度。
第五章 存储系统和结构
5.1 存储系统的组成
5.1.1 存储器分类
按存储介质分类
半导体存储器 :如随机存取存储器(RAM)和只读存储器(ROM)。RAM 具有读写速度快、可随机访问等特点,用于存储计算机运行中的程序和数据;ROM 存储的信息在一般情况下只能读出,用于存储固定的程序和数据,如 BIOS。
磁表面存储器 :像硬盘,存储容量大,断电后数据不会丢失,但读写速度相对较慢,是计算机用于长期存储大量数据的设备。
光存储器 :如光盘,通过激光技术进行数据的读写,存储容量较大,常用于存储软件、多媒体等数据。
按存取方式分类
随机存取存储器(Random Access Memory,RAM) :可以在任意时刻对任意存储单元进行读写操作,访问时间与存储单元的物理位置无关。
顺序存取存储器(Sequential Access Memory,SAM) :数据只能按照特定的顺序进行访问,例如磁带,要访问中间的数据,必须先顺序经过前面的数据。
直接存取存储器(Direct Access Memory,DAM) :可以直接定位到某个存储区域,但在该区域内的数据访问可能是顺序的,例如磁盘。
5.1.2 存储系统层次结构
层次结构介绍 :存储系统通常采用多层次结构,从高速缓存(Cache)、主存储器(内存)到外存储器(如硬盘、光盘等)。靠近 CPU 的存储层次速度快、容量小,价格高;远离 CPU 的存储层次速度慢、容量大,价格低。
存储层次工作原理 :这种层次结构利用了程序的局部性原理。程序在运行时,CPU 对数据和指令的访问往往呈现出时间局部性(最近访问过的数据很可能在不久的将来再次被访问)和空间局部性(如果一个存储单元被访问,那么它附近的存储单元也很可能被访问)。数据在不同层次的存储设备之间动态地移动,以满足 CPU 的高速访问需求。
5.2 主存储器的组织
5.2.1 主存储器的基本结构
存储体 :是存储数据的主体部分,由大量的存储单元组成,每个存储单元有唯一的地址。
地址寄存器(MAR) :用于存放要访问的存储单元的地址,其位数决定了主存的寻址范围。
数据寄存器(MDR) :用于存放从存储单元读出的数据或要写入存储单元的数据。
读写控制电路 :根据 CPU 发出的读写命令,控制数据的读写操作。
5.2.2 主存储器的存储单元
存储单元定义 :主存中能存储一个二进制信息位的基本单位,多个存储单元组成存储字。存储单元的大小通常是字节(8 位二进制数)。
存储单元地址 :每个存储单元都有一个地址,通过地址可以唯一地确定存储单元的位置。地址的编码方式决定了主存的寻址方式和容量。
5.2.3 主存储器的主要技术指标
存储容量 :指主存能够存储的二进制信息的总量,通常用字节(Byte)、千字节(KB)、兆字节(MB)、吉字节(GB)等单位表示。存储容量等于存储单元的数量乘以每个存储单元的位数。
存储速度 :包括存取时间和存储周期。存取时间是指从 CPU 发出读写命令到数据开始读写操作所需的时间;存储周期是指连续两次独立的存储器操作所需的最小时间间隔。
可靠性 :通过校验码等方式来衡量主存存储数据的可靠程度,如奇偶校验码、汉明校验码等可以检测和纠正数据存储中的错误。
5.2.4 数据在主存中的存放
字节编址方式 :以字节为单位对主存进行编址,每个字节有一个独立的地址。在这种方式下,存储字可以是一个字节,也可以是多个字节(如双字节、四字节等)。
数据存储顺序 :在多字节存储字的情况下,有大端序(高位字节存于低地址)和小端序(低位字节存于低地址)两种存储顺序。例如,对于 32 位的数据 0x12345678,在大端序存储时,地址较低的存储单元存放 0x12,而在小端序存储时,地址较低的存储单元存放 0x78。
5.3 半导体随机存储器和只读存储器
5.3.1 RAM 记忆单元电路
静态 RAM(SRAM)记忆单元 :由双稳态触发器构成,只要不掉电,存储的信息就不会丢失。它的读写速度快,但是集成度相对较低,成本高,常用于高速缓存(Cache)等对速度要求极高的存储场景。
动态 RAM(DRAM)记忆单元 :利用电容存储电荷来表示信息,由于电容会漏电,所以需要定期刷新来保持信息。它的集成度高,成本低,存储容量大,但读写速度比 SRAM 慢,是主存储器(内存)的主要组成部分。
5.3.2 动态 RAM 的刷新
刷新原因 :DRAM 中的电容存储的电荷会随着时间逐渐泄漏,为了保持数据的正确性,需要定期对存储单元进行刷新,将电容中的电荷恢复到正确的值。
刷新方式 :有集中刷新、分散刷新和异步刷新等方式。集中刷新是在一段时间内集中对所有存储单元进行刷新;分散刷新是在每个存储周期中安排一定时间进行刷新;异步刷新是将刷新操作均匀地分布在整个刷新周期内,综合了集中刷新和分散刷新的优点。
5.3.3 RAM 芯片分析
芯片容量计算 :通过芯片的地址线位数和数据线位数来计算芯片容量。例如,一个芯片有 10 根地址线和 8 根数据线,其容量为位()。
芯片引脚功能 :包括地址引脚(用于输入存储单元地址)、数据引脚(用于读写数据)、读写控制引脚(用于控制数据的读写操作)和片选引脚(用于选择该芯片进行操作)等。
5.3.4 半导体只读存储器
掩膜 ROM :在制造过程中通过掩膜工艺写入数据,数据一旦写入就无法更改,适用于存储固定不变的程序和数据,如计算机的 BIOS。
可编程 ROM(PROM) :用户可以通过专用的编程设备写入数据,但只能写入一次,写入后数据固定。
可擦除可编程 ROM(EPROM) :可以通过紫外线照射等方式擦除原有数据,然后重新编程写入新数据,方便程序的修改和升级。
电可擦除可编程 ROM(EEPROM) :可以通过电信号擦除和写入数据,比 EPROM 使用更方便,擦写速度更快,常用于存储一些需要经常修改的系统参数等。
5.3.5 半导体存储器的封装
双列直插式封装(DIP) :引脚分布在芯片两侧,安装和拆卸方便,适用于实验和小规模应用。
表面贴装式封装(SMT) :芯片直接贴装在电路板表面,体积小,集成度高,是现代电子产品中广泛使用的封装方式。
5.4 主存储器的连接与控制
5.4.1 主存容量的扩展
位扩展 :当存储芯片的位数不够时,通过增加芯片的数量来扩展位数。例如,用 8 片1K x 1位的芯片组成1K x 8位的存储体,所有芯片的地址线、控制线并联,数据线分别连接。
字扩展 :当存储芯片的字数不够时,通过增加芯片的数量来扩展字数。此时芯片的数据线并联,地址线和控制线根据芯片的片选信号等进行连接,以实现对不同芯片的访问。
字位同时扩展 :综合了位扩展和字扩展的方法,用于同时增加存储容量的位数和字数。
5.4.2 存储芯片的地址分配和片选
地址分配原则 :根据主存的容量和存储芯片的容量,合理地分配地址空间给各个存储芯片。地址分配要考虑芯片的选择信号和地址线的连接方式。
片选信号产生 :通过地址译码器等电路产生片选信号,以确定在进行读写操作时选择哪一个存储芯片。片选信号可以是高位地址线译码产生,也可以采用线选法(直接用高位地址线作为片选信号)等方式。
5.4.3 主存储器和CPU 的连接
数据线连接 :主存的数据引脚与 CPU 的数据引脚直接相连,用于数据的传输。
地址线连接 :主存的地址引脚与 CPU 的地址引脚连接,使 CPU 能够向主存发送要访问的存储单元的地址。
控制线连接 :包括读写控制线、片选控制线等,用于控制主存的读写操作和芯片的选择。
5.4.4 主存的校验
奇偶校验 :在主存中为每个存储字增加一位奇偶校验位,使存储字(包括数据位和校验位)中 1 的个数为奇数(奇校验)或偶数(偶校验)。在读取数据时,检查校验位是否符合奇偶性要求,若不符合则表示数据出错。
汉明校验 :通过在数据中插入多个校验位,能够检测和纠正多位错误。汉明校验码的生成和校验过程相对复杂,但可靠性更高。
5.4.5 PC 系列微型计算机的存储器接口
早期 PC 的存储接口 :如 ISA(Industry Standard Architecture)总线接口,其数据传输速度较慢,用于连接早期的内存和扩展卡等设备。
现代 PC 的存储接口 :如 PCI - Express(PCIe)接口,具有高速的数据传输能力,用于连接高性能的内存和各种高速外部设备,支持多通道和高带宽的数据传输。
5.5 提高主存读写速度的技术
5.5.1 主存与CPU速度的匹配
问题产生 :CPU 的速度不断提高,而主存的读写速度相对较慢,导致 CPU 等待主存数据的时间增加,影响计算机的整体性能。
解决方法 :采用高速缓存(Cache)技术,在 CPU 和主存之间设置一个高速小容量的缓存,将 CPU 近期可能会频繁访问的数据和指令存储在 Cache 中,减少 CPU 等待主存的时间。
5.5.2 FPM DRAM
原理 :快速页面模式(FPM)DRAM 是早期的一种 DRAM 改进技术。它利用了 DRAM 存储单元的页面特性,在连续访问同一页面内的存储单元时,可以减少地址建立时间,从而提高读写速度。
局限性 :但当访问的存储单元跨越页面时,需要重新建立页面地址,速度会下降,并且其总体读写速度仍然相对较慢。
5.5.3 EDO DRAM
原理 :扩展数据输出(EDO)DRAM 在 FPM DRAM 的基础上进一步改进。它允许在一个读写周期内提前开始下一个读写周期的准备工作,在读取数据时,数据输出引脚在当前数据有效期间就开始准备下一个数据的输出,从而提高了数据传输率。
5.5.4 SDRAM
原理 :同步动态随机存储器(SDRAM)与系统时钟同步工作,所有的输入输出信号都在时钟的上升沿或下降沿进行,这样可以使存储芯片和 CPU 的操作更加协调,提高读写速度。
优势 :其内部有多个存储体,可以并行操作,进一步提高了数据传输效率
5.5.5 DDR SDRAM
原理 :双倍数据速率(DDR)SDRAM 在时钟的上升沿和下降沿都可以传输数据,使得数据传输速率比 SDRAM 提高了一倍。它采用了更先进的预取技术,能够在一个时钟周期内传输更多的数据。
5.5.6 DDR2、DDR3、DDR4和DDR5 SDRAM
DDR2 SDRAM :相比 DDR SDRAM,DDR2 采用了更低的工作电压,内部的预取技术更加先进,数据传输速率更高,并且在容量和性能上都有较大提升。
DDR3 SDRAM :进一步降低了工作电压,提高了存储密度和数据传输速度,同时在功耗方面也有所优化。
DDR4 SDRAM :具有更高的频率、更大的容量和更低的功耗,其带宽更高,性能更优,并且在信号完整性等方面进行了改进。
DDR5 SDRAM :相比 DDR4,DDR5 在带宽、容量和性能上又有了显著提升,采用了新的技术,如数据眼图优化、更高效的纠错码等,能够更好地满足高性能计算和高带宽应用的需求。
5.5.7 Rambus DRAM
原理 :Rambus DRAM 是一种高性能的内存技术,采用了高速的串行传输方式,具有很高的数据传输速率。它通过专门的 Rambus 通道与 CPU 连接 ,并且有自己独特的协议和接口规范。
局限性:但其成本较高,技术复杂,并且需要专门的芯片组和主板支持,应用范围相对较窄。
5.5.8 多通道内存技术
原理 :通过增加内存通道的数量,使 CPU 能够同时从多个内存通道读取数据,从而成倍地提高内存的数据传输速率。例如,双通道内存技术可以使内存带宽提高一倍。
应用场景 :在高性能计算机、游戏电脑等对内存带宽要求较高的系统中广泛应用。
5.6 多体交叉存储技术
5.6.1 并行访问存储器
原理 :多个存储体同时工作,在同一时刻对不同存储体进行读写操作。例如,有 4 个存储体,当 CPU 发出一个连续的存储字访问请求时,4 个存储体可以同时提供部分数据,然后组合成完整的存储字,从而提高存储系统的带宽。
局限性 :要求访问的存储字在不同存储体中的分布符合一定的规则,并且需要多个存储体的读写操作完全同步,否则可能会出现数据不一致等问题。
5.6.2 交叉访问存储器
原理 :将存储体按照一定的顺序编号,CPU 按照交叉的方式访问这些存储体。例如,对于 4 个存储体的交叉存储系统,访问顺序可能是存储体 1、存储体 2、存储体 3、存储体 4,然后再从存储体 1 开始循环。这样可以在连续访问存储单元时,充分利用存储体的读写周期,提高存储系统的效率。
优势 :相比并行访问存储器,交叉访问存储器对存储字的分布要求相对较低,并且在处理连续的数据访问请求时,能够更好地利用存储体的空闲时间,提高系统的整体性能。
5.7 高速缓冲存储器
5.7.1 高速缓存工作原理
基于局部性原理 :利用程序的时间局部性和空间局部性,将 CPU 可能频繁访问的数据和指令提前存储在 Cache 中。当 CPU 需要访问数据或指令时,首先在 Cache 中查找,如果找到(称为 Cache 命中),则可以快速获取数据,大大减少了 CPU 等待主存数据的时间;如果没有找到(称为 Cache 未命中),则需要从主存中读取数据,并将一部分数据复制到 Cache 中。
5.7.2 Cache 的读写操作
读操作 :当 CPU 进行读操作时,先将地址发送到 Cache 和主存。Cache 根据地址判断是否命中,如果命中,则将数据直接返回给 CPU;如果未命中,则从主存读取数据,同时将数据复制到 Cache 中,然后返回给 CPU。
写操作 :有写直达(Write - Through)和写回(Write - Back)两种方式。写直达是指 CPU 在写数据时,同时将数据写入 Cache 和主存;写回是指 CPU 只将数据写入 Cache,当该数据被替换出 Cache 时,才将更新后的数据写回主存。写回方式可以减少主存的写入次数,提高系统性能,但实现相对复杂。
5.7.3 地址映像
直接映像 :主存中的每个存储块只能映射到 Cache 中的一个特定位置。这种方式简单,地址转换速度快,但 Cache 的利用率相对较低,因为不同主存块可能会竞争 Cache 中的同一个位置。
全相联映像 :主存中的任何一个存储块都可以映射到 Cache 中的任何一个位置。这种方式 Cache 的利用率高,但地址转换复杂,需要较大的硬件开销来实现地址查找和比较。
组相联映像 :综合了直接映像和全相联映像的优点。主存和 Cache 都被分成若干组,主存中的一个存储块可以映射到 Cache 中同一组内的任何一个位置。这种方式在保证一定的地址转换速度的同时,提高了 Cache 的利用率。
5.7.4 替换算法
先进先出(FIFO)算法 :将最先进入 Cache 的存储块最先替换出去。这种算法实现简单,但没有考虑程序的局部性,可能会把频繁访问的存储块替换出去。
最近最少使用(LRU)算法 :替换最近一段时间内最少使用的存储块。LRU 算法性能较好,能够更好地利用 Cache 空间,但实现相对复杂,需要记录每个存储块的访问时间或顺序。
随机替换算法 :随机选择一个存储块进行替换。这种算法实现简单,但效果不稳定,可能会导致 Cache 性能下降。
5.7.5 更新策略
写直达策略 :如前面所述,在写操作时,同时更新 Cache 和主存,保证主存数据始终是最新的,但会增加主存的写入次数,降低系统性能。
写回策略 :写操作时只更新 Cache,当 Cache 中的数据被替换时才将更新后的数据写回主存。这种策略可以减少主存的
5.7.6 微机中 Cache 技术的实现
硬件组成部分
Cache 存储体 :由高速的 SRAM 组成,用于存储从主存中复制过来的数据和指令。其容量大小直接影响 Cache 的命中率和系统性能,通常在几十 KB 到几 MB 之间。
地址转换部件 :用于将 CPU 发出的主存地址转换为 Cache 地址。在不同的地址映像方式下(如直接映像、组相联映像等),这个部件通过复杂的逻辑电路实现地址的快速转换。例如,在直接映像方式中,它根据主存地址的高位部分确定对应的 Cache 块号,低位部分作为块内偏移量。
替换控制部件 :当 Cache 已满且发生 Cache 未命中时,负责选择要替换的 Cache 块。如采用 LRU(最近最少使用)算法的替换控制部件,需要记录每个 Cache 块的访问信息,通过比较这些信息来确定最久未使用的块进行替换。这部分硬件通常包括计数器、比较器等电路。
Cache 控制器 :协调 Cache 的读写操作,接收 CPU 的读写请求,判断 Cache 是否命中,控制数据的传输和替换等操作。它与 CPU 的总线接口相连,能够根据 CPU 的时钟信号和控制信号来同步 Cache 的操作。
与 CPU 和主存的协同工作
读操作协同 :当 CPU 发起读操作时,Cache 控制器首先在 Cache 存储体中查找数据。如果命中,数据可以在很短的时间内(通常为几个 CPU 时钟周期)返回给 CPU,此时主存不参与数据传输。如果未命中,Cache 控制器会向主存发送读请求,同时将从主存读取的数据块复制到 Cache 中,然后再将数据返回给 CPU。
写操作协同 :在写操作时,根据采用的写策略(如写直达或写回)进行不同的操作。对于写直达策略,Cache 控制器会同时将数据写入 Cache 和主存;对于写回策略,数据仅写入 Cache,并且标记该 Cache 块为 “脏” 块(表示其内容与主存不一致),当该块被替换时,才将其内容写回主存。
在微机系统中的应用实例
在英特尔酷睿系列处理器中,Cache 被分为多级(如 L1、L2、L3 Cache)。L1 Cache 速度最快,分为数据 Cache 和指令 Cache,离 CPU 核心最近,用于存储 CPU 当前最急需的数据和指令。L2 和 L3 Cache 容量相对较大,采用共享或部分共享的方式,用于存储更多的数据和指令,以进一步减少 CPU 对主存的访问次数。这些 Cache 通过复杂的内部总线和控制逻辑与 CPU 和主存紧密协作,大大提高了微机系统的整体性能。
5.8 虚拟存储器
5.8.1 虚拟存储器的基本概念
定义与原理
虚拟存储器是一种存储管理技术,它为用户提供了一个比实际主存空间大得多的虚拟存储空间。通过硬件和软件相结合的方式,把主存和外存(如硬盘)统一管理起来,让用户感觉程序和数据好像全部存储在主存中一样。
它基于程序的局部性原理,将程序和数据的一部分存储在主存中,其余部分存储在外存。当 CPU 访问的信息不在主存时,由操作系统将所需信息从外存调入主存,这个过程对用户是透明的。
作用与优势
扩大地址空间 :使得程序员可以编写更大的程序,不受实际主存容量的限制。例如,在 32 位系统中,虚拟地址空间可以达到 4GB,即使实际主存容量可能只有几百 MB 或几 GB。
方便多任务处理 :多个程序可以同时运行,每个程序都有自己独立的虚拟地址空间,操作系统可以灵活地在不同程序的虚拟地址空间和实际主存之间进行切换和分配内存,提高了系统的资源利用率和并发处理能力。
5.8.2 页式虚拟存储器
基本原理
将虚拟存储空间和主存空间都划分成固定大小的页。虚拟地址由页号和页内偏移量组成,主存地址也由页框号(物理页号)和页内偏移量组成。当 CPU 访问虚拟地址时,首先通过页表查找对应的主存页框号,然后将虚拟页内偏移量与主存页框号组合成主存物理地址,从而实现从虚拟地址到物理地址的转换。
页表结构与功能
页表是页式虚拟存储器的关键数据结构,用于记录虚拟页与主存页框之间的映射关系。页表中的每一项(页表项)包含了虚拟页号对应的主存页框号、页的访问权限(如可读、可写、可执行)等信息。当 CPU 访问一个虚拟地址时,通过硬件的页表查找机制(如页表基址寄存器和页表项索引)来定位页表项,获取主存页框号。
地址转换过程
设虚拟地址为(其中Vp为虚拟页号,d为页内偏移量),页表存放在主存中,其基地址为PTB。首先,通过虚拟页号Vp和页表基址PTB计算出页表项的物理地址()(为页表项大小),然后读取该页表项获取主存页框号Pf,最后计算出主存物理地址PA = Pf + d。
5.8.3 段式虚拟存储器
基本原理
将程序和数据按照逻辑段(如代码段、数据段、堆栈段等)进行划分,每个段有自己的段名和段长。虚拟地址由段号和段内偏移量组成。段式虚拟存储器通过段表来记录段的起始地址、段长和访问权限等信息。当 CPU 访问虚拟地址时,首先根据段号查找段表获取段的起始物理地址,然后加上段内偏移量得到主存物理地址。
段表结构与功能
段表的每一项(段表项)包含了段的起始地址、段长和访问权限等内容。与页表不同的是,段的大小不固定,所以段表项中需要记录段长信息。当 CPU 访问一个虚拟地址时,通过段号查找段表项,检查段内偏移量是否在段长范围内,以及访问权限是否符合要求,然后获取段的起始物理地址进行地址转换。
与页式虚拟存储器的比较
灵活性 :段式虚拟存储器比页式虚拟存储器更具灵活性,因为段是按照程序的逻辑结构划分的,可以更好地反映程序的语义。例如,不同的程序模块可以分别作为一个段,方便程序的编译、链接和共享。
管理复杂性 :段式虚拟存储器的管理相对复杂,由于段的大小不固定,在内存分配和回收时可能会产生外部碎片(空闲内存块不连续,无法满足较大段的分配需求),而页式虚拟存储器只有内部碎片(页内未使用的空间),管理相对简单。
5.8.4 段页式虚拟存储器
基本原理
结合了段式和页式虚拟存储器的优点。先将程序和数据按逻辑段划分,每个段再划分为固定大小的页。虚拟地址由段号、段内页号和页内偏移量组成。在进行地址转换时,首先通过段表找到段的页表起始地址,然后根据段内页号在页表中查找主存页框号,最后结合页内偏移量得到主存物理地址。
地址转换过程
设虚拟地址为VA = S + P + d(其中S为段号,P为段内页号,d为页内偏移量)。首先,通过段号查找段表获取段的页表起始地址PTBs,然后计算段内页号对应的页表项物理地址PTEA = PTBs + P x sizeof(PTE),读取该页表项获取主存页框号Pf,最后得到主存物理地址PA = Pf + d。
优势与应用场景
综合优势 :段页式虚拟存储器既具有段式虚拟存储器的逻辑性和灵活性,又具有页式虚拟存储器的内存管理简单性和高效性。它能够更好地适应复杂的程序结构和不同的应用需求。
应用场景 :在大型操作系统和复杂的应用程序中广泛应用,如大型数据库管理系统、企业级应用服务器等,这些系统需要处理大量的程序模块和数据,段页式虚拟存储器可以有效地管理内存和提高系统性能。
5.8.5 快表与慢表
快表(TLB - Translation Lookaside Buffer)
定义与原理 :快表是一种高速缓存,用于存储近期经常使用的页表项或段表项。它位于 CPU 和主存之间,基于程序的时间局部性原理,当 CPU 访问虚拟地址时,首先在快表中查找对应的地址转换信息。如果命中,就可以快速地进行地址转换,避免了访问主存中的页表或段表,大大提高了地址转换速度。
组成与结构 :快表通常由高速的 SRAM 组成,容量相对较小,一般包含几十到几百个表项。每个表项存储了虚拟地址到物理地址的映射信息以及相关的访问权限等内容,其结构与页表项或段表项类似,但可能经过简化以提高访问速度。
工作过程 :当 CPU 发出虚拟地址访问请求时,快表同时接收虚拟页号(或段号)和页内偏移量(或段内偏移量)。快表根据虚拟页号(或段号)进行查找,如果找到匹配的表项(命中),则直接获取主存页框号(或段起始物理地址),并与页内偏移量(或段内偏移量)组合成主存物理地址返回给 CPU。如果未命中,则需要访问主存中的页表或段表进行地址转换,同时可能将新的页表项或段表项复制到快表中。
慢表(主存中的页表或段表)
作用与地位 :慢表是存储在主存中的完整的页表或段表,用于在快表未命中时提供地址转换信息。虽然访问速度相对较慢,但它包含了所有虚拟地址到物理地址的映射关系,是虚拟存储器地址转换的最终依据。
与快表的关系 :快表是慢表的一个高速缓存,其内容是慢表中的一部分经常使用的表项。快表和慢表协同工作,快表尽量提高地址转换的速度,减少对慢表的访问次数,而慢表则保证了地址转换信息的完整性和准确性。
第六章 中央处理器
第七章 总线
7.1 总线概述
7.1.1 总线的基本概念
总线采用分时共享技术
(半双工工况)
总线是计算机各种功能部件之间传送信息的公共通信干线,由导线组成的传输线束.
它是 CPU、内存、输入输出设备等传递信息的公用通道,主机的各个部件通过总线相连接,外部设备则通过相应的接口电路再与总线连接,从而形成计算机硬件系统.
7.1.2 总线的分类
按传输信息种类分 :可分为数据总线、地址总线和控制总线.
数据总线 :用来传输各功能部件之间的数据信息,包括指令和操作数等,其位数与机器字长、存储字长有关,通常是双向的.
地址总线 :专门用于传输地址信息,如主存单元或 I/O 端口的地址,其位数决定了 CPU 可直接寻址的内存空间大小,是单向的.
控制总线 :负责传输控制信息,如 CPU 送出的读 / 写信号、片选信号等控制命令,以及主存或外设返回给 CPU 的中断申请信号、设备就绪信号等反馈信号.
按连接对象分 :
片总线 :又称器件级总线,是中央处理器芯片内部的总线,用于芯片内部寄存器与寄存器之间、寄存器与 ALU 之间的连接。
内总线 :也称系统总线或板级总线,是计算机各功能部件之间的传输通路,如常见的 ISA 总线、PCI 总线等。
外总线 :又叫通信总线,是计算机系统之间,或者计算机主机与外围设备之间的传输通路,像 RS-232C、USB 等都是常见的外总线。
按数据传输方式分 :
并行总线 :对 n 位二进制信息用 n 条传输线同时传送,传输速度快,但系统结构较复杂,常用于计算机系统内各部件之间的连接,如 PCI 总线等。
串行总线 :多位二进制信息共用一条传输线,按时间先后顺序通过总线,结构简单,但传输速度较慢,如 SPI、I2C、USB 等。
7.1.3 总线的组成及性能指标
总线的组成 :
信号线 :包括数据总线、地址总线和控制总线的信号线,用于传输相应的信息.
总线控制器 :负责协调总线上各个部件的通信,管理总线的使用权,确保数据传输的正确性和有序性。
总线接口 :连接在总线上的各个部件通过总线接口与总线进行连接,实现信号的输入输出和数据的传输。
总线的性能指标 :
总线宽度 :又称总线位宽,指的是总线上同时能够传输的数据位数,通常是指数据总线的根数,如 32 根称为 32 位总线,它决定了一次能够传输的数据量。
总线带宽 :可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节 / 秒(B/s)表示,总线带宽 = 总线工作频率 × 总线宽度 (bit/s)= 总线工作频率 × (总线宽度 / 8) (B/s)。
总线时钟频率 :即机器的时钟频率,为时钟周期的倒数,它表示一秒内有多少个时钟周期,总线的操作通常是在时钟信号的同步下进行的。
总线工作频率 :总线上各种操作的频率,为总线周期的倒数,实际上指一秒内传送几次数据。
总线传输周期 :一次总线操作所需的时间,包括申请阶段、寻址阶段、传输阶段和结束阶段,通常由若干个总线时钟周期构成。
7.2 总 线 仲 裁
7.2.1 集中仲裁方式
链式查询方式 :各设备通过总线请求线发出请求信号,经总线控制器链式查询,只有离总线控制器最近且有请求的设备才能获得总线使用权,优点是结构简单,易于扩充设备,缺点是对电路故障敏感,优先级固定,离总线控制器越远优先级越低。
计数器定时查询方式 :总线上的每个设备有一个设备地址,总线控制器中有一个计数器,当有设备请求总线时,计数器开始计数,当计数值与请求设备的地址一致时,该设备获得总线使用权,优点是优先级可灵活设置,缺点是增加了控制线数,控制相对复杂。
独立请求方式 :每一个设备都有一对总线请求线和总线允许线,设备独立地向总线控制器发送请求信号,总线控制器根据一定的优先级算法,向优先级最高的请求设备发送总线允许信号,优点是响应速度快,优先级可灵活调整,缺点是控制线数量多,总线控制器的设计复杂。
7.2.2 分布仲裁方式
各设备都有自己的仲裁逻辑,当多个设备同时请求使用总线时,这些设备的仲裁逻辑会根据一定的规则来决定哪个设备获得总线使用权,无需中央仲裁器,提高了系统的可靠性和灵活性,适用于多处理机系统等对总线仲裁有较高要求的场合,但仲裁算法相对复杂,实现难度较大
7.3 总线定时控制
7.3.1 同步定时方式
采用同步定时方式的总线有一个统一的时钟信号,总线控制器通过这个时钟信号来协调发送方和接收方的传送定时关系,所有设备都在时钟信号的上升沿或下降沿进行数据的发送和接收,优点是控制简单,数据传输速率高,适用于高速数据传输的场合,缺点是系统中的所有设备都必须严格按照时钟信号同步工作,对时钟信号的精度和稳定性要求高,且设备之间的距离不能太远.
7.3.2 异步定时方式
异步定时方式没有统一的时钟信号,而是依靠传送双方相互制约的 “握手” 信号来实现定时控制,发送方发出数据后,等待接收方的响应信号,接收方收到数据后,向发送方发送一个应答信号,表示数据已接收成功,发送方收到应答信号后,才能进行下一次数据传输,优点是不需要统一的时钟信号,对设备之间的距离和时钟同步要求较低,灵活性高,缺点是控制复杂,数据传输速率相对较低
7.4.1 系统总线标准
ISA 总线 :是早期的一种系统总线标准,数据传输速率较低,主要用于连接一些低速的外设,如早期的声卡、网卡等,目前已逐渐被淘汰.
PCI 总线 :是一种广泛应用的局部总线标准,具有较高的数据传输速率和较好的兼容性,可支持多种外设的连接,如显卡、声卡、网卡等,PCI 总线的主要特点是传输速度高,目前可实现较高的工作频率和较大的突发传输速率.
PCI Express 总线 :是新一代的高速串行总线标准,采用点对点的连接方式,具有更高的数据传输速率和更低的延迟,可满足高速设备如高性能显卡、固态硬盘等对数据传输的要求,PCI Express 总线的传输速率远高于 PCI 总线,且具有更好的扩展性和灵活性。
7.4.2 外部总线标准
USB 总线 :是一种通用串行总线标准,具有热插拔、即插即用、支持多个设备连接等优点,广泛应用于鼠标、键盘、打印机、扫描仪、移动存储设备等各种外部设备的连接,USB 总线分为多个版本,如 USB1.1、USB2.0、USB3.0 等,传输速率不断提高.
IEEE 1394 总线 :又称火线,是一种高速串行总线标准,具有数据传输速率高、支持实时数据传输等特点,适用于连接一些对数据传输速率和实时性要求较高的设备,如数码摄像机、音频设备等,但由于 USB 总线的普及,IEEE 1394 总线的应用范围相对较窄.
RS-232C 总线 :是一种常用的串行通信总线标准,主要用于计算机与外部设备之间的低速数据通信,如计算机与调制解调器、串口打印机等设备的连接,其传输距离较远,但传输速率较低.
第八章 外部设备
8.1 外部设备概述
8.1.1 外部设备的分类
按功能分类
输入设备 :用于向计算机输入数据和信息,如键盘、鼠标、扫描仪、麦克风等。键盘通过按键的机械动作将字符编码输入计算机;鼠标则通过检测移动和点击动作,将位置和操作信息转换为数字信号输入。
输出设备 :用于将计算机处理后的结果输出给用户,像显示器、打印机、音箱等。显示器通过电子束扫描或液晶显示等技术,将计算机中的数字图像信号转换为可视的图像;打印机利用喷墨、激光等技术将计算机中的文本和图像打印到纸张上。
外存储设备 :用于长期存储数据和程序,如硬盘、软盘、光盘、U 盘等。外存储设备的存储容量通常较大,并且在断电后数据不会丢失。
通信设备 :用于计算机与其他计算机或网络进行通信,包括调制解调器、网卡、路由器等。网卡使计算机能够通过网络线缆或无线信号连接到局域网或互联网。
按数据传输方式分类
字符设备 :以字符为单位进行数据传输,如键盘、打印机等。它们通常一次传输一个字符,并且设备和计算机之间的数据传输速度相对较慢。
块设备 :以数据块为单位进行传输,如硬盘、光盘等。数据块的大小通常是固定的,在传输过程中,每次传输一个或多个完整的数据块,数据传输速度相对较快。
8.1.2 外部设备的地位和作用
地位 :外部设备是计算机系统不可或缺的组成部分,它扩展了计算机的功能,使计算机能够与外部世界进行交互,是计算机系统与用户、其他计算机或设备之间的桥梁。
作用
人机交互接口 :输入设备和输出设备实现了人与计算机之间的信息交换,使用户能够方便地向计算机输入指令和数据,并获取计算机处理后的结果。
数据存储和备份 :外存储设备提供了大量的存储空间,用于存储操作系统、应用程序、用户数据等。同时,它们也可用于数据备份,以防止数据丢失。
信息共享和通信 :通信设备使计算机能够连接到网络,实现信息共享、远程访问和分布式计算等功能,拓宽了计算机的应用范围。
8.2 磁介质存储器的性能和原理
8.2.1 磁介质存储器的读写
写操作原理 :磁介质存储器(如硬盘)通过磁头在高速旋转的磁介质表面写入数据。当写入数据时,磁头线圈中通入电流,根据电流的方向产生不同方向的磁场,使磁介质表面的磁性材料被磁化,从而记录下二进制信息(如磁场方向不同代表 0 和 1)。
读操作原理 :读操作是写操作的逆过程。当磁头经过磁介质表面已磁化的区域时,磁头中的线圈会感应出电动势,其大小和方向与磁介质的磁化方向有关。通过检测感应电动势的变化,将其转换为数字信号,从而读出存储在磁介质上的数据。
8.2.2 磁介质存储器的技术指标
存储容量 :是指磁介质存储器能够存储的数据量,通常以字节(Byte)、千兆字节(GB)或太字节(TB)为单位。存储容量取决于磁介质的记录密度(每单位面积或长度上存储的二进制位数)和存储介质的表面积等因素。
存储密度 :包括道密度(沿磁盘半径方向单位长度上的磁道数)和位密度(磁道单位长度上存储的二进制位数)。存储密度越高,相同面积的磁介质能够存储的数据就越多。
数据传输率 :指单位时间内从磁介质存储器向主机传输的数据量,它取决于磁头的读写速度、磁盘的转速和存储密度等因素。数据传输率 = 每道字节数 × 磁盘转速(转 / 秒)。
平均存取时间 :是指磁头从起始位置移动到指定磁道并开始读写数据所需的平均时间,包括寻道时间(磁头移动到目标磁道的时间)和旋转延迟时间(目标磁道上指定扇区旋转到磁头下方所需的时间)。平均存取时间是衡量磁介质存储器读写速度的重要指标。
8.2.3 数字磁记录方式
归零制(RZ) :在这种记录方式中,写入电流在记录 “1” 时正向脉冲,记录 “0” 时负向脉冲,并且在每个记录脉冲之后,电流都要归零。这种方式简单,但记录密度较低,因为归零操作占用了一定的时间和空间。
不归零制(NRZ ):记录 “1” 时电流方向不变,记录 “0” 时电流方向改变。与归零制相比,不归零制的记录密度较高,因为不需要归零操作,但它存在连续相同信号时无法区分位边界的问题。
见 “1” 就翻不归零制(NRZ - 1) :只有在记录 “1” 时电流方向才改变,记录 “0” 时电流方向保持不变。这种方式解决了 NRZ 制在连续记录 “0” 时无法区分位边界的问题,并且记录密度也较高。
调相制(PM) :又称为曼彻斯特编码,它是一种自同步编码方式。在每个位周期的中间,信号都会发生跳变,并且根据数据是 “1” 还是 “0”,跳变方向不同。这种方式保证了数据传输的同步性,并且具有良好的抗干扰能力,但记录密度相对较低,因为每个位周期内有两次信号变化。
8.2.4 编码方式的比较
记录密度方面 :不归零制及其变种(如 NRZ - 1)和调相制(PM)在适当的条件下可以实现较高的记录密度,而归零制由于归零操作的限制,记录密度相对较低。
同步性方面 :调相制(PM)具有自同步特性,这意味着在数据传输过程中不需要额外的同步信号,有利于数据的正确读取。而归零制和不归零制在某些情况下可能需要额外的同步措施来确定位边界。
抗干扰能力方面 :调相制(PM)由于其信号变化规律,具有较好的抗干扰能力。当信号受到干扰时,通过检测位周期中间的跳变方向仍能正确恢复数据。而归零制和不归零制在抗干扰能力上相对较弱,特别是在连续相同信号的情况下。
8.3 磁介质存储设备
8.3.1 硬盘存储器的基本结构与分类
基本结构
盘片 :是硬盘存储数据的介质,通常由金属或玻璃制成,表面涂有磁性材料。盘片高速旋转,磁头在盘片表面进行数据的读写操作。
磁头 :负责读写盘片上的数据,它通过电磁感应原理与盘片表面的磁性材料相互作用。磁头安装在磁头臂上,可以在盘片表面径向移动。
电机和控制电路 :电机用于驱动盘片旋转,控制电路则负责协调磁头的运动、数据的读写和传输等操作。
缓存 :硬盘内部通常有一定容量的缓存,用于临时存储数据,以提高数据读写的速度和效率。
分类
按盘片尺寸分类 :有 3.5 英寸、2.5 英寸、1.8 英寸等不同尺寸的硬盘。3.5 英寸硬盘常用于台式计算机,2.5 英寸硬盘则主要用于笔记本电脑和移动硬盘。
按接口类型分类 :常见的有 IDE(Integrated Drive Electronics)接口、SATA(Serial ATA)接口、SCSI(Small Computer System Interface)接口等。SATA 接口是目前主流的家用硬盘接口,具有较高的数据传输率和较好的兼容性;SCSI 接口则主要用于服务器等高端设备,提供更高的性能和可靠性。
按存储技术分类 :包括传统的机械硬盘(HDD)和固态硬盘(SSD)。机械硬盘通过磁头和高速旋转的盘片进行数据存储和读写;固态硬盘则使用闪存芯片存储数据,具有读写速度快、抗震性强等优点。
8.3.2 硬盘驱动器
工作原理 :硬盘驱动器主要由电机、控制电路、磁头和盘片等部件组成。电机带动盘片高速旋转,当计算机需要读取或写入数据时,控制电路根据指令控制磁头在盘片表面移动到指定位置,然后通过磁头进行数据的读写操作。
电机驱动系统 :电机是硬盘驱动器的关键部件之一,它包括主轴电机和音圈电机。主轴电机用于驱动盘片旋转,其转速通常较高,如常见的 7200 转 / 分钟(RPM)或 10000 转 / 分钟。音圈电机则用于驱动磁头在盘片表面径向移动,能够快速准确地将磁头定位到目标磁道。
磁头定位系统 :通过音圈电机和位置反馈传感器实现磁头的精确定位。当计算机发出读写指令时,控制电路根据目标磁道地址计算出磁头需要移动的距离和方向,然后驱动音圈电机移动磁头。位置反馈传感器实时监测磁头的位置,并将信息反馈给控制电路,以便对磁头的位置进行调整。
8.3.3 硬盘的信息分布和磁盘地址
信息分布 :硬盘的盘片被划分为多个同心圆磁道,每个磁道又被划分为若干个扇区。扇区是硬盘存储数据的基本单位,通常每个扇区的大小为 512 字节。磁道和扇区的划分是通过磁盘格式化操作完成的。
磁盘地址 :由柱面号、磁头号和扇区号组成。柱面是所有盘片上具有相同半径的磁道的集合,柱面号用于定位数据所在的柱面;磁头号用于确定数据在哪个盘片的磁道上;扇区号则指定数据在磁道的哪个扇区内。例如,一个磁盘地址(3,2,7)表示数据位于第 3 个柱面、第 2 个磁头对应的磁道、第 7 个扇区。
8.3.4 硬盘存储器的技术参数
容量 :硬盘的容量是指其能够存储的数据总量,计算公式为:容量 = 磁头数 × 柱面数 × 扇区数 × 每扇区字节数。随着技术的发展,硬盘容量不断增大,目前常见的硬盘容量可达数 TB。
转速 :指硬盘盘片每分钟旋转的圈数,单位是 RPM(转 / 分钟)。转速越高,磁头在单位时间内能够读取的数据量就越多,数据传输率也就越高。常见的转速有 5400RPM、7200RPM 和 10000RPM 等。
平均寻道时间 :是指磁头从起始位置移动到目标磁道所需的平均时间,是衡量硬盘读写速度的重要指标之一。平均寻道时间越短,硬盘的读写性能越好。目前,硬盘的平均寻道时间一般在几毫秒到十几毫秒之间。
数据传输率 :包括内部数据传输率和外部数据传输率。内部数据传输率是指硬盘磁头与缓存之间的数据传输率,主要取决于硬盘的转速和存储密度;外部数据传输率是指硬盘缓存与主机之间的数据传输率,受接口类型和传输协议的限制。
8.3.5 硬盘的分区域记录
原理 :硬盘的分区域记录是一种提高存储密度的技术。它将盘片表面划分为多个区域,不同区域的磁道扇区数量不同。在盘片的内圈,由于周长较小,磁道的扇区数量相对较少;而在盘片的外圈,周长较大,磁道的扇区数量相对较多。这样可以充分利用盘片的存储空间,提高存储密度。
优势 :通过分区域记录,可以在不改变硬盘物理尺寸和磁道密度的情况下,增加硬盘的存储容量。同时,这种技术也有助于提高数据传输率,因为外圈磁道的数据传输率相对较高,在读取大容量数据时,可以充分利用外圈磁道的高传输率优势。
8.3.6 硬盘的 NCQ技术
原理
NCQ(Native Command Queuing)即原生命令队列技术。它允许硬盘在内部优化处理读写命令的执行顺序。传统的硬盘是按照接收命令的顺序依次执行读写操作,而采用 NCQ 技术的硬盘可以对命令进行重新排序。硬盘控制器会分析接收到的命令,根据数据在磁盘上的物理位置和磁头的当前位置等因素,合理安排命令的执行顺序,以减少磁头的寻道时间和旋转延迟。
优势
提高性能 :通过优化命令执行顺序,能够有效提高硬盘的读写性能。尤其是在多任务环境下,当系统同时发出多个读写请求时,NCQ 技术可以让硬盘更高效地工作,减少读写等待时间,从而提高系统的整体响应速度。例如,在同时进行文件复制和系统后台数据读写时,硬盘可以更合理地安排读写操作,使数据传输更加流畅。
延长硬盘寿命 :由于减少了磁头频繁的寻道操作,降低了磁头和盘片的磨损,在一定程度上有助于延长硬盘的使用寿命。频繁的寻道操作会使磁头在盘片表面快速移动,增加机械部件的损耗,而 NCQ 技术使磁头的移动更加有序和高效,减少不必要的寻道。
8.4 磁盘阵列
8.4.1 RAID 简介
定义
RAID(Redundant Array of Independent Disks)即独立磁盘冗余阵列,是一种将多个独立的硬盘组合起来,通过数据冗余和并行读写等技术,提供更高的数据存储性能、数据安全性和可靠性的存储解决方案。它把多个硬盘看作一个整体,通过特定的控制算法和数据分布方式,来实现数据存储和读取。
作用
提高存储性能 :通过并行读写操作,可以增加数据传输的带宽。例如,多个硬盘同时进行数据读取,数据传输率可以成倍提高,满足对存储性能要求较高的应用场景,如服务器存储系统和大型数据库存储。
增强数据可靠性 :利用数据冗余技术,在部分硬盘出现故障时,仍能保证数据的完整性和可用性。这对于存储重要数据的系统,如企业数据中心和金融系统的数据存储,至关重要。
8.4.2 RAID 的分级
RAID 0
原理 :RAID 0 将数据分成多个块,然后分别存储在多个硬盘上,实现数据的并行读写。例如,假设有 3 个硬盘组成 RAID 0,数据块 1 存储在硬盘 1,数据块 2 存储在硬盘 2,数据块 3 存储在硬盘 3,读写数据时,3 个硬盘可以同时工作,提高读写速度。
特点 :具有最高的数据读写速度,因为数据是并行存储和读取的。但它没有数据冗余功能,如果其中一个硬盘出现故障,所有存储的数据都将丢失。
RAID 1
原理 :RAID 1 采用镜像(Mirror)技术,将一份数据同时存储在两个或多个硬盘上。例如,数据同时存储在硬盘 A 和硬盘 B 上,两个硬盘中的数据完全相同。当一个硬盘出现故障时,另一个硬盘可以继续提供数据。
特点 :提供了最高的数据安全性和可靠性,数据冗余度高。但由于数据需要同时写入多个硬盘,存储效率只有 50%(两个硬盘的情况下),并且写入速度相对较慢,因为每次写入都要在多个硬盘上同时进行。
RAID 5
原理 :RAID 5 是一种分布式奇偶校验的独立磁盘冗余阵列。它将数据和奇偶校验信息交叉存储在多个硬盘上。例如,对于 4 个硬盘组成的 RAID 5,数据块分别存储在 3 个硬盘上,而奇偶校验信息存储在另一个硬盘上。当一个硬盘出现故障时,可以通过其他硬盘上的数据和奇偶校验信息恢复丢失的数据。
特点 :具有较高的数据读写性能和一定的数据冗余能力。存储效率相对较高,一般为(n-1)/n(n 为硬盘数量),兼顾了数据存储效率和安全性,在企业级存储系统中应用广泛。
RAID 10(RAID 1 + 0)
原理 :它是 RAID 1 和 RAID 0 的组合。先将硬盘进行镜像(RAID 1)分组,然后再将这些分组进行条带化(RAID 0)。例如,将 4 个硬盘分为两组,每组两个硬盘进行镜像,然后再将这两组进行条带化存储数据。
特点 :结合了 RAID 1 的高可靠性和 RAID 0 的高读写性能,提供了非常好的数据安全性和读写速度,但成本较高,因为需要较多的硬盘来实现。
8.5 光盘存储器
8.5.1 光盘存储器的类型
CD(Compact Disc)系列
CD - ROM :是一种只读光盘,数据在制作过程中被写入光盘,用户只能读取光盘上的数据。它主要用于存储软件、音乐、电影等数据,容量一般为 700MB 左右。
CD - R(Recordable) :是一种可记录光盘,用户可以使用光盘刻录机将数据写入光盘,但只能写入一次。写入后,数据就变成只读的,适合用于数据备份、制作个人音乐光盘等。
CD - RW(ReWritable) :是一种可重写光盘,用户可以多次对光盘进行数据的写入、擦除和重新写入操作。这使得它在需要频繁更新数据的场景下比较实用,如小型数据存储和临时文件存储。
DVD(Digital Versatile Disc)系列
DVD - ROM :只读型 DVD,类似于 CD - ROM,但存储容量更大,一般为 4.7GB - 17GB,主要用于存储大容量的视频、软件等数据。
DVD - R 和 DVD + R :可记录型 DVD,与 CD - R 类似,用于一次性写入数据,是制作 DVD 视频光盘和数据备份的常用介质。
DVD - RW 和 DVD + RW :可重写型 DVD,用户可以多次擦除和写入数据,功能类似于 CD - RW,但容量更大。
BD(Blu - ray Disc)系列
BD - ROM :只读蓝光光盘,主要用于存储高清视频、大型游戏等大容量数据,容量可达 25GB - 100GB。
BD - R 和 BD - RE :可记录和可重写蓝光光盘,用于用户自己刻录高清视频、数据备份等,为大容量数据存储提供了方便。
8.5.2 光盘存储器的组成及工作原理
组成部分
光盘片 :由聚碳酸酯等材料制成的盘片,表面涂有记录数据的有机染料(CD - R)、相变材料(CD - RW、DVD - RW 等)或金属反射层(CD - ROM、DVD - ROM 等)。光盘片上有螺旋形的光道,数据就存储在这些光道上。
激光头 :用于发射激光束并读取或写入光盘上的数据。在读取数据时,激光头发出的激光束照射到光盘表面,根据反射光的强度变化来识别数据;在写入数据时,激光头通过调整激光的功率,使光盘表面的记录材料发生物理或化学变化来记录数据。
电机和传动装置 :电机用于驱动光盘旋转,传动装置则确保激光头能够准确地定位在光盘的不同位置进行读写操作。
控制电路 :负责协调激光头、电机和其他部件之间的工作,包括控制激光头的聚焦、寻道,以及数据的编码、解码和传输等操作。
工作原理
读操作 :当读取光盘数据时,激光头发出的激光束聚焦在光盘的光道上。光盘表面的凹坑和平面(对于只读光盘)或者记录材料的不同状态(对于可记录和可重写光盘)会使反射光的强度发生变化。光电探测器接收反射光,并将光信号转换为电信号,经过放大、解码等处理后,恢复出原始的数据。
写操作:对于可记录光盘,如 CD - R,在写入数据时,激光头发出高功率的激光束,使光盘表面的有机染料层发生化学变化,形成与数据对应的凹坑和平面。对于可重写光盘,如 CD - RW,激光头通过改变相变材料的相态来记录数据,通过不同的相态(结晶态和非结晶态)来表示 0 和 1
8.5.3 光盘驱动器
内部结构
光盘驱动器主要由机械部分和电子部分组成。机械部分包括电机、传动齿轮、激光头定位机构等,用于驱动光盘旋转和激光头的移动。电子部分包括激光发射和接收电路、控制芯片、缓存等,用于控制激光头发射激光、接收反射光信号并进行处理,以及管理数据的缓存和传输。
工作过程
加载光盘 :当插入光盘时,驱动器的机械装置会将光盘固定在旋转轴上,并通过传动装置使光盘开始旋转。
寻道和聚焦 :激光头在控制电路的指挥下,通过电机驱动和定位机构移动到光盘的起始位置,并进行聚焦操作,使激光束准确地聚焦在光盘的光道上。
读写操作 :在寻道和聚焦完成后,根据用户的指令进行数据的读取或写入操作。在读取过程中,激光头不断地读取光盘上的数据,并将其转换为电信号,经过处理后传输给计算机;在写入过程中,激光头按照一定的功率和时间间隔发射激光,将数据写入光盘。
弹出光盘 :当读写操作完成后,用户可以通过操作系统或驱动器上的弹出按钮,使机械装置将光盘弹出。
8.6 新型辅助存储器
8.6.1 基于磁或磁光介质的可移动存储器
软盘
特点 :软盘是早期的可移动存储介质,由软质的聚酯薄膜圆盘制成,表面涂有磁性材料。它的存储容量较小,常见的 3.5 英寸软盘容量为 1.44MB。软盘通过软盘驱动器进行读写操作,驱动器中有磁头用于读取和写入软盘上的数据。
应用场景及现状 :曾经在计算机数据存储和传输中发挥重要作用,用于存储小型文件、软件安装程序等。但由于其存储容量小、读写速度慢、易损坏等缺点,随着其他大容量、高性能存储设备的出现,已经逐渐被淘汰。
磁光盘(MO)
特点 :磁光盘是一种结合了磁性和光学存储技术的可移动存储介质。它利用激光和磁场共同作用来读写数据,具有存储容量较大(一般为几百 MB 到几 GB)、数据保存时间长、可重写次数多等优点。
应用场景及现状 :在需要大容量可移动存储和对数据安全要求较高的领域有一定应用,如一些专业的图像、音频存储和数据备份。不过,随着 U 盘和移动硬盘等存储设备的普及,磁光盘的市场份额也在逐渐缩小
8.6.2 基于电子器件的存储器
U 盘(闪存盘)
特点 :U 盘是基于闪存(Flash Memory)技术的可移动存储设备,它通过闪存芯片存储数据。具有体积小、重量轻、读写速度快、即插即用、抗震性强等优点。存储容量从几百 MB 到数 TB 不等,并且随着技术的发展,容量不断增大。
工作原理 :闪存芯片内部由大量的闪存单元组成,这些单元通过电子信号来存储和读取数据。在写入数据时,通过向闪存单元施加一定的电压,使内部的晶体管状态发生改变,从而记录数据;在读取数据时,通过检测闪存单元的状态来获取数据。
应用场景 :广泛应用于个人数据存储和传输,如存储文档、图片、视频等文件,以及作为系统安装盘、数据备份工具等。
固态硬盘(SSD)
特点 :固态硬盘也是使用闪存芯片存储数据,但它在性能和使用方式上与 U 盘有所不同。SSD 的读写速度更快,尤其是 4K 随机读写性能,能够大大提高系统的启动速度和应用程序的加载速度。它的接口和使用方式与传统硬盘相似,可以作为计算机的主存储设备。
工作原理 :内部由主控芯片、闪存芯片、缓存芯片(部分有)等组成。主控芯片管理和传输数据,闪存芯片存储数据,缓存芯片用于临时存储数据以提高读写性能。与传统硬盘相比,没有机械部件,数据的读写通过电信号控制闪存芯片完成。
应用场景 :在笔记本电脑、台式计算机的主存储设备替换、服务器存储加速等领域应用广泛,能够为系统提供更高的性能和稳定性。
8.7 键盘输入设备
基本结构
按键矩阵 :键盘内部有一个按键矩阵,通过行列扫描的方式来检测按键的按下和释放。当按键被按下时,对应的行线和列线会导通,通过检测导通的位置来确定是哪个按键被按下。
编码器和控制器 :编码器将按键对应的位置信息转换为计算机能够识别的编码,如 ASCII 码或其他自定义编码。控制器则负责与计算机进行通信,将编码后的按键信息发送给计算机。
工作原理
当用户按下一个按键时,按键矩阵中的电路状态发生变化,这个变化被编码器检测到。编码器根据按键的位置生成相应的编码,然后通过键盘接口(如 USB 接口或 PS/2 接口)将编码发送给计算机。计算机接收到按键编码后,根据操作系统和应用程序的设置,将其转换为相应的字符、命令或操作。例如,按下字母 “A” 键,键盘将其转换为 ASCII 码 “65” 发送给计算机,计算机再将其显示为字母 “A”。
分类及特点
按连接方式分类 :有有线键盘和无线键盘。有线键盘通过 USB、PS/2 等接口与计算机连接,数据传输稳定可靠;无线键盘则通过蓝牙、射频等无线技术与计算机通信,使用更加灵活,但可能会受到信号干扰和电池续航的影响。
按按键类型分类 :有机械键盘、薄膜键盘等。机械键盘的按键下面有机械轴,每个按键的手感和触发力度比较明确,适合游戏玩家和打字员等对按键手感有要求的用户;薄膜键盘通过薄膜电路触发,手感相对较软,成本较低,是常见的办公键盘。
8.8 其他输入设备
8.8.1 鼠标器
- 机械式鼠标
- 光机式鼠标
光电式鼠标
8.8.2 其他定位设备
- 轨迹球
- 跟踪点
触摸板
8.8.3 扫描仪
基本结构
扫描头 :这是扫描仪最重要的部件,通常包含光源、反光镜、透镜、电荷耦合器件(CCD)或接触式图像传感器(CIS)等组件。光源用于照亮被扫描的文档或图像,反光镜和透镜则负责将反射光聚焦到传感器上。CCD 或 CIS 能够将光信号转换为电信号,从而获取图像信息。
传动机构 :用于移动扫描头或被扫描的物体,以实现对整个文档或图像的全面扫描。传动机构要保证扫描头移动的平稳性和准确性,确保扫描图像的质量。
控制电路 :负责协调扫描头、传动机构等各部件的工作,包括控制光源的开关、扫描头的移动速度、信号的采集和处理等。它还与计算机进行通信,将扫描得到的数据传输给计算机。
工作原理
当启动扫描时,光源发出光线照亮被扫描的物体(如纸张上的文档或图片)。物体表面对光线进行反射,反射光经过反光镜和透镜的折射后,聚焦到 CCD 或 CIS 传感器上。CCD 或 CIS 根据接收到的光强度不同,将其转换为相应的电信号。这些电信号经过放大、数字化等一系列处理后,形成数字图像数据,然后通过控制电路传输给计算机。
分类及特点
按扫描方式分类 :
平板式扫描仪 :是最常见的一种扫描仪,被扫描的物体放置在一块透明的平板玻璃上,扫描头在平板下方移动进行扫描。它能够扫描各种不同尺寸和厚度的文档、照片等,扫描质量较高,适合家庭和办公使用。
馈纸式扫描仪 :也叫滚筒式扫描仪,被扫描的物体通过自动进纸装置连续送入扫描仪内部进行扫描。它的扫描速度相对较快,适合批量扫描大量的纸张文档,如办公室处理文件归档等情况,但对纸张的平整度和厚度有一定要求。
手持式扫描仪 :体积小巧,便于携带,用户手持扫描仪在被扫描物体表面移动进行扫描。它的扫描范围和精度相对有限,主要用于一些简单的扫描任务,如扫描条形码、小尺寸文档等。
按扫描元件分类 :
CCD 扫描仪 :采用电荷耦合器件作为扫描元件,具有扫描分辨率高、色彩还原度好等优点。CCD 扫描仪对光线的捕捉能力较强,能够呈现出较为细腻的图像细节和准确的色彩,但通常价格相对较高。
CIS 扫描仪 :使用接触式图像传感器,其结构相对简单,成本较低。CIS 扫描仪的体积往往更小,更便于携带,但在扫描分辨率和色彩还原度方面可能稍逊于 CCD 扫描仪。
第九章 输入输出系统
9.1 主机与外设的连接
9.1.1 输入输出接口
定义与作用 :输入输出接口是主机和外设之间的交接界面,它是主机与外设之间传递数据、状态信息和控制信息的通道。由于主机和外设的工作速度、信号形式和数据格式等方面存在差异,需要通过接口进行协调和转换,以确保数据能够正确地在两者之间传输。
9.1.2 接口的功能和基本组成
功能 :
数据缓冲和锁存 :主机和外设的工作速度通常不同,接口中的缓冲器可以暂时存储数据,起到速度匹配的作用。例如,当外设的数据传输速度较慢,而主机速度较快时,接口可以先将外设传来的数据缓存起来,等待主机读取。
信号电平转换 :主机和外设的信号电平可能不一致,接口需要进行电平转换。比如,计算机内部的信号通常是 TTL 电平(晶体管 - 晶体管逻辑电平),而某些外设可能使用其他电平标准,接口可以将信号电平转换为双方都能接受的形式。
数据格式转换 :主机和外设的数据格式可能不同,如主机以字节为单位处理数据,而外设可能以位串或其他格式传输数据。接口可以进行数据格式的转换,使双方的数据格式相匹配。
设备选择和寻址 :在多个外设连接到主机的情况下,接口需要提供设备选择功能,以便主机能够指定与哪一个外设进行通信。通过设备地址的识别,实现对不同外设的访问。
提供联络信号 :接口向外设发送控制信号,通知外设何时可以进行数据传输,同时也接收外设传来的状态信号,如设备是否准备好、是否忙等信息,并将这些信号反馈给主机,以协调数据传输过程。
基本组成 :
数据端口 :用于在主机和外设之间传输数据,数据端口可以是双向的,能够实现数据的输入和输出。
状态端口 :用于存储外设的状态信息,如 “忙”、“就绪” 等状态,主机可以读取这些状态信息来判断外设是否可以进行数据传输。
控制端口 :主机通过控制端口向外设发送控制信号,如启动信号、停止信号等,以控制外设的操作。
9.1.3 外设的识别与端口寻址
外设识别 :主机通过地址总线发送设备地址来识别不同的外设。每个外设都被分配了一个唯一的地址,当主机发出的地址与外设的地址匹配时,就选中了该外设进行通信。
端口寻址 :接口通常包含多个端口,如数据端口、状态端口和控制端口。主机通过端口地址来访问接口中的不同端口。端口地址和设备地址相结合,使得主机能够准确地与外设的特定端口进行数据传输和通信。例如,主机可以通过特定的端口地址向打印机的控制端口发送打印命令,或者从打印机的数据端口读取打印机的状态信息。
9.1.4 输入输出信息传送控制方式
程序控制方式 :
程序查询方式 :主机通过不断地查询外设的状态来控制数据的传输。在这种方式下,主机的程序会循环检查外设是否准备好进行数据传输。如果外设未准备好,主机就等待;如果外设准备好了,主机就进行数据传输。这种方式简单,但效率较低,因为主机在等待外设准备好的过程中会浪费大量的 CPU 时间。
程序中断方式 :当外设准备好进行数据传输时,会向主机发出中断请求。主机在收到中断请求后,暂停当前正在执行的程序,转而执行与该外设对应的中断服务程序来处理数据传输。这种方式提高了主机的效率,因为主机不需要一直查询外设的状态,只有在收到中断请求时才进行数据传输处理。
直接存储器访问(DMA)方式 :在 DMA 方式下,外设可以直接与主存储器进行数据交换,而不需要经过 CPU 的干预。DMA 控制器接管了数据传输的控制权,它可以直接在主存和外设之间进行数据的读写操作,只在数据传输开始和结束时向 CPU 发出通知。这种方式大大提高了数据传输的速度,适用于高速外设与主存之间的数据传输,如磁盘和内存之间的数据传输。
9.2 程序查询方式及其接口
9.2.1 程序查询方式
工作流程 :
首先,主机通过程序向接口发送设备地址,选中要进行通信的外设。然后,主机不断地读取外设的状态端口,检查外设是否准备好进行数据传输。如果外设处于 “忙” 状态,主机就循环等待;如果外设处于 “就绪” 状态,主机就通过接口的数据端口与外设进行数据传输。在数据传输完成后,主机可能还需要再次检查外设的状态,以确保数据传输正确完成。
优缺点 :
优点 :实现简单,不需要额外的硬件支持,只需要在程序中加入查询外设状态的代码即可。这种方式适用于外设数据传输速度较慢,且对实时性要求不高的情况。
缺点 :CPU 的利用率很低,因为在查询外设状态的过程中,CPU 一直处于等待状态,不能执行其他有效的任务。特别是当外设长时间未准备好时,会浪费大量的 CPU 时间,导致整个系统的效率低下。
9.2.2 程序查询方式接口
接口电路组成 :
设备选择电路 :用于识别主机发送的设备地址,当地址匹配时,选中对应的外设接口,使该外设能够与主机进行通信。
数据缓冲寄存器 :作为主机和外设之间数据传输的缓冲器,用于暂存要传输的数据。在数据输入时,外设将数据先存入缓冲寄存器,等待主机读取;在数据输出时,主机将数据先写入缓冲寄存器,再由外设读取。
状态寄存器 :用于存储外设的状态信息,如 “忙”、“就绪” 等状态。主机通过读取状态寄存器来判断外设是否可以进行数据传输。状态寄存器的各位可以分别表示不同的状态,例如,某一位可以表示设备是否正在工作,另一位可以表示设备是否有数据可供读取等。
控制寄存器 :主机通过向控制寄存器写入控制信号来控制外设的操作。例如,主机可以通过控制寄存器发送启动信号或停止信号,控制外设的工作状态。控制寄存器的内容根据外设的具体功能和要求而定。
9.3 中断系统和程序中断方式
9.3.1 中断的基本概念
定义 :中断是指计算机在执行程序过程中,遇到某些紧急事件或外部请求时,暂停当前正在执行的程序,转而去执行相应的中断服务程序来处理这些事件或请求,处理完成后再返回原来被中断的程序继续执行。
作用 :
提高 CPU 效率 :使 CPU 不必一直等待外设准备好数据,在等待期间可以执行其他程序。例如,当打印机打印文档时,CPU 可以处理其他任务,而不是一直查询打印机是否打印完成。
实时处理 :能及时响应外部设备的请求,对于一些需要实时处理的事件,如外部设备的故障检测、实时数据采集等非常重要。
9.3.2 中断请求和中断判优
中断请求信号的产生 :外部设备通过中断请求线向 CPU 发送中断请求信号。例如,当键盘有按键按下时,键盘接口会产生一个中断请求信号,通知 CPU 有数据需要读取。
中断判优 :当多个外部设备同时发出中断请求时,需要确定先处理哪个中断。有两种判优方式:
硬件判优 :通过硬件电路实现,如链式查询方式、中断优先级编码器等。链式查询方式是将所有中断请求信号连接成一个链,CPU 按顺序查询,离 CPU 近的设备优先级高;中断优先级编码器则根据预先设定的优先级规则,对多个中断请求进行编码,CPU 根据编码判断优先级。
软件判优 :在 CPU 响应中断后,通过软件查询中断源来确定优先级。这种方式灵活性高,但响应速度相对较慢。
9.3.3 中断响应和中断处理
中断响应条件:CPU 在满足一定条件时才会响应中断,如当前指令执行完、CPU 处于允许中断状态等。当这些条件满足时,CPU 会暂停当前程序的执行,进入中断响应周期。
中断处理过程:
保护现场:将被中断程序的断点(下一条要执行的指令地址)和相关寄存器的内容保存到堆栈中,以便中断处理完成后能正确返回原程序。
执行中断服务程序:根据中断源的不同,执行相应的中断服务程序来处理中断事件。例如,对于定时器中断,可能是更新系统时间;对于磁盘中断,可能是读取或写入磁盘数据。
恢复现场:中断服务程序执行完后,将之前保存的断点和寄存器内容从堆栈中恢复,使 CPU 能继续执行原来被中断的程序。
9.3.4 多重中断与中断屏蔽
多重中断概念 :在 CPU 执行中断服务程序的过程中,又收到新的中断请求并响应的情况。例如,CPU 在处理打印机中断时,又收到键盘的中断请求并进行处理。
中断屏蔽 :通过设置中断屏蔽字来控制某些中断请求是否被响应。例如,在处理一些重要的中断时,可以屏蔽其他较低优先级的中断,以保证重要中断的处理不受干扰。
9.3.5 中断全过程
中断全过程包括中断请求的产生、中断判优、中断响应、中断处理和中断返回。以键盘输入为例,首先键盘按下产生中断请求,经过中断判优后,如果该请求被响应,CPU 暂停当前程序,保护现场,执行键盘中断服务程序(读取按键值),恢复现场,最后返回原来的程序继续执行。
9.3.6 程序中断接口结构
接口组成部分 :
中断请求触发器 :用于接收外部设备的中断请求信号,将其转换为接口内部的信号,等待 CPU 查询或响应。
中断屏蔽触发器 :与中断请求触发器配合,通过设置屏蔽字,决定是否将中断请求信号传递给 CPU。
中断向量寄存器 :用于存储中断服务程序的入口地址或中断向量。当 CPU 响应中断时,根据这个地址找到对应的中断服务程序。
设备状态寄存器 :记录设备的状态信息,如设备是否忙、是否有错误等,供 CPU 在处理中断时参考。
9.4 DMA方式及其接口
9.4.1 DMA方式的基本概念
定义 :直接存储器访问(DMA)是一种在外设和主存储器之间直接进行数据传输的方式,不需要 CPU 的干预。它通过 DMA 控制器来控制数据传输,减轻了 CPU 在数据输入输出过程中的负担,提高了数据传输效率。
应用场景 :适用于高速外设与主存储器之间的数据大量传输,如磁盘与内存之间的数据读写。例如,在硬盘读取大量数据时,使用 DMA 方式可以快速地将数据从硬盘直接传输到内存,而不需要 CPU 逐个字节地处理。
9.4.2 DMA接口
组成部分 :
地址寄存器 :用于存放主存的地址。在 DMA 传输过程中,它指定数据在主存中的读写位置,并且在每次传输后自动更新地址,指向下一个要读写的主存单元。
字计数器 :记录要传输的数据字数。每传输一个字,字计数器就减 1,当计数器的值为 0 时,表示本次 DMA 传输完成。
数据缓冲寄存器 :作为外设和主存之间数据传输的缓冲。它可以暂存从外设读取的数据,然后写入主存,或者先从主存读取数据,再发送给外设。
控制逻辑电路 :协调 DMA 接口各部分的工作,产生 DMA 请求信号,接收 CPU 的响应信号,控制数据传输的方向、启动和停止等操作。
9.4.3 DMA传送方法与传送过程
传送方法 :
停止 CPU 访问主存法 :在 DMA 传输期间,CPU 停止访问主存,将总线控制权完全交给 DMA 控制器。这种方法简单,但会使 CPU 暂停工作,可能影响系统的性能。
周期挪用法 :DMA 控制器利用 CPU 不访问主存的周期(如 CPU 执行内部操作或等待外部设备响应的周期)来进行数据传输。这种方法不会使 CPU 长时间停止工作,但实现相对复杂。
DMA 与 CPU 交替访问法 :将一个存储周期分为两个时间片,一个时间片给 CPU 访问主存,另一个时间片给 DMA 控制器访问主存。这种方法需要主存的工作速度较高,且硬件成本也较高。
传送过程 :
DMA 请求 :外设向 DMA 控制器发出 DMA 请求信号,表示需要进行数据传输。
DMA 响应 :DMA 控制器收到请求后,向 CPU 发出总线请求信号,请求总线控制权。CPU 在完成当前总线周期后,响应 DMA 请求,将总线控制权交给 DMA 控制器。
数据传输 :DMA 控制器根据预先设置的参数(如主存地址、数据字数等),控制数据在外设和主存之间的传输。在传输过程中,地址寄存器自动更新地址,字计数器自动计数。
传输结束 :当字计数器的值为 0 时,表示数据传输完成。DMA 控制器向 CPU 发出中断请求,通知 CPU 数据传输结束,同时释放总线控制权,CPU 可以继续正常工作。
9.5 通道控制方式
9.5.1 通道的基本概念
定义 :通道是一种特殊的处理机,它能够独立执行通道程序,控制设备和主存之间的数据传输。通道可以看作是一种具有较强输入输出处理能力的硬件设备,它减轻了 CPU 对输入输出操作的管理负担。
作用 :通道通过执行专门的通道程序来管理多种外部设备的数据传输,使得 CPU 能够更专注于执行计算任务。例如,在一个多任务系统中,通道可以同时处理多个磁盘设备的读写操作,而 CPU 可以同时处理其他的计算任务。
9.5.2 通道的类型与结构
类型 :
字节多路通道 :可以连接多个低速设备,以字节为单位交叉地为各设备服务。它可以同时为多个设备进行数据传输,但每个设备每次只能传输一个字节。例如,连接打印机、键盘等低速设备,轮流为它们传输数据。
选择通道 :每次只能为一个高速设备服务,以成组的方式进行数据传输。主要用于连接高速设备,如磁盘等。在一段时间内,通道全部的带宽都用于这个高速设备的数据传输。
数组多路通道 :综合了字节多路通道和选择通道的特点,它可以连接多个高速设备,并且以成组的方式为这些设备轮流服务。在为一个设备传输一组数据后,就转向为下一个设备服务。
结构 :通道通常包括通道控制器、通道地址字寄存器、通道命令字寄存器、数据缓冲寄存器等部分。通道控制器用于控制通道的操作,地址字寄存器用于存放主存地址,命令字寄存器用于存放通道命令,数据缓冲寄存器用于数据传输的缓冲。
9.5.3 通道程序
定义 :通道程序是由通道指令组成的程序,用于控制通道的操作和数据传输。通道指令规定了数据传输的操作类型(如读、写)、主存地址、传输字数等信息。
编写与执行 :通道程序可以由操作系统或专门的通道程序设计语言编写。在执行时,通道从主存中读取通道程序,按照程序中的指令顺序执行,完成设备与主存之间的数据传输。例如,对于磁盘读写操作,通道程序会规定读取磁盘的扇区地址、数据在主存中的存储地址以及读取的数据字数等内容。
9.5.4 通道工作过程
设备请求 :外部设备向通道发出操作请求,如读写请求。
通道接收请求并获取通道程序 :通道收到请求后,根据设备类型和操作要求,从主存中获取相应的通道程序。
通道执行程序 :通道按照通道程序中的指令,控制数据在设备和主存之间的传输。在传输过程中,通道会更新主存地址、传输字数等参数。
传输完成 :当通道程序执行完毕,数据传输完成,通道向 CPU 发出中断请求,通知 CPU 数据传输结束,同时可以准备接收下一个设备的请求。
评论