第1章:计算机系统基础知识
本章对应原书第 9~64 页。软考视角:本章是上午题的核心阵地,通常占 5~10 分,且数制转换、码制、可靠性计算、Cache 命中率、流水线几乎是"必考送分题",务必拿满。
本章在讲什么?(先看这个)
这一章是整本教程的地基,回答一个根本问题:计算机是怎么表示数据、怎么加工数据、又是由哪些部件协同完成这些工作的。全章的知识框架可以分成四块:①数据的表示(进位计数制、原码/反码/补码/移码、校验码);②运算(算术运算与逻辑运算、补码加减、溢出判断、浮点运算);③硬件组成(CPU 内部结构、存储器层次体系、总线、I/O 控制方式);④体系结构与可靠性(Flynn 分类、CISC/RISC、流水线、可靠性模型与性能评测)。
软考爱考这一章,是因为这些知识点"答案唯一、可计算、陷阱多"——比如补码表示范围、海明码校验位数量、可靠性的串联/并联公式,都适合出选择题。学本章时要特别注意"记住结论 + 会算一道题"两条腿走路。
核心概念拆解
1.1 嵌入式计算机系统概述
- IEEE 定义:嵌入式系统是"控制、监视或者辅助设备、机器和车间运行的装置"——从应用角度定义。
- 国内普遍认同的定义(必背):以应用为中心、以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
考点:定义中的"可裁剪"和五个"严格要求"是选择题常客;"嵌入式系统是硬件和软件的综合体"这句话也要记住。
嵌入式系统的特点:除桌面计算机和服务器外的计算设备几乎都是嵌入式系统;大多是专用任务、低成本产品;大多数有实时性要求。对大批量产品(手机、音乐播放器),成本是决定性因素,通常只用几颗芯片(高集成 CPU + 定制芯片 + 存储芯片);对小批量应用,则常借用 PC 体系结构、配实时操作系统来降低开发成本。嵌入式软件运行在有限资源上(无硬盘、无键盘屏幕),软件需长期无故障运行,因此开发与测试比 PC 软件更严格。
嵌入式系统由硬件子系统和软件子系统组成:
- 硬件五大部件:运算器、控制器、存储器、输入设备、输出设备。运算器+控制器集成 = CPU;CPU + 主存 = 主机。寄存器是 CPU 内的存储器件,速度远快于内存。
- 软件分类:系统软件(管理软硬件资源)、应用软件(解决具体领域问题)、中间件(独立的系统软件或服务程序,管理计算资源和网络通信,提供通信处理、数据存取、事务处理、Web 服务、安全、跨平台等服务)。
考点:计算机分类——个人移动设备(PMD)、桌面计算机、服务器、集群/仓库级计算机、超级计算机、嵌入式计算机。服务器强调可用性、可扩展性、高吞吐率;集群机是"一组桌面机/服务器用网络连起来像一台大机器";超级计算机能耗巨大。
1.2 数据表示
1.2.1 进位计数制及转换
r 进制:只用 r 个基本符号表示数值,r 称为基数(Radix)。共同特点:①有固定的符号集;②用位置表示法,处于不同位置的数符代表值不同,与权值有关。例如十进制 1234.55 = 1×10³ + 2×10² + 3×10¹ + 4×10⁰ + 5×10⁻¹ + 5×10⁻²。
常用计数制对照(原书表1-1):
| 数制 | 二进制 | 八进制 | 十进制 | 十六进制 |
|---|---|---|---|---|
| 规则 | 逢二进一 | 逢八进一 | 逢十进一 | 逢十六进一 |
| 基数 r | 2 | 8 | 10 | 16 |
| 数符 | 0,1 | 0~7 | 0~9 | 0~9,A~F |
转换方法(必须熟练):
- 十进制 → 二进制:整数部分"除2取余"(余数从下往上读),小数部分"乘2取整"。如 175.71875₁₀ = 10101111.10111₂。
- 二进制 → 十进制:按权展开相加。如 100110.101₂ = 38.625。
- 二进制 ↔ 八进制:每 3 位一组对应(小数点为界,左缺补左、右缺补右)。
- 二进制 ↔ 十六进制:每 4 位一组对应。如 10101111.10111₂ = 257.56₈ = AF.B8₁₆(小数点右侧末尾要补 0 凑足 4 位)。
考点:二/八/十六进制互转的"分组对应"是送分题;注意小数点两侧补 0 的方向别搞反。
1.2.2 数值型数据的表示
机器数:数在计算机中的表示形式,符号用 0/1 表示,小数点隐含不占位;对应实际数值称真值。无符号数所有位都是数值位;有符号数最高位是符号位。
四种码制(重点!)(设机器字长 n 位):
- 原码:最高位符号位(0正1负),其余 n-1 位为绝对值。0 有两种表示:[+0]原=00000000,[-0]原=10000000。
- 反码:正数同原码;负数为其绝对值按位取反。0 也有两种:[+0]反=00000000,[-0]反=11111111。
- 补码:正数同原码;负数等于反码末位加1。0 只有一种表示。特例:当符号位为 1 且数值位全 0 时,表示 −2ⁿ⁻¹(如 8 位补码的 −128),此时符号位的 1 既表示负号又表示数值。补码利用模运算对符号位的自动丢弃,让减法可转加法。
- 移码:在数 X 上加偏移量 2ⁿ⁻¹,常用于表示浮点数的阶码;偏移 2ⁿ⁻¹ 时,把补码的符号位取反即得移码。移码大者对应真值大,便于比较大小。
考点:8 位补码示例要会默算:[+1]补=00000001,[-1]补=11111111,[-127]补=10000001,[-45]补=11010011,[-0.5]补=11000000。移码 [0]移=10000000。
定点数与浮点数:
- 定点数:小数点位置固定——定点整数(小数点在最低有效位之后)和定点小数(小数点在最高有效位之前)。n 位定点数的补码和移码可表示 2ⁿ 个数,原码和反码只能表示 2ⁿ−1 个(0 占了两个编码),故定点数范围小、易溢出。
- 浮点数:N = 2^E × F,E 为阶码(带符号纯整数,用移码),F 为尾数(带符号纯小数)。范围由阶码决定,精度由尾数决定。尾数非 0 时最高有效位应为 1,即规格化表示;不满足时需移动小数点并调整阶码。
各种码制的表示范围(原书表1-3,建议记结论):
| 码制 | 定点整数 | 定点小数 |
|---|---|---|
| 原码 | −(2ⁿ⁻¹−1) ~ +(2ⁿ⁻¹−1) | −(1−2⁻⁽ⁿ⁻¹⁾) ~ +(1−2⁻⁽ⁿ⁻¹⁾) |
| 反码 | −(2ⁿ⁻¹−1) ~ +(2ⁿ⁻¹−1) | −(1−2⁻⁽ⁿ⁻¹⁾) ~ +(1−2⁻⁽ⁿ⁻¹⁾) |
| 补码 | −2ⁿ⁻¹ ~ +(2ⁿ⁻¹−1) | −1 ~ +(1−2⁻⁽ⁿ⁻¹⁾) |
| 移码 | −2ⁿ⁻¹ ~ +(2ⁿ⁻¹−1) | −1 ~ +(1−2⁻⁽ⁿ⁻¹⁾) |
IEEE 754 标准:表示形式为 (−1)^S × 2^P × (1.M),S 为数符位,P 为阶码(移码表示,偏移值 2^(p−1)−1),M 为尾数(原码),且约定小数点左边隐含一位 1,尾数为 1.xxx。特殊情况:P 全 0 且 M 为 0 → 真值 ±0;P 全 1 且 M 为 0 → ±∞;P 全 1 且 M 非 0 → NaN(不是一个数)。
| 参数 | 单精度 | 双精度 | 扩充精度 |
|---|---|---|---|
| 浮点数字长 | 32 | 64 | 80 |
| 尾数长度 | 23 | 52 | 64 |
| 符号位 | 1 | 1 | 1 |
| 阶码长度 | 8 | 11 | 15 |
| 指数偏移量 | +127 | +1023 | +16383 |
| 可表示范围 | 10⁻³⁸~10³⁸ | 10⁻³⁰⁸~10³⁰⁸ | 10⁻⁴⁹³²~10⁴⁹³² |
考点:例 1-8 把 176.0625 转单精度浮点:二进制 10110000.0001 → 规格化 1.01100000001×2⁷ → 阶码 7+127=134=10000110 → 结果 0 10000110 01100000001000000000000。这类题要会手算一遍。
1.2.3 其他数据的表示
- BCD 码:4 位二进制表示 1 位十进制。分为有权码(如 8421 码,权从高到低 8、4、2、1)和无权码(余3码:8421 码加 0011;格雷码:相邻两个代码只有 1 位不同)。
- ASCII 码:7 位编码,低 4 位作行、高 3 位作列。记住:字符 '0' 的 ASCII = 48,'a' = 97,'A' = 65。
- 汉字编码:①输入码分三类——数字编码(国标区位码,如"中"为 54 区 48 位,无重码但难记)、拼音码(重码率高)、字形编码(五笔字型等);②内部码:GB2312-1980 规定两字节存一个汉字,每字节最高位置 1(国标码 3473H → 机内码 B4F3H);GB 18030-2005 收录汉字 70244 个;③字形码:点阵(16×16 点阵每字需 32 字节)或矢量表示。
- Unicode/UCS:ISO/IEC 10646 定义 UCS,有 UCS-2(2 字节)和 UCS-4(4 字节,实际用 31 位)两种格式;实现编码有 UTF-8(1~4 字节变长,网络广泛使用)、UTF-16、UTF-32。如"汉"字 UCS 编码 6C49 落在 0800-FFFF 区间,UTF-8 编码为 3 字节 E6B189。
1.2.4 校验码
- 码距:一个编码系统中任意两个合法编码之间至少不同的二进制位数。码距为 1 的编码(如 8421 码)无检错能力。
- 奇偶校验:增加 1 位校验位使码距变为 2,使编码中 1 的个数为奇数(奇校验)或偶数(偶校验)。只能检测奇数位出错,不能纠错,也不知道错在哪。常见形式:水平奇偶校验、垂直奇偶校验、水平垂直校验码。
- 海明码(Hamming Code):在数据位间特定位置插入 k 个校验位实现检错和纠错。数据 n 位、校验 k 位须满足:2^k − 1 ≥ n + k(如 8 位数据需 k=4,因为 2⁴−1=15 > 8+4=12)。校验位 Pᵢ 放在海明码第 2^(i−1) 位置;任一海明位的下标等于参与校验它的所有校验位下标之和。检错时计算 G₄G₃G₂G₁:全 0(偶校验)表示无错,否则其十进制值直接指出出错位置,取反即纠错——海明码是既能检错又能纠错的校验码。
考点:"8 位数据需要几位海明校验位"(答 4 位)和"哪种校验码可以纠错"(海明码)是高频题。
- 循环冗余校验码(CRC):广泛用于数据通信和磁介质存储。由 k 位信息码 + r 位校验码组成,编码长度 k+r,又称 (n,k) 码。校验码越长校验能力越强。用模 2 运算(按位异或,不进位不借位:1+1=0)由生成多项式产生校验位。
1.3 算术运算和逻辑运算
1.3.1 算术运算
二进制运算规则:加法逢二进一;减法借一当二;乘法 1×1=1。
补码加减运算(必考):
- [X+Y]补 = [X]补 + [Y]补;[X−Y]补 = [X]补 + [−Y]补。
- 由 [X]补 求 [−X]补:连同符号位一起取反,末位加 1。
- 运算规则四条:操作数用补码表示;符号位参加运算;减法变为"减数变反加 1 再相加";结果用补码表示。补码加减无需特殊处理符号位,因此多数计算机采用补码加减运算。
溢出及判定(重点):只有两个同符号数相加(或异符号数相减)才可能溢出;溢出后结果必错。四种判定方法:
- 双符号位判决法:00 正、11 负,结果两符号位不一致即溢出,VF = S₂⊕S₁。
- 进位判决法:最高数值位进位 Cₙ₋₁ 与符号位进位 Cₙ 不同则溢出(Cₙ₋₁⊕Cₙ=1)。
- 由运算结果符号位与进位标志判别:VF = SF⊕CF。
- 由运算前后符号位判别:同号求和/异号求差时,VF = Xs·Ys·Z̄s + X̄s·Ȳs·Zs(即"正+正=负"或"负+负=正"就溢出)。
考点:例 1-14:两个正数 01000001+01000011=10000100,结果变负——同号相加得异号,溢出。判断"运算结果是否溢出"的题目年年出现。
乘除运算的三种实现:①纯软件方案(无乘除指令,用程序实现,慢);②在 ALU 基础上增加移位逻辑电路实现(硬件增加不多,速度有较大提高);③专用硬件阵列乘法器/除法器(代价最高,速度最快)。
浮点加减运算五步骤(要能背出顺序):①对阶(小阶向大阶看齐,阶码小的数尾数右移);②求尾数和/差;③结果规格化并判溢出;④舍入(截断法、末位恒 1 法、0 舍 1 入法);⑤溢出判别(以阶码为准:阶码上溢则结果溢出,阶码下溢则结果为 0)。
浮点乘除:乘法——阶码相加、尾数相乘;除法——阶码相减、尾数相除。结果都需规格化并判阶码溢出。
1.3.2 逻辑运算
- 与(AND、∧、·):全真才真。或(OR、∨、+):全假才假。非(Ā):取反。异或(XOR、⊕):相异为真,A⊕B = Ā·B + A·B̄,又称半加运算。
- 常用逻辑公式:交换律、结合律、分配律、互补律(A+Ā=1,A·Ā=0)、重叠律(A+A=A,A·A=A)、0-1 律、吸收律(A+A·B=A,A+Ā·B=A+B)、反演律(A+B̄ = Ā·B̄,A·B̄ = Ā+B̄,即德摩根律)、对合律(Ā 的反 = A)。
考点:逻辑化简题考吸收律和反演律,如 (A+AB) 化简为 A;原书例 1-18 用互补律+吸收律把复杂式化简为 B+C。真值表法(把所有取值一一列举)是证明恒等式的笨但可靠的方法。
1.4 计算机硬件组成及主要部件功能
1.4.1 中央处理单元(CPU)
CPU 的四大功能:①程序控制(控制指令执行顺序);②操作控制(产生操作信号送往对应部件);③时间控制(控制操作信号出现的时间、持续时间和顺序);④数据处理(最根本的任务)。此外还要对内部外部的中断/异常作出响应。
CPU 组成:运算器、控制器、寄存器组、内部总线。
- 运算器(执行部件,接受控制器指挥):①算术逻辑单元 ALU(负责算术/逻辑运算);②累加寄存器 AC(为 ALU 提供工作区,运算结果放累加器中);③数据缓冲寄存器 DR(CPU 与内存/外设间数据传送的中转站和速度缓冲);④状态条件寄存器 PSW(保存进位标志 C、溢出标志 V、零标志 Z、负标志 N、中断标志 I、方向标志 D 等)。
- 控制器(决定 CPU 运行自动化,保证程序正确执行并处理异常):包含指令控制逻辑、时序控制逻辑、总线控制逻辑、中断控制逻辑。四个关键寄存器:
- 指令寄存器 IR:暂存从内存取出的当前指令。
- 程序计数器 PC:又称指令计数器,具有寄存信息和计数两种功能,内容总是下一条要执行指令的地址;顺序执行时自动加 1,转移时按转移地址修改。
- 地址寄存器 AR:保存当前 CPU 所访问内存单元的地址。
- 指令译码器 ID:对操作码进行分析解释,发出具体控制信号。
考点:常考"某寄存器属于运算器还是控制器""PC 存的是什么""PSW 里有哪些标志位"。口诀:运算器管算(ALU/AC/DR/PSW),控制器管取指执行(IR/PC/AR/ID)。
寄存器组:分专用寄存器(作用固定)和通用寄存器(程序员可规定用途)。
多核 CPU:多核 = 单芯片集成两个及以上处理器内核,每个内核有自己的逻辑单元、控制单元、中断处理器、运算单元。AMD 将两个内核做在一个 Die 上(真"双核"),Intel 将不同核心封装在一起("双芯")。多核最大优点(开发的最主要目的)是满足用户同时进行多任务处理。单核多线程是交替执行任务(超线程技术可将单核视为双核,但性能比不上真核)。
1.4.2 存储器
存储体系层次结构:寄存器 → Cache → 主存 → 辅存(磁盘/磁带/光盘)→ 后备。越上层速度越快、单位比特造价越高。Cache 与主存的交互全部由硬件实现;主存与辅存的交互可由硬件和软件结合实现。
分类(多角度,易混):
- 按位置:内存/主存(容量小速度快)与外存/辅存(容量大速度慢,长期保存)。
- 按材料:磁存储器、半导体存储器(双极型/MOS 型;静态 SRAM / 动态 DRAM)、光存储器。
- 按工作方式:读/写存储器(RAM:SRAM 比 DRAM 快且贵)与只读存储器(ROM:厂家写好,存 BIOS/微程序;PROM:用户一次性写入;EPROM:紫外线照射 15~20 分钟擦除后可改写;EEPROM:电擦除改写;Flash 闪存:非易失性,基于 EEPROM,用于数码相机、手机、SSD 等)。存储在 ROM 设备中的程序称为固件(Firmware)。
- 按寻址方式:随机存储器(访问任一单元时间相同)、顺序存储器(访问时间与位置相关,如磁带)、直接存储器(介于两者之间,磁盘对磁道随机寻址、磁道内顺序寻址)。
考点:"SRAM 和 DRAM 谁快谁贵""EPROM 用什么擦除""磁盘属于哪种寻址方式"都是常客。
相联存储器:按内容访问的存储器。以数据某一部分作关键字,读出时并行地和每一单元比较。结构包括输入检索寄存器(存关键字)、屏蔽寄存器(屏蔽不参与检索的字段)、比较器、匹配寄存器(记录比较结果)。用途:Cache 中、虚拟存储器的段表/页表/快表、数据库和知识库。
高速缓存 Cache:存放当前最活跃的程序和数据,是主存局部域的副本,对程序员透明。
- 多级 Cache:L1(小而快,几千~几十 KB,速度要赶上主频)、L2(几百 KB~几 MB)、L3。CPU 访存顺序:L1 → L2 → L3 → 主存。
- 地址映像(主存地址 → Cache 地址,三种方式):
| 映像方式 | 规则 | 优点 | 缺点 |
|---|---|---|---|
| 直接映像 | 主存的块只能放 Cache 中相同块号 | 地址变换很简单 | 灵活性差,有空块也不能利用 |
| 全相联映像 | 主存任一块可放 Cache 任一块 | 位置不受限,十分灵活 | 需相联存储器比较,变换复杂、速度慢 |
| 组相联映像 | 组间直接映像、组内全相联映像 | 前两者的折中 | 实现复杂度居中 |
原书例:主存 64MB、Cache 32KB、块 4KB → 主存 16384 块(块号 14 位)、Cache 8 块(块号 3 位)、块内地址 12 位。全相联映像时相联存储器需 8 个 14 位单元。 - 替换算法:随机替换、先进先出(FIFO)、近期最少使用(LRU)、优化替换算法(先执行一次程序统计替换情况)。 - 性能分析(必考计算题):设命中率 Hc,Cache 存取时间 tc,主存存取时间 tm: - 同时启动:ta = Hc·tc + (1−Hc)·tm - 不命中才启动主存:ta = tc + (1−Hc)·tm
Cache 容量越大命中率越高,但成本和命中时间也增加。
考点:命中率与平均访问时间的计算几乎是每年必考,注意审题是"同时启动"还是"不命中才访问主存",两式相差一个 Hc·tc。
虚拟存储器:对主存的抽象。CPU 生成虚拟地址,由 MMU(内存管理单元)转换为物理地址后访问主存。用户操作的是虚拟设备,无需关心底层物理环境。
外存储器:
- 磁盘存储器:盘片划成同心圆磁道(track),磁道分成扇区(sector)(每扇区存固定长度数据块如 512B),所有记录面上相同序号磁道构成柱面(cylinder)。磁盘寻址信息由硬盘驱动器号、柱面号、磁头号、数据块号(扇区号)及交换量组成。
- 扇区访问时间三部分:寻道时间(读/写头移到目标磁道,平均 3~9ms)、旋转时间(目标扇区转到磁头下方,平均为最大旋转延迟的一半)、传送时间。平均传送时间 ≈ 旋转速度的倒数 × 每磁道扇区数的倒数。
- 磁盘最大容量 = 每扇区字节数 × 每磁道平均扇区数 × 每盘面磁道数 × 每盘片记录面数 × 盘片数。格式化后容量小于最大容量。
- 光盘:只读型(CD-ROM)、只写一次型(WORM)、可擦除型。特点:记录密度高、容量大、非接触读写(光头距盘面约 2mm)、寿命 10 年以上、存取时间较长。
- 固态硬盘 SSD:介质分闪存芯片(主流)和 DRAM 两类。闪存由块组成、块由页组成(页 512B~4KB,块 32~128 页);数据以页为单位读写,但必须先整体擦除块后才能写入页;块重复写入限定次数(如 100000 次)后磨损。SSD 读比写快、顺序读写比随机快(随机写要擦整块、还要迁移有效数据)。
磁盘阵列 RAID:多台磁盘组成的快速、大容量、高可靠外存子系统(Redundant Array of Independent Disk),对用户呈现为一个独立大型存储设备。常见级别(原书表1-16,必背):
| 级别 | 特点 |
|---|---|
| RAID-0 | 无容错能力,数据分散存储;MTBF 是单盘的 1/N,数据传输率是单盘的 N 倍 |
| RAID-1 | 镜像容错改善可靠性 |
| RAID-2 | 用海明码检错 |
| RAID-3 | 减少校验盘,一般只有一个检验盘 |
| RAID-4 | 可独立对组内各盘读写,也只用一个检验盘 |
| RAID-5 | 不设专门检验盘,同一磁盘既记数据又记校验信息,解决争用检验盘问题 |
| RAID-6 | 两级数据冗余,两个盘同时故障仍能工作;写操作做两个独立校验写入两个不同磁盘 |
存储域网络(SAN):连接服务器与存储设备的网络,把多个不同地点的 RAID 组织成逻辑存储设备供多服务器共享,实现集中管理、避免重复存储、提高利用率。
1.4.3 总线
总线(Bus)是设备和设备之间传输信息的公共数据通道,由总线上所有设备共享。按传输信号分三类:
- 数据总线 DB:传数据,双向;宽度决定每次交换数据的位数。
- 地址总线 AB:传地址,单向;宽度决定 CPU 的最大寻址能力(如 20 位地址线可寻 2²⁰=1MB)。
- 控制总线 CB:传控制信号、时序、状态信息;每条线单向,整体双向(框图中画双向)。
主板芯片组结构:南北桥结构——北桥(连 CPU、内存、显卡,控制总线频率、内存控制器;CPU 与北桥间为前端总线 FSB)、南桥(管外部设备接口,USB、ATA/SATA 通过扩展总线连南桥)。单芯片结构取消北桥(CPU 内置内存控制器,减少延迟)。
常见总线(参数必背):
| 总线 | 类型 | 关键参数 |
|---|---|---|
| ISA | 并行内总线 | 16 位,约 16Mb/s,AT 标准 |
| EISA | 32 位内总线 | 196 接点,33MB/s |
| PCI | 并行内总线 | 32 位 133MB/s,64 位 266MB/s;时钟与 CPU 非同步、即插即用、支持仲裁与点对点传输 |
| PCI-E | 点对点串行 | X1 为 250MB/s,X16 为 4GB/s;双单工(全双工)、支持热插拔 |
| FSB | 前端总线 | CPU 连北桥,CPU 与外界交换数据的最主要通道 |
| RS-232C | 串行外总线 | 3 条线即可全双工;负逻辑(−3V 为 1,+3V 为 0);电平传 15m,电流环可达千米 |
| SCSI | 并行外总线 | 8→16 位,最高 320MB/s;最多 63 台设备,差分传 20m |
| SATA | 串行 | 连接硬盘/光驱,嵌入式时钟、可对指令(不只数据)纠错、支持热插拔 |
| USB | 串行 | 4 条线(2 数据 + 2 电源 5V/500mA);树状连接最多 5 层、可接 127 个设备;USB1.0 低速 1.5MB/s、高速 12MB/s,USB2.0 为 480MB/s;即插即用、热插拔 |
| IEEE-1394 | 高速串行 | 6 条线(2 数据、2 控制、2 电源 8~40V/1500mA);理论 63 个设备;400MB/s~3.2GB/s;支持同步和异步传输 |
| IEEE-488 | 并行总线 | 最多 15 台设备、距离 20m、一般 500Kb/s(最大 1MB/s) |
考点:"哪条总线是串行/并行""USB/1394 能接多少设备""RS-232C 的负逻辑"——这些参数选择题反复出现。
1.4.4 输入/输出控制
I/O 设备分类:块设备(信息存于固定大小块中、每块有地址、可寻址,如磁盘、USB 闪存、CD-ROM)和字符设备(以字符流收发、不可寻址,如打印机、网卡、鼠标键盘)。设备控制器通过驱动程序控制,控制器有几个寄存器与 CPU 通信。CPU 访问控制器寄存器的方式:①I/O 端口独立编址(需特殊指令,一般用汇编);②内存映射 I/O(寄存器映射到内存空间,可用 C 编程);③两者结合。
四种 I/O 控制方式(重点,下午案例也考):
- 程序控制方式:CPU 执行程序控制输入/输出,分无条件传送(外设总是准备好)和程序查询方式(CPU 逐一查询外设状态)。缺点:①降低 CPU 效率;②对突发事件无法及时响应。
- 中断方式:I/O 设备准备好后发中断请求通知 CPU,CPU 保存现场、转中断服务程序完成数据交换后返回。CPU 无须等待,效率提高。多中断源的判优方法:多中断信号线法、中断软件查询法、菊花链法(硬件查询链)、总线仲裁法、中断向量表法(中断向量表保存各中断源服务程序入口地址,由中断控制器 INTC 确定中断号)。优先级控制要处理:同时请求时先响应最高优先级;正在服务时可被更高优先级中断打断(中断嵌套)。
- DMA 方式:数据在内存与 I/O 设备间直接成块传送,整个过程不需要 CPU 干涉,只需开始(发命令)和结束时 CPU 处理。流程:外设向 DMAC 提请求 → DMAC 向 CPU 发 HOLD 请求 → CPU 完成当前总线周期后送 HLDA 响应并放弃总线控制权(置高阻) → DMAC 控制系统总线送出地址和控制信号完成传送 → 传送完毕撤销 HOLD,CPU 恢复总线控制权。DMA 占用总线的方式分CPU 停止法、总线周期分时法、总线周期挪用法;传送期间 CPU 不能使用总线。
- 输入/输出处理机(通道):通道是具有特殊功能的处理器(I/O Processor),实现对外设统一管理、完成外设与主存间数据传送,进一步提高 CPU 效率,代价是增加硬件。外围处理机(PPU)方式是通道的进一步发展,多台 PPU 分别承担 I/O 控制、通信、维护诊断,系统已接近分布式多机系统。
考点:四种方式的 CPU 干预程度排序:程序查询 > 中断 > DMA > 通道。"DMA 传送期间 CPU 在做什么""中断嵌套的条件"是高频问法。
1.5 计算机体系结构
三个层次(概念辨析):①计算机体系结构(概念性结构和功能属性,程序员所见);②计算机组织(体系结构的逻辑实现,数据流/控制流组成,即"计算机组成原理");③计算机实现(组织的物理实现)。
体系结构分类:
- 宏观按处理机数量:单处理系统、并行处理与多处理系统、分布式处理系统(物理上远距离、松耦合,通信时间不可忽略)。
- 微观按并行程度:Flynn 分类法(按指令流×数据流分为 SISD、SIMD、MISD、MIMD 四类——最常考);冯泽云分类法(按最大并行度:WSBS/WPBS/WSBP/WPBP);Handler 分类法(处理机级、ALU 级、逻辑门级三层次算并行度);Kuck 分类法(按指令流×执行流:SISE/SIME/MISE/MIME)。
指令系统:
- 指令集体系结构(ISA):硬件与软件之间的界面。按暂存机制分三类:堆栈(stack)、累加器(accumulator)、通用寄存器机(GPR)。GPR 的关键优点:编译程序能有效使用寄存器,变量分配给寄存器后访存流量减少、程序加速、代码密度改善。
- CISC(复杂指令集):增强指令功能、软件功能硬化,指令系统庞大复杂。弊端:指令集过分庞杂;微程序解释复杂指令需多个 CPU 周期降低速度;编译程序冗长难以优化;设计复杂、周期长;芯片种类多、出错率高、成本高。
- RISC(精简指令集):减少指令总数、简化指令功能、单周期执行、优化编译、硬布线控制逻辑。关键技术:①重叠寄存器窗口技术(大寄存器堆划分成多窗口,每过程用相邻 3 个窗口 + 1 个公共窗口,相邻过程共享窗口传递参数与结果);②优化编译技术(合理分配寄存器、减少访存);③超流水及超标量技术;④硬布线逻辑与微程序相结合。
- 指令优化:静态使用频度(程序中指令出现的百分比,改进可减少存储空间)、动态使用频度(执行过程中统计,改进可减少执行时间);两者统计上非常接近。最常用指令是存、取、条件转移。
指令流水线(必考计算):
- 指令控制方式三种:顺序方式(串行,控制简单、速度慢)、重叠方式(解释第 K 条指令时可开始解释 K+1 条,通常"一次重叠")、流水方式(把指令解释分解为若干子过程,各子过程在专用独立模块上并发工作;"流水"是"重叠"的延伸)。
- 流水线种类:部件级/处理机级/系统级;单功能/多功能;静态/动态;线性/非线性;同步/异步;标量/向量。
- 相关处理:局部性相关(指令相关、访存操作数相关、通用寄存器相关,只影响相关指令,解决方法:推后法、通路法);全局性相关(转移指令引起,影响更严重;解决方法:猜测转移分支、加快和提前形成条件码、加快短循环程序处理)。中断也会引起断流,需处理好断点现场保护与恢复。
- RISC 的三种流水技术:超流水线(super pipeline:细化流水、增加级数、提高主频,CPI 稍高)、超标量(super scalar:内装多条流水线同时执行多个处理,以空间换时间,CPI 更小)、超长指令字 VLIW(Very Long Instruction Word:充分发挥软件作用做并行调度,硬件简化,CPI 更小但需足够高的时钟频率)。
- 吞吐率:单位时间内流水线处理机流出的结果数。各子过程时间不同时 p = 1 / max{Δt₁, Δt₂, …}(瓶颈子过程时间的倒数);m 个子过程时间均为 Δt₀ 时,建立时间 T = m·Δt₀。
考点:"流水线执行 N 条指令需要多少时间""吞吐率由哪个阶段决定"——记住瓶颈阶段决定吞吐率,第一条指令完整流出前需要建立时间。
阵列处理机、并行处理机、多处理机:
- 并行性包括同时性(同一时刻发生)和并发性(同一时间间隔内发生)。
- 阵列处理机:重复设置的多个处理单元(PE)连成阵列,在单个控制部件(CU)控制下对各自分配的数据并行执行同一指令——是 SIMD 计算机,通过资源重复实现并行性。
- 并行处理机:SIMD 和 MIMD 是典型并行计算机。共享存储器 SIMD(存储器经互联网络 ICN 为所有 PE 共享)与分布式存储器 SIMD(每个 PE 带局部存储器 PEM)两种形式。
- 多处理机:多台处理机各有自己的控制部件、可执行独立程序、共享主存和外设——MIMD 计算机。机间互连技术决定其性能,要求高带宽、低成本、连接方式多样、无冲突。
- 集群计算机:多台独立计算机(结点)连接起来像单一系统协同工作,解决大型计算问题,性价比高。
1.6 可靠性与系统性能评测
1.6.1 计算机可靠性
- 浴盆曲线:元器件失效率分三阶段——开始期不稳定(失效率高,需老化筛选)、第二阶段正常工作(失效率最低且基本恒定,应保证计算机使用此阶段元器件)、第三阶段老化(失效率升高,应淘汰)。
- 基本概念与公式(必背):
- 可靠性 R(t):从 t=0 到时刻 t 能正常运行的概率;失效率 λ 为常数时 R(t) = e^(−λt)。
- 平均无故障时间 MTBF = 1/λ。
- 平均修复时间 MTRF:从故障发生到修复的平均时间(可维修性)。
- 可用性 A = MTBF / (MTBF + MTRF)。
考点:MTBF、MTRF、可用性三者关系的公式是经典送分题。
- 可靠性模型(必考计算):
- 串联系统:所有子系统都正常系统才正常。R = R₁·R₂·…·Rₙ;失效率 λ = λ₁+λ₂+…+λₙ。例:CPU 0.95 × 存储 0.90 × I/O 0.85 = 0.73。
- 并联系统:只要一个子系统正常即可。R = 1 − (1−R₁)(1−R₂)…(1−Rₙ)。只有一个子系统是真正需要的,其余 N−1 个为冗余子系统,冗余越多 MTBF 越长。例:R=0.9 的 3 个子系统并联 → R = 1−0.1³ = 0.999。
- N 模冗余系统:N 个相同子系统(N=2n+1)+ 表决器,输出占多数相同的结果;只要有 n+1 个以上子系统正常即可正确工作。可靠性 R = Σᵢ₌ₙ₊₁ᴺ C(N,i)·R₀ⁱ·(1−R₀)^(N−i)。
- 提高可靠性两大措施:①提高元器件质量、改进工艺与电路设计;②发展容错技术(硬件有故障仍能继续运行得出正确结果)。
1.6.2 计算机系统的性能评价
常用评测方法:
- 时钟频率:主频越高一般越快,但不同体系结构同频也可能速度差很多。
- 指令执行速度:早期用加法指令运算速度衡量,单位 KIPS → MIPS(每秒百万条指令);浮点用 MFLOPS。
- 等效指令速度法(吉普森混合法):统计各类指令在程序中所占比例并折算,等效执行时间 T = Σ(wᵢ × tᵢ)。
- 数据处理速率 PDR 法:PDR = L/R,与每条指令和操作数的平均位数(L)及平均运算速度(R)有关;主要度量 CPU 和主存速度,没有考虑 Cache、流水线、多功能部件的影响。
- 核心程序法:把应用程序中使用最频繁的核心程序作为标准程序在不同机器上运行测执行时间;缺点是程序短、局部性强,Cache 命中率偏高。
基准测试程序(Benchmark):
- 整数测试 Dhrystone:测编译器及 CPU 整数与控制功能;结果以 Dhrystones/秒表示,以 VAX11/780(1757 Dhrystones/秒)为 1 VAX MIPS 折算。不同厂家程序不同,MIPS 相同性能也可能差很大。
- 浮点测试 Linpack / Whetstone:Linpack 用 FORTRAN 写的基本线性代数子程序包,测向量与 Cache 性能,结果用 MFLOPS;矩阵规模越大向量化程度越高(100×100 为 80%,1000×1000 为 98%)。Whetstone 是综合性测试程序,测浮点、整数、功能调用、数组变址、条件转移、超越函数,结果用 Kwips 表示。
- 理论峰值 MFLOPS:理论上最大浮点速度,非实际速度;多 CPU 机器峰值 = 单 CPU 峰值 × CPU 个数。
- SPEC 基准程序:SPEC CPU2006 含 12 个整数基准程序(CINT2006)和 17 个浮点基准程序(CFP2006);测试结果为执行时间与参考机器执行时间之比(SPECratio),综合结果取 SPECratio 的几何平均值。
- TPC 基准程序:评测事务处理性能。TPC-C 面向在线事务处理(OLTP),TPC-D 面向决策支持,TPC-E 面向大型企业信息服务;两个指标:tpsE(每秒处理交易数,越大越好)和性价比(美元/tpsE,越小越好)。
初学者容易踩的坑 / 易错考点
- 补码范围多一个:8 位补码范围是 −128~+127(原码/反码只有 −127~+127)。"10000000 表示什么"——是 −128,不是 −0。记住补码比原码/反码多表示 2ⁿ⁻¹ 这个负数。
- Cache 平均访问时间公式看错条件:ta = Hc·tc + (1−Hc)·tm 是"同时启动";ta = tc + (1−Hc)·tm 是"不命中才启动主存"。审题漏看一个字就丢分。
- 海明码位数公式记错:是 2^k − 1 ≥ n + k(不是 ≥ n)。8 位数据需要 4 位校验,32 位数据需要 6 位校验。
- 奇偶校验 vs 海明码 vs CRC 能力混淆:奇偶校验只能检奇数位错、不能纠错;海明码能定位并纠正 1 位错;CRC 主要用于通信检错(不纠错)。题目问"能纠错"选海明码。
- 溢出条件想当然:异号两数相加永远不会溢出;只有同号相加(或异号相减)才可能溢出。别把"结果有进位"当成溢出。
- 浮点对阶方向搞反:对阶是小阶向大阶看齐(阶码小的尾数右移),不是大的向小的靠。
- 总线方向记反:数据总线双向、地址总线单向(CPU→外)。"地址总线宽度决定寻址能力、数据总线宽度决定一次传输位数"别张冠李戴。
- RAID 级别特征混淆:RAID-0 无容错、RAID-1 镜像、RAID-5 无独立校验盘、RAID-6 能抗双盘故障。问"哪个级别容错能力最弱"选 RAID-0。
- DMA 时 CPU 干什么:DMA 传送期间 CPU 放弃总线、可做与总线无关的内部操作,"CPU 完全不参与"和"CPU 全程控制"的说法都错——只在开始和结束时介入。
小结 & 备考提示
本章是上午题的知识池,特点是"概念多、公式多、计算题模板化"。备考策略:数制/码制/校验码/流水线/可靠性这五块要做到"看题 30 秒出答案",CPU 内部寄存器归属、存储器分类、总线参数、RAID 级别靠反复背表格拿下。这些计算题套路固定,是全卷性价比最高的得分点。
必须记住的关键词:补码(含 −2ⁿ⁻¹ 特例)、海明码(2^k−1 ≥ n+k)、Cache 命中率与平均访问时间、四种 I/O 控制方式、串联/并联可靠性公式与 MTBF。