架构师成长(一)之计算机系统知识
目录
一、计算机系统概述
(一)计算机系统层次结构
(二)计算机的基本组成
(三)计算机的工作过程
(四)计算机硬件的主要技术指标
二、运算方法和运算部件
(一)数据的表示
(二)定点运算
(三)浮点运算
(四)算术逻辑单元 ALU
三、存储系统
(一)存储系统概述
(二)主存储器
(三)高速缓冲存储器 Cache
(四)辅助存储器
四、指令系统
(一)指令格式
(二)指令的寻址方式
(三)CISC 与 RISC
五、中央处理器 (CPU)
(一)CPU 的功能和基本结构
(二)指令周期
(三)微程序控制器
(四)硬布线控制器
(五)CPU 的发展
六、总线
(一)总线概述
(二)总线仲裁
(三)总线操作和定时
(四)总线标准
七、输入输出系统
(一)I/O 系统概述
(二)I/O 接口
(三)I/O 方式
八、多机系统与并行处理
(一)多机系统的基本概念
(二)并行处理技术
九、计算机的发展与应用
(一)计算机的发展历程
一、计算机系统概述
(一)计算机系统层次结构
计算机系统从高到低分为多个层次。应用语言机器级面向用户,用户通过特定应用语言与计算机交互。高级语言机器级是程序员使用高级编程语言(如 C、Java 等)编写程序的层次,这些语言更接近人类自然语言,便于编程。汇编语言机器级则使用助记符来表示机器指令,与硬件联系更紧密。操作系统机器级管理计算机的软硬件资源,为上层提供服务。传统机器级直接执行机器指令,是硬件实现的基础。微程序机器级则是用微程序实现机器指令的功能,处于硬件底层。软件和硬件在不同层次有着明确的界面划分,例如在高级语言机器级,软件主要体现为高级语言编写的程序,硬件则提供运行环境;而在微程序机器级,硬件的微程序设计决定了机器指令的实现方式。
(二)计算机的基本组成
计算机由运算器、控制器、存储器、输入设备和输出设备五大部件组成。运算器负责进行算术运算和逻辑运算,如加、减、乘、除以及与、或、非等操作。控制器则指挥计算机各部件协调工作,从存储器中取出指令并进行分析,然后发出控制信号。存储器用于存储程序和数据,分为主存(内存)和辅存(外存),主存速度快但容量相对较小,辅存容量大但速度较慢。输入设备如键盘、鼠标等,用于将外部信息输入到计算机中。输出设备如显示器、打印机等,将计算机处理的结果输出给用户。各部件之间通过数据总线、地址总线和控制总线进行数据流动和信息交互。例如,运算器从存储器中读取数据进行运算,运算结果再写回存储器;控制器根据指令向各部件发送控制信号,协调它们的工作。
(三)计算机的工作过程
计算机通过取指令、分析指令和执行指令的基本流程完成程序的运行。首先,控制器从存储器中按顺序取出指令,这就是取指令阶段。然后,对取出的指令进行分析,确定指令的操作类型和操作数的地址等信息,即分析指令阶段。最后,根据分析结果,由运算器等部件执行指令所规定的操作,如进行算术运算、数据传输等,这是执行指令阶段。指令和数据在计算机中都以二进制形式存储,通过地址来访问。例如,程序中的一条加法指令,在存储器中以二进制编码形式存储,控制器取出该指令后,分析出是加法操作以及操作数的地址,然后从相应地址取出操作数,在运算器中进行加法运算,最后将结果存回指定地址。
(四)计算机硬件的主要技术指标
- 机器字长:指计算机能直接处理的二进制数据的位数,它影响计算机的运算精度和处理能力。例如,32 位机器字长的计算机一次能处理 32 位二进制数据,而 64 位机器字长的计算机处理能力更强,能处理更大范围的数据和更复杂的运算。
- 存储容量:
- 主存容量:是指主存储器能够存储的二进制信息量,通常以字节(Byte)为单位。例如,一台计算机的主存容量为 8GB,即表示它能存储 8×1024×1024×1024 字节的数据。
- 辅存容量:主要指外部存储设备如硬盘、光盘等的存储容量,其容量通常比主存大得多,用于长期存储大量数据。
- 运算速度:
- 吞吐量:指系统在单位时间内处理的任务量,反映了计算机系统的整体性能。
- 响应时间:从用户提交任务到系统返回结果所经历的时间,是衡量系统性能的重要指标。
- 主频:即计算机的时钟频率,单位为赫兹(Hz),它决定了计算机的运算速度。主频越高,计算机在单位时间内执行的指令数越多。
- CPI:每条指令执行所需的平均时钟周期数,它反映了指令执行的效率。
- MIPS:每秒执行的百万条指令数,用于衡量计算机的运算速度。例如,一台计算机的 MIPS 值为 1000,表示它每秒能执行 1000 万条指令。
- MFLOPS:每秒执行的百万次浮点运算数,主要用于衡量计算机在浮点运算方面的性能,对于科学计算等领域的应用很重要。
二、运算方法和运算部件
(一)数据的表示
- 进位计数制及其相互转换:
- 二进制只有 0 和 1 两个数码,八进制有 0 - 7 八个数码,十进制是我们日常生活中常用的计数制,有 0 - 9 十个数码,十六进制则有 0 - 9 和 A - F(表示 10 - 15)十六个数码。
- 二进制转换为十进制采用按权展开求和的方法。例如,二进制数 101 转换为十进制为 。十进制转换为二进制整数部分采用除 2 取余的方法,小数部分采用乘 2 取整的方法。二进制与八进制、十六进制之间的转换可以通过分组转换的方式,每 3 位二进制对应 1 位八进制,每 4 位二进制对应 1 位十六进制。
- 真值和机器数:
- 真值:是数据的实际数值。
- 机器数:是数据在计算机中的表示形式。
- 原码:符号位用 0 表示正数,1 表示负数,数值部分为真值的绝对值。例如,8 位原码表示的 +5 为 00000101, - 5 为 10000101。
- 反码:正数的反码与原码相同,负数的反码是在原码的基础上,符号位不变,数值部分各位取反。如 - 5 的反码为 11111010。
- 补码:正数的补码与原码相同,负数的补码是在反码的基础上加 1。补码在运算中具有优势,它可以将减法运算转化为加法运算,简化运算器的设计。例如,计算 5 - 3 可以转化为 5 + (-3) 的补码运算。
- 移码:常用于表示浮点数的阶码,它是在补码的基础上,将符号位取反得到。
- 定点数和浮点数:
- 定点数:分为定点整数和定点小数,小数点位置固定。定点整数表示范围有限,例如 8 位定点整数原码表示范围为 -127 到 +127。
- 浮点数:表示形式为 ,其中 为尾数, 为阶码。IEEE 754 标准规定了浮点数的表示格式,单精度浮点数(32 位)中,1 位符号位,8 位阶码,23 位尾数;双精度浮点数(64 位)中,1 位符号位,11 位阶码,52 位尾数。浮点数的表示范围比定点数大,但运算相对复杂。为了提高精度,需要对浮点数进行规格化,即尾数的最高位为 1(对于正数,尾数范围为 ;对于负数,尾数范围为 )。
(二)定点运算
- 移位运算:
- 算术移位:对于有符号数,符号位不变,数值部分移位。左移时,低位补 0,高位溢出舍弃;右移时,正数高位补 0,负数高位补 1。算术移位可用于实现乘除 2 的整数倍运算。
- 逻辑移位:对无符号数进行移位,移位时不管符号位,整体移位,空位补 0。逻辑移位常用于处理无符号数的位操作。
- 加法与减法运算:补码加减法运算规则是将减法运算转化为加法运算,即 补码。例如,计算 5 - 3,先求 - 3 的补码为 11111101,然后与 5 的补码 00000101 相加得到 00000010,即结果 2。溢出的判断方法常用双符号位法,若运算结果的两个符号位不同,则表示发生溢出。
- 乘法运算:
- 原码一位乘法:根据乘数的每一位决定是否加被乘数,然后右移一位。例如,计算 3×2,3 的原码为 0011,2 的原码为 0010,通过逐位判断乘数 2 的每一位,决定是否加 3 并右移,最终得到结果 0110,即 6。
- 补码一位乘法(布斯算法):根据乘数的相邻两位判断操作,比原码乘法更适合补码运算。例如,对于补码表示的乘数和被乘数,通过布斯算法进行乘法运算,能更高效地得到结果。
- 除法运算:
- 原码除法(恢复余数法):通过比较被除数和除数的大小进行运算,若不够除则恢复余数。例如,计算 7÷3,先比较 7 和 3,够除则商 1,余数为 4,再用余数 4 与 3 比较,继续运算,直到得到最终商和余数。
- 原码除法(不恢复余数法):在恢复余数法的基础上进行改进,避免了恢复余数的操作,提高了运算效率。
(三)浮点运算
- 浮点加减法:运算步骤包括对阶、尾数运算、规格化、舍入处理。对阶时,小阶向大阶看齐,尾数右移。例如,计算 ,先将 对阶为 ,然后进行尾数相加 ,再进行规格化和舍入处理得到最终结果。
- 浮点乘除法运算:基本原理是将阶码和尾数分别进行运算。乘法时,阶码相加,尾数相乘;除法时,阶码相减,尾数相除。例如,计算 ,阶码 ,尾数 ,最终结果为 ,再进行规格化等处理。
(四)算术逻辑单元 ALU
ALU 是实现基本算术和逻辑运算的部件,其基本结构包含多个运算模块和控制电路。通过控制信号选择不同的运算模块,实现加、减、乘、除、与、或、非等运算。例如,当控制信号选择加法模块时,ALU 对输入的两个数据进行加法运算,输出结果。
三、存储系统
(一)存储系统概述
存储系统采用层次结构,即 Cache - 主存 - 辅存。Cache 速度最快,位于 CPU 附近,用于存放 CPU 近期可能频繁访问的数据和指令,解决 CPU 与主存速度不匹配的问题。主存是计算机的主要工作存储器,用于存储正在运行的程序和数据。辅存如硬盘、光盘等,容量大但速度慢,用于长期存储大量数据。这种层次结构通过合理分配不同层次存储器的容量和速度,实现了速度、容量、成本之间的平衡。例如,对于经常访问的程序和数据,存放在 Cache 中,提高访问速度;大量不常用的数据存放在辅存中,降低成本。
(二)主存储器
- 存储芯片:
- 随机存取存储器(SRAM):速度快,常用于高速缓存,但成本高、集成度低。其工作原理是利用双稳态触发器存储信息,只要电源不掉电,信息就不会丢失。
- 动态随机存取存储器(DRAM):成本低、集成度高,但速度相对较慢。它利用电容存储电荷来表示信息,由于电容会漏电,需要定期刷新以保持信息。
- 只读存储器(ROM):信息在制造时写入,只能读出不能写入,常用于存放固定不变的程序和数据,如 BIOS 程序。
- 可编程只读存储器(PROM):用户可一次性写入信息,但写入后不能再修改。
- 可擦除可编程只读存储器(EPROM):可以用紫外线照射擦除信息,然后重新编程。
- 电可擦除可编程只读存储器(EEPROM):可以用电信号擦除和编程,使用更方便。
- 闪存(Flash Memory):是一种非易失性存储器,兼具 EEPROM 的特点,且可快速擦除和写入,广泛应用于 U 盘、固态硬盘等设备。
- 主存的基本组成:由存储体、地址译码器、读写电路、控制电路等组成。地址线用于选择存储单元,数据线用于传输数据,控制线用于控制读写等操作。存储容量与地址线和数据线的关系为:存储容量 = 地址线位数数据线位数。例如,地址线有 10 位,数据线有 8 位,则存储容量为 位,即 1024 字节。
- 主存与 CPU 的连接:
- 位扩展:当存储芯片的数据位数小于主存要求的数据位数时,采用位扩展方法,将多个芯片并联,使它们的地址线、控制线并联,数据线分别连接。例如,用 8 片 16K×1 位的芯片组成 16K×8 位的存储器。
- 字扩展:当存储芯片的字数小于主存要求的字数时,采用字扩展方法,将多个芯片串联,它们的数据线、控制线并联,地址线高位用于片选,低位并联。例如,用 4 片 16K×8 位的芯片组成 64K×8 位的存储器。
- 字位同时扩展:当存储芯片的字数和位数都不满足主存要求时,同时采用字扩展和位扩展方法。
- 主存的校验:
- 奇偶校验:通过在数据中添加一位校验位,使整个数据(包括校验位)中 1 的个数为奇数(奇校验)或偶数(偶校验)。例如,对于数据 1010,采用奇校验时,校验位为 1,使 1 的个数为奇数。奇偶校验只能检测出一位错误,无法纠正错误。
- 海明校验:能检测并纠正一位错误。它通过在数据中插入多个校验位,根据特定的规则计算校验位的值。例如,对于 8 位数据,需要插入 4 位校验位,通过特定的海明码计算公式得到校验位的值,存储时将数据和校验位一起存储。在读取时,通过同样的公式计算校验位,并与存储的校验位比较,若不一致则可确定错误位置并纠正。
(三)高速缓冲存储器 Cache
- Cache 的基本原理:基于程序的局部性原理,即程序在执行时往往会集中访问某一区域的数据和指令。Cache - 主存的地址映射方式有:
- 全相联映射:主存中的任意一块可以映射到 Cache 的任意一块。优点是命中率高,缺点是硬件实现复杂,成本高。
- 直接映射:主存中的每一块只能映射到 Cache 的特定一块。优点是硬件实现简单,缺点是命中率相对较低,容易产生冲突。
- 组相联映射:是全相联映射和直接映射的折中,主存中的一块可以映射到 Cache 的某一组中的任意一块。地址映射与变换过程是将主存地址转换为 Cache 地址,通过地址的不同字段来确定映射关系。例如,在直接映射中,主存地址的低位部分直接作为 Cache 地址的低位部分,高位部分用于判断是否命中。
- Cache 的替换策略:
- 随机算法(RAND):随机选择 Cache 中的一块进行替换,实现简单,但命中率较低。
- 先进先出算法(FIFO):将最先进入 Cache 的块替换出去,实现相对简单,但可能会将经常使用的块替换掉。
- 近期最少使用算法(LRU):将近期最少使用的块替换出去,能较好地反映程序的局部性,命中率较高,但硬件实现相对复杂。
- Cache 的写策略:
- 写直达法:当 CPU 对 Cache 进行写操作时,同时将数据写入主存。优点是一致性好,缺点是每次写操作都要访问主存,速度较慢。
- 写回法:当 CPU 对 Cache 进行写操作时,只在 Cache 中修改,当该块被替换出 Cache 时,才将其写回主存。优点是速度快,减少了对主存的写操作次数,但可能会出现数据不一致的情况,需要采取相应的一致性维护措施。
(四)辅助存储器
以硬盘为例,硬盘由盘片、磁头、电机等部件组成。盘片是存储数据的介质,表面涂有磁性材料;磁头负责读写数据,通过在盘片表面移动来访问不同的位置;电机带动盘片高速旋转。其工作原理是,当需要写入数据时,磁头根据要写入的数据信号改变盘片表面磁性材料的磁极方向来记录信息;读取数据时,磁头感应盘片表面磁场的变化,将其转换为电信号,从而获取数据。
硬盘的性能指标包括:
- 平均存取时间:指磁头从起始位置移动到目标位置并完成读写操作所需要的平均时间,由寻道时间(磁头移动到指定磁道的时间)、旋转延迟时间(盘片旋转到目标扇区的时间)和数据传输时间组成。一般来说,转速越高的硬盘,旋转延迟时间越短,平均存取时间也相对更短。
- 数据传输率:分为内部数据传输率和外部数据传输率。内部数据传输率是指硬盘磁头与缓存之间的数据传输速度,它主要取决于硬盘的转速和盘片的存储密度;外部数据传输率是指硬盘缓存与主机之间的数据传输速度,受接口类型和总线带宽的限制。例如,SATA 3.0 接口的理论最高外部数据传输率可达 6Gbps。
磁盘阵列(RAID)是将多个独立的物理硬盘组合成一个逻辑硬盘阵列,以提高数据的存储性能、可靠性和容错能力。常见的 RAID 级别有:
- RAID 0:将数据分散存储在多个硬盘上,通过并行读写提高数据传输速度,但不具备容错能力。例如,若有两个硬盘组成 RAID 0,数据会被分成两部分,分别存储在两个硬盘上,读取时可同时从两个硬盘读取,从而加快速度。然而,如果其中一个硬盘出现故障,所有数据都会丢失。
- RAID 1:通过数据镜像的方式,将数据同时写入两个或多个硬盘,以实现数据冗余和容错。当一个硬盘出现故障时,另一个硬盘仍可提供数据。其缺点是存储利用率较低,成本较高。例如,两个硬盘组成 RAID 1,一个硬盘存储的数据与另一个硬盘完全相同。
- RAID 5:将数据和校验信息分散存储在多个硬盘上,任何一个硬盘损坏都可以通过其他硬盘上的数据和校验信息恢复。它兼顾了数据传输性能和容错能力,存储利用率较高,常用于对数据安全性和性能都有一定要求的场景。例如,由 3 个硬盘组成 RAID 5,其中一个硬盘的空间用于存储校验信息,另外两个硬盘存储数据,当其中一个硬盘损坏时,可利用校验信息和其他硬盘的数据恢复损坏的数据。
四、指令系统
(一)指令格式
指令的基本格式包括操作码字段和地址码字段。操作码字段用于指明指令的操作类型,如加法、减法、跳转等;地址码字段用于指定操作数的地址或操作结果的存储地址。
操作码的扩展方式有:
- 固定长度操作码:操作码的长度固定,优点是译码简单,速度快;缺点是指令数量有限,难以满足复杂指令系统的需求。例如,8 位固定长度操作码最多可表示 256 种不同的操作。
- 可变长度操作码:操作码的长度不固定,根据指令的复杂程度和操作数的数量等因素分配不同长度的操作码。这种方式可以有效利用指令编码空间,增加指令数量,但译码相对复杂。例如,对于简单的单操作数指令,操作码可以短一些;对于复杂的多操作数指令,操作码可以长一些。
地址码的种类有:
- 零地址指令:指令中没有地址码字段,操作数通常隐含在堆栈或累加器中。例如,某些堆栈操作指令,如入栈(PUSH)和出栈(POP)指令,操作数默认在堆栈中。
- 一地址指令:指令中只有一个地址码字段,该地址码可能是操作数的地址,也可能是操作结果的存储地址。例如,自增指令(INC),指令中指定的地址所存储的数据进行加 1 操作,结果仍存放在该地址。
- 二地址指令:指令中有两个地址码字段,分别用于指定源操作数地址和目的操作数地址。例如,加法指令 ADD A, B,将地址 A 中的数据与地址 B 中的数据相加,结果存放在地址 B 中。
- 三地址指令:指令中有三个地址码字段,分别用于指定两个源操作数地址和一个结果操作数地址。例如,指令 ADD A, B, C,将地址 A 和地址 B 中的数据相加,结果存放在地址 C 中。
(二)指令的寻址方式
数据寻址方式:
- 立即寻址:操作数直接包含在指令中。例如,指令 ADD R0, #5,将立即数 5 与寄存器 R0 中的数据相加,这里的 #5 就是立即数。这种寻址方式的优点是取数速度快,因为不需要访问存储器来获取操作数。
- 直接寻址:地址码字段直接给出操作数的有效地址。例如,指令 ADD R0, [2000H],将内存地址 2000H 处的数据与寄存器 R0 中的数据相加,[2000H] 表示直接地址。其优点是简单直观,缺点是地址空间有限,因为地址码字段的长度决定了可直接访问的内存范围。
- 间接寻址:地址码字段给出的是操作数地址的地址。例如,指令 ADD R0, @[2000H],先从内存地址 2000H 处取出一个地址,假设为 3000H,然后将内存地址 3000H 处的数据与寄存器 R0 中的数据相加,@ 表示间接寻址。这种寻址方式可以扩大访问内存的范围,但需要两次访问存储器,速度相对较慢。
- 寄存器寻址:操作数存放在寄存器中,指令中直接给出寄存器名。例如,指令 ADD R0, R1,将寄存器 R0 和 R1 中的数据相加,结果可能存放在 R0 或其他指定寄存器中。寄存器寻址速度快,因为寄存器位于 CPU 内部,访问速度比内存快得多。
- 寄存器间接寻址:寄存器中存放的是操作数的地址。例如,指令 ADD R0, @R1,先从寄存器 R1 中取出一个地址,假设为 4000H,然后将内存地址 4000H 处的数据与寄存器 R0 中的数据相加。这种寻址方式结合了寄存器寻址的速度优势和间接寻址扩大访问范围的特点。
- 相对寻址:以程序计数器 PC 的当前值为基准,加上指令中给出的偏移量得到操作数的有效地址。例如,在一条相对转移指令中,假设 PC 当前值为 1000H,指令中的偏移量为 10H,则转移目标地址为 1000H + 10H = 1010H。相对寻址常用于编写位置无关代码和实现循环、分支等程序结构。
- 基址寻址:将基址寄存器的内容与指令中的偏移量相加得到操作数的有效地址。基址寄存器通常用于存放程序或数据段的起始地址,偏移量用于指定相对于基址的位置。例如,基址寄存器 BR 中存放的值为 20000H,指令中的偏移量为 100H,则操作数的有效地址为 20000H + 100H = 20100H。这种寻址方式常用于多道程序设计中,方便程序在内存中的动态分配和重定位。
- 变址寻址:将变址寄存器的内容与指令中的形式地址相加得到操作数的有效地址。变址寄存器通常用于存放数组元素的下标等可变值。例如,变址寄存器 IX 中存放的值为 5,指令中的形式地址为 1000H,对于数组操作,可通过这种方式访问数组中不同位置的元素,操作数的有效地址为 1000H + 5 = 1005H。变址寻址便于对数组等数据结构进行访问。
- 堆栈寻址:操作数存放在堆栈中,通过堆栈指针 SP 来指示堆栈的栈顶位置。例如,入栈指令 PUSH R0,将寄存器 R0 中的数据压入堆栈,SP 的值会相应调整;出栈指令 POP R1,从堆栈栈顶弹出数据到寄存器 R1 中,SP 的值也会相应改变。堆栈常用于子程序调用、中断处理等过程中保存和恢复现场数据。
转移寻址方式:
程序计数器 PC 用于存放当前正在执行的指令的下一条指令的地址。当执行转移指令时,PC 的值会被修改,从而改变程序的执行流程。
- 相对转移:以 PC 的当前值为基准,加上指令中给出的偏移量作为转移目标地址。例如,一条相对转移指令的偏移量为 20H,PC 当前值为 3000H,则转移目标地址为 3000H + 20H = 3020H。相对转移常用于实现条件分支和循环结构,使程序可以在一定范围内灵活跳转。
- 绝对转移:指令中直接给出转移目标的绝对地址。例如,指令 JMP 5000H,程序直接跳转到地址 5000H 处继续执行。绝对转移可以跳转到内存中的任意位置,但需要明确知道目标地址,通常用于程序的初始化、跳转至固定入口点等场景。
(三)CISC 与 RISC
- CISC(复杂指令系统计算机):
- 特点:指令系统复杂,指令数量多,指令格式和寻址方式多样,有些指令功能强大但执行周期长。例如,一条 CISC 指令可能完成多个操作,如在一条指令中同时进行数据的读取、运算和存储。
- 缺点:硬件设计复杂,开发成本高,指令执行速度慢,因为复杂的指令需要更多的硬件逻辑和时间来译码和执行。
- RISC(精简指令系统计算机):
- 特点:指令系统简单,指令数量少,指令格式和寻址方式相对统一,指令长度固定,且大多数指令在一个时钟周期内完成。例如,RISC 指令通常只完成一个基本操作,如加法、减法等。
- 优点:硬件设计简单,易于实现流水线操作,提高了指令执行速度和 CPU 性能。同时,RISC 架构的功耗较低,适用于移动设备等对功耗要求严格的场景。
- 发展趋势:随着技术的发展,RISC 架构因其高效性和低功耗等优势在嵌入式系统、移动设备等领域得到广泛应用。而 CISC 架构也在不断改进,吸收 RISC 的一些优点,如采用超标量技术等提高指令执行效率。现代计算机系统往往融合了 CISC 和 RISC 的一些特点,以满足不同应用场景的需求。
五、中央处理器 (CPU)
(一)CPU 的功能和基本结构
-
CPU 的功能:
- 指令控制:负责从内存中取出指令,并对指令进行译码和执行,控制程序的执行流程。例如,按照指令的顺序依次取出指令,根据指令的操作码决定执行何种操作。
- 操作控制:发出各种控制信号,指挥计算机各部件完成指令规定的操作。例如,控制运算器进行算术运算或逻辑运算,控制存储器进行读写操作等。
- 时间控制:为各部件提供定时信号,保证计算机各部件协调有序地工作。例如,通过时钟信号来控制指令的取指、译码和执行等操作的节奏。
- 数据加工:对数据进行算术运算和逻辑运算,完成数据的处理任务。例如,对从存储器中读取的数据进行加法、乘法等运算。
-
CPU 的基本结构:
- 运算器:由算术逻辑单元(ALU)、累加器(ACC)、通用寄存器组等组成,负责执行算术和逻辑运算。例如,ALU 在控制信号的作用下,对通用寄存器或累加器中的数据进行运算,结果可以存回累加器或通用寄存器。
- 控制器:
- 指令部件:包括程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)等。PC 用于存放即将执行的指令的地址,IR 用于存放当前正在执行的指令,ID 对指令进行译码,分析指令的操作类型和操作数地址等信息。
- 时序部件:产生各种时序信号,控制指令的执行步骤和各部件的工作节奏。例如,时钟发生器产生的时钟信号,经过时序电路的处理,为不同的操作提供合适的定时信号。
- 微操作控制部件:根据指令译码的结果和时序信号,产生一系列微操作控制信号,控制计算机各部件完成具体的操作。例如,发出控制信号使运算器进行加法运算,使存储器进行读操作等。
- 寄存器组:
- 通用寄存器:用于临时存放操作数和中间结果,可提高运算速度。例如,在进行多次运算时,中间结果可以暂存于通用寄存器中,避免频繁访问内存。
- 专用寄存器:如程序计数器 PC、指令寄存器 IR 等。PC 指示程序的执行顺序,IR 保存当前执行的指令,它们在指令的执行过程中起着关键作用。
(二)指令周期
指令周期的概念:指 CPU 从内存中取出一条指令并执行完毕所需要的全部时间。不同类型的指令,其指令周期可能不同。例如,简单的加法指令的指令周期可能较短,而复杂的乘法指令或涉及内存间接寻址的指令的指令周期可能较长。
-
指令周期的阶段及基本操作和信息流:
- 取指周期:CPU 从内存中取出指令。具体操作是将 PC 的值送到地址总线,从内存中读取指令并存入 IR 中,同时 PC 的值自动加 1,指向下一条指令的地址。信息流为:PC → 地址总线 → 内存 → 数据总线 → IR,PC + 1 → PC。
- 间址周期:当指令的寻址方式为间接寻址时,需要在间址周期获取操作数的有效地址。例如,从内存中取出间接地址所指向的地址作为操作数的有效地址。信息流为:IR 中的间接地址字段 → 地址总线 → 内存 → 数据总线 → 形成有效地址。
- 执行周期:根据指令的操作码,CPU 执行指令规定的操作。例如,对于加法指令,从寄存器或内存中取出操作数,在运算器中进行加法运算,结果存回指定的寄存器或内存单元。信息流因指令的操作类型而异,如对于 ADD A, B 指令(假设 A、B 为寄存器),信息流为:寄存器 A → ALU,寄存器 B → ALU,ALU 运算结果 → 寄存器 B。
- 中断周期:当 CPU 接收到中断请求并响应时,进入中断周期。在这个周期,CPU 保存当前程序的断点(PC 的值)和一些寄存器的内容到堆栈中,然后根据中断向量获取中断服务程序的入口地址,将其送入 PC,以便执行中断服务程序。信息流为:PC → 堆栈,寄存器内容 → 堆栈,中断向量 → PC。
-
指令周期流程图:可以用流程图的形式清晰地表示指令周期中各个阶段的顺序和操作。例如,从取指周期开始,经过判断是否为间接寻址(若是则进入间址周期),然后进入执行周期,在执行周期结束后判断是否有中断请求(若有则进入中断周期),最后回到取指周期,如此循环执行程序。
(三)微程序控制器
微程序设计的基本概念:
-
- 微指令:是控制计算机各部件完成一个基本微操作的命令,一条微指令通常包含操作控制字段和下地址字段。操作控制字段用于发出各种控制信号,下地址字段用于指出下一条微指令的地址。
- 微操作:是计算机中最基本的操作,如打开或关闭某个门电路、使寄存器进行一次移位等。
- 微命令:是控制部件通过控制线向执行部件发出的各种控制信号,用于完成微操作。
- 微周期:从控制存储器中读取一条微指令并执行相应微操作所需的时间。
- 控制存储器:用于存放微程序,微程序是由一系列微指令组成的,对应于一条机器指令。例如,对于一条加法指令,有一段微程序来控制完成取操作数、运算、存结果等一系列微操作。
- 微指令的编码方式:
- 直接编码:微指令的操作控制字段中,每一位对应一个微命令,1 表示该微命令有效,0 表示无效。这种编码方式简单直观,译码速度快,但微指令长度较长。
- 字段直接编码:将操作控制字段分成若干个字段,每个字段通过编码表示一组微命令,同一字段内的微命令不能同时有效。这种方式可以缩短微指令长度,但译码相对复杂一些。
- 字段间接编码:在字段直接编码的基础上,某些字段的编码需要通过其他字段的编码来进一步解释,进一步压缩微指令长度,但译码更为复杂。
-
微程序控制器的组成与工作原理:
- 硬件组成:包括控制存储器(CM)、微指令寄存器(μIR)、微地址寄存器(μAR)、微地址形成电路等。控制存储器存放微程序,微指令寄存器存放从控制存储器中取出的微指令,微地址寄存器用于保存微指令的地址,微地址形成电路根据当前微指令的下地址字段和一些条件信号形成下一条微指令的地址。
- 微程序的入口地址形成方法:通常根据指令的操作码来形成微程序的入口地址。
- 微指令的执行流程:在取微指令阶段,根据微地址寄存器中的地址从控制存储器中取出微指令并存入微指令寄存器。然后,微指令寄存器中的操作控制字段发出微命令,控制计算机各部件执行相应的微操作。同时,微地址形成电路根据微指令的下地址字段和相关条件,确定下一条微指令的地址,并将其存入微地址寄存器,为下一次取微指令做准备。如此循环,直到完成一条机器指令的执行。
(四)硬布线控制器
-
硬布线控制器的设计思想:硬布线控制器通过组合逻辑电路产生控制信号。它根据指令的操作码、当前的机器状态以及时序信号,通过复杂的逻辑门电路组合来生成控制计算机各部件工作的控制信号。例如,对于一条加法指令,通过特定的逻辑电路组合,在合适的时序下产生使运算器进行加法运算、控制存储器读写等控制信号。
-
与微程序控制器的对比:
- 硬布线控制器的优点:由于控制信号由硬件直接产生,其速度快,能满足对速度要求较高的应用场景。对于一些简单指令,硬布线控制器可以快速产生控制信号,使指令迅速执行。
- 硬布线控制器的缺点:设计复杂,一旦设计完成,修改和扩展困难。因为改变指令功能或增加新指令,需要重新设计和布线逻辑电路,成本高且耗时。
- 微程序控制器的优点:设计相对简单,修改和扩展指令系统容易。只需修改或增加控制存储器中的微程序,而不需要改变硬件电路。这使得微程序控制器在指令系统的开发和维护上更具灵活性。
- 微程序控制器的缺点:由于需要从控制存储器中读取微指令,存在一定的时间延迟,速度相对硬布线控制器较慢。特别是对于一些简单指令,这种延迟可能更为明显。
(五)CPU 的发展
-
从单核到多核:早期的 CPU 通常为单核,即只有一个处理核心,在同一时间只能执行一个线程。随着技术的发展,多核 CPU 应运而生,它在一个芯片内集成了多个处理核心,每个核心都可以独立执行线程。例如,双核 CPU 可以同时处理两个线程,四核 CPU 能同时处理四个线程,大大提高了 CPU 的并行处理能力,使计算机可以同时运行多个复杂任务,如在运行大型游戏的同时进行视频渲染等。
-
超标量技术:超标量技术允许 CPU 在一个时钟周期内同时发射多条指令并执行。通过在 CPU 内部设置多个功能部件,如多个运算器、多个指令译码器等,使不同的指令可以在同一时钟周期内并行执行不同的操作。例如,在一个时钟周期内,一条指令可以进行取操作数,另一条指令可以进行运算,从而提高了指令的执行效率。
-
超流水线技术:超流水线技术将指令的执行过程进一步细分,增加流水线的级数。例如,传统流水线可能分为 5 级,超流水线技术可以将其细分到 8 级甚至更多。这样每个时钟周期可以启动更多的指令进入流水线,虽然每条指令的执行总时间并没有减少,但由于同时处于流水线中的指令增多,整体上提高了指令的执行效率。然而,超流水线技术也增加了流水线相关问题的复杂性,如数据相关和控制相关等问题可能更加突出。
六、总线
(一)总线概述
-
总线的定义:总线是计算机系统中连接各个部件的公共信息传输线路,它允许不同部件之间进行数据、地址和控制信息的传输。例如,CPU、内存、I/O 设备等都通过总线相互连接并进行通信。
-
总线的分类:
- 片内总线:是集成电路芯片内部各功能单元之间的连线,用于芯片内部的数据传输。例如,在 CPU 芯片内部,运算器、控制器等部件之间通过片内总线进行数据交互。
- 系统总线:连接计算机系统中各大部件,如 CPU、主存、I/O 接口等。它又可细分为:
- 数据总线:用于传输数据信息,其位数决定了 CPU 一次能传输的数据量,如 32 位数据总线表示 CPU 一次可以传输 32 位二进制数据。
- 地址总线:用于传输地址信息,指出数据或指令在存储器中的存储地址,其位数决定了 CPU 可寻址的内存空间大小。例如,32 位地址总线可寻址的内存空间为 字节,即 4GB。
- 控制总线:用于传输控制信号,协调各部件的工作。例如,读 / 写控制信号、中断请求信号等通过控制总线传输。
- 通信总线:用于计算机系统之间或计算机系统与其他设备之间的通信,如计算机与打印机、计算机与网络设备之间的通信。常见的通信总线有 USB、以太网等。
-
总线的特性:
- 机械特性:规定了总线的物理连接方式,如总线的形状、尺寸、引脚数量和排列等。例如,PCI 总线的插槽形状、引脚定义等都有明确的机械特性规定。
- 电气特性:定义了总线上信号的电压范围、传输速率、信号的逻辑电平定义等。例如,TTL 电平标准规定了高电平为 2.4V - 5V,低电平为 0V - 0.8V。
- 功能特性:指明总线上各条信号线的功能,如哪些是数据信号线、哪些是地址信号线、哪些是控制信号线等。
- 时间特性:规定了总线上信号的时序关系,即信号在什么时间点有效,以确保各部件之间的正确通信。例如,在时钟信号的上升沿或下降沿,数据或控制信号应该满足一定的建立时间和保持时间要求。
-
总线的性能指标:
- 总线宽度:通常指数据总线的位数,如 32 位总线、64 位总线等,它决定了一次传输的数据量。
- 总线带宽:指单位时间内总线上可传输的数据量,单位为字节 / 秒(B/s)或位 / 秒(bps)。总线带宽 = 总线宽度 × 总线时钟频率 / 8(当总线宽度以位为单位时)。例如,一条 32 位总线,时钟频率为 100MHz,则总线带宽为 。
- 总线时钟频率:是总线工作的时钟信号频率,单位为赫兹(Hz),它影响总线的数据传输速率。时钟频率越高,总线在单位时间内可以传输的数据次数越多。
(二)总线仲裁
-
集中式仲裁:
- 链式查询方式:总线上的设备通过一条链式的请求线连接,离仲裁器最近的设备具有最高优先级。当某个设备有总线请求时,通过请求线向仲裁器发送请求信号。仲裁器依次查询每个设备的请求信号,若检测到请求,则将总线授权信号沿链式线传递,直到请求设备接收到授权信号,该设备获得总线控制权。这种方式的优点是硬件简单,成本低;缺点是优先级固定,距离仲裁器远的设备可能长时间得不到总线控制权,且链式线的故障会影响整个仲裁过程。
- 计数器定时查询方式:仲裁器通过一个计数器来查询设备的请求。当有设备发出总线请求时,仲裁器根据计数器的值依次查询设备。计数器可以从 0 开始,也可以从上次查询的位置继续。如果查询到的设备有请求,则该设备获得总线控制权。这种方式的优点是优先级可以通过设置计数器的初始值和计数方式来调整,相对灵活;缺点是需要额外的计数器电路,硬件复杂度比链式查询方式高。
- 独立请求方式:每个设备都有独立的请求线和授权线与仲裁器相连。当设备有总线请求时,通过自己的请求线向仲裁器发送请求信号。仲裁器根据各设备的请求信号,通过独立的授权线向优先级最高的请求设备发送授权信号,该设备获得总线控制权。这种方式的优点是响应速度快,优先级控制灵活,可以根据实际需求动态调整设备的优先级;缺点是硬件复杂度高,需要大量的控制线。
-
分布式仲裁:分布式仲裁不需要集中的仲裁器,总线上的每个设备都有自己的仲裁逻辑。当设备有总线请求时,各设备通过竞争的方式来获得总线控制权。例如,每个设备根据自己的优先级和当前总线状态,在总线上发送特定的信号进行竞争。如果某个设备检测到自己发送的信号在竞争中获胜,则获得总线控制权。这种方式的优点是可靠性高,不存在单一仲裁器的故障问题;缺点是仲裁算法复杂,实现难度较大。
(三)总线操作和定时
-
同步定时方式:总线上的所有设备都由一个统一的时钟信号同步,每个操作都在时钟信号的特定边沿开始和结束。例如,在时钟信号的上升沿,设备开始进行数据传输,在下降沿,数据传输结束。这种方式的优点是时序简单,控制方便,容易实现;缺点是对时钟信号的精度要求高,且由于要满足所有设备中最慢设备的速度,总线速度可能受到限制。
-
异步定时方式:总线上的设备之间没有统一的时钟信号,而是通过握手信号来协调数据传输。例如,当发送设备准备好数据后,向接收设备发送一个请求信号(如 RDY 信号),接收设备收到请求信号后,准备好接收数据并向发送设备发送一个应答信号(如 ACK 信号),发送设备收到应答信号后,开始传输数据。这种方式的优点是可以根据设备的实际速度进行数据传输,总线效率高;缺点是握手信号的交互增加了控制的复杂性,且可能存在时序配合不当的问题。
-
半同步通信:结合了同步通信和异步通信的特点。总线上采用一个统一的时钟信号进行同步,但允许一些设备在某些操作上有额外的等待时间。例如,对于速度较慢的设备,在时钟信号的基础上,可以通过插入等待周期(WAIT 周期)来满足其数据传输速度。这种方式既保留了同步通信的时序简单性,又能适应不同速度设备的需求。
-
分离式通信:在这种通信方式中,总线在数据传输过程中被分成多个阶段,每个阶段由不同的设备占用。例如,在请求阶段,设备向总线请求资源;在寻址阶段,确定数据传输的目标地址;在数据传输阶段,进行数据的实际传输。这种方式提高了总线的利用率,减少了总线的空闲时间,特别适用于多设备并发访问总线的场景。
(四)总线标准
-
PCI(Peripheral Component Interconnect):是一种广泛应用于个人计算机的局部总线标准。它具有较高的数据传输速率,支持多个设备同时连接,并且具有即插即用的功能,方便用户添加和更换设备。例如,显卡、声卡等设备通常通过 PCI 接口与主板连接。PCI 总线的工作频率一般为 33MHz 或 66MHz,32 位 PCI 总线带宽可达 132MB/s 或 264MB/s。
-
PCI - Express:是 PCI 总线的新一代标准,它采用了串行通信技术,相比传统的并行 PCI 总线,具有更高的数据传输速率、更低的功耗和更好的扩展性。PCI - Express 有多种规格,如 x1、x4、x8、x16 等,其中 x16 规格常用于连接高性能显卡,其数据传输速率可达数 GB/s。例如,PCI - Express 3.0 x16 的单向带宽可达 8GB/s。
-
USB(Universal Serial Bus):是一种通用的串行总线标准,广泛应用于各种外部设备的连接,如鼠标、键盘、打印机、移动硬盘等。它具有热插拔、即插即用、易于扩展等优点,并且支持多种数据传输速率,如 USB 2.0 的高速模式可达 480Mbps,USB 3.0 的超高速模式可达 5Gbps,USB 3.2 的速率更是高达 20Gbps 甚至 40Gbps。USB 接口在消费电子设备中得到了极为广泛的应用,极大地方便了用户与外部设备的连接和数据交换。
七、输入输出系统
(一)I/O 系统概述
-
I/O 系统的基本组成:
- I/O 设备:是计算机与外部世界进行信息交换的设备,分为输入设备(如键盘、鼠标、扫描仪等)和输出设备(如显示器、打印机、音箱等)。这些设备将外部的信息转换为计算机能够处理的数字信号(输入设备),或者将计算机处理后的数字信号转换为人们能够感知的形式(输出设备)。
- 设备控制器:是 I/O 设备与主机之间的接口电路,它负责控制 I/O 设备的工作,协调 I/O 设备与主机之间的数据传输。例如,硬盘的控制器负责管理硬盘的读写操作,将主机的命令转换为硬盘能够理解的控制信号。
- I/O 接口:是主机与 I/O 设备或设备控制器之间的连接部件,它提供了数据缓冲、信号转换、设备选择等功能。例如,USB 接口就是一种常见的 I/O 接口,它将主机的并行数据转换为适合 USB 总线传输的串行数据,并提供了设备识别和连接管理功能。
-
I/O 设备与主机的联系方式:
- 辐射式:每个 I/O 设备都通过独立的线路与主机相连。这种方式的优点是简单直接,缺点是线路复杂,成本高,且扩展性差。例如,早期的一些大型计算机系统中,部分 I/O 设备采用辐射式连接方式。
- 总线式:I/O 设备通过总线与主机相连。这种方式使用公共的总线进行数据传输,减少了线路数量,提高了系统的扩展性和灵活性。现代计算机系统大多采用总线式连接方式,如通过 PCI 总线、USB 总线等连接各种 I/O 设备。
-
I/O 设备的编址方式:
- 统一编址:将 I/O 设备的寄存器与内存单元统一进行编址,即 I/O 设备的寄存器占用内存地址空间的一部分。CPU 可以像访问内存一样访问 I/O 设备的寄存器,使用相同的指令进行数据传输。例如,在某些计算机系统中,内存地址空间的 0xF0000000 - 0xFFFFFFFF 被分配给 I/O 设备寄存器使用。这种编址方式的优点是指令系统简单,不需要专门的 I/O 指令;缺点是 I/O 设备占用内存地址空间,可能会减少可用的内存地址范围。
- 不统一编址:I/O 设备的寄存器与内存单元分别进行编址,CPU 需要使用专门的 I/O 指令来访问 I/O 设备的寄存器。例如,x86 架构的计算机采用不统一编址方式,通过 IN 和 OUT 指令来进行 I/O 操作。这种编址方式的优点是内存地址空间和 I/O 地址空间相互独立,不会相互影响;缺点是需要专门的 I/O 指令,增加了指令系统的复杂性。
(二)I/O 接口
-
I/O 接口的功能:
- 选址功能:能够识别 CPU 发来的地址信号,选择与之相连的 I/O 设备或设备内部的寄存器。例如,当 CPU 发出一个地址信号时,I/O 接口通过地址译码电路判断该地址是否对应自己所连接的设备或寄存器,若是则进行相应的操作。
- 传送命令功能:接收 CPU 发来的控制命令,并将其传送给 I/O 设备,控制 I/O 设备的工作。例如,CPU 发送一个打印命令给打印机的 I/O 接口,I/O 接口将该命令传递给打印机,使打印机开始打印操作。
- 传送数据功能:在 CPU 与 I/O 设备之间进行数据缓冲和传输。由于 CPU 和 I/O 设备的数据传输速度可能不同,I/O 接口通过数据缓冲寄存器来暂存数据,以协调两者之间的数据传输速率。例如,当 CPU 向打印机发送数据时,先将数据存入 I/O 接口的数据缓冲寄存器,然后由 I/O 接口以打印机能够接受的速度将数据传送给打印机。
- 反映 I/O 设备工作状态功能:将 I/O 设备的工作状态信息反馈给 CPU,如设备是否忙碌、是否准备好接收数据等。CPU 根据这些状态信息来决定是否进行数据传输或其他操作。例如,当打印机处于忙碌状态时,其 I/O 接口会将该状态信息反馈给 CPU,CPU 可以等待或进行其他任务。
-
I/O 接口的基本组成:
- 数据缓冲寄存器:用于暂存 CPU 与 I/O 设备之间传输的数据,起到速度匹配和数据缓冲的作用。例如,在 CPU 向显示器输出图像数据时,数据先存入数据缓冲寄存器,然后由显示器控制器按一定的速率从寄存器中读取数据进行显示。
- 控制寄存器:用于存放 CPU 发送给 I/O 设备的控制命令,如启动、停止、复位等命令。I/O 接口根据控制寄存器中的内容来控制 I/O 设备的操作。
- 状态寄存器:用于保存 I/O 设备的当前状态信息,如设备就绪、忙碌、错误等状态。CPU 通过读取状态寄存器的内容来了解 I/O 设备的工作情况,以便进行相应的处理。
-
接口类型:
- 串行接口:数据按位依次传输,只需要一条数据线。例如,USB 接口就是一种串行接口,它通过差分信号在一对线上传输数据,具有传输距离远、抗干扰能力强等优点,但数据传输速率相对较低。串行
接口适用于长距离传输或对传输速率要求不高的设备,如鼠标、键盘等。
- 并行接口:数据的多个位同时传输,通常有多条数据线。例如,传统的打印机并行接口,8 位数据可以同时在 8 条数据线上传输,传输速度相对较快。然而,并行接口由于数据线较多,存在信号干扰问题,且传输距离较短,成本较高。常用于对传输速率要求较高且距离较近的设备连接,如早期的打印机与计算机的连接。
- 串行接口:数据按位依次传输,只需要一条数据线。例如,USB 接口就是一种串行接口,它通过差分信号在一对线上传输数据,具有传输距离远、抗干扰能力强等优点,但数据传输速率相对较低。串行
(三)I/O 方式
- 程序查询方式:
- 工作原理:CPU 通过执行程序不断查询 I/O 设备的状态寄存器,判断设备是否准备好进行数据传输。例如,对于输入设备,CPU 会检查设备是否已将数据准备好;对于输出设备,CPU 会检查设备是否已处理完上次的数据传输且准备好接收新数据。
- 流程:在程序中,CPU 首先向 I/O 设备发出命令,然后进入一个循环,持续读取设备的状态信息。当检测到设备准备好时,CPU 执行数据传输操作,将数据从 I/O 设备读入内存或从内存写入 I/O 设备。数据传输完成后,CPU 继续执行其他任务,然后再次查询设备状态,准备下一次传输。
- 优缺点:优点是实现简单,硬件成本低;缺点是 CPU 需要花费大量时间在查询设备状态上,导致 CPU 利用率极低,整个系统效率不高。因为在设备准备数据的过程中,CPU 大部分时间处于等待状态,无法进行其他有意义的工作。
- 程序中断方式:
- 中断的基本概念:当 I/O 设备完成数据准备或发生其他需要 CPU 处理的事件时,向 CPU 发送中断请求信号,CPU 暂停当前正在执行的程序,转去处理中断事件,处理完成后再返回原来的程序继续执行。
- 中断源:引发中断的事件来源,如 I/O 设备完成数据传输、设备故障、定时器溢出等。不同的中断源对应不同的中断类型,每个中断类型都有唯一的标识。
- 中断向量:是存储中断服务程序入口地址的内存单元地址。当 CPU 响应中断时,根据中断类型找到对应的中断向量,从而获取中断服务程序的入口地址,跳转至该地址执行中断服务程序。
- 中断优先级:当多个中断源同时发出中断请求时,CPU 根据预先设定的优先级决定先响应哪个中断。例如,对于涉及系统安全或紧急情况的中断,如硬件故障中断,优先级设置较高,优先得到处理。
- 中断处理过程:
- 中断请求:I/O 设备或其他中断源向 CPU 发送中断请求信号。
- 中断判优:当多个中断请求同时到达时,CPU 根据中断优先级判断先响应哪个中断请求。
- 中断响应:CPU 在满足一定条件(如中断允许标志位为 1)时,暂停当前程序的执行,保存当前程序的断点(PC 值)和一些寄存器的内容到堆栈中,然后根据中断向量获取中断服务程序的入口地址,将其装入 PC,开始执行中断服务程序。
- 中断服务:执行中断服务程序,处理中断事件,如从 I/O 设备读取数据或向 I/O 设备写入数据,处理设备故障等。
- 中断返回:中断服务程序执行完毕后,从堆栈中恢复之前保存的断点和寄存器内容,使 CPU 回到原来被中断的程序继续执行。
- 中断屏蔽技术的应用:通过设置中断屏蔽寄存器,CPU 可以有选择地屏蔽某些中断源的中断请求,即阻止这些中断源的请求信号到达 CPU。例如,在执行一些关键的、不允许被中断的程序段时,可以屏蔽某些优先级较低的中断,以保证关键程序的正常执行。
- DMA 方式:
- DMA 方式的特点:直接内存访问(DMA)方式允许 I/O 设备直接与内存进行数据传输,而不需要 CPU 的频繁干预。在 DMA 传输过程中,CPU 可以继续执行其他任务,大大提高了系统的效率。
- 工作原理:当 I/O 设备准备好进行数据传输时,向 DMA 控制器发送请求。DMA 控制器向 CPU 请求总线控制权,得到授权后,DMA 控制器接管总线,直接在 I/O 设备和内存之间建立数据传输通路,按照设定的传输方向(读或写)和传输长度,将数据在 I/O 设备与内存之间进行传输。传输完成后,DMA 控制器释放总线控制权,向 CPU 发送中断信号,通知 CPU 数据传输已完成。
- DMA 控制器的组成:一般包括命令 / 状态寄存器(存放 DMA 传输的控制命令和状态信息)、地址寄存器(存放数据传输的内存起始地址)、字节计数器(记录数据传输的字节数)等。这些寄存器协同工作,控制 DMA 传输的过程。
- 工作流程:首先,CPU 初始化 DMA 控制器,设置传输方向、内存地址、传输字节数等参数。然后,I/O 设备准备好数据后向 DMA 控制器发出请求。DMA 控制器获取总线控制权,开始在 I/O 设备和内存之间传输数据。每次传输一个数据块(通常由多个字节组成),字节计数器递减,地址寄存器递增(根据传输方向)。当字节计数器减为 0 时,数据传输完成,DMA 控制器释放总线控制权,并向 CPU 发送中断信号。
- 与程序中断方式的区别:程序中断方式在数据传输时,CPU 需要参与数据的读写操作,且在中断处理过程中,CPU 需要花费时间保存和恢复现场;而 DMA 方式下,CPU 只在初始化和传输结束时进行少量干预,数据传输主要由 DMA 控制器直接控制,减少了 CPU 的开销,提高了系统的并行性和效率。例如,在硬盘向内存传输大量数据时,DMA 方式可以让 CPU 在传输过程中同时处理其他任务,而程序中断方式会使 CPU 频繁中断当前任务来处理数据传输,影响系统整体性能。
八、多机系统与并行处理
(一)多机系统的基本概念
- 多机系统的分类:
- 紧耦合系统:通过共享主存实现机间通信,各处理机之间的耦合度高,信息交换频繁且速度快。例如,在一些高性能计算场景中,多个处理机紧密协作,共同处理大型复杂的计算任务,它们通过共享的高速主存来交换中间计算结果和数据。由于共享主存,紧耦合系统中各处理机对主存的访问冲突问题较为突出,需要复杂的存储管理和同步机制。
- 松耦合系统:通过通道或通信线路实现机间通信,各处理机相对独立,耦合度较低。例如,分布式计算系统中,各个处理机分布在不同的地理位置,通过网络通信线路进行数据交换。松耦合系统适用于对处理机独立性要求较高、数据交换频率相对较低的场景,如分布式数据库系统,不同节点的处理机可以独立处理本地数据,通过网络与其他节点进行必要的数据同步和协作。
- 多机系统的结构:
- 共享总线结构:所有处理机和共享设备都连接到一条总线上,通过总线进行数据传输和通信。优点是结构简单,成本低,易于扩展;缺点是总线带宽有限,随着处理机数量的增加,总线竞争加剧,可能成为系统性能的瓶颈。例如,一些小型的多机系统采用共享总线结构,以较低的成本实现多机之间的通信和资源共享。
- 共享存储器结构:多台处理机共享一个大容量的主存储器,各处理机通过访问共享存储器来交换数据和协调工作。这种结构的优点是数据共享方便,机间通信效率高;缺点是共享存储器的访问冲突问题严重,需要复杂的存储访问控制和同步机制,而且随着处理机数量的增加,存储器的带宽需求急剧增加,可能导致性能下降。例如,某些服务器集群采用共享存储器结构,以提高数据处理的协同性和效率。
- 交叉开关结构:通过交叉开关矩阵实现处理机与存储器、I/O 设备之间的高速连接。每个处理机可以通过交叉开关与任意一个存储模块或 I/O 设备进行通信。优点是带宽高,通信速度快,可实现多对处理机与存储模块之间的并行数据传输;缺点是硬件成本高,结构复杂,实现难度大。例如,在一些高端的超级计算机中,采用交叉开关结构来满足大量处理机之间高速、无冲突的数据传输需求。
(二)并行处理技术
- 并行性的概念:
- 时间并行:通过流水线技术实现,在同一硬件上不同时间处理不同任务。例如,指令流水线将指令的执行过程划分为多个阶段,如取指、译码、执行、访存、写回等,每个阶段在不同的时间进行,当一条指令完成取指阶段进入译码阶段时,下一条指令就可以进入取指阶段,从而在同一硬件上实现多条指令的重叠执行,提高了指令的执行效率。
- 空间并行:通过多个硬件单元同时执行相同或不同任务来实现。例如,在多核 CPU 中,每个核心都是一个独立的处理单元,它们可以同时执行不同的线程或任务,实现空间上的并行处理。又如,在图形处理单元(GPU)中,有大量的并行处理单元,可同时对图像的不同部分进行处理,加速图形渲染。
- 并行性的度量指标:
- 加速比:表示并行处理系统相对于串行处理系统的性能提升程度,计算公式为 ,其中 是串行处理时间, 是并行处理时间。加速比越大,说明并行处理系统的性能提升越显著。
- 效率:指并行处理系统中硬件资源的利用率,计算公式为 ,其中 是加速比, 是并行处理单元的数量。效率反映了并行处理系统在利用硬件资源方面的有效性,理想情况下效率为 1,但实际中由于存在各种开销,效率通常小于 1。
- 流水线技术:
- 指令流水线的基本概念:
- 流水线的段:将指令的执行过程划分为若干个相对独立的阶段,每个阶段称为一个流水线的段。例如,常见的 5 段指令流水线包括取指(IF)、译码 / 读寄存器(ID)、执行(EX)、访存(MEM)、写回(WB)阶段。
- 流水线周期:流水线中执行时间最长的段所需要的时间,它决定了流水线每隔多长时间可以输出一个结果。例如,在一个 5 段流水线中,如果访存阶段需要的时间最长,为 5ns,那么流水线周期就是 5ns。
- 吞吐率:指单位时间内流水线能够处理的指令数量或任务数量。计算公式为 ,其中 是流水线周期。例如,流水线周期为 5ns,则吞吐率为 (每秒执行 2 亿条指令)。
- 加速比:与并行性中的加速比概念一致,是指采用流水线技术后指令执行速度相对于非流水线方式的提升倍数。例如,非流水线方式执行 100 条指令需要 500ns,采用流水线技术后,假设流水线周期为 5ns,且忽略流水线的建立和排空时间,执行 100 条指令需要 (4 为流水线的段数 - 1) = 520ns,则加速比为 (实际中由于流水线存在一些开销,加速比可能达不到理论值)。
- 流水线中的相关问题及解决方法:
- 结构相关(资源冲突):当多条指令在同一时间争用同一资源时发生的冲突。例如,在一个指令流水线中,同时有两条指令,一条需要访问内存进行取指操作,另一条需要访问内存进行数据读写操作,而内存资源在同一时间只能被一个操作占用,就会产生结构相关。解决方法可以是采用专用部件,如设置独立的指令 Cache 和数据 Cache,使取指和数据访问可以同时进行;或者采用资源重复配置,增加资源的数量来避免冲突。
- 数据相关(数据冲突):当一条指令需要用到前面指令的执行结果,但前面指令的结果还未产生时发生的冲突。例如,指令 1 计算两个数的和并将结果存入寄存器 R1,指令 2 需要使用 R1 中的结果进行乘法运算,但在指令 2 执行到需要读取 R1 时,指令 1 还未完成写回 R1 的操作,就会产生数据相关。解决方法包括数据旁路技术(也叫前推技术),即当检测到数据相关时,直接将前一条指令在执行阶段产生的结果提前送到需要该结果的指令的执行阶段,而不需要等到前一条指令完成写回操作;还可以通过指令调度,调整指令的执行顺序,避免数据相关的发生。
- 控制相关(转移指令引起的冲突):由于转移指令的存在,使得流水线在确定转移目标地址之前,无法确定后续指令的地址,从而导致流水线的停顿。例如,当执行一条条件转移指令时,在判断条件是否成立以及确定转移目标地址之前,流水线无法确定下一条要执行的指令,可能会造成流水线的部分阶段空闲。解决方法包括分支预测技术,通过预测转移指令的结果,提前将预测的目标地址处的指令取入流水线执行,如果预测正确,则流水线可以继续高效运行;如果预测错误,则需要清空流水线,重新取正确的指令执行,但现代的分支预测技术已经能够达到较高的准确率,有效减少了控制相关对流水线性能的影响。
- 指令流水线的基本概念:
- 阵列处理机:以 SIMD(单指令流多数据流)方式工作,通过多个处理单元在同一指令控制下对不同数据进行处理。例如,ILLIAC Ⅳ 阵列处理机,它由多个处理单元组成阵列结构,每个处理单元都有自己的本地存储器。在执行任务时,一条指令同时发送到所有处理单元,每个处理单元根据自身本地存储器中的数据进行相同的操作。这种结构适用于对大量数据进行相同操作的场景,如图像处理中的像素点并行处理、科学计算中的向量运算等。通过多个处理单元的并行工作,大大提高了数据处理的速度和效率。
- 多处理机系统:属于 MIMD(多指令流多数据流)系统,多个处理机可独立执行不同程序,协同完成复杂任务。例如,在一个大型数据中心中,多个处理机可以分别处理不同用户的请求,或者共同处理一个大型的数据分析任务,每个处理机执行不同的程序模块,通过相互通信和协作来完成整个任务。
- 机间互连方式:
- 总线:如前面提到的共享总线结构,多个处理机通过总线进行通信和数据交换。优点是成本低、结构简单;缺点是带宽有限,容易出现总线竞争。
- 交叉开关:提供高速、无冲突的机间通信路径,适用于对通信速度要求高的多处理机系统,但成本较高。
- 多级互连网络:通过多级的开关网络实现处理机之间的连接,可根据不同的需求配置不同的连接方式,具有较好的灵活性和扩展性。例如,Omega 网络就是一种常见的多级互连网络,它可以实现处理机之间的多种连接模式,以满足不同的通信需求。
- 多处理机操作系统的特点:
- 任务分配:需要合理地将任务分配到各个处理机上,以充分发挥每个处理机的性能,提高系统的整体效率。例如,根据任务的类型(计算密集型、I/O 密集型等)和处理机的负载情况,将任务分配给最合适的处理机。
- 进程同步:由于多个处理机同时执行不同的任务,可能会访问共享资源,因此需要有效的进程同步机制来保证数据的一致性和正确性。例如,使用互斥锁、信号量等同步工具,确保在同一时间只有一个处理机能够访问共享资源,避免数据冲突和错误。
- 机间互连方式:
九、计算机的发展与应用
(一)计算机的发展历程
- 电子管计算机(1946 - 1957 年):这是计算机发展的第一代,主要特点是采用电子管作为逻辑元件,体积庞大、功耗高、可靠性差且运算速度慢。例如,世界上第一台通用电子数字计算机 ENIAC,它使用了 18800 多个电子管,重达 30 多吨,占地面积 170 多平方米,运算速度每秒仅 5000 次加法运算。尽管存在诸多缺点,但它开启了计算机时代,为后续计算机的发展奠定了基础。
- 晶体管计算机(1958 - 1964 年):第二代计算机采用晶体管代替电子管,使得计算机的体积减小、功耗降低、可靠性提高,运算速度也有了较大提升,达到每秒几十万次运算。例如,IBM 7090 计算机就是晶体管计算机的代表,它在科学计算和数据处理等领域得到了广泛应用,推动了计算机技术的进一步发展。
- 集成电路计算机(1965 - 1970 年):第三代计算机使用集成电路,将多个晶体管和电子元件集成在一块芯片上,进一步减小了计算机的体积,提高了可靠性和运算速度,运算速度可达每秒几百万次运算。例如,IBM System/360 系列计算机是集成电路计算机的典型代表,它具有通用性强、兼容性好等特点,成为当时计算机市场的主流产品,广泛应用于商业、科学计算等多个领域。
- 大规模和超大规模集成电路计算机(1971 年至今):第四代计算机采用大规模和超大规模集成电路技术,使得计算机的体积更小、性能更强、成本更低。微处理器的出现更是使计算机进入了个人电脑时代,计算机的应用范围得到了极大的拓展。例如,Intel 的 8086、80386、奔腾系列等微处理器,不断推动着个人计算机性能的提升。