【考查目标】
1.掌握单处理器计算机系统中主要部件的工作原理、组成结构以及相互连接方式。
2.掌握指令集体系结构的基本知识和基本实现方法,对计算机硬件相关问题进行分析,并能够对相关部件进行设计。
3.理解计算机系统的整机概念,能够综合运用计算机组成的基本原理和基本方法,对高级程序设计语言(如C语言)中的相关问题进行分析,具备软硬件协同分析和设计能力。
一、计算机系统概述
(一) 计算机系统层次结构
- 计算机系统的基本组成
现代计算机系统由硬件系统和软件系统两大部分构成一个协同工作的整体。
硬件系统:是计算机的物理实体,包括中央处理器(CPU)、存储器(主存、辅存)、输入/输出(I/O)设备以及连接它们的系统总线。这对应了冯·诺依曼体系的五大部件。
软件系统:是计算机的逻辑实体,包括系统软件(如操作系统、编译程序、数据库管理系统)和应用软件(如办公软件、浏览器)。软件是对硬件功能的扩展与抽象。
重难点与408考点:需要清晰区分系统软件与应用软件。操作系统是最核心的系统软件,它直接管理硬件资源,并为其他软件提供运行环境。考题可能要求判断某个特定软件(如汇编器、链接器、设备驱动程序)属于系统软件还是应用软件。
- 计算机硬件的基本结构(冯·诺依曼结构)
冯·诺依曼结构是现代计算机的经典模型,其核心思想包括:
采用二进制:指令和数据均以二进制形式表示。
存储程序:程序(指令序列)与数据一同存放在存储器中。
五大部件:由运算器、控制器、存储器、输入设备、输出设备五大部分组成。
以运算器为中心:数据流动围绕运算器进行(现代计算机已发展为以存储器为中心)。
重难点:理解冯·诺依曼结构的核心特征及其局限性(如"冯·诺依曼瓶颈",即CPU与存储器之间的数据通路带宽限制了系统性能)。能画出硬件基本组成的结构框图,并指明数据流和控制流的走向。
- 计算机软件和硬件的关系
逻辑等价性:软件和硬件在逻辑功能上是等价的。任何由软件实现的操作,原则上都能由硬件来完成(硬件化、固件化);反之,任何由硬件实现的功能,也都能通过软件模拟(软件仿真)。这种特性为计算机系统的设计提供了灵活性。
实现与性能:硬件实现的特点是速度快、成本高、灵活性差;软件实现的特点是速度慢、复制成本低、灵活性好。系统设计者需要在性能、成本、灵活性之间取得平衡。
交互界面:硬件和软件之间的交互通过指令系统完成。指令系统是计算机硬件的语言,也是软件设计师看到的机器属性。
重难点与408考点:理解"软硬件逻辑等价"原理,并能举例说明(例如,乘法运算既可以用乘法器硬件实现,也可以用加法器和移位器通过软件循环实现)。选择题可能考查对固件(固化在硬件中的软件)归属的判断。
- 计算机系统的工作原理
"存储程序"的工作方式
"存储程序"是冯·诺依曼结构的灵魂。其工作方式是:将解决问题的程序和所需数据预先存入主存储器,计算机启动后,控制器便能自动地从存储器中逐条取出指令、分析指令、执行指令,从而完成预定任务。整个过程无需人工干预,实现了计算机的自动工作。
高级语言程序与机器语言程序之间的转换
用户编写的高级语言程序(如C、Java)必须经过一系列转换,变成机器可以直接识别和执行的二进制机器语言程序。这个过程主要由编译器完成,具体阶段包括:
编译:将高级语言源代码整体翻译成汇编语言或机器语言目标文件。编译器会进行词法分析、语法分析、语义分析、代码优化等多个步骤。与之相对的是解释,解释器是边翻译边执行,不生成独立的目标文件。
汇编:如果编译产出是汇编语言,则需要汇编器将其进一步翻译成机器指令(二进制代码),生成目标文件(.obj, .o)。
链接:将多个目标文件以及所需的库函数(如printf)合并,解决模块间的符号引用问题,生成一个完整的、可装入内存执行的可执行文件。
重难点:理解编译、汇编、链接三阶段各自的任务。区分编译器与解释器的工作原理差异(前者生成目标代码,后者直接执行不生成目标文件)。408真题中可能出现关于链接过程中符号解析、地址重定位等概念的题目。
程序和指令的执行过程
一条机器指令在CPU中的执行是一个周期性的过程,称为指令周期。最基本的指令周期包括两个阶段:
取指周期:将程序计数器(PC)所指内存地址的指令取到指令寄存器(IR) 中,同时PC自增,指向下一条指令地址。
执行周期:由控制器对IR中的指令进行译码,发出相应的控制信号,驱动运算器、存储器等部件完成指令规定的操作。
更细致地,可以将其分解为一系列微操作,或划分为类似MIPS五段流水线的阶段:取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回(WB)。
重难点与408考点:这是计算机组成原理的核心。必须深刻理解程序计数器(PC) 的作用------它总是指向下一条待执行指令的地址,是程序自动连续执行的关键。能够手动模拟简单指令序列(如包含算术运算、访存、条件分支)的执行过程,追踪PC、IR、通用寄存器及内存单元内容的变化。这是综合应用题的重要基础。
(二) 计算机性能指标
- 基础性能指标
吞吐量:指系统在单位时间内完成的工作总量,例如每秒处理的事务数(TPS)、每秒传输的数据量(MB/s)。注重系统的整体处理能力。
响应时间:指从用户向计算机提交请求到系统返回结果所经历的全部时间,也称为执行时间或延迟。注重单个任务的完成速度。
CPU时钟周期:CPU中最小的时间单位,是处理器内部时钟振荡一次的时间,通常以纳秒(ns)为单位。
主频(时钟频率):CPU每秒的时钟周期数,是时钟周期的倒数,单位通常为GHz(10⁹ Hz)。例如,主频为3.0 GHz,则时钟周期 = 1 / 3.0×10⁹ ≈ 0.333 ns。
CPI:执行一条指令所需的平均时钟周期数。它是一个平均值,因为不同指令的复杂度不同(如整数加法和浮点除法的CPI可能差异很大)。
CPU执行时间:衡量计算机性能最可靠、最根本的指标。计算公式为:
CPU执行时间=指令条数×CPI/主频=指令条数×CPI×时钟周期
重难点与408真题考点:
CPU执行时间公式的应用:这是必考核心考点。题目可能给出其中几个量,要求计算另一个量(如计算CPU时间、比较两台机器的性能)。性能提升的百分比计算也常出现,例如:"若CPU主频提升20%,CPI降低15%,问程序执行时间加速了多少?"(需综合计算:新时间 = (指令数 * 0.85CPI) / (1.2主频) = 0.708原时间,加速约29.2%)。
理解各指标的关系:性能(执行时间的倒数) = 主频 / (指令数 × CPI)。提升性能的三大途径是:提高主频(更快的硬件)、降低CPI(更好的微架构设计)、减少指令条数(更优的指令集或编译器)。
- 综合性能指标
MIPS:每秒执行多少百万条指令。MIPS = 主频 / (CPI × 10⁶)。MIPS值受指令集影响大,不同架构的MIPS值不能直接比较性能。
FLOPS系列:每秒执行的浮点运算次数,用于衡量科学计算、图形处理等浮点密集型任务的性能。它是一个标量指标,通常指64位双精度浮点操作。
单位进阶:MFLOPS(10⁶)、GFLOPS(10⁹)、TFLOPS(10¹²)、PFLOPS(10¹⁵)、EFLOPS(10¹⁸)、ZFLOPS(10²¹)。
重难点与408考点:
MIPS的局限性:明确MIPS的缺陷。指令集不同(CISC vs RISC)、指令功能不同,使得MIPS作为跨平台性能比较标准的意义有限。例如,一段复杂算法在A机器上可能需要1亿条指令,在B机器上可能需要1.5亿条,单纯比较MIPS可能得出错误结论。
FLOPS的意义:理解FLOPS是衡量处理器(特别是GPU、科学计算CPU)峰值理论计算能力的关键指标。实际应用中,由于内存带宽、程序并行度等因素限制,达到峰值FLOPS非常困难。
二、数据的表示和运算
(一) 数制与编码
- 进位计数制及其数据之间的相互转换
常用进制:二进制(B)、八进制(O)、十进制(D)、十六进制(H)。
转换方法:
R进制 → 十进制:按权展开求和。
十进制 → R进制:整数部分除基取余(逆序),小数部分乘基取整(顺序)。
二进制 ↔ 八/十六进制:以小数点为界,每3位二进制对应1位八进制,每4位二进制对应1位十六进制。
真值与机器数:真值是带"+"、"-"符号的实际数值;机器数是真值在计算机中的二进制表示形式。
- 定点数的编码表示
定点数指小数点在数中的位置固定不变。通常分为定点整数(小数点固定在最低位后)和定点小数(小数点固定在最高位前)。其编码方式主要有:
原码:符号位(0正1负)+ 数值位的绝对值。表示简单直观,但加减运算复杂,0的表示不唯一([+0]原 = 0000, [-0]原 = 1000)。
反码:正数的反码与原码相同;负数的反码是符号位不变,数值位按位取反。同样存在±0问题。
补码:现代计算机中整数存储和运算的标准形式。
正数的补码与原码相同。
负数的补码 = 其反码 + 1(或等价于:模 - |x|)。
核心优势:
0的表示唯一:[+0]补 = [-0]补 = 0000。
可将减法统一为加法:A - B = A + (-B)补,简化运算器设计。
符号位可直接参与运算。
移码:主要用于表示浮点数的阶码。[x]移 = 偏置值 + x(通常偏置值取 2^(n-1))。移码的特点是:真值越大,码值越大,便于比较阶码大小。
重难点与408考点:
补码的快速求解:给定一个负数,能快速写出其补码表示。方法:从右向左找到第一个1,其左侧各位取反,右侧(含该1)不变。
补码的表示范围:对于n位补码(含1位符号位),表示范围为 [-2^(n-1), 2^(n-1)-1]。这是选择题常考点,需注意边界值。
不同编码的相互转换与数值计算:给定一个二进制串,要求写出其对应的原码、反码、补码的真值,或进行加减运算。
(二) 运算方法和运算电路
- 基本运算部件
加法器:
半加器:不考虑低位进位,实现1位二进制加法。
全加器:考虑低位进位,实现1位二进制加法。是构成多位加法器的基本单元。
串行进位加法器:将多个全加器串联,进位信号逐级传递。结构简单,但速度慢。
并行进位加法器(先行进位加法器,CLA):通过逻辑电路提前并行产生所有位的进位信号,极大提高了加法速度,是现代ALU的核心。
算术逻辑部件(ALU):CPU的核心部件,能执行算术运算(加、减)、逻辑运算(与、或、非、异或)、移位等操作。其功能由操作控制线(如ALUop)决定。
- 加/减运算
补码加/减运算器:基于补码表示,减法 A - B 可转换为加法 A + (-B)补。运算器核心是一个并行加法器,并配合一个求补电路(对B按位取反、末位加1)来实现减法。
标志位的生成:运算后,CPU会根据结果设置状态标志寄存器中的相应位,这对程序流程控制至关重要。
OF(溢出标志):表示有符号数运算结果是否超出表示范围。判断逻辑:最高位进位C_n 与 次高位进位C_{n-1} 异或,即 OF = C_n ⊕ C_{n-1}。
SF(符号标志):等于运算结果的最高位(符号位)。
ZF(零标志):当运算结果所有位全为0时置1。
CF(进位/借位标志):表示无符号数运算是否产生进位(加法)或借位(减法)。对于加法,CF = C_n(最高位进位);对于减法,CF = C_n取反(因为减法被转换为加补码,C_n=1实际表示无借位)。
- 乘/除运算
乘法运算:
原码乘法:符号位单独处理,数值部分采用"加法+移位"实现。包括原码一位乘(根据乘数当前位是0/1决定加被乘数或0)和布斯算法(Booth's Algorithm)。
补码乘法:常用布斯算法,它通过观察乘数相邻两位的变化(01加被乘数,10减被乘数,00/11加0)来优化,适合有符号数乘法,且能统一正负数的处理。
乘法电路基本结构:主要包括寄存器(存放被乘数、乘数、部分积)、并行加法器和移位控制逻辑。
除法运算:
原码除法:符号位单独处理,数值部分采用"减法+移位"恢复余数法或不恢复余数法(加减交替法)。
补码除法:较为复杂,常用加减交替法,但需要根据被除数与除数的符号调整商和余数的规则。
除法电路基本结构:主要包括寄存器(存放被除数/余数、除数、商)、加减法器和移位控制逻辑。
重难点与408真题考点:
溢出判断:熟练掌握利用双高位判别法(OF = C_n ⊕ C_{n-1})判断补码加减运算是否溢出,并能举例说明。
标志位的含义与设置:深刻理解OF和CF的区别(一个有符号,一个无符号)。给定一个加法或减法操作,能准确说出各标志位(OF, SF, ZF, CF)的结果。
布斯乘法算法的手动模拟:这是综合题的经典考点。给定两个补码表示的整数,要求用布斯算法逐步写出乘法过程(包括部分积和乘数的变化)。
原码/补码除法的恢复余数法与加减交替法:理解其原理,能进行简单的手动模拟计算。
(三) 整数的表示和运算
- 无符号整数的表示与运算
表示:所有二进制位均表示数值,没有符号位。n位无符号整数表示范围为 [0, 2^n - 1]。
运算:直接进行二进制加减乘除。溢出判断仅看CF位:加法时若最高位有进位(CF=1),或减法时需要借位(CF=1),则发生溢出(结果超出表示范围)。
- 带符号整数的表示与运算
表示:采用补码表示。
运算:采用补码加减运算。溢出判断看OF位。
符号扩展:为了在不同位宽的寄存器或内存之间传递数据而不改变数值,需要进行符号扩展。补码的符号扩展规则是:用原符号位填充所有新增的高位。
重难点:无符号数与有符号数在计算机内部的存储格式可能完全相同,区别在于程序如何解释它们。例如,二进制串 1111 1111 解释为无符号数是255,解释为8位补码是-1。C语言中的强制类型转换 (unsigned int) 和 (int) 就是改变了解释方式,而非改变底层比特位。
(四) 浮点数的表示和运算
- 浮点数的表示
浮点数用于表示实数,采用科学计数法的思想:N = (-1)^S × M × R^E。
S(Sign):符号位,0正1负。
M(Mantissa):尾数,是一个规格化的小数,通常采用原码表示。
R(Radix):基数,隐含为2(二进制)。
E(Exponent):阶码,是一个整数,通常用移码表示。
IEEE 754标准:这是现代计算机浮点数表示的事实标准。
单精度(float,32位):S(1位) + E(8位) + M(23位)。偏置值 Bias = 127。
双精度(double,64位):S(1位) + E(11位) + M(52位)。偏置值 Bias = 1023。
关键规则:
规格化:尾数M隐含最高位为1(即 1.M),这样能多保存1位精度。因此实际表示的尾数是 1.xxxx...。
阶码E的特殊值:
E = 全0:表示非规格化数(此时隐含最高位为0)或 ±0。
E = 全1:若 M = 0,表示 ±∞;若 M ≠ 0,表示 NaN(非数)。
重难点与408考点:
IEEE 754格式与真值的相互转换:这是必考核心。给定一个十六进制表示的IEEE 754数,要求计算其对应的十进制真值,反之亦然。解题步骤:①分离S、E、M;②计算阶码真值 e = E - Bias;③计算尾数真值 1.M(规格化)或 0.M(非规格化);④组合 (-1)^S × 1.M × 2^e。
表示范围与精度:理解规格化数、非规格化数、0、无穷大、NaN各自的表示方式和意义。能计算单/双精度浮点数能表示的最大正数、最小正数等。
- 浮点数的加/减运算
步骤比定点数复杂,主要包括:
对阶:使两个操作数的阶码相等。小阶向大阶看齐,尾数相应右移(可能丢失精度)。
尾数加减:对阶后的尾数进行加减运算。
规格化:将结果尾数调整为 1.M 的形式(左规或右规)。
舍入:处理右移或规格化过程中被移出的位,常用方法有"就近舍入(向偶数舍入)"、"朝+∞舍入"、"朝-∞舍入"、"截断"。
溢出判断:检查阶码是否超出表示范围(上溢或下溢)。
重难点:理解浮点数运算的不满足结合律、分配律等特性,这是由于对阶、舍入等步骤造成的精度损失导致的。例如,(a + b) + c 的结果可能与 a + (b + c) 不同。
三、存储器层次结构
(一) 存储器的分类
存储器可按多种维度分类,理解这些分类是构建存储器层次结构知识体系的基础。
按存取方式:
随机存取存储器:可按地址直接访问任一单元,存取时间与地址无关。如 SRAM、DRAM。
顺序存取存储器:存取时间与物理位置有关,必须按顺序访问。如磁带。
直接存取存储器:先直接定位到某个区域,再在该区域内顺序查找。如磁盘、光盘。
相联存储器:按内容(关键字)寻址,而非地址。如 TLB。
按信息的可更改性:
读写存储器:可读可写。如内存、Cache。
只读存储器:内容固定,只能读出。如ROM、BIOS芯片。
按信息的可保存性:
易失性存储器:断电后信息丢失。如 SRAM、DRAM。
非易失性存储器:断电后信息保留。如 Flash、磁盘、ROM。
按在计算机中的作用(层次):
主存储器:CPU可直接访问,存放当前运行的程序和数据。如DRAM内存条。
辅助存储器:用于长期、大量存储数据,CPU不能直接访问。如磁盘、SSD。
高速缓冲存储器:位于CPU和主存之间,用于缓解速度矛盾。如SRAM构成的Cache。
寄存器:位于CPU内部,速度最快,容量最小。
重难点:理解不同分类维度下的典型代表及其特性,特别是随机存取 vs 直接存取、易失性 vs 非易失性的区别,这是选择题的常见考点。
(二) 层次化存储器的基本结构
为了解决存储器速度、容量、成本三者之间的矛盾,现代计算机采用存储器层次结构。
金字塔模型:从上到下,速度递减,容量递增,成本递减。
寄存器:最快,容量最小(KB级),成本最高。
高速缓存:次快,容量较小(MB级),成本高。
主存储器:速度中等,容量大(GB级),成本中等。
辅助存储器:速度慢,容量巨大(TB级),成本低。
工作原理:基于程序访问的局部性原理,包括:
时间局部性:被访问过的信息很可能在近期再次被访问。
空间局部性:被访问信息附近的信息很可能在近期被访问。
通过将活跃数据从下层复制到上层,让CPU大部分时间访问高速的上层存储器,从而在宏观上获得接近最高层速度、接近最底层容量和成本的系统性能。
重难点:深刻理解局部性原理是层次化存储结构得以高效工作的理论基石,并能分析给定程序代码片段的局部性好坏。
(三) 半导体随机存取存储器
- SRAM存储器
存储元:通常由6个MOS管构成的双稳态触发器。
特点:速度快(存取周期短),功耗低,集成度低(体积大、成本高),非破坏性读出,易失性。
应用:主要用于制作高速缓存。
- DRAM存储器
存储元:通常由1个MOS管和1个电容构成。
特点:集成度高(体积小、成本低),速度比SRAM慢,需要刷新(因电容电荷会泄漏),破坏性读出(读后需重写),易失性。
刷新:定期对DRAM所有行进行"读-重写"操作。刷新以行为单位,由存储器内部的刷新电路自动完成,刷新期间CPU不能访问存储器。刷新方式有集中刷新、分散刷新和异步刷新。
应用:主要用于制作主存。
- Flash存储器
原理:基于浮栅MOS管,通过隧道效应注入或释放电荷来改变阈值电压,从而表示0/1。
特点:非易失性,可电擦除、可编程,读写不对称(写入/擦除慢,读出快),有擦写次数限制。
类型:NAND Flash(容量大、适合大块数据,用于SSD、U盘)和 NOR Flash(随机读取快、适合存储代码)。
应用:固态硬盘、U盘、BIOS芯片。
重难点与408考点:
SRAM与DRAM的对比:从存储元结构、速度、集成度、功耗、是否需要刷新等方面进行对比,是必考内容。
DRAM刷新计算:给定存储芯片规格、刷新周期、存取周期,计算各种刷新方式下的"死时间"比例。例如,对于128×128的DRAM芯片,刷新周期8ms,存取周期0.5μs,采用集中刷新,则死时间 = 128 * 0.5μs = 64μs。
(四) 主存储器
- DRAM芯片和内存条
芯片结构:存储阵列被组织成行×列的矩阵。通过行地址和列地址分两次传送来选中一个存储单元,以减少芯片引脚数。
内存条:由多片DRAM芯片并行组装在PCB板上构成,通过位扩展(增加数据位宽)和字扩展(增加存储单元数量)来满足系统需求。
- 多模块存储器
为了提高主存带宽,采用多个存储模块并行工作。
单体多字存储器:一个存储体,每个存储单元存储多个字,一次并行读出。地址必须顺序且对齐。
多体并行存储器:多个存储体(模块)独立编址,可并行或交叉工作。
高位交叉编址(顺序方式):地址高位区分模块。利于扩容,但无法并行存取连续地址。
低位交叉编址(交叉方式):地址低位区分模块。连续地址分布在不同的模块中,可实现多模块流水线式并行存取,有效提高带宽。这是主要应用方式。
- 主存和CPU之间的连接
连接原理:通过数据总线、地址总线、控制总线相连。
译码片选:CPU的地址线高位通过译码器产生片选信号,选中特定的存储芯片;地址线低位直接连接到芯片的地址引脚,用于片内寻址。
容量扩展:
位扩展:用多片芯片并联,增加数据位宽。所有芯片的地址线、片选线、读写控制线并联,数据线分别接数据总线的不同位。
字扩展:用多片芯片串联,增加存储单元数量。所有芯片的数据线、读写控制线并联,地址线并联,但通过高位地址译码产生不同的片选信号。
字位同时扩展:上述两种方式的结合。
重难点与408真题考点:
主存容量扩展设计:这是综合题的核心题型。给定CPU地址总线、数据总线宽度,以及存储芯片规格,要求设计主存系统,画出连接图,并给出地址空间分配。必须熟练掌握位扩展、字扩展的原理和连接方法。
低位交叉编址的带宽计算:给定存储体个数、存取周期,计算在理想流水情况下的带宽提升。
(五) 外部存储器
- 磁盘存储器
结构:由盘片、磁头、主轴、磁头臂、控制电路等组成。数据记录在盘片的同心圆磁道上,磁道又分为扇区。
性能指标:
存取时间 = 寻道时间(磁头移动到目标磁道) + 旋转延迟时间(盘片旋转使目标扇区到磁头下) + 传输时间(读写数据)。
数据传输率:单位时间内从磁盘读/写的数据量。
地址格式:通常为(柱面号,磁头号,扇区号)。
- 固态硬盘
结构:由NAND Flash存储芯片阵列、闪存转换层和主控芯片构成。
FTL:负责将操作系统发来的逻辑块地址映射到物理闪存页地址,并处理磨损均衡、垃圾回收、坏块管理等。
与磁盘对比:
优点:速度快(无机械运动)、抗震、安静、功耗低。
缺点:有擦写次数限制、价格较高、长期不通电可能丢数据。
重难点:掌握磁盘平均存取时间的估算,理解SSD的FTL层作用及其带来的性能和管理特性差异。
(六) 高速缓冲存储器
- Cache的基本工作原理
目的:利用局部性原理,将主存中活跃的块复制到高速的SRAM中,供CPU快速访问。
工作流程:CPU给出主存地址,Cache控制器判断该地址所在块是否在Cache中(命中),若命中则直接访问Cache;若不命中(缺失),则从主存调入该块,并可能替换掉Cache中某一块。
- Cache和主存之间的映射方式
直接映射:主存中每一块只能映射到Cache中唯一的一个特定行。实现简单,但冲突不命中率高。
全相联映射:主存中每一块可以映射到Cache中的任意一行。空间利用率高,命中率高,但查找电路复杂,速度慢。
组相联映射:Cache分组,主存块映射到特定组内的任意行。是直接映射和全相联的折中,最常用。n路组相联表示每组有n行。
- Cache中主存块的替换算法
当新块调入且Cache已满时,需选择一行替换。常见算法:
随机算法:随机选。简单,但性能不稳定。
先进先出:替换最早调入的块。可能替换掉频繁使用的块。
近期最少使用:替换最长时间未被访问的块。命中率高,但实现复杂,需记录访问历史。
最不经常使用:替换访问次数最少的块。
- Cache写策略
解决Cache与主存数据一致性问题。
写命中时:
写直达:同时写Cache和主存。简单可靠,但总线 traffic 大。
写回法:只写Cache,并将该行标记为"脏"。当该行被替换时才写回主存。效率高,但控制复杂。
写不命中时:
写分配法:先将主存块调入Cache,再在Cache中写。通常与写回法搭配。
非写分配法:直接写入主存,不调入Cache。通常与写直达法搭配。
重难点与408真题考点:
地址划分与命中判断:给定Cache容量、块大小、映射方式、主存地址位数,要求划分出标记位、组索引、块内地址,并判断给定主存地址是否命中。这是必考计算题。
Cache容量计算:总容量 = 数据存储容量 + 标记阵列容量 + 有效位、脏位等开销。
替换算法模拟:给定访问序列和Cache初始状态,模拟LRU/FIFO等算法的命中/替换过程。
(七) 虚拟存储器
- 虚拟存储器的基本概念
目的:为用户程序提供一个比实际物理内存大得多的、统一的虚拟地址空间,并实现内存的自动调度和管理。
原理:基于局部性原理,将程序当前运行所需的页面/段调入内存,暂时不用的存于外存(磁盘交换区)。由操作系统和硬件共同实现。
- 页式虚拟存储器
基本原理:将虚拟地址空间和物理地址空间都划分为固定大小的页。程序按页加载。
页表:存储在内存中的数据结构,记录虚拟页号到物理页帧号的映射关系,以及状态位(有效位、脏位、访问位等)。
地址转换:
CPU发出虚拟地址。
MMU将虚拟地址拆分为虚拟页号和页内偏移。
用虚拟页号查询页表基址寄存器指向的页表,找到对应页表项,获得物理页帧号。
物理页帧号 + 页内偏移 = 物理地址。
TLB:由于页表在内存中,每次访存需先访问页表(多一次访存),速度慢。TLB是页表的高速缓存,用于存放最近使用的页表项。地址转换时先查TLB(快),若命中则直接获得物理页帧号;若不命中才查内存中的页表,并更新TLB。
- 段式虚拟存储器的基本原理
基本原理:按程序的逻辑结构(函数、模块)划分成段。每段有独立的虚地址空间,长度可变。
段表:记录段号到物理内存起始地址的映射,以及段长限制。
特点:便于共享和保护,但容易产生外部碎片,管理复杂。
- 段页式虚拟存储器的基本原理
基本原理:结合段式和页式的优点。先将程序按逻辑分段,再将每个段划分为固定大小的页。
地址转换:需经过两级查表------先查段表得到页表起始地址,再查页表得到物理页帧号。既保留了分段对程序逻辑结构的支持,又获得了分页在内存管理上的高效性。现代操作系统(如Linux、Windows)普遍采用段页式管理。
重难点与408真题考点:
虚拟地址到物理地址的转换全过程:这是最核心的考点。给定页表结构、TLB结构、Cache结构,要求计算一次访存操作(可能命中/缺失于TLB、页表、Cache)所需的时间或产生的访存次数。必须清晰掌握TLB命中/缺失、缺页异常、Cache命中/缺失等不同情况下的处理流程。
有效访问时间的计算:综合考虑命中率、访问时间,计算平均访存时间。例如:EAT = TLB命中时间 + (1-TLB命中率) * (页表访问时间 + 内存访问时间) + ...。
页表大小的计算:给定虚拟地址空间大小、页大小、页表项大小,计算页表的总大小。理解多级页表如何减少页表常驻内存的大小。
四、指令系统
(一)指令系统的基本概念
(二)指令格式
(三)寻址方式
(四)数据的对齐和大/小端存放方式
(五)CISC和RISC的基本概念
(六)高级语言程序与机器级代码之间的对应
1.编译器、汇编器和链接器的基本概念
2.选择结构语句的机器级表示
3.循环结构语句的机器级表示
4.过程(函数)调用对应的机器级表示
4.过程(函数)调用对应的机器级表示
您提出的"指令系统"主题实际上是《计算机组成原理》的核心内容,而非《数据结构》的内容。它系统地阐述了计算机硬件如何理解和执行程序。下面我将严格依照您列出的提纲,结合本科教材和408考研真题,对这一重难点进行详细解析。
四、指令系统
(一) 指令系统的基本概念
-
定义:指令系统,也称指令集架构(ISA),是计算机硬件与软件之间的接口。它规定了计算机所能执行的全部指令的集合、指令的格式、操作类型、寻址方式以及寄存器组织等。
-
重要性:
-
硬件设计者的视角:ISA是CPU设计的起点和规范。CPU的功能就是识别并执行ISA定义的指令。
-
软件开发者(编译器)的视角:编译器将高级语言程序翻译成由ISA指令序列组成的机器码。
-
承上启下:ISA是计算机系统中"硬件"和"软件"的交界,是计算机体系结构的核心体现。
-
-
408真题常见考点:考查ISA在计算机层次结构中的地位与作用,区分ISA与微体系结构(Microarchitecture,即ISA的具体硬件实现,如流水线、缓存设计)的概念。
(二) 指令格式
一条指令通常包含两部分信息:做什么(操作) 和 对谁操作(操作数)。
-
基本格式 :
操作码 (OP) | 地址码/操作数 (A) -
地址码数量:决定了指令中显式给出的操作数个数,是分类的重要依据。
-
零地址指令 :格式为
OP。例如:空操作NOP、停机指令、堆栈操作(PUSH/POP隐含操作数在栈顶)。 -
一地址指令 :格式为
OP | A1。其中一个操作数隐含在累加器ACC中,结果也常存回ACC。如:INC A(A+1→A),NOT A。 -
二地址指令 :格式为
OP | A1 | A2。这是最常见的格式,如ADD R1, R2(R1+R2→R1)。其中一个地址同时作为源操作数和目的操作数。 -
三地址指令 :格式为
OP | A1 | A2 | A3。如ADD R1, R2, R3(R2+R3→R1)。功能清晰,但指令字较长。
-
-
指令字长 :与机器字长相关,可以是定长指令 (简化设计,RISC特点)或变长指令(节省存储空间,CISC常见)。
-
408真题常见考点:给定指令系统设计要求(操作码数量、地址数、寄存器个数、存储空间大小),设计合理的指令格式,计算操作码的扩展方案(定长编码 vs 扩展操作码)。
(三) 寻址方式
寻址方式是**寻找指令或操作数有效地址(EA)**的方法。这是指令系统的核心难点。
-
指令寻址:
-
顺序寻址 :
(PC) + 1 → PC,指向下一条指令。 -
跳跃寻址:通过转移指令(JMP)修改PC值,实现跳转。
-
-
数据寻址(重点中的重点):
寻址方式 常见表示 有效地址EA计算 特点与目的 408常见考察点 立即(数)寻址 MOV R1, #5操作数本身在指令中 速度快,用于赋常数 指令执行不访存 直接寻址 MOV R1, [100]EA = A 简单,但地址范围受限 EA即指令中的地址码 隐含寻址 MUL(隐含ACC)操作数在约定寄存器 缩短指令长度 区分指令中是否给出地址 间接寻址 MOV R1, @100EA = (A) 可扩大寻址范围,便于编程(如指针) 一次间址需访存2次(取地址+取数) 寄存器寻址 ADD R1, R2EA = R 速度极快,减少访存 操作数在寄存器中 寄存器间接 MOV R1, [R2]EA = (R) 高效访问数组/指针 一次访存(取数) 相对寻址 JMP AEA = (PC) + A 用于转移指令,代码可浮动 PC的值是下条指令地址 基址寻址 MOV R1, [BR+100]EA = (BR) + A 面向系统,由OS/管理程序设置BR,用于多道程序重定位 BR内容不变,A可变 变址寻址 MOV R1, [IX+100]EA = (IX) + A 面向用户,IX作为循环索引,用于数组访问 A为形式地址(基地址),IX可变 段寻址 MOV AX, [DS:BP]EA = (段寄存器) << 4 + 偏移 8086等实模式内存管理 形成20位物理地址 -
关键理解:
-
基址 vs 变址 :两者计算式相同,但目的不同 。基址寻址中基址寄存器(BR)内容由OS设定(程序装入时确定),用户程序不可修改,用于解决逻辑地址到物理地址的转换 ;变址寻址中变址寄存器(IX)由用户程序修改,用于遍历数据。
-
相对寻址的PC值 :计算时PC中存放的是当前指令的下一条指令的地址(因为取指后PC已自增)。
-
访存次数:立即、寄存器寻址不访存;直接、寄存器间接、基址/变址寻址访存1次;间接寻址至少访存2次。
-
(四) 数据的对齐和大/小端存放方式
-
对齐 (Alignment):
-
概念:要求数据元素的地址是其自身大小的整数倍(例如,4字节int型数据地址需是4的倍数)。
-
原因:现代计算机内存系统通常按对齐边界(如4字节、8字节块)存取数据。非对齐访问可能导致多次内存操作,降低性能,在某些架构(如ARM早期)甚至引发异常。
-
408考点:给定结构体定义,计算其内存占用大小(考虑对齐规则),或分析访存次数。
-
-
大端/小端模式 (Big/Little Endian):
-
概念:描述多字节数据(如int, float)在内存中字节的存储顺序。
-
大端模式 (Big-Endian) :高位字节 存放在低地址。符合人类阅读习惯。如网络字节序、Sun SPARC。
-
小端模式 (Little-Endian) :低位字节 存放在低地址。利于机器处理。如x86、ARM(通常可配置)。
-
-
例子 :32位数
0x12345678在起始地址0x100处的存放:地址 大端模式 小端模式 0x100 12 (MSB) 78 (LSB) 0x101 34 56 0x102 56 34 0x103 78 12 (MSB) -
408考点:给出一段内存内容(字节序列),在不同端模式下还原出数据值;或判断系统在通信、文件读写时是否需要字节序转换。
-
(五) CISC和RISC的基本概念
| 特性 | CISC (复杂指令集计算机) | RISC (精简指令集计算机) |
|---|---|---|
| 指令系统 | 指令数量多、格式多变、功能复杂 | 指令数量少、格式规整、功能简单 |
| 寻址方式 | 丰富多样 | 简单,以寄存器/立即数寻址为主 |
| 指令字长 | 变长 | 定长(典型32位) |
| 访存操作 | 存储器操作数可直接运算(如ADD [A], B) | 只有LOAD/STORE指令可访存(加载-存储架构) |
| 通用寄存器 | 数量较少 | 数量多(利于优化) |
| 控制实现 | 微程序控制为主 | 硬布线控制为主,追求高速 |
| 目标 | 缩小机器指令与高级语言的"语义差距" | 通过简化指令,使每条指令执行周期短,利于流水线 |
| 代表架构 | x86, VAX | ARM, MIPS, RISC-V |
| 发展趋势 | 融合RISC思想,内部将复杂指令译码为微操作(μops)执行 | 吸收CISC优点,增加部分多媒体扩展指令 |
- 408考点:对比分析两者特点及设计哲学,理解现代CPU(如x86)实际上是"CISC外壳,RISC内核"。
(六) 高级语言程序与机器级代码之间的对应
这部分是408统考的重中之重,通常结合C语言代码片段和汇编代码(x86或MIPS)进行考察。
1. 编译器、汇编器和链接器的基本概念
* 编译器 :将高级语言源程序 翻译成汇编语言程序 。进行词法、语法、语义分析,优化,生成汇编代码。
* 汇编器 :将汇编语言程序 翻译成机器语言目标文件 (.obj/.o)。处理符号、伪指令,生成二进制代码。
* 链接器 :将多个目标文件 和库文件 链接成一个可执行文件 。解决外部符号引用(重定位),合并代码/数据段。
* 流程 :C源程序(.c) → [编译器] → 汇编程序(.s) → [汇编器] → 目标文件(.o) → [链接器] → 可执行文件
2. 选择结构语句(if, switch)的机器级表示
* if-else :通过条件跳转指令 (如CMP, Jcc)实现。
c // C 代码 if (a > b) { x = 1; } else { x = 2; }
assembly ; x86 汇编示意 CMP EAX, EBX ; 比较 a 和 b (假设a在EAX, b在EBX) JLE ELSE_BLOCK ; 若 a <= b,跳转到 ELSE_BLOCK MOV [x], 1 ; then 部分 JMP END_IF ELSE_BLOCK: MOV [x], 2 ; else 部分 END_IF:
* switch :对于连续且值范围小的case,可能编译成跳转表,实现O(1)时间跳转,比多个if-else高效。
3. 循环结构语句(for, while, do-while)的机器级表示
* 本质是条件跳转 。
c // C for循环 for (i=0; i<N; i++) { sum += i; }
assembly ; x86 汇编示意 MOV ECX, 0 ; i = 0 MOV EAX, 0 ; sum = 0 LOOP_START: CMP ECX, [N] ; 比较 i 和 N JGE LOOP_END ; 若 i >= N,跳出循环 ADD EAX, ECX ; sum += i INC ECX ; i++ JMP LOOP_START LOOP_END:
4. 过程(函数)调用的机器级表示
这是最复杂的部分,涉及栈帧(Stack Frame) 的管理。
* 核心步骤 :
-
调用者 (Caller) 预备阶段 :将参数 压入栈或存入约定寄存器。
-
CALL指令 :将返回地址 (下一条指令地址)压栈,并跳转到被调用函数入口。 -
被调用者 (Callee) 序幕 (Prologue) :
* PUSH EBP:保存旧的帧指针。
* MOV EBP, ESP:建立新的栈帧基址(EBP指向当前栈帧底部)。
* SUB ESP, X:在栈上为局部变量 分配空间。
-
被调用者函数体执行 。
-
被调用者收尾 (Epilogue) :
* 将返回值存入约定寄存器(如EAX)。
* MOV ESP, EBP:释放局部变量空间。
* POP EBP:恢复旧的帧指针。
* RET:从栈顶弹出返回地址,并跳转回调用者。
- 调用者清理阶段 :调整栈指针(如
ADD ESP, Y),清理传递的参数(在__cdecl调用约定下)。
* 栈帧布局(x86典型,从高地址向低地址生长) :
| ... | | 调用者的栈帧 | |-------------------------| <--- 调用前的ESP | 参数N | | ... | | 参数1 | |-------------------------| | 返回地址 (由CALL压入) | |-------------------------| <--- EBP指向这里 (新的栈帧开始) | 保存的EBP (旧的) | |-------------------------| <--- ESP指向这里 (局部变量区顶部) | 局部变量1 | | 局部变量2 | | ... | | 保存的寄存器 (可选) | |-------------------------| <--- 当前ESP
* 408考点 :给出一段C函数和汇编代码,要求:
* 分析栈帧结构,指出参数、返回地址、旧EBP、局部变量的位置。
* 计算局部变量空间大小。
* 分析递归调用的栈帧变化。
* 理解不同调用约定(__cdecl, __stdcall等)在参数传递和清理责任上的区别。
总结与备考建议:
-
指令格式与寻址是基础,必须理解每种寻址方式的EA计算、访存次数和应用场景。
-
对齐与端序是易错点,通过画图加深理解。
-
CISC/RISC对比要从设计哲学和硬件实现角度理解,而不是死记表格。
-
高级语言与汇编对应 是综合应用难点,必须动手练习。建议:
-
在编译器(如gcc)中使用
-S选项生成汇编代码(gcc -S -O0 test.c),对照学习。 -
重点掌握函数调用栈帧的完整生命周期,这是分析一切程序执行的基础。
-
多做历年408真题,特别是其中的汇编代码分析题,总结出题规律和解题技巧。
-
五、中央处理器(CPU)
CPU是计算机的"大脑",负责执行程序指令、处理数据、控制系统其他部件。
(一) CPU的功能和基本结构
-
功能:
-
指令控制:取指令、分析指令(译码)、执行指令。
-
操作控制:产生每条指令执行过程中各部件所需的微操作控制信号。
-
时间控制:对各种操作进行严格的定时。
-
数据加工:对数据进行算术和逻辑运算。
-
中断处理:处理异常和外部中断请求。
-
-
基本结构(核心两大部件):
-
运算器(ALU, 寄存器组等):执行算术/逻辑运算。
-
ALU:核心运算单元。
-
通用寄存器组 :如AX, BX, CX等(x86),或R0-R31(MIPS)。(数据结构关联):程序中的局部变量、临时计算中间值通常存放在通用寄存器中,这是访问速度最快的数据存储位置。
-
暂存器:用于暂存从主存读来的数据或ALU的输入输出。
-
PSW(程序状态字寄存器):存储状态标志位(CF, ZF, OF, SF等)。
-
-
控制器(CU):协调并控制各部件工作。
-
PC(程序计数器):存放下一条指令的地址。
-
IR(指令寄存器):存放当前正在执行的指令。
-
MAR(内存地址寄存器):存放要访问的主存单元地址。
-
MDR(内存数据寄存器):存放向主存写入或从主存读出的数据。
-
CU(控制单元) :核心,根据IR中的指令码和PSW的状态,发出特定的微操作控制信号序列。可分为硬布线控制器 和微程序控制器。
-
-
-
408真题常见考点:
-
给出一段C语言或汇编代码,问某个变量在CPU的哪个部件中(如通用寄存器、Cache、主存)。
-
比较硬布线控制器和微程序控制器的特点、优缺点、适用场景。
-
(二) 指令执行过程
一条指令的执行分为若干个机器周期 ,典型的三级时序为:取指周期 -> 间址周期 -> 执行周期 -> 中断周期(不一定全部需要)。
-
取指周期:
-
(PC) -> MAR:将程序计数器内容送地址总线。 -
1 -> R:发出读命令。 -
M(MAR) -> MDR:等待内存读取数据。 -
(MDR) -> IR:将指令送入指令寄存器。 -
(PC) + 1 -> PC:为取下一条指令做准备(假设指令长度固定)。
-
-
分析/译码:控制器分析IR中的操作码,确定指令类型和寻址方式。
-
执行周期:根据指令要求,完成相应操作(如ALU运算、访存等)。
-
中断周期:若有中断请求且被允许,则保存断点(PC),转入中断服务程序。
- 重难点 :理解每个周期内数据是如何在CPU各寄存器间流动的。这是理解数据通路的基础。
(三) 数据通路的功能和基本结构
-
功能:数据在CPU各功能部件之间传递的路径。它决定了指令执行过程中数据的流动方向和方式。
-
基本结构(两种设计思想):
-
总线式数据通路 :所有部件通过共享的总线连接。结构简单,成本低,但同一时刻只能有一个数据在总线上传输,容易成为性能瓶颈。
-
专用通路式数据通路 :在需要高速传输数据的部件间建立直接连接。性能高,可以并行传输,但结构复杂,连线多,成本高。
-
-
核心组件 :多路选择器 (MUX,用于选择数据来源)、暂存寄存器 、符号扩展单元等。
-
408真题常见考点:
-
根据给定的指令系统(如MIPS),画出单周期或多周期CPU的完整数据通路图。这是必考的重中之重。
-
分析某条特定指令(如
ADD R1, R2, R3;LW R1, offset(R2);BEQ R1, R2, label)在数据通路上的执行流程,写出每一步的控制信号。
-
(四) 控制器的功能和工作原理
控制器根据当前指令 和当前状态 ,生成正确的控制信号序列。
-
硬布线控制器:
-
原理 :将指令的操作码、节拍信号、状态标志等作为输入,通过一个复杂的组合逻辑电路直接生成所有控制信号。
-
特点:速度快(适合RISC),但电路设计复杂、不灵活,难以修改和扩充指令集。
-
-
微程序控制器:
-
原理 :将每条机器指令的执行分解为一系列更基本的微操作 ,这些微操作序列构成微程序 ,存放在控制存储器 中。执行时,逐条取出微指令,由微指令中的各位直接产生控制信号。
-
核心部件 :控制存储器(CM) 、微地址寄存器(μAR) 、微指令寄存器(μIR)。
-
特点:设计规整、灵活,易于修改和扩充,但速度相对较慢(多了一次访问控制存储器的过程)。
-
-
408真题常见考点:
-
比较硬布线与微程序控制器的区别。
-
给定指令格式和功能,设计微指令格式(水平型、垂直型),或计算控制存储器的容量。
-
(与数据通路结合):为给定数据通路的所有控制线(如ALUSrc, RegWrite, MemRead等)赋值,以执行某条指令。
-
(五) 异常和中断机制
-
基本概念:
-
异常:由CPU内部事件(如除零、非法操作码、缺页)引起。
-
中断:由CPU外部设备请求引起(如I/O完成)。
-
共同点 :都是强行改变程序执行流,都需要保存断点(PC),转入处理程序,处理完后恢复。
-
-
检测与响应:
-
通常在一条指令执行结束时检查是否有中断请求。
-
响应过程(硬件隐操作):
-
关中断(保存现场时防止被更高优先级中断打断)。
-
保存断点(PC)和程序状态(PSW)。
-
识别中断源,将对应的中断服务程序入口地址送入PC。
-
-
中断向量表:一个存放各类中断/异常服务程序入口地址的表格,是硬件和操作系统沟通的关键。
-
-
408真题常见考点:
-
区分中断和异常,以及它们各自的处理时机(如缺页异常发生在指令执行中)。
-
中断处理全过程(软件+硬件)。
-
中断屏蔽字与中断嵌套。
-
(六) 指令流水线
-
基本概念 :将指令执行过程划分为多个功能阶段(如取指IF、译码ID、执行EX、访存MEM、写回WB),并在时间上重叠执行,像工厂流水线一样。
-
性能指标:
-
吞吐率:单位时间内完成的指令数。
-
加速比:不使用流水线的时间 / 使用流水线的时间。
-
效率:流水线中设备的利用率(时间片占空比)。
-
-
三大冒险及处理:
-
结构冒险:硬件资源冲突(如一条指令访存时,下一条指令无法取指)。
- 处理:资源重复(如指令和数据Cache分离)、流水线停顿(插入气泡)。
-
数据冒险:后续指令需要用到前面指令的结果,但该结果还未产生。
-
分类 :写后读(RAW,真相关)、写后写(WAW)、读后写(WAR)。
-
处理:
-
转发/旁路:将ALU结果直接从EX段出口传回EX段入口。解决大部分RAW冒险。
-
流水线停顿:无法转发时(如LOAD指令后紧接使用该数据的指令),插入"气泡"。
-
-
-
控制冒险:遇到分支、跳转指令时,下一条指令地址不确定。
-
处理:
-
静态预测:总是预测不跳转(或总是预测跳转)。
-
动态预测 :使用分支历史表 (BHT)或更复杂的分支目标缓冲器(BTB)进行预测。
-
延迟槽:编译器在分支指令后插入一条必定执行的指令,填充流水线气泡。
-
-
-
-
408真题常见考点:
-
必考大题:给出一段指令序列(常与数组循环、条件判断相关),分析其在给定流水线(如5段经典MIPS流水线)上的执行过程。
-
画出流水线时空图。
-
指出所有存在的冒险类型。
-
计算使用/不使用转发技术、使用/不使用分支预测时的总执行时间、吞吐率、加速比。
-
-
理解超标量流水线 (一个周期发射多条指令)和动态流水线(各段功能可变)的基本概念。
-
(七) 多处理器基本概念
-
1. SISD, SIMD, MIMD, 向量处理器:
-
SISD:传统单核单指令单数据流CPU。
-
SIMD :单指令多数据流。(数据结构关联) :非常适合对数组、向量 进行并行操作(如图像处理、科学计算)。CPU中的SSE、AVX指令集就是SIMD的体现。
-
MIMD:多指令多数据流。现代多核/多处理器系统。线程级并行。
-
向量处理器:SIMD的一种高级形式,拥有专门的向量寄存器和对齐的向量运算部件。
-
-
2. 硬件多线程:
-
在一个物理核心上维护多份线程的上下文(寄存器组等),当某个线程因Cache缺失等原因停顿时,快速切换到另一个线程执行,以隐藏延迟,提高核心利用率。
-
细粒度:每条指令后都可能切换。
-
粗粒度:发生长延迟事件时才切换。
-
同时多线程 :如Intel的超线程技术,一个物理核心看起来像两个逻辑核心。
-
-
3. 多核处理器:
-
将多个完整的计算核心 集成在一个芯片上。核心之间通过片上互连网络通信,共享或非共享最后一级Cache。
-
(数据结构关联) :编写多线程程序(如
pthread,OpenMP)时,数据结构的设计需要考虑线程安全 (锁、原子操作)和缓存一致性(伪共享问题)。
-
-
4. 共享内存多处理器:
-
所有CPU核心共享统一的物理内存地址空间。通过缓存一致性协议(如MESI)来确保各个核心的私有Cache中数据副本的一致性。
-
UMA:访问任何内存地址时间相同。
-
NUMA:访问本地内存快,访问其他CPU所属内存慢。现代多路服务器CPU常见。
-
-
408真题常见考点:
-
区分SIMD和MIMD,并举例说明其应用场景。
-
理解硬件多线程(特别是SMT)与多核的区别与联系。
-
(与操作系统、组成原理结合):分析多核环境下,并发程序的数据同步、缓存一致性问题。
-
总结与408备考策略
-
核心中的核心 :(三)数据通路 和 (六)指令流水线 。这两部分是组成原理大题的最主要出题点,必须亲手画图、亲手计算,透彻理解。
-
理解联系 :将CPU的微观执行(取指、译码、执行)与宏观的程序执行 (数据结构中的数组遍历、链表操作、递归函数调用)联系起来。思考一个
for循环、一个if-else语句、一次函数调用,在CPU层面是如何实现的。 -
真题演练:集中练习历年408真题中所有与CPU相关的题目,尤其是综合应用题。通过真题把握深度和广度,例如,一道流水线大题可能综合考察了数据通路、冒险处理、性能计算等多个知识点。
-
跨科目关联 :CPU的异常中断 与操作系统紧密相连;多处理器与操作系统(进程线程、同步)、数据结构(并发数据结构)密不可分。备考时要有意识地建立这种跨科目的知识网络。
六、总线和输入输出系统
这部分的核心在于理解计算机如何解决"多个部件之间高效、有序通信"的问题。
(一) 总线概述
-
1. 总线的基本概念
-
定义 :一组能为多个部件分时共享的公共信息传送线路。
-
核心特性 :分时共享。同一时刻只能有一个主控设备(如CPU、DMA控制器)使用总线向一个从设备发送数据。
-
分类(按功能/层次):
-
片内总线:CPU芯片内部,连接寄存器、ALU、控制器等。
-
系统总线:计算机系统内各功能部件(CPU、主存、I/O接口)间的总线。是考查重点。
-
数据总线 :双向,传输数据。其宽度(位数)是决定系统性能的关键参数,通常与CPU字长一致。
-
地址总线 :单向(CPU发出),用于指定主存或I/O端口地址。其宽度 决定了CPU的可寻址内存空间大小(如32位地址总线,寻址空间为4GB)。
-
控制总线:传输控制信号(如读/写、中断请求、总线请求、时钟、复位等)。
-
-
通信总线(I/O总线):用于计算机系统之间或与外设通信,如USB、PCIe、SATA。
-
-
-
2. 总线的组成及性能指标
-
组成:
-
总线事务的发起者与接收者(主设备和从设备)。
-
总线仲裁器 :决定哪个主设备获得总线使用权。解决多个主设备同时请求总线时的冲突。仲裁方式:集中式(链式查询、计数器定时查询、独立请求)、分布式。
-
总线控制器:包含仲裁逻辑、驱动电路等。
-
-
性能指标:
-
总线时钟频率:MHz或GHz。
-
总线宽度:数据总线的位数(bit)。
-
总线带宽(吞吐率) :单位时间内总线上传输的数据量 。关键计算公式:
总线带宽 = (总线工作频率 × 总线宽度) / 8或
总线带宽 = (1 / 总线周期) × 每个总线周期传输的数据字节数
单位通常是 MB/s 或 GB/s。这是408的必考计算点。 -
总线复用:如地址总线和数据总线共用一组线,通过分时传输来减少芯片引脚数,但会降低性能。
-
-
-
3. 总线的事务和定时
-
总线事务 :一次完整的总线操作过程(如读主存、写I/O端口),包括地址阶段 和数据阶段。
-
定时方式(通信协议) :重难点。
-
同步定时:
-
所有操作由统一的时钟信号控制。
-
优点:简单,控制逻辑集中。
-
缺点:所有设备速度必须一致,时钟频率受限于最慢的设备。不适应高速系统。
-
-
异步定时:
-
采用握手应答信号 (如
Req请求和Ack应答)控制传输。 -
优点:允许不同速度的设备共存,可靠性高。
-
缺点:控制复杂,每次传输需要多次握手,速度低于同步总线。
-
-
半同步定时 :结合两者,在同步基础上增加等待信号(
WAIT),使快速CPU能与慢速设备协调工作。 -
分离事务定时 :将一次总线事务的请求(发地址) 和响应(传数据) 在时间上完全分开,中间总线可被其他事务使用。极大地提高了总线利用率,现代高性能总线(如PCIe)的核心思想。
-
-
-
408真题常见考点:
-
计算总线带宽:给定时钟频率、总线宽度、传输类型(如每个时钟周期传输一次数据或每4个周期传输一次),计算理论最大带宽。
-
比较同步、异步定时的原理和优缺点。
-
分析总线仲裁方式(特别是独立请求方式的特点)。
-
(二) I/O接口(I/O控制器)
I/O接口是主机(CPU+内存)与外部设备之间的"转换器"和"桥梁"。
-
1. I/O接口的功能和基本结构
-
功能:
-
数据缓冲 :解决CPU与外设速度不匹配问题。核心部件是数据缓冲寄存器。
-
错误或状态检测:提供设备状态寄存器(如"设备忙"、"数据就绪"、"校验错")。
-
控制和定时:接收CPU命令,控制设备操作。
-
数据格式转换:如串-并转换。
-
与主机和设备通信:实现电平转换、协议转换等。
-
-
基本结构:
-
数据寄存器(DR):存放要传输的数据。
-
状态/控制寄存器(SR/CR):存放状态信息或CPU下发的控制命令。
-
地址译码电路:识别CPU发送的端口地址。
-
控制逻辑:产生内部和外部控制信号。
-
与主机侧接口:数据线、地址线、控制线。
-
与设备侧接口:设备专用的数据和控制线。
-
-
-
2. I/O端口及其编址
-
I/O端口:接口中可被CPU访问的寄存器(DR, SR, CR等)的地址。
-
编址方式:
-
统一编址(存储器映射I/O):
-
将I/O端口地址划入内存地址空间的一部分。
-
CPU使用访存指令 (如
MOV)来操作I/O端口。 -
优点:指令丰富,编程灵活;无需专用I/O指令和控制线。
-
缺点:占用内存地址空间;访存指令通常比专用I/O指令长。
-
-
独立编址(端口映射I/O):
-
I/O端口地址空间与内存地址空间完全分开。
-
CPU使用专用的I/O指令 (如
IN,OUT)和专用的控制线 (如IOR#,IOW#)来操作I/O端口。 -
优点:I/O操作与内存操作界限清晰,程序可读性好;不占用内存空间。
-
缺点:需要专用指令和控制线;编程灵活性稍差。
-
-
-
-
408真题常见考点:
-
区分统一编址和独立编址,并分析它们对CPU设计(指令集、引脚)和编程的影响。
-
给定一个包含I/O接口的系统,分析CPU访问某个端口时地址线的变化和指令的执行。
-
(三) I/O方式
核心问题是"CPU如何知道数据已准备好?"以及"数据交换过程由谁主导?"
-
1. 程序查询方式
-
原理 :CPU主动、轮询检查I/O接口的状态寄存器,直到设备"就绪"才进行数据传送。
-
流程 :CPU发命令 -> 循环查询状态 -> 就绪则传送数据。
-
特点 :软件简单,但CPU利用率极低(绝大部分时间在"空转"等待),完全串行。
-
(数据结构关联):类似顺序查找,CPU不断"查询"状态这个"键",直到匹配"就绪"状态。
-
-
2. 程序中断方式 - 重难点
-
基本概念 :I/O设备完成后主动 向CPU发出中断请求信号,CPU中断当前程序,转去执行中断服务程序进行数据传送,完成后返回。
-
中断响应过程(硬件):
-
中断请求:设备就绪,置位接口中断请求触发器。
-
中断判优:若多个中断同时发生,由中断控制器(如8259A)或硬件排队电路决定优先级。
-
中断响应 :CPU在一条指令执行结束时 检查中断请求。若允许中断,则发出中断响应信号。
-
关中断:保护现场时防止被更高优先级中断打断。
-
保存断点 :将PC和PSW压入系统栈。(数据结构关联) :利用栈这一数据结构来保存和恢复现场。
-
转入中断服务程序 :通过中断向量表获得入口地址,装入PC。
-
-
中断处理过程(软件,ISR):
-
保护现场(通用寄存器内容)。
-
开中断(允许嵌套)。
-
执行具体的数据交换(如从数据寄存器读取数据到内存缓冲区)。
-
关中断(准备恢复现场)。
-
恢复现场。
-
开中断,中断返回(从栈中弹出PC和PSW)。
-
-
多重中断与中断屏蔽:
-
中断屏蔽 :通过设置中断屏蔽字,可以动态改变中断处理的优先级顺序。
-
多重中断(中断嵌套):在处理低级中断时,允许响应更高级的中断。
-
-
特点 :CPU与外设部分并行工作,提高了CPU利用率。但每次中断需要保存/恢复现场,开销较大,不适合高速大批量数据传输。
-
-
3. DMA方式 - 核心重难点
-
为什么需要DMA:中断方式下,每个数据单元的传输都需要CPU介入(执行ISR),对于磁盘、网络卡等高速设备,中断开销太大,CPU会疲于应付。
-
核心思想 :在外设与主存之间开辟一条直接的数据通路 ,数据传输完全由DMA控制器硬件控制 ,不需要CPU干预,仅在传输开始和结束时需要CPU参与。
-
DMA控制器的组成:
-
主存地址寄存器(MAR):存放本次DMA传输的主存起始地址。
-
外设地址寄存器:存放设备号或端口信息。
-
字计数器(WC):存放要传输的数据量,递减计数。
-
数据缓冲寄存器:暂存传输的数据。
-
控制/状态逻辑:接收CPU命令,向CPU发DMA请求和中断请求。
-
-
DMA传送过程:
-
预处理(CPU负责):CPU初始化DMA控制器(设置MAR, WC, 传输方向等),然后去执行其他任务。
-
数据传输(DMA控制器负责):
-
周期挪用/窃取:DMA控制器在CPU不使用系统总线时(如CPU正在执行ALU操作),"挪用"一个或几个总线周期进行数据传输。如果与CPU冲突,则总线仲裁器将总线优先分配给DMA控制器(CPU短暂停顿)。这是最常见的DMA方式。
-
CPU停止法:传输期间CPU完全释放总线。
-
交替分时法:将CPU周期一分为二,一部分给CPU,一部分给DMA(需要CPU内部总线)。
-
-
后处理 (中断方式通知CPU):DMA传输完成后,DMA控制器向CPU发出中断请求,CPU执行中断服务程序进行校验等后处理。
-
-
特点 :数据传输速率上限取决于主存速度。极大解放了CPU,适合高速大批量数据传输。
-
(数据结构关联) :DMA通常与主存中的缓冲区结合使用。操作系统或应用程序在内存中开辟一块连续的缓冲区,DMA控制器将外设数据直接送入该缓冲区,或从缓冲区直接送出。
-
-
408真题常见考点:
-
综合比较三种I/O方式:从CPU介入程度、并行性、适用场景、开销等方面进行对比。这是选择题和简答题高频考点。
-
中断流程的细节:多重中断下的中断屏蔽字设置、现场保存内容(必须保存PC和PSW,通用寄存器可选)、中断响应时机。
-
DMA流程与计算:
-
计算在采用DMA方式的系统中,CPU时间利用率或处理其他任务的时间比例。例如,已知磁盘数据传输率、DMA每次传输数据块大小、DMA预处理和后处理所需CPU时间,求CPU有多少时间比例被占用。
-
理解DMA的三种传输方式,特别是"周期挪用"如何工作。
-
DMA控制器与CPU如何共享系统总线(通过总线仲裁)。
-
-
与OS结合:I/O子系统、设备驱动程序、缓冲区管理。
-
总结与408备考策略
-
抓住核心矛盾 :这部分的核心矛盾是速度匹配 和效率优化 。从低效的程序查询 ,到折中的程序中断 ,再到高效的DMA,体现了计算机系统不断优化I/O性能的思路。
-
理解层次化:从底层的总线协议(同步/异步)、接口硬件(寄存器、逻辑电路),到上层的软件控制方式(查询/中断/DMA驱动),知识是分层的。要建立清晰的层次感。
-
真题为王:I/O部分的考题非常经典和固定。必须熟练掌握:
-
中断的完整流程(响应+处理)、多重中断。
-
DMA的工作全过程、与CPU的关系、性能计算。
-
总线带宽的计算。
-
-
跨科目关联:
-
与操作系统:I/O管理、设备驱动、SPOOLing技术、缓冲区管理紧密相关。DMA和中断是OS实现设备无关性的硬件基础。
-
与组成原理内部:总线与CPU的交互(总线仲裁)、DMA与存储器的交互(访存冲突)、中断与CPU内PSW和PC的关系。
-