TRUE PATH M
建议顺序 · 主观优先级

考前查漏清单

0 / 15 已掌握

  • 复习
  • 复习
  • 复习
  • 复习
  • 复习
  • 复习
  • 复习
  • 复习
  • 复习
  • 复习 · 总线定时
  • 复习
  • 复习
  • 复习
  • 复习 · IP 组播 · VLAN
  • 复习

清单进度独立于下方卡片标记,只保存在当前浏览器。

筛选知识点

蓝 · 正确结论与原理红 · 关键条件橙 · 易错易混紫 · 例子与计算绿 · 自检与记忆

共 112 条,按科目与章节分类。点击知识点展开解析。

复习标记只保存在当前浏览器;重置筛选不会清除标记。

计组 · 指令格式与机器级程序

MIPS 常见指令速查

经典 32 位整数子集

先认操作数,再看扩展方式与结果去向,最后计算访存/分支地址。延迟槽、ABI 与 ISA 版本有区别时,以题设为准。

R 型
op6 bitrs5 bitrt5 bitrd5 bitshamt5 bitfunct6 bit
I 型
op6 bitrs5 bitrt5 bitimm16 bit
J 型
op6 bitindex26 bit
MIPS 常见指令与伪指令 · 同组助记符合并展示
类别助记符操作数格式操作含义类型易错点
算术add / addurd, rs, rtrd ← rs + rtRadd 检测有符号溢出;addu 不触发该异常
算术sub / suburd, rs, rtrd ← rs − rtR减数是 rt;sub 检测溢出
算术addi / addiurt, rs, immrt ← rs + signext(imm16)I两者均符号扩展;addiu 不触发整数溢出异常
逻辑and / or / xor / norrd, rs, rt按位与/或/异或/或非Rnor 是对 (rs OR rt) 整体取反
逻辑andi / ori / xorirt, rs, imm对 rs 和 zeroext(imm16) 做逻辑操作I立即数零扩展
常量luirt, immrt ← imm16 接 16 个 0I可配 ori 拼接 32 位常量
移位sll / srl / srard, rt, shamt左移/逻辑右移/算术右移R固定移位量 5 位,范围 0–31
移位sllv / srlv / sravrd, rt, rs移位量取 rs[4:0]R被移位数是 rt
比较slt / slturd, rs, rtrd ← (rs < rt ? 1 : 0)R有符号/无符号比较
比较slti / sltiurt, rs, immrt ← 比较结果 0/1I两者先符号扩展立即数,sltiu 再无符号比较
乘除mult / multurs, rtHI:LO ← 64 位乘积R有符号/无符号
乘除div / divurs, rtLO ← 商,HI ← 余数R经典 HI/LO 模型;特殊输入按架构
乘除mulrd, rs, rtrd ← 乘积的低 32 位R经典 MIPS32 的实际指令;HI/LO 内容不可依赖
乘除mfhi / mflordrd ← HI/LOR把结果移到通用寄存器
乘除mthi / mtlorsHI/LO ← rsR把通用寄存器内容写入 HI/LO
访存lw / swrt, offset(base)读/写 32 位字I地址按字节算;经典实现要求 4 B 对齐
访存lb / lburt, offset(base)读 8 位,符号/零扩展I有符号字节 0x80 扩为 0xFFFFFF80
访存lh / lhurt, offset(base)读 16 位,符号/零扩展I经典实现要求 2 B 对齐
访存sb / shrt, offset(base)写 rt 的低 8/16 位I不对内存执行“符号扩展写入”
分支beq / bners, rt, label相等/不等则分支I目标基准是 PC+4,偏移字段左移 2
分支bltz / bgezrs, labelrs<0/rs≥0 则分支I有符号比较
分支blez / bgtzrs, labelrs≤0/rs>0 则分支I与零比较
跳转j / jallabel跳转/跳转并链接J目标用 PC+4 高 4 位拼接;jal 保存返回位置
跳转jrrs跳到 rs 所给地址Rjr $ra 常用于返回
跳转jalrrd, rs跳到 rs 并保存返回位置到 rdR省略 rd 常表示 $ra;以汇编器规定为准
伪指令move / li / la / b依指令移动/装常量/取地址/无条件分支伪展开条数随工具链及操作数而变
空操作nop无常编码为 sll $zero,$zero,0汇编写法空操作仍是一条占 4 B 的经典指令
异常syscall / break可有 code触发系统调用/断点异常特殊具体服务号和传参方式由 OS/模拟器约定
常见 o32 寄存器别名与用途(调用约定)
别名编号用途
$zero$0恒为 0
$at$1汇编器常用临时寄存器
$v0–$v1$2–$3返回值
$a0–$a3$4–$7参数
$t0–$t7$8–$15临时值
$s0–$s7$16–$23被调用者按需保存
$t8–$t9$24–$25临时值
$k0–$k1$26–$27内核保留
$gp$28全局指针
$sp$29栈指针
$fp / $s8$30帧指针/保存寄存器
$ra$31返回地址

一步一步:负偏移分支

查看完整计算过程
  1. 读懂题设:beq 位于 0x00400020,目标 0x00400010;需要求 16 位立即数字段。
  2. 定位基准:分支基准为 PC+4=0x00400024。
  3. 计算字节差:目标 − 基准 = 0x00400010 − 0x00400024 = −20 B。
  4. 换算指令字偏移:−20 / 4 = −5,16 位补码是 0xFFFB。
  5. 反代验证:符号扩展 0xFFFB 得 −5,再左移 2 得 −20;0x00400024−20=0x00400010。

换一组地址试算

参考:MIPS Architecture For Programmers · Volume II-A · Revision 5.04。本页为复习整理,经典延迟槽模型的链接地址与无延迟槽教学模型分别说明。

计组 · 机器级代码与标志位

x86 常见指令速查

IA-32 · Intel 语法 · AT&T 对照

默认采用 32 位 IA-32 与 Intel 的“目的,源”顺序。先确认位宽、显式/隐含操作数,再判断标志变化与跳转条件;64 位模式和调用约定有差别时按题设。

x86 常见指令表
类别助记符Intel 示例含义标志影响易错点
传送MOVmov eax,[ebx+4]EAX ← 该地址的双字不变目的在前,通常不能内存到内存
扩展MOVSX / MOVZXmovsx eax,BYTE PTR [esi]读入小宽度数并符号/零扩展不变先确定源宽度
地址LEAlea eax,[ebx+ecx*4+8]EAX ← 有效地址表达式值不变不读取地址指向的数据
算术ADD / SUBsub eax,ebxEAX ← EAX−EBXCF OF SF ZF AF PF 更新SUB 的 CF=1 表示无符号借位
多字长ADC / SBBadc edx,0EDX ← EDX+旧 CF算术标志更新带入的是执行前的 CF
增减INC / DECinc eaxEAX ← EAX+1保留 CF,其余相关算术标志更新与 ADD 1 不完全等价
取负NEGneg eaxEAX ← 0−EAX算术标志更新最小有符号数取负时 OF=1
取反NOTnot eax逐位取反不变与 NEG 不同
逻辑AND / OR / XORand eax,0xFF写回按位运算结果CF=OF=0;SF ZF PF 更新;AF 未定义xor eax,eax 清零并改标志
比较CMPcmp eax,ebx仅计算 EAX−EBX 的标志与 SUB 一致不写回差值
测试TESTtest eax,eax仅计算按位与的标志CF=OF=0;SF ZF PF 更新;AF 未定义不写回与结果
移位SHL / SAL / SHR / SARsar eax,1左移/逻辑右移/算术右移0 次不变;OF 只在有效次数 1 时有定义SHL 与 SAL 同义;SAR 保留符号
旋转ROL / ROR / RCL / RCRrcl eax,1循环移动比特;带 C 的含 CF不改 SF ZF AF PF;CF/OF 按次数与形式旋转不是补 0 移位
无符号乘MULmul ecxEDX:EAX ← EAX×ECXCF=OF=(高半部非 0),其他算术标志未定义单操作数,完整结果双倍宽度
有符号乘IMULimul eax,ecx,5EAX ← ECX×5 的低 32 位CF=OF 表示截断后的有符号结果不可表示;其余未定义单操作数形式才隐含写 EDX:EAX
除法DIV / IDIVidiv ecxEDX:EAX÷ECX,商 EAX、余数 EDXCF OF SF ZF AF PF 未定义除零/商溢出触发 #DE
符号扩展CBW / CWDE / CWD / CDQcdq分别 AL→AX、AX→EAX、AX→DX:AX、EAX→EDX:EAX不变CDQ 为有符号除法准备高半部
无条件分支JMPjmp L跳转到目标不变相对位移按字节,以后继指令地址为基准
相等分支JE / JZ / JNE / JNZje L按 ZF 决定跳转不变JE=JZ;JNE=JNZ
无符号分支JA / JAE / JB / JBEja L按 CF、ZF 判断无符号大小不变CMP 后解释为目的与源比较
有符号分支JG / JGE / JL / JLEjl L按 SF、OF、ZF 判断有符号大小不变JL 检查 SF≠OF
标志分支JO / JNO / JS / JNSjo L检查 OF 或 SF不变JS 本身不等于一般有符号小于
计数分支LOOP / LOOPE / LOOPNE / JECXZloop L减计数再判断;JECXZ 直接检查零不变LOOPE/LOOPNE 还读取旧 ZF
条件结果SETcc / CMOVccsetl alSETcc 写字节 0/1;CMOVcc 条件传送不变SETcc 不会清目的寄存器的其他位
栈PUSH / POPpush eax普通 32 位形式压/弹 4 B普通形式不变栈向低地址增长;特殊目的需单独分析
调用CALL / RETcall f保存/恢复返回位置并转移普通近形式不改算术标志CALL 压下一条指令地址,RET 可另清理参数
栈帧LEAVEleaveESP←EBP;弹出旧 EBP(本页 32 位模型)不变不是简单跳转指令
串处理MOVSB / STOSB / REPrep movsb按源/目的指针处理串并更新指针、计数MOVSB/STOSB 不改算术标志按 DF 决定指针递增/递减
方向CLD / STDcldDF←0/DF←1只修改 DF不把 CF 当方向标志
端口IN / OUTin al,dx在 AL/AX/EAX 与 I/O 端口间传送不变端口用 imm8 或 DX,受权限约束
交换/空操作XCHG / NOPxchg eax,ebx交换/空操作不变基本 XCHG 交换两者,不是单向复制
中断INT / IRETint n进入中断服务/从相应中断栈帧返回依模式和类型处理控制标志IRET 与普通 RET 保存/恢复内容不同

Intel 与 AT&T 语法对照

AT&T 常写“源,目的”,寄存器前加 %、立即数前加 $,常以 b/w/l/q 标示 8/16/32/64 位。以下是所列常见指令的对应写法,不能把操作数换序规则无条件推广到每一条特殊指令。

同一操作的两种写法
项目IntelAT&T
操作数顺序mov eax,ebxmovl %ebx,%eax
立即数mov eax,5movl $5,%eax
间接访存mov eax,[ebx]movl (%ebx),%eax
基址+变址+位移mov eax,[ebx+ecx*4+8]movl 8(%ebx,%ecx,4),%eax
地址计算lea eax,[ebx+ecx*4+8]leal 8(%ebx,%ecx,4),%eax
常见寄存器与重叠关系
寄存器位宽/类别用途与条件
EAX / AX / AH / AL32/16/8/8 位重叠视图乘除法与常见返回值约定
EBX / ECX / EDX32 位通用寄存器ECX 常用于计数;EDX 参与宽乘除
ESI / EDI32 位通用寄存器常见串操作源/目的指针
EBP / ESP32 位通用寄存器常用于帧指针/栈指针
EIP / EFLAGS指令指针/标志寄存器与通用寄存器的访问方式不同
RAX / RSP 等64 位模式扩展视图本页例题主体仍按 IA-32;写 EAX 会清 RAX 高 32 位

CMP 后的条件跳转

表中大小关系按 CMP 目的,源 解释。有符号关系必须结合 OF;Jcc 不重新执行比较,也不修改这些标志。

条件跳转与标志位
指令/别名成立条件CMP 后的含义
JE / JZZF=1相等
JNE / JNZZF=0不等
JA / JNBECF=0 且 ZF=0无符号 >
JAE / JNB / JNCCF=0无符号 ≥
JB / JNAE / JCCF=1无符号 <
JBE / JNACF=1 或 ZF=1无符号 ≤
JG / JNLEZF=0 且 SF=OF有符号 >
JGE / JNLSF=OF有符号 ≥
JL / JNGESF≠OF有符号 <
JLE / JNGZF=1 或 SF≠OF有符号 ≤
JO / JNOOF=1/OF=0有符号溢出标志
JS / JNSSF=1/SF=0结果符号位

乘除法最容易混淆的三条

  • MUL:按高半部是否为 0 决定 CF/OF。
  • IMUL:按截断结果能否符号扩展回完整乘积决定 CF/OF。
  • DIV/IDIV:算术标志未定义;除零或商放不下触发 #DE。

试算:8 位运算、标志与跳转

用 AL/BL 的 8 位模型观察同一位模式的两种解释。输入范围 −128~255;非负数也可写成 0x00~0xFF。

完整例子:CMP AL,BL 后为何 JA 与 JL 可以同时成立?
  1. AL=0xFF、BL=1:无符号解释为 255 和 1,有符号解释为 −1 和 1。
  2. 8 位相减得到 0xFE:CF=0、ZF=0、SF=1、OF=0,两个操作数保持不变。
  3. JA 要求 CF=0 且 ZF=0,因此满足无符号“大于”。
  4. JL 要求 SF≠OF,因此也满足有符号“小于”。这两种解释并不矛盾。

和 MIPS 放在一起记

x86 与经典 MIPS 对照
例子x86(Intel)经典 MIPS
加法add eax,ebx:目的也是源add $t0,$t1,$t2:常用三操作数
访存mov eax,[ebx];add eax,[ebx]通常用 lw/sw 访存,再在寄存器上算
条件分支cmp+Jcc 读取 EFLAGSbeq/bne 或 slt 结果
指令长度变长,按实际字节数定位后继本页常规指令固定 4 B
调用返回近 CALL 将返回地址压栈经典 JAL 将返回地址写入 $ra
普通整数溢出ADD 设置 OF,通常不因此直接陷入ADD 有符号溢出可触发异常;ADDU 不触发

参考:Intel 64 and IA-32 Software Developer’s Manuals(指令语义以 Volume 2、执行模式与题设为准)。

408 · DS

数据结构

15 个考点

特殊结构与图

特殊矩阵的压缩存储对称矩阵只存一个三角区;三角矩阵还需统一存放非三角区的相同常量;三对角矩阵只存主对角线及相邻两条对角线。查漏

核心结论

对称矩阵只存一个三角区;三角矩阵还需统一存放非三角区的相同常量;三对角矩阵只存主对角线及相邻两条对角线。

条件与过程

先明确下标从 0 还是 1 开始、按行还是按列、元素字节数和首地址,再数排在目标元素之前的元素。

例子

1 起始下标、按行存下三角(含对角线):A[i,j] 的 0 起始序号为 i(i−1)/2+j−1(i≥j);对称矩阵 i<j 时交换 i、j。三对角矩阵按行压缩、下标从 1 开始时,带内元素 0 起始序号为 2i+j−3,共存 3n−2 个元素。

辨析边界

稀疏矩阵三元组不支持按普通二维数组公式直接随机定位;压缩存储并不总保留随机存取能力。

循环队列的三种判满方式牺牲一格、计数器、标志位都能区分队空与队满。查漏

核心结论

牺牲一格、计数器、标志位都能区分队空与队满。

条件与过程

约定 front 指向队头,rear 指向下一插入位置。牺牲一格时空:front=rear;满:(rear+1)%m=front;长度:(rear−front+m)%m。

例子

数组长度 6,front=4、rear=2,牺牲一格实现下队长为 4,最多可放 5 个元素。

辨析边界

使用计数器或标志位时可以放满 m 个元素,不能继续套用牺牲一格的容量结论。

线索二叉树的前驱与后继线索标志用于区分孩子指针和遍历前驱/后继线索;必须先确定采用哪一种遍历。查漏

核心结论

线索标志用于区分孩子指针和遍历前驱/后继线索;必须先确定采用哪一种遍历。

条件与过程

中序线索树:若右指针为线索,它直接指向后继;若为右孩子,后继是右子树沿左孩子到达的最左结点。

例子

中序序列为 D B E A C,则 B 的后继是 E。左指针为孩子时,前驱是左子树中的最右结点。

辨析边界

中序线索树找后继方便,不代表先序/后序线索树的每一种前驱后继都能用相同步骤得到。

树、森林与二叉树转换用左孩子、右兄弟表示法:左指针连第一个孩子,右指针连下一个兄弟。查漏

核心结论

用左孩子、右兄弟表示法:左指针连第一个孩子,右指针连下一个兄弟。

条件与过程

树的先根遍历对应二叉树先序,树的后根遍历对应二叉树中序;森林先序对应二叉树先序,森林中序对应二叉树中序。

例子

A 有孩子 B、C:转换后 A.left=B,B.right=C;树的后根 B C A 与转换二叉树中序 B C A 一致。

辨析边界

树的后根并非对应二叉树后序;一棵树转换后的二叉树根通常没有右孩子,森林转换则可能有。

十字链表与邻接多重表十字链表用于有向图,一条弧同时加入弧尾的出边链和弧头的入边链;邻接多重表用于无向图,一条边同时属于两个端点的边链。查漏

核心结论

十字链表用于有向图,一条弧同时加入弧尾的出边链和弧头的入边链;邻接多重表用于无向图,一条边同时属于两个端点的边链。

条件与过程

有向弧结点含尾、头顶点及同尾、同头链接;无向边结点含两个端点及分别关联两端的链接。

例子

删除无向边 {u,v} 时,邻接多重表可以找到同一个边结点,并从 u、v 的两条链摘除。

辨析边界

普通无向图邻接表常为一条边建两个表结点;邻接多重表只有一个共享边结点。不要混淆边数与表结点数。

连通、强连通与弱连通无向图的极大连通子图是连通分量;有向图任意两点互相可达才强连通。查漏

核心结论

无向图的极大连通子图是连通分量;有向图任意两点互相可达才强连通。

条件与过程

弱连通是把有向边忽略方向后连通;强连通分量是极大强连通子图,每个顶点恰属于一个强连通分量。

例子

u→v 的图弱连通,但 v 无法到 u,因此不是强连通图。

辨析边界

强连通分量允许只有一个顶点;从某一点能到所有顶点不足以说明整个有向图强连通。

关键路径与活动余量AOE 网中顶点表示事件、边表示活动;活动最早开始 e(i,j)=ve(i),最迟开始 l(i,j)=vl(j)−w(i,j)。查漏

核心结论

AOE 网中顶点表示事件、边表示活动;活动最早开始 e(i,j)=ve(i),最迟开始 l(i,j)=vl(j)−w(i,j)。

条件与过程

按拓扑序求 ve(j)=max(ve(i)+w),逆拓扑序求 vl(i)=min(vl(j)−w);余量 l−e=0 的活动为关键活动。

例子

ve(i)=3,vl(j)=10,活动历时 4,则最早开始 3、最迟开始 6、余量 3。

辨析边界

缩短一项关键活动不一定缩短工期:可能存在另一条同长度关键路径;事件余量和活动余量不是同一公式。

并查集:按秩与路径压缩find 查代表元;union 合并不同集合;按秩/按大小合并控制高度,路径压缩让访问过的结点更接近根。查漏

核心结论

find 查代表元;union 合并不同集合;按秩/按大小合并控制高度,路径压缩让访问过的结点更接近根。

条件与过程

只按秩合并时树高为 O(log n);两种优化配合时操作序列的均摊复杂度近似 O(α(n)),不是每次最坏 O(1)。

例子

find(x) 沿 x→p→r 找到根 r,再把 x 的父指针改成 r,不改变集合成员关系。

辨析边界

路径压缩后的秩通常是历史上界,不应理解为实时树高;同根结点再 union 不会增加集合大小。

查找与排序

分块查找与平均查找长度索引表通常记录各块的最大关键字和块起始位置;块间有序、块内可以无序。查漏

核心结论

索引表通常记录各块的最大关键字和块起始位置;块间有序、块内可以无序。

条件与过程

先查索引定位块,再块内顺序查找。等长 b 块、每块 s 个且等概率成功,顺序查索引时 ASL=(b+1)/2+(s+1)/2。

例子

n=100,分成 10 块各 10 个,索引也顺序查时成功 ASL=5.5+5.5=11。

辨析边界

若索引采用折半查找,或各块不等长/概率不同,必须重算;块内无需有序不意味着块间可以任意交叉。

红黑树性质与调整根及 NIL 叶结点为黑,红结点的孩子为黑;从任一结点到其后代 NIL 的路径黑结点数相等。查漏

核心结论

根及 NIL 叶结点为黑,红结点的孩子为黑;从任一结点到其后代 NIL 的路径黑结点数相等。

条件与过程

插入先按 BST 定位再调整;通常新结点着红。通过变色和旋转恢复性质。删除黑结点可能破坏黑高,需分兄弟颜色与侄子颜色处理。

例子

若插入结点与父亲均红且叔叔也红,可把父、叔变黑,祖父变红并向上继续检查。

辨析边界

红黑树不要求左右子树等高,也不要求像 AVL 一样高度差≤1;NIL 叶与存关键字的结点要区分。

B+ 树的内部结点与叶结点内部结点承担索引,完整记录集中在叶层;叶结点通常按关键字顺序链接,适合范围查询。查漏

核心结论

内部结点承担索引,完整记录集中在叶层;叶结点通常按关键字顺序链接,适合范围查询。

条件与过程

精确查找一般要落到叶层,内部关键字相等也不能据此认为已取得完整记录;分支数与关键字数按题目定义判断。

例子

查区间 [20,40]:先定位首个≥20 的叶项,再沿叶链扫描到超过 40。

辨析边界

B 树内部结点可以保存记录;B+ 树内部关键字与子树分界的具体约定可能不同,阶数规则以题设为准。

KMP 的 next 与 nextval失配时主串指针通常不回退,模式串依照 next 跳转;nextval 跳过某些必然再次失败的比较。查漏

核心结论

失配时主串指针通常不回退,模式串依照 next 跳转;nextval 跳过某些必然再次失败的比较。

条件与过程

先写清下标从 0/1 开始、next[0] 是 −1 还是长度定义。前缀函数 π 与传统 next 的数值不能不经转换混用。

例子

模式 aaaa 在某个 a 上与主串字符 b 失配时,逐次退到前面的 a 都必失败,nextval 可合并这些跳转。

辨析边界

求数组和使用数组必须采用同一种定义;KMP 的线性复杂度是整个匹配过程的总比较量界,不是每轮固定一次比较。

基数排序:LSD、MSD 与稳定性LSD 从最低位到最高位处理;每趟必须保留已排低位的相对次序,因此通常使用稳定的分配收集过程。查漏

核心结论

LSD 从最低位到最高位处理;每趟必须保留已排低位的相对次序,因此通常使用稳定的分配收集过程。

条件与过程

MSD 先按高位分组,再在各组内递归处理下一位;不等于把 LSD 的循环顺序简单反过来后全局收集。

例子

LSD 对 21、12、11:先按个位稳定排成 21、11、12,再按十位稳定排成 11、12、21。

辨析边界

基数排序的复杂度还依赖位数 d 和基数 r,常写 O(d(n+r));它不受比较排序 Ω(n log n) 下界直接约束。

外部排序、置换选择与败者树外排的主要成本常是外存 I/O;败者树用于多路归并的胜者选择,置换选择用于形成初始有序段。查漏

核心结论

外排的主要成本常是外存 I/O;败者树用于多路归并的胜者选择,置换选择用于形成初始有序段。

条件与过程

r 个初始段做 k 路归并,通常需 ⌈logₖr⌉ 趟;常规 k 路归并至少要 k 个输入缓冲区及一个输出缓冲区,具体以缓冲策略为准。

例子

9 个初始段进行 3 路归并需 2 趟。败者树每输出一个元素后,沿该路到根更新,比较次数为 O(log k)。

辨析边界

置换选择的初始段长度不是固定等于工作区容量;随机输入下常约为 2M,但这是平均表现,不是每段保证。

排序的稳定性与初始有序性稳定性看相等关键字的原相对顺序;是否受初始有序影响要分别看比较次数和移动次数。查漏

核心结论

稳定性看相等关键字的原相对顺序;是否受初始有序影响要分别看比较次数和移动次数。

条件与过程

直接插入在有序时约 n−1 次比较、很少移动;选择排序比较次数基本固定;快速排序表现依赖枢轴策略。

例子

带序号 3a、3b:若排序后仍为 3a、3b 才符合稳定要求。判断某种实现时应观察交换是否跨越相等项。

辨析边界

归并排序通常稳定,但合并相等项必须优先取左段;冒泡应只交换逆序项。不能只凭算法名称忽略实现条件。

408 · CO

计算机组成原理

48 个考点

性能、运算与表示

性能指标:CPI、MIPS、MFLOPSCPU 时间=指令条数×平均 CPI/时钟频率;MIPS=指令条数/(时间×10⁶),MFLOPS=浮点操作数/(时间×10⁶)。查漏

核心结论

CPU 时间=指令条数×平均 CPI/时钟频率;MIPS=指令条数/(时间×10⁶),MFLOPS=浮点操作数/(时间×10⁶)。

条件与过程

平均 CPI 是按指令动态执行比例加权的平均数。MIPS 值受指令集和工作负载影响,跨机器比较必须保证完成的任务可比。

例子

主频 2 GHz、平均 CPI=2,则指令吞吐率为 1000 MIPS;任务含 10⁹ 条指令时 CPU 时间为 1 s。

辨析边界

一条浮点指令未必恰好对应一次浮点操作;主频更高、MIPS 更大均不足以独立推出某程序更快。

OF、CF、SF、ZF 的边界CF 反映相应指令的无符号进位/借位,OF 反映有符号溢出;SF 通常取结果符号位,ZF 反映结果是否为零。查漏

核心结论

CF 反映相应指令的无符号进位/借位,OF 反映有符号溢出;SF 通常取结果符号位,ZF 反映结果是否为零。

条件与过程

加法 OF 可由同号相加异号结果判断,或最高位进位入与进位出异或;减法的 CF 借位约定依 ISA 而定。

例子

8 位 0x7F+1 得 0x80:有符号溢出 OF=1,无符号未产生最高位进位 CF=0。

辨析边界

并非所有 ISA 都有这些标志,所有指令也不一定更新它们。MIPS 的分支通常直接比较寄存器,不依赖 x86 式 OF/CF。

串行进位与并行进位加法器串行进位逐位传播进位;先行进位用生成项和传播项提前计算多位进位。查漏

核心结论

串行进位逐位传播进位;先行进位用生成项和传播项提前计算多位进位。

条件与过程

若 Pᵢ=Aᵢ⊕Bᵢ,Gᵢ=AᵢBᵢ,则 Cᵢ₊₁=Gᵢ+PᵢCᵢ;这里乘表示与、加表示或。传播项也有采用或定义的教材,须配套。

例子

C₂=G₁+P₁G₀+P₁P₀C₀,体现进位可以由输入直接并行计算。

辨析边界

并行进位不代表零延时;分组级联仍有门级延时与组间进位路径。

乘除运算电路与结果位宽n 位×n 位的完整乘积通常需 2n 位;乘法可用部分积加法和移位实现,除法可用比较、减法与移位实现。查漏

核心结论

n 位×n 位的完整乘积通常需 2n 位;乘法可用部分积加法和移位实现,除法可用比较、减法与移位实现。

条件与过程

有符号乘积放回 n 位时,检查高 n 位是否都是低 n 位符号位的扩展;除法还须检查除数为零和商是否可表示。

例子

8 位有符号 −128÷−1 得数学结果 128,超出 8 位有符号范围;−128×1 的完整结果可由高位符号扩展表示。

辨析边界

结果超出数学范围、CPU 的异常行为及 OF/CF 如何变化是不同问题,要按 ISA 指令语义回答,不能统一说清零。

IEEE 754 特殊值单精度指数 8 位、尾数域 23 位:指数全 0 用于零/非规格化,指数全 1 用于无穷大/NaN。查漏

核心结论

单精度指数 8 位、尾数域 23 位:指数全 0 用于零/非规格化,指数全 1 用于无穷大/NaN。

条件与过程

非规格化数的有效数为 0.f,指数为 1−127;规格化数为 1.f,指数为 E−127;符号位可区分正零与负零。

例子

最小正非规格化单精度数为 2⁻¹⁴⁹;最大有限值的指数域是 254,而非 255。

辨析边界

NaN 不是无穷大。不能把隐含前导 1 套到非规格化数;正负零数值比较相等但位模式不同。

存储、指令与控制

存储芯片的字扩展与位扩展位扩展增加每个地址可同时读写的数据位数;字扩展增加地址空间,需要片选区分芯片组。查漏

核心结论

位扩展增加每个地址可同时读写的数据位数;字扩展增加地址空间,需要片选区分芯片组。

条件与过程

先用目标容量除以单片容量核对片数,再看地址线低位送片内、高位用于选组;位扩展的同组芯片共用地址和片选。

例子

用 8K×8 芯片组成 32K×16:每组并联 2 片,共 4 组,总计 8 片,片内需 13 根地址线。

辨析边界

容量单位必须统一;数据线数量、地址线数量、片选线数量不可互换。

DRAM 刷新的三种方式集中刷新在一段连续时间完成所有行;分散刷新把刷新分散到各周期;异步刷新在刷新周期内均匀安排各行。查漏

核心结论

集中刷新在一段连续时间完成所有行;分散刷新把刷新分散到各周期;异步刷新在刷新周期内均匀安排各行。

条件与过程

DRAM 按行刷新,列数不直接决定刷新次数;刷新周期要求每一行在规定时间内至少刷新一次。

例子

有 1024 行、每 64 ms 全部刷新一遍,均匀调度时平均约每 62.5 μs 刷新一行。

辨析边界

刷新与读写访问不同;刷新不依赖 CPU 逐个读取单元。集中刷新会形成一段集中不能正常访问的时间。

高位/低位交叉存储高位交叉用高位选模块,连续地址通常落在同一模块;低位交叉用低位选模块,连续地址轮流落在不同模块。查漏

核心结论

高位交叉用高位选模块,连续地址通常落在同一模块;低位交叉用低位选模块,连续地址轮流落在不同模块。

条件与过程

m 个模块、单模块存储周期 T、总线传送节拍 τ,要每 τ 连续启动,常需 mτ≥T,并同时满足地址分散和总线条件。

例子

4 模块低位交叉按字编址时,字地址 0、1、2、3 分到不同模块;0、4、8、12 却集中到同一模块。

辨析边界

满足模块数量还不够;跨步访问可能产生模块冲突。按字节编址时应先分离字内偏移。

Flash、SSD 与磨损均衡Flash 通常按页读写、按更大的擦除块擦除;覆盖更新常通过写入新位置并更新映射完成。查漏

核心结论

Flash 通常按页读写、按更大的擦除块擦除;覆盖更新常通过写入新位置并更新映射完成。

条件与过程

控制器负责逻辑到物理地址映射、垃圾回收和磨损均衡。擦除次数有限,写放大使实际写入量可能大于主机请求量。

例子

只修改 4 KiB 逻辑数据,内部垃圾回收可能还要搬移有效页和擦除块,因此主机写入量不等于闪存写入量。

辨析边界

SSD 没有机械寻道和旋转延迟,但访问成本仍不是零;不能把机械磁盘的调度收益直接套到 SSD。

Cache 写策略的组合写直达每次写命中同步更新下层;写回先改 Cache 并置脏,替换脏块时才写回下层。查漏

核心结论

写直达每次写命中同步更新下层;写回先改 Cache 并置脏,替换脏块时才写回下层。

条件与过程

写分配/非写分配处理写不命中。写回配写分配、写直达配非写分配是常见组合,但不是逻辑上唯一合法组合。

例子

写回 Cache 中修改块 A,随后把它替换出去:若 A 为脏块,必须先将修改写回,干净块可直接丢弃。

辨析边界

写命中策略与写不命中策略属于两个维度;写缓冲能缓解等待,不等于取消主存更新。

TLB、页表与 Cache 的职责TLB 缓存虚页号到物理页框号及相关权限;页表保存映射;Cache 缓存指令/数据副本。查漏

核心结论

TLB 缓存虚页号到物理页框号及相关权限;页表保存映射;Cache 缓存指令/数据副本。

条件与过程

TLB 未命中先查页表;页表项合法且页面在内存可补 TLB,页面不在内存才触发缺页;物理 Cache 的定位须得到物理地址。

例子

TLB 未命中但页表项 present=1:地址翻译可完成,不发生换入页面操作。

辨析边界

TLB 未命中不等于缺页,Cache 未命中也不等于缺页;某些实现可并行访问 TLB 与 Cache,不能一概说一定串行。

大端与小端大端把多字节对象最高有效字节放在最低地址;小端把最低有效字节放在最低地址。查漏

核心结论

大端把多字节对象最高有效字节放在最低地址;小端把最低有效字节放在最低地址。

条件与过程

先把对象拆成字节,再按地址递增填写;大小端只规定字节顺序,不会把每个字节里的比特再倒序。

例子

0x12345678 存于地址 A 起:大端 A..A+3 为 12 34 56 78;小端为 78 56 34 12。

辨析边界

寄存器中的数值不因内存大小端而变;单字节对象没有字节序差别。

数据对齐与结构体填充对齐约束和填充受 ABI、类型及编译选项影响;结构体中可能同时存在内部填充和末尾填充。查漏

核心结论

对齐约束和填充受 ABI、类型及编译选项影响;结构体中可能同时存在内部填充和末尾填充。

条件与过程

逐成员将偏移上调到该成员的对齐倍数;最后把总大小上调到结构体对齐倍数。位域/打包规则须另看题设。

例子

假定 char 对齐 1、int 大小及对齐均为 4,则 {char c; int x; char d;} 常用偏移 0、4、8,总大小 12。

辨析边界

上述例子不是所有平台的无条件标准;sizeof 结构体一般不等于各成员 sizeof 的简单和。

函数调用与栈帧调用过程需传递参数、保存返回位置,并按约定保护仍需使用的寄存器;栈帧可容纳局部变量、溢出参数及保存区。查漏

核心结论

调用过程需传递参数、保存返回位置,并按约定保护仍需使用的寄存器;栈帧可容纳局部变量、溢出参数及保存区。

条件与过程

调用者保存与被调用者保存由调用约定区分;栈增长方向、参数使用寄存器还是栈也由 ABI 决定。

例子

递归函数每次调用都需要独立保存仍存活的局部状态和返回位置,否则下一次调用会覆盖前一次状态。

辨析边界

栈帧不一定使用帧指针;叶函数不一定建栈帧,不能把某一平台的固定布局推广到所有 ISA。

异常:故障、陷阱、中止与外部中断故障、陷阱、中止是常见教材的异常分类;外部中断来自 CPU 执行指令以外的请求。查漏

核心结论

故障、陷阱、中止是常见教材的异常分类;外部中断来自 CPU 执行指令以外的请求。

条件与过程

典型缺页故障修复后重新执行原指令;陷阱常在指令执行后处理并转向后续指令;中止常无法可靠恢复。具体返回地址依架构与异常类型。

例子

缺页处理把所需页调入后,返回导致缺页的指令重新执行;时钟中断用于定时服务,未必切换进程。

辨析边界

不要用“所有异常都在同一时刻响应/都返回下一条”概括;软件陷入由指令触发,不等于外部中断。

流水线三类冲突与相关结构冲突来自硬件资源竞争;数据冲突来自依赖;控制冲突来自改变控制流的指令。查漏

核心结论

结构冲突来自硬件资源竞争;数据冲突来自依赖;控制冲突来自改变控制流的指令。

条件与过程

经典顺序五级流水常关注 RAW;转发可消除部分等待,但 load-use 仍可能停顿。是否出现 WAR/WAW 要看发射、读写和完成次序。

例子

lw 后紧接使用其结果的 add:若结果在 MEM 末尾才可用,下一条 EX 太早,即使转发仍可能需一个气泡。

辨析边界

相关是程序语义关系,冲突是特定流水实现产生的时序问题;有相关不代表必定停顿。

总线定时与异步握手同步通信以公共时钟协调;异步通信依请求、应答等握手信号确定传输进度。查漏

核心结论

同步通信以公共时钟协调;异步通信依请求、应答等握手信号确定传输进度。

条件与过程

常见异步方式包括不互锁、半互锁、全互锁,分别观察信号撤销是否等待对方确认。半同步结合时钟与等待信号。

例子

慢设备未就绪时,通过应答或等待信号延长本次传送,避免按固定节拍采入无效数据。

辨析边界

总线并非一定有时钟信号;突发传输中首字的地址阶段与后续数据阶段成本不同。

I/O 端口独立编址与统一编址独立编址给 I/O 端口单独的地址空间和专用指令;统一编址把端口映射到存储地址空间。查漏

核心结论

独立编址给 I/O 端口单独的地址空间和专用指令;统一编址把端口映射到存储地址空间。

条件与过程

端口地址通常对应接口中的数据、状态、控制寄存器;统一编址可用访存指令访问,但需要区分普通 RAM 与设备语义。

例子

轮询设备状态后写数据寄存器,是访问接口寄存器,不是直接把地址发到设备介质的每个单元。

辨析边界

统一编址不意味着设备寄存器可以任意缓存,也不意味着 I/O 端口就是物理连接插口。

DMA 周期挪用与总线竞争DMA 在设备与主存间传送数据,CPU 先设置参数,完成或异常时通常再处理通知。查漏

核心结论

DMA 在设备与主存间传送数据,CPU 先设置参数,完成或异常时通常再处理通知。

条件与过程

周期挪用只在需要传输时取得相关总线使用权;停止 CPU 访问主存、周期挪用、交替访存是不同安排。

例子

CPU 当前只访问寄存器而不使用被 DMA 占用的总线时,可能继续执行;当需要同一主存总线时才受竞争影响。

辨析边界

DMA 不等于完全不用 CPU,也不保证 CPU 一直停止;传送单位与完成中断频率需按题设。

SISD、SIMD、MIMD 与硬件多线程分类依据指令流和数据流:SIMD 为单指令流处理多数据流,MIMD 为多个指令流处理多个数据流。查漏

核心结论

分类依据指令流和数据流:SIMD 为单指令流处理多数据流,MIMD 为多个指令流处理多个数据流。

条件与过程

超标量指同一周期可发射多条指令;硬件多线程保留多个线程的硬件状态,粗粒度、细粒度与同时多线程调度方式不同。

例子

向量加法用同一操作处理多组元素体现 SIMD;多核分别运行不同程序体现 MIMD。

辨析边界

超标量不自动等于多核或多线程;硬件线程数不等于物理核心数。

MIPS · 格式与运算

MIPS 范围、寄存器与三种指令格式本节以经典 32 位 MIPS 整数子集为主;32 个通用寄存器,$zero 读为 0;常规指令长 32 位。MIPS

核心结论

本节以经典 32 位 MIPS 整数子集为主;32 个通用寄存器,$zero 读为 0;常规指令长 32 位。

条件与过程

R 型:op6、rs5、rt5、rd5、shamt5、funct6;I 型:op6、rs5、rt5、imm16;J 型:op6、index26。寄存器号可参照下方速查。

例子

add $t0,$t1,$t2 把两个源寄存器相加写入 $t0;汇编的 rd,rs,rt 顺序不同于机器字段 rs,rt,rd 的顺序。

辨析边界

经典 MIPS 没有 x86 式统一算术条件码 OF/CF;MIPS16、microMIPS、Release 6 等有差异,不套用本节全部假设。

add/addu/sub/subu 与立即数加法add、sub、addi 在有符号整数溢出时产生异常;addu、subu、addiu 保留低 32 位,不产生相应整数溢出异常。MIPS

核心结论

add、sub、addi 在有符号整数溢出时产生异常;addu、subu、addiu 保留低 32 位,不产生相应整数溢出异常。

条件与过程

addi、addiu 都先对 16 位立即数作符号扩展;u 不能简单解释为“立即数零扩展”。基本整数子集没有独立 subi,可用加负立即数。

例子

addiu $t0,$zero,-1 得 0xFFFFFFFF;0x7FFFFFFF+1 用 addu 得 0x80000000,而 add 触发整数溢出异常。

辨析边界

addu 也可用于不检查溢出的位级有符号加法;不要说发生异常时 MIPS 把 OF、CF 置成某个值。

and/or/xor/nor 与逻辑立即数按位与、或、异或、或非不做十进制算术;andi、ori、xori 把 16 位立即数零扩展到 32 位。MIPS

核心结论

按位与、或、异或、或非不做十进制算术;andi、ori、xori 把 16 位立即数零扩展到 32 位。

条件与过程

nor rd,rs,$zero 实现按位取反;lui rt,imm 将立即数放到高 16 位、低 16 位清零。

例子

lui $t0,0x1234;ori $t0,$t0,0xABCD 得 0x1234ABCD;andi $t1,$t0,0x00FF 只保留最低字节。

辨析边界

lui 是 I 型但不能套“所有 I 型立即数都符号扩展”;按位取反不同于算术取负。

sll/srl/sra 与可变移位sll 左移低位补 0,srl 右移高位补 0,sra 右移高位补原符号位;移出的位丢弃。MIPS

核心结论

sll 左移低位补 0,srl 右移高位补 0,sra 右移高位补原符号位;移出的位丢弃。

条件与过程

固定移位 sll rd,rt,shamt;可变移位 sllv/srlv/srav rd,rt,rs 使用 rs 的低 5 位作为移位量。

例子

0x80000000 右移 1:srl 得 0x40000000,sra 得 0xC0000000;sll $t0,$t1,2 可生成 4 倍字节偏移。

辨析边界

对负整数做 sra 不总等于向零取整除法:−3 算术右移 1 常得 −2,而整数除法向零取整得 −1。

slt/sltu/slti/sltiu比较结果写为 0 或 1;slt/slti 用有符号比较,sltu/sltiu 用无符号比较。MIPS

核心结论

比较结果写为 0 或 1;slt/slti 用有符号比较,sltu/sltiu 用无符号比较。

条件与过程

slti 和 sltiu 都对 16 位立即数符号扩展;sltiu 在扩展后再按无符号数比较,结果写入 rt。

例子

$t1=0xFFFFFFFF、$t2=1 时,slt $t0,$t1,$t2 得 1,sltu 得 0。sltiu $t0,$zero,-1 得 1。

辨析边界

slt 不会直接改变 PC,也不通过全局标志寄存器传结果;“u”不等于立即数零扩展。

mult/multu/div/divu 与 HI、LO经典 mult/multu 产生 64 位乘积放 HI:LO;div/divu 把商放 LO、余数放 HI;mfhi、mflo 读出结果。MIPS

核心结论

经典 mult/multu 产生 64 位乘积放 HI:LO;div/divu 把商放 LO、余数放 HI;mfhi、mflo 读出结果。

条件与过程

mult、div 按有符号解释源操作数,带 u 的版本按无符号解释;mthi/mtlo 可将 GPR 写入 HI/LO。不同版本的 mul 等指令需单独确认。

例子

$t0=17、$t1=5,div $t0,$t1 后 mflo $s0 得 3,mfhi $s1 得 2;除数为零时不能推导正常商余数。

辨析边界

经典这些指令不能沿用 x86 OF/CF;除零与商溢出的架构行为按题目指定,不能默认总有除法异常。

MIPS · 访存与控制流

lw/sw、lb/lbu、lh/lhu、sb/sh访存地址=基址寄存器+符号扩展的 16 位字节偏移;load 将内存读到 rt,store 把 rt 的低相应位写到内存。MIPS

核心结论

访存地址=基址寄存器+符号扩展的 16 位字节偏移;load 将内存读到 rt,store 把 rt 的低相应位写到内存。

条件与过程

lb/lh 符号扩展,lbu/lhu 零扩展;lw 读整字。经典 lw/sw 地址通常须 4 B 对齐,lh/sh 须 2 B 对齐。

例子

lw $t0,12($s0) 在 $s0=0x10010000 时访问 0x1001000C;若字节为 0x80,lb 得 0xFFFFFF80,lbu 得 0x00000080。

辨析边界

sw 的 rt 是源,不是目的;偏移以字节计而不是以字计。sb/sh 不会把完整 32 位寄存器全部写入。

beq/bne 的 PC 相对分支beq 在两源相等时分支,bne 在不等时分支;经典目标=PC+4+(signext(imm16) 左移 2)。MIPS

核心结论

beq 在两源相等时分支,bne 在不等时分支;经典目标=PC+4+(signext(imm16) 左移 2)。

条件与过程

PC 是当前分支指令地址;偏移是相对下一条指令的有符号指令字距离。未转移的后续行为还取决于是否采用延迟槽模型。

例子

分支在 0x00400020,目标在 0x00400010,立即数=(0x10−0x24)/4=−5,即 16 位编码 0xFFFB。

辨析边界

不能相对当前 PC 直接除 4;负偏移先符号扩展再左移,不是零扩展。

bltz/bgez/blez/bgtz分别在 rs<0、rs≥0、rs≤0、rs>0 时转移,按有符号解释,常采用与 beq 同类 PC 相对目标计算。MIPS

核心结论

分别在 rs<0、rs≥0、rs≤0、rs>0 时转移,按有符号解释,常采用与 beq 同类 PC 相对目标计算。

条件与过程

与零比较的这些指令可以直接使用;一般寄存器间的 blt/bge 常是汇编器伪指令组合。

例子

bltz $t0,L 可检测负数;比较 $t0<$t1 可先 slt $at,$t0,$t1,再 bne $at,$zero,L。

辨析边界

把伪指令展开后才统计机器指令数、代码长度和流水时间;不能把汇编每一行都当成一条机器指令。

j/jal、jr/jalr 与延迟槽j/jal 使用伪直接目标:拼接 (PC+4) 高 4 位、index26 和 00;jr/jalr 的目标取自寄存器。MIPS

核心结论

j/jal 使用伪直接目标:拼接 (PC+4) 高 4 位、index26 和 00;jr/jalr 的目标取自寄存器。

条件与过程

经典有延迟槽的 jal 将 PC+8 写入 $ra,jalr 通常写指定 rd(省略时常用 $ra);教材若明确采用无延迟槽简化模型,可规定保存 PC+4。

例子

经典 jal func 调用后以 jr $ra 返回;嵌套调用会覆盖 $ra,调用者应按约定保存仍需使用的返回位置。

辨析边界

j 不是完整 32 位绝对地址,也不是 PC 相对;不要把 PC+4 与 PC+8 脱离所用模型强行统一。

常见伪指令 move/li/la/nop/b伪指令是汇编器方便写法,可能展开成一条或多条真实指令;展开方式依工具链和常量/地址范围。MIPS

核心结论

伪指令是汇编器方便写法,可能展开成一条或多条真实指令;展开方式依工具链和常量/地址范围。

条件与过程

move 可用 addu rd,rs,$zero;nop 常用 sll $zero,$zero,0;b 可用 beq $zero,$zero,label;li 装立即数、la 装地址。

例子

li $t0,0x12345678 可展开 lui $t0,0x1234 与 ori $t0,$t0,0x5678;li 一个小常量可能只用一条。

辨析边界

la 与 lw 不同:前者获得地址,后者从地址读取数据;不要认为 li 无论常量多大都只需一条。

MIPS 调用约定、数组与函数例子常见 o32 约定:$a0–$a3 传前四个参数,$v0–$v1 返回值,$t0–$t9 由调用者按需保存,$s0–$s7 由被调用者按需保存,$sp 管理栈。MIPS

核心结论

常见 o32 约定:$a0–$a3 传前四个参数,$v0–$v1 返回值,$t0–$t9 由调用者按需保存,$s0–$s7 由被调用者按需保存,$sp 管理栈。

条件与过程

这些是调用约定而非每条指令硬性规定。int 数组地址 A+i 常需先把索引 i 左移 2,再与基址相加。

例子

sll $t0,$s1,2;addu $t0,$s0,$t0;lw $v0,0($t0):假定 $s0=A、$s1=i、int 为 4 B,结果为 A[i]。

辨析边界

寄存器别名和保存责任不能混淆;函数修改 $s0 后若未恢复,会违反相应调用约定。

x86 · 数据、运算与标志

x86 范围、寄存器与操作数顺序本节以 IA-32 的 32 位整数指令为主,默认采用 Intel 语法:目的在前、源在后;另列 AT&T 对照。x86

核心结论

本节以 IA-32 的 32 位整数指令为主,默认采用 Intel 语法:目的在前、源在后;另列 AT&T 对照。

条件与过程

EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP 是常见 32 位通用寄存器;AX 是 EAX 的低 16 位,AL/AH 分别是 AX 的低/高 8 位。

例子

Intel:mov eax,ebx;AT&T:movl %ebx,%eax。两者都把 EBX 的内容复制给 EAX。

辨析边界

x86 常规指令为变长编码,不能按 MIPS 一律加 4;64 位模式下 RAX/RSP、调用约定及写 EAX 的零扩展规则须另辨。

MOV、MOVSX、MOVZX 与位宽MOV 复制位模式,通常不改变算术标志;MOVSX 扩展符号位,MOVZX 高位补 0。x86

核心结论

MOV 复制位模式,通常不改变算术标志;MOVSX 扩展符号位,MOVZX 高位补 0。

条件与过程

一般 MOV 的两操作数宽度相同;不同宽度需显式扩展。普通整数 MOV 不支持内存到内存直接复制,串操作 MOVS 是另一类指令。

例子

若内存字节为 0x80:movsx eax,BYTE PTR [esi] 得 0xFFFFFF80;movzx 得 0x00000080;mov al,0x80 只改 EAX 的低 8 位。

辨析边界

MOV 不会因为复制负数就更新 SF;写 AL/AX 不会把 EAX 剩余高位自动清零。64 位模式写 EAX 清 RAX 高 32 位,是另一个规则。

LEA 与基址+变址×比例+位移32 位常见有效地址可写成 base+index×scale+disp,scale 取 1、2、4、8;LEA 只计算该表达式的地址值,不读取所指内存。x86

核心结论

32 位常见有效地址可写成 base+index×scale+disp,scale 取 1、2、4、8;LEA 只计算该表达式的地址值,不读取所指内存。

条件与过程

一般 32 位 SIB 寻址不能把 ESP 用作 index;内存中的最终访问地址还涉及分段/分页。LEA 不改变算术标志。

例子

EBX=0x1000、ECX=3:lea eax,[ebx+ecx*4+8] 得 0x1014;mov eax,[ebx+ecx*4+8] 则读取该地址的 4 B 内容。

辨析边界

方括号在 LEA 中描述地址表达式,不代表实际取内存;LEA 也可用作不改标志的某些加法/常数倍运算。

ADD、SUB、ADC、SBB 的进位与借位ADD/SUB 更新 CF、OF、SF、ZF 等;ADC 把旧 CF 加进去,SBB 把旧 CF 作为借位再减去。x86

核心结论

ADD/SUB 更新 CF、OF、SF、ZF 等;ADC 把旧 CF 加进去,SBB 把旧 CF 作为借位再减去。

条件与过程

无符号加法看 CF,有符号越界看 OF;x86 的 SUB 在发生无符号借位时置 CF。ADC/SBB 常用于多字长运算。

例子

8 位 0xFF+1 得 0:CF=1、OF=0、ZF=1;0x7F+1 得 0x80:CF=0、OF=1、SF=1。

辨析边界

同一位模式可同时按有符号/无符号解释,不能只看 SF 判定数学正负;ADD 置 OF 不等于自动像 MIPS add 一样触发整数溢出异常。

INC、DEC、NEG、NOT 的标志差异INC/DEC 改变结果相关的算术标志但保留 CF;NEG 求补码相反数,NOT 逐位取反且不改标志。x86

核心结论

INC/DEC 改变结果相关的算术标志但保留 CF;NEG 求补码相反数,NOT 逐位取反且不改标志。

条件与过程

NEG 相当于 0−操作数:原操作数非 0 时 CF=1;最小有符号数取负不可表示,OF=1。INC/DEC 仍会影响 OF。

例子

AL=0x7F、旧 CF=1,inc al 得 0x80,OF=1 且 CF 仍为 1;AL=0x80 时 neg al 结果仍为 0x80,OF=1。

辨析边界

INC 不完全等价于 ADD 1,关键差别是 CF;NOT 不等于 NEG,也不按结果重算 ZF/SF。

CMP、TEST 与不写回结果CMP 按目的−源计算标志但不保存差;TEST 按位与计算标志但不保存与结果。x86

核心结论

CMP 按目的−源计算标志但不保存差;TEST 按位与计算标志但不保存与结果。

条件与过程

TEST 清 CF、OF,按与结果设置 SF、ZF、PF,AF 未定义;CMP 的算术标志与对应 SUB 一致。之后的 Jcc/SETcc 读取这些标志。

例子

cmp eax,ebx 后 JE 检查相等;test eax,eax 后 JZ 检查 EAX 是否为 0;两条检查指令都不修改 EAX。

辨析边界

CMP 不是设置一个“大小标志”;同一组标志供有符号与无符号条件分别解释。TEST 不能用来一般性判断两数大小。

AND、OR、XOR 与逻辑标志AND/OR/XOR 写回按位结果,CF=OF=0,SF/ZF/PF 按结果更新,AF 未定义。x86

核心结论

AND/OR/XOR 写回按位结果,CF=OF=0,SF/ZF/PF 按结果更新,AF 未定义。

条件与过程

xor eax,eax 是常见清零写法,也会改变标志;or eax,eax 保留 EAX 位模式但更新标志。NOT 则不改标志。

例子

and eax,0xFF 保留最低字节;xor eax,eax 得 0 并置 ZF=1、SF=0、CF=OF=0。

辨析边界

逻辑操作清 CF/OF 是特定指令语义,不能推广为所有非加减指令都清标志;AF 未定义不等于 AF=0。

SHL/SAL、SHR、SAR 与旋转SHL 与 SAL 是同一左移操作;SHR 逻辑右移高位补 0,SAR 算术右移补原符号位。ROL/ROR 旋转,RCL/RCR 把 CF 也纳入旋转。x86

核心结论

SHL 与 SAL 是同一左移操作;SHR 逻辑右移高位补 0,SAR 算术右移补原符号位。ROL/ROR 旋转,RCL/RCR 把 CF 也纳入旋转。

条件与过程

非零有效移位次数时,CF 通常为最后移出的位;移位 OF 只在有效次数为 1 时有定义,次数为 0 时相关标志不变。32 位传统移位计数常取低 5 位。

例子

AL=0x80:shr al,1 得 0x40、OF=1;sar al,1 得 0xC0、OF=0。SHL 1 位时 OF=结果最高位异或 CF。

辨析边界

不要用多位移位后的 OF 判溢出;8/16 位操作数的超宽移位还涉及 CF 未定义边界。SAR 对负数的舍入方向与 IDIV 向零取整不同。

x86 · 乘除、分支与调用

MUL 与 IMUL:隐含操作数及溢出单操作数 MUL 做无符号乘法,IMUL 做有符号乘法;32 位形式都用 EAX 乘显式源,完整结果写 EDX:EAX。x86

核心结论

单操作数 MUL 做无符号乘法,IMUL 做有符号乘法;32 位形式都用 EAX 乘显式源,完整结果写 EDX:EAX。

条件与过程

MUL 的高半部非 0 时 CF=OF=1,否则均为 0;IMUL 的完整结果不能由低半部符号扩展得到时 CF=OF=1。SF/ZF/AF/PF 未定义。

例子

EAX=0xFFFFFFFF、ECX=2:mul ecx 得 0x00000001:FFFFFFFE,CF=OF=1;单操作数 imul ecx 按 −1×2 得 0xFFFFFFFF:FFFFFFFE,CF=OF=0。

辨析边界

两/三操作数 IMUL 把截断结果写到显式目的寄存器,不自动写 EDX:EAX;不能把 MUL 的“高半部是否为零”判据套到 IMUL。

DIV、IDIV 与 CDQ:商、余数和异常32 位 DIV/IDIV 的被除数是 EDX:EAX,显式源是除数;商写 EAX,余数写 EDX。DIV 无符号,IDIV 有符号。x86

核心结论

32 位 DIV/IDIV 的被除数是 EDX:EAX,显式源是除数;商写 EAX,余数写 EDX。DIV 无符号,IDIV 有符号。

条件与过程

若被除数本来只是一个 32 位无符号数,通常先 xor edx,edx;有符号数常先 CDQ,把 EAX 的符号扩展到 EDX:EAX。除数为 0 或商超出目的范围触发 #DE。

例子

EAX=−17,cdq 后 idiv ecx(ECX=5),商为 −3、余数为 −2;余数绝对值小于除数绝对值,非零时与被除数同号。

辨析边界

DIV/IDIV 后 CF、OF、SF、ZF、AF、PF 均未定义,不能说溢出时 CF/OF 置 0/1;CDQ 不执行除法,也不改变算术标志。

Jcc:有符号与无符号条件跳转JE/JZ 看 ZF=1,JNE/JNZ 看 ZF=0;无符号大小用 JA/JAE/JB/JBE,有符号大小用 JG/JGE/JL/JLE。x86

核心结论

JE/JZ 看 ZF=1,JNE/JNZ 看 ZF=0;无符号大小用 JA/JAE/JB/JBE,有符号大小用 JG/JGE/JL/JLE。

条件与过程

CMP a,b 后:JA 为 CF=0 且 ZF=0,JB 为 CF=1;JG 为 ZF=0 且 SF=OF,JL 为 SF≠OF。Jcc 本身不修改标志。

例子

AL=0xFF、BL=1,cmp al,bl 后:无符号 255>1 可用 JA 转移;有符号 −1<1 可用 JL 转移,两种判断可同时成立。

辨析边界

JG 不等于只看 SF=0,JL 不等于只看 SF=1;要合并 OF 还原有符号数学比较。中间若有改标志的指令,分支读到的是新标志。

JMP、LOOP、JECXZ、SETcc、CMOVccJMP 无条件改变控制流;常见 IA-32 LOOP 先使 ECX 减 1,再按非 0 决定跳转,且不改变算术标志。JECXZ 直接检查 ECX 是否为 0。x86

核心结论

JMP 无条件改变控制流;常见 IA-32 LOOP 先使 ECX 减 1,再按非 0 决定跳转,且不改变算术标志。JECXZ 直接检查 ECX 是否为 0。

条件与过程

LOOPE/LOOPNE 还检查旧 ZF;SETcc 把条件结果 0/1 写入一个字节;CMOVcc 条件成立才把源值写到目的寄存器。具体编码范围依指令。

例子

sete al 只写 AL;若想使整个 EAX 变成 0/1,可再 movzx eax,al。jecxz 不会先把 ECX 减 1。

辨析边界

LOOP 的计数寄存器受地址大小影响,本节按 32 位 ECX;不要把 LOOP 当成会修改 ZF 的 DEC+JNZ 在所有情形下等价替换。

PUSH、POP 与 ESP 的变化本节默认普通 32 位栈操作:PUSH 先使 ESP 减 4 再写入栈顶;POP 先从旧栈顶读取再调整栈指针。x86

核心结论

本节默认普通 32 位栈操作:PUSH 先使 ESP 减 4 再写入栈顶;POP 先从旧栈顶读取再调整栈指针。

条件与过程

通常压入/弹出的是双字;16 位操作数等变体的步长不同。PUSH imm8 的立即数会先符号扩展到相应操作数宽度。普通 PUSH/POP 不改变算术标志。

例子

ESP=0x1000,push eax 后 ESP=0x0FFC;pop ebx 将栈顶值取到 EBX,正常情况下 ESP 回到 0x1000。

辨析边界

POP ESP 属于需单独分析的情况:目标写入 ESP 后,最终 ESP 不是机械地旧值+4。不要把所有模式的 PUSH/POP 步长都说成 4。

CALL、RET、LEAVE 与函数栈帧普通 32 位近 CALL 把下一条指令地址压栈后转移;RET 从栈顶取回返回地址;LEAVE 可用于撤销基于 EBP 的栈帧。x86

核心结论

普通 32 位近 CALL 把下一条指令地址压栈后转移;RET 从栈顶取回返回地址;LEAVE 可用于撤销基于 EBP 的栈帧。

条件与过程

常见序言 push ebp; mov ebp,esp; sub esp,N。常见结尾 leave; ret,其中 LEAVE 相当于先恢复 ESP 到 EBP,再弹出旧 EBP;参数位置依调用约定。

例子

采用常见 32 位 cdecl 栈传参和上述序言时,[ebp] 是保存的旧 EBP,[ebp+4] 是返回地址,[ebp+8] 可为首个参数。

辨析边界

返回地址不是无条件“当前 EIP+4”,必须按变长指令长度定位;RET n 在取回地址后还调整栈,不是跳到地址 n。64 位 ABI 不直接套本例。

串操作、方向标志与端口 I/OMOVSB 从源串向目的串搬一个字节,STOSB 把 AL 写到目的串;REP 可按计数重复;CLD 清 DF、STD 置 DF 以控制递增/递减方向。x86

核心结论

MOVSB 从源串向目的串搬一个字节,STOSB 把 AL 写到目的串;REP 可按计数重复;CLD 清 DF、STD 置 DF 以控制递增/递减方向。

条件与过程

按常见 32 位地址大小,MOVSB 使用 ESI/EDI,REP 使用 ECX。IN/OUT 访问独立端口地址空间,常见端口操作数为 imm8 或 DX,数据用 AL/AX/EAX。

例子

cld; rep movsb 在通常模型下按地址递增复制 ECX 个字节;in al,dx 从 DX 所指定端口读一个字节。

辨析边界

串 MOVSB 与 SIMD 标量 MOVSD 等同名写法需看上下文;I/O 指令受权限限制,普通内存 MOV 不等于执行端口 IN/OUT。

x86 与 MIPS:机器级阅读的边界两者都要看操作数宽度与指令语义;经典 MIPS 常见三操作数与 load/store,x86 常见两操作数以及显式内存操作数。x86

核心结论

两者都要看操作数宽度与指令语义;经典 MIPS 常见三操作数与 load/store,x86 常见两操作数以及显式内存操作数。

条件与过程

x86 CMP→Jcc 使用条件码;经典 MIPS 可用寄存器比较分支或 SLT 结果。MIPS 常规指令固定 4 B,x86 变长;调用返回地址保存方式也不同。

例子

x86 add eax,[ebx] 可读取内存并与 EAX 相加;经典 MIPS 通常先 lw 到寄存器再 add。x86 CALL 压返回地址,经典 MIPS JAL 常写 $ra。

辨析边界

这些是本页选取子集的对照,不代表每条 x86 都有两个操作数、每条 MIPS 都有三个;x86 普通 ADD 的 OF 与 MIPS ADD 的异常不是同一机制。

408 · OS

操作系统

25 个考点

系统、进程与同步

宏内核、微内核、外核与模块化宏内核在内核态集成较多服务;微内核保留较少核心机制并将较多服务放到用户态;外核强调安全分配资源并由库操作系统提供抽象。查漏

核心结论

宏内核在内核态集成较多服务;微内核保留较少核心机制并将较多服务放到用户态;外核强调安全分配资源并由库操作系统提供抽象。

条件与过程

模块化关注组件组织和动态装卸,可以与宏内核结合,并非所有名称都构成互斥分类。

例子

文件服务移到用户态后可通过 IPC 与其他组件协作,但带来通信和切换成本。

辨析边界

微内核不意味着没有内核态代码;内核小也不自动保证所有负载都更快。

操作系统引导上电后由固件完成初始化并选择启动设备,引导程序加载内核,内核再初始化管理结构和运行环境。查漏

核心结论

上电后由固件完成初始化并选择启动设备,引导程序加载内核,内核再初始化管理结构和运行环境。

条件与过程

BIOS/UEFI 是不同固件环境;引导过程可能经过多级引导,具体流程取决于平台与启动方式。

例子

UEFI 可从系统分区加载启动文件,再把控制交给 OS 加载程序和内核。

辨析边界

不能断言所有机器都执行同一套 MBR 引导流程,也不能把固件当作已加载的操作系统内核。

进程内存映像:代码、数据、BSS、堆、栈代码段放指令;数据段常放已初始化静态存储期对象;BSS 常表示零初始化对象;堆用于动态分配;栈用于调用相关状态。查漏

核心结论

代码段放指令;数据段常放已初始化静态存储期对象;BSS 常表示零初始化对象;堆用于动态分配;栈用于调用相关状态。

条件与过程

BSS 可在可执行文件中主要记录大小,装入时分配并清零;线程通常共享进程地址空间但各有执行栈与寄存器状态。

例子

全局 int a; 常进入 BSS,malloc 得到的空间位于动态分配区域,局部自动变量通常依调用实现放置。

辨析边界

“未初始化全局对象”为零初始化,不是内容随机;局部变量不保证全放栈,编译器可能将其放寄存器。

链接、装入与重定位链接解决模块间符号引用并形成可装入映像;装入把映像放入内存;重定位将相关地址与实际布局对应。查漏

核心结论

链接解决模块间符号引用并形成可装入映像;装入把映像放入内存;重定位将相关地址与实际布局对应。

条件与过程

静态链接在运行前把所需模块组合;装入时动态链接与运行时动态链接的时机不同。动态重定位通常在执行访存时完成。

例子

共享库的函数可在装载阶段解析,也可延迟到首次调用时绑定,取决于系统和链接设置。

辨析边界

静态/动态链接与静态/动态重定位不是同一组概念;动态链接不代表完全不占内存。

用户级与内核级线程纯用户级线程由用户态线程库管理;内核级线程由内核识别和调度。查漏

核心结论

纯用户级线程由用户态线程库管理;内核级线程由内核识别和调度。

条件与过程

多对一模型中一个线程的阻塞系统调用可能阻塞整个进程;一对一/多对多模型不能直接套用这一结论。

例子

一个进程内只有用户线程且内核只识别该进程时,用户线程不能因此同时占用多个核执行。

辨析边界

“线程阻塞则整个进程阻塞”有模型前提;用户线程切换较轻也不表示涉及系统调用时不会进内核。

管道、消息、共享内存与信号管道传递字节流,消息传递保留消息语义,共享内存让多个进程访问同一映射区域;信号用于异步事件通知。查漏

核心结论

管道传递字节流,消息传递保留消息语义,共享内存让多个进程访问同一映射区域;信号用于异步事件通知。

条件与过程

普通匿名管道通常用于有亲缘关系的进程;共享内存本身不自动解决同步互斥;信号处理需遵守相应语义。

例子

生产者写共享缓冲区、消费者读同一区域时,仍需锁/信号量等约束访问顺序。

辨析边界

把共享区映射好不等于读写天然原子或可见;信号不是用来高效搬运大块数据的通用通道。

闲逛进程/空闲任务没有其他可运行任务时,CPU 可以运行空闲任务,执行低功耗等待或平台相关维护。查漏

核心结论

没有其他可运行任务时,CPU 可以运行空闲任务,执行低功耗等待或平台相关维护。

条件与过程

空闲任务保证调度器在无普通就绪任务时仍有可选择的执行上下文;多核常各有空闲上下文。

例子

等待外设期间所有普通任务都阻塞,CPU 可进入空闲等待,下一次中断唤醒后再检查就绪任务。

辨析边界

空闲任务不是普通用户进程无限占满 CPU 的同义词;CPU 利用率一般不把空闲执行计为有效忙碌。

多处理机调度与处理器亲和性负载均衡让各处理器承担较均匀的工作;处理器亲和性尽量维持任务与原处理器的关联。查漏

核心结论

负载均衡让各处理器承担较均匀的工作;处理器亲和性尽量维持任务与原处理器的关联。

条件与过程

迁移有助于均衡但会损失 Cache/TLB 局部性;软亲和是倾向,硬亲和对可运行 CPU 集合施加限制。

例子

任务刚在核 0 运行,继续留在核 0 可能复用其 Cache;若核 0 很忙,迁到空闲核可能更划算。

辨析边界

负载均衡与亲和性有取舍,不能认为迁移越频繁越好;全局队列与每核队列是不同实现选择。

条件变量与信号量条件变量配合互斥锁等待某个状态条件;典型 wait 原子地释放锁并睡眠,返回前重新获得锁。查漏

核心结论

条件变量配合互斥锁等待某个状态条件;典型 wait 原子地释放锁并睡眠,返回前重新获得锁。

条件与过程

Mesa 语义下被唤醒并不保证条件仍成立,应在 while 中重新检查。条件变量 signal 通常不积累为未来可消费的许可,信号量的 V 可增加计数。

例子

while(buffer_empty) wait(not_empty, mutex); 被唤醒后重新持锁检查,成立才取元素。

辨析边界

wait 返回时是否持锁、唤醒是否立即让出 CPU 依具体语义;不能把条件变量 signal 当成信号量 V 的同义操作。

调度、上下文切换与中断调度是选择接下来运行谁;上下文切换是保存/恢复执行状态;一次调度可以再次选中当前任务。查漏

核心结论

调度是选择接下来运行谁;上下文切换是保存/恢复执行状态;一次调度可以再次选中当前任务。

条件与过程

中断进入内核先保存必要现场,处理完可返回原任务,也可在满足条件时调度到另一任务。模式切换不必然切换进程。

例子

磁盘完成中断唤醒进程 B,但若 A 仍继续运行,则发生了中断处理而没有从 A 到 B 的进程切换。

辨析边界

“发生中断必切进程”“调用调度器必换进程”都过于绝对;同一进程的线程切换也可能需要保存执行上下文。

内存与文件

地址变换机构 MMU 与 OS 的分工MMU 按配置执行地址翻译、保护检查并维护相关硬件状态;OS 建立和管理页表/段表、分配物理空间并处理缺页等异常。查漏

核心结论

MMU 按配置执行地址翻译、保护检查并维护相关硬件状态;OS 建立和管理页表/段表、分配物理空间并处理缺页等异常。

条件与过程

页表/段表通常在内存中,CPU 的相应寄存器记录其位置或相关标识;TLB 保存近期映射以减少访表。

例子

访存时 MMU 查 TLB/页表;若缺页则陷入内核,由 OS 调页并更新映射后恢复执行。

辨析边界

不能把每次地址加法都说成由 OS 软件完成,也不能把换页调度都归给 MMU 硬件自动完成。

段表与页表的越界检查段表项含段基址、段长及权限等;页表项含页框号及存在、权限、修改等状态,具体字段依系统。查漏

核心结论

段表项含段基址、段长及权限等;页表项含页框号及存在、权限、修改等状态,具体字段依系统。

条件与过程

段号 s 先检查 s<段表长度;段内偏移 d 再检查 d<段长,合法时物理地址=基址+d。分页的页号/虚拟地址合法性与 present 状态分别检查。

例子

段长为 1000 B,则偏移 999 合法、1000 越界;页表项 present=0 但地址属于合法映射时可构成缺页。

辨析边界

有的题用最大合法偏移作为界限字段,此时判定是 d≤limit;先读“长度”还是“上界”,不要机械套不等式。

页框分配与回收分配可固定/可变,置换可局部/全局;两者从配额与牺牲页来源两个角度描述。查漏

核心结论

分配可固定/可变,置换可局部/全局;两者从配额与牺牲页来源两个角度描述。

条件与过程

固定分配通常配局部置换;可变分配可配局部或全局置换。全局置换可从其他进程的可置换页中选择。

例子

局部置换只替换本进程页,不能简单通过牺牲其他进程的页缓解本进程缺页;OS 可另行调整配额。

辨析边界

不能把“分配固定”等同“所有页永不改变”;常规教材不把固定分配+全局置换作为自然组合。

内存映射文件与普通 I/O把文件范围映射到虚拟地址空间后,可通过读写内存地址访问文件内容;页面可按需调入,OS 管理相应缓存与回写。查漏

核心结论

把文件范围映射到虚拟地址空间后,可通过读写内存地址访问文件内容;页面可按需调入,OS 管理相应缓存与回写。

条件与过程

共享映射的修改可反映到文件并与其他映射共享;私有映射常用写时复制,修改不直接回写原文件。映射并不代表立即把整个文件读进 RAM。

例子

对共享映射 p[i] 赋值会弄脏相关页,回写时机由系统机制及显式同步要求确定。

辨析边界

解除映射不等于简单替代一切持久化保证;映射访问也可能发生缺页,不能说永不触发磁盘 I/O。

进程打开文件表、系统打开文件表与 inode文件描述符索引进程表;进程表项引用系统打开文件对象;该对象记录文件偏移、访问状态等,并关联文件元数据。查漏

核心结论

文件描述符索引进程表;进程表项引用系统打开文件对象;该对象记录文件偏移、访问状态等,并关联文件元数据。

条件与过程

dup 得到的新 fd 通常共享同一打开对象和偏移;独立 open 同一文件通常产生不同打开对象。fork 继承的描述符通常也共享原打开对象。

例子

fd3=open(f),fd4=dup(fd3),从 fd3 读 10 B 后,fd4 的位置也前移;再次独立 open 得 fd5,其偏移独立。

辨析边界

inode 不保存每次 open 各自的当前偏移;同文件不等于所有描述符都共享一个偏移。

硬链接、软链接与文件删除同一文件的硬链接对应同一文件系统中的同一 inode;软链接是保存目标路径的独立文件。查漏

核心结论

同一文件的硬链接对应同一文件系统中的同一 inode;软链接是保存目标路径的独立文件。

条件与过程

删除一个硬链接会减少链接计数;最后一个名字被删时,若仍有打开引用,常需等最后引用释放才回收文件对象与空间。

例子

a、b 为同一文件的硬链接,删 a 后 b 仍可用;c 是指向 a 的软链接,删 a 后 c 可能成为悬空链接。

辨析边界

硬链接通常不能跨文件系统,通常限制对目录建立;软链接可以指向不存在的路径,链接计数也不等于打开次数。

虚拟文件系统 VFSVFS 为不同文件系统提供统一抽象与接口,把通用文件操作分派给具体文件系统实现。查漏

核心结论

VFS 为不同文件系统提供统一抽象与接口,把通用文件操作分派给具体文件系统实现。

条件与过程

统一的是访问机制,不意味着磁盘布局、inode 编号规则或全部特性完全一样。

例子

应用用同一套 open/read 接口访问不同挂载文件系统,由 VFS 路由到各自实现。

辨析边界

VFS 不是一个只存在内存中的普通文件系统,也不保证每种底层文件系统都有相同语义细节。

文件系统挂载挂载把一个文件系统的根关联到目录树中的挂载点,从而通过统一路径访问它。查漏

核心结论

挂载把一个文件系统的根关联到目录树中的挂载点,从而通过统一路径访问它。

条件与过程

挂载点原目录中的内容通常被挂载内容遮住,卸载后可重新看到;遮住不等于删除。

例子

将文件系统挂到 /mnt/data 后,访问 /mnt/data/x 会进入新挂载文件系统查找 x。

辨析边界

路径看起来同一棵树,不代表所有文件都位于同一物理分区;挂载和格式化是不同操作。

外存空闲空间管理位示图每位对应一个块的空闲/占用状态;空闲链连接空闲块;成组链接将多个空闲块地址成组组织。查漏

核心结论

位示图每位对应一个块的空闲/占用状态;空闲链连接空闲块;成组链接将多个空闲块地址成组组织。

条件与过程

位是 0 还是 1 表示空闲按题设;成组链接用部分地址带出下一组,不能把所有项都当普通空闲数据块地址。

例子

块号 b、每字 w 位且块号从 0 开始时,字号=⌊b/w⌋,位号=b mod w。

辨析边界

换算字节号、字编号和位编号时要分别计算;块号从 1 开始时通常先减 1。

物理格式化、分区与逻辑格式化物理/低级格式化建立底层扇区组织及相关控制信息;分区划分逻辑区域;逻辑格式化建立文件系统元数据。查漏

核心结论

物理/低级格式化建立底层扇区组织及相关控制信息;分区划分逻辑区域;逻辑格式化建立文件系统元数据。

条件与过程

逻辑格式化可初始化超级块、空闲空间管理、根目录等;具体结构依文件系统。现代硬盘低级格式化一般在制造阶段完成。

例子

建立分区后对其创建文件系统,属于逻辑格式化;删建分区表不等于逐个重建介质扇区结构。

辨析边界

快速格式化通常不逐字节擦除全部旧数据;不要把低级格式化、分区、创建文件系统和安全擦除混为一谈。

设备与 I/O

I/O 软件层次常见层次为用户级 I/O、设备独立软件、设备驱动、中断处理以及硬件,教材可能合并部分层次。查漏

核心结论

常见层次为用户级 I/O、设备独立软件、设备驱动、中断处理以及硬件,教材可能合并部分层次。

条件与过程

设备独立软件处理统一接口、命名、保护、缓冲等;驱动把通用请求转换为设备相关命令;中断程序响应设备中断。

例子

read 经过系统调用进入内核,文件/设备相关层次形成请求,驱动配置控制器,完成中断通知上层。

辨析边界

不要用“所有缓冲仅属于某一层”概括实现;层次是职责划分,具体系统可交叉组织。

字符、块、网络设备接口块设备以块为单位并通常支持寻址;字符设备常提供字节流;网络接口通常围绕分组收发和网络协议栈工作。查漏

核心结论

块设备以块为单位并通常支持寻址;字符设备常提供字节流;网络接口通常围绕分组收发和网络协议栈工作。

条件与过程

设备物理属性与 OS 暴露的接口应区分;同样的 read 名字可能有不同阻塞和定位语义。

例子

磁盘适合按块定位,终端常顺序读字节,网络套接字还区分流式与数据报服务。

辨析边界

不能断言所有设备都支持 seek;网络接口不能只因为有字节数据就归为普通字符设备。

阻塞与非阻塞 I/O阻塞调用在无法满足条件时可令调用线程等待;非阻塞调用会及时返回当前可用结果或“暂不可用”状态。查漏

核心结论

阻塞调用在无法满足条件时可令调用线程等待;非阻塞调用会及时返回当前可用结果或“暂不可用”状态。

条件与过程

同步/异步关注操作完成及通知方式,阻塞/非阻塞关注调用等待行为,二者是不同维度;非阻塞常需轮询或就绪通知配合。

例子

非阻塞读在暂无数据时返回 EAGAIN 一类状态,并不代表已经完成所期待的数据传输。

辨析边界

非阻塞不等于异步,不等于无 CPU 成本;一次 read 也不必把请求字节数全部读满。

SPOOLing 与逻辑共享设备SPOOLing 使用磁盘上的输入/输出井和相关管理程序,把独占设备的申请转为对作业队列的访问。查漏

核心结论

SPOOLing 使用磁盘上的输入/输出井和相关管理程序,把独占设备的申请转为对作业队列的访问。

条件与过程

多个进程可提交请求,后台服务按序驱动物理设备;逻辑共享不代表物理设备同一时刻服务多个作业。

例子

多个用户同时提交打印作业,每个作业先排队,打印机一次仍实际打印一个作业流。

辨析边界

SPOOLing 不等于单一内存缓冲;“虚拟设备”不代表硬件凭空增加。

SSD 管理与机械磁盘的差异SSD 管理关注擦除块、页、映射、垃圾回收和磨损;机械磁盘管理还关注柱面寻道与旋转等待。查漏

核心结论

SSD 管理关注擦除块、页、映射、垃圾回收和磨损;机械磁盘管理还关注柱面寻道与旋转等待。

条件与过程

逻辑连续位置不保证在 SSD 上物理相邻;OS 的块层与 SSD 控制器各自管理不同抽象层次。

例子

频繁更新同一逻辑页,控制器可把新版本写到不同物理页以分散磨损。

辨析边界

SSD 仍有 I/O 调度和队列管理,但 SSTF 这类机械寻道优化的原有依据不再适用。

408 · NET

计算机网络

24 个考点

基础、物理与链路

协议三要素与协议/服务语法规定格式,语义规定字段和动作的意义,同步规定事件顺序及时间关系;协议约束对等实体,服务由下层向上层提供。查漏

核心结论

语法规定格式,语义规定字段和动作的意义,同步规定事件顺序及时间关系;协议约束对等实体,服务由下层向上层提供。

条件与过程

看选项在讲报文字段布局、收到后做什么,还是先后顺序/时序;同一过程可涉及多个方面,选择题看强调点。

例子

确认号字段占多少位偏语法;确认号表示已期望收到哪一字节偏语义;何时发确认、超时多久重发偏同步。

辨析边界

实现了某协议并不等于直接向应用暴露同名服务;协议是水平关系,服务是层间垂直关系。

物理层四类接口特性机械规定连接器外形与引脚等;电气规定电压、电流等;功能规定信号线用途;过程规定事件与操作顺序。查漏

核心结论

机械规定连接器外形与引脚等;电气规定电压、电流等;功能规定信号线用途;过程规定事件与操作顺序。

条件与过程

把“某根线表示什么”与“该线上电平取值”分开判断;过程特性也称规程特性。

例子

某引脚用作发送请求是功能;电平多少伏表示 1 是电气;先请求后应答是过程。

辨析边界

不能因为含“信号”二字就一律判电气,要看问的是物理数值、意义还是时序。

波特率、比特率与码元信息量波特率是每秒码元数;等概率 M 种码元时每码元可表示 log₂M 比特,理想映射下比特率=波特率×log₂M。查漏

核心结论

波特率是每秒码元数;等概率 M 种码元时每码元可表示 log₂M 比特,理想映射下比特率=波特率×log₂M。

条件与过程

带宽限制对应奈奎斯特,噪声限制对应香农;码元种类数与物理线路数不是同一概念。

例子

2400 Baud、每码元 16 种状态时,毛比特率为 9600 bit/s,未扣信道编码等开销。

辨析边界

不能把 Baud 与 bit/s 无条件等同;实际净数据率还可能受冗余和协议开销影响。

曼彻斯特与差分曼彻斯特曼彻斯特每位中间都有跳变,可提供时钟;差分曼彻斯特用位开始处是否跳变表示数据,并保留位中间跳变。查漏

核心结论

曼彻斯特每位中间都有跳变,可提供时钟;差分曼彻斯特用位开始处是否跳变表示数据,并保留位中间跳变。

条件与过程

曼彻斯特中跳变方向与 0/1 的对应约定可能不同,须看题设;差分曼彻斯特也要固定起始电平和编码约定。

例子

先标位边界与位中点,再画强制的中点跳变,最后按给定约定处理每位开始处。

辨析边界

图中电平翻转次数不等于数据 1 的个数;不能忽略首位之前的参考电平。

FDM、TDM、WDM、CDMFDM 按频带划分,TDM 按时隙,WDM 按光波长,CDM 用不同码序列区分用户。查漏

核心结论

FDM 按频带划分,TDM 按时隙,WDM 按光波长,CDM 用不同码序列区分用户。

条件与过程

同步 TDM 的固定时隙即使无数据也可能闲置;CDM 解码常对接收叠加信号与目标用户码做归一化内积。

例子

采用 ±1 码、正交码长 m 时,将接收向量与用户码点积再除 m,可提取该用户在理想同步下的符号。

辨析边界

不同用户码不只是“彼此不相同”,还需满足相应相关特性;码分正交结论有理想同步等条件。

虚电路与数据报虚电路先建立逻辑路径,沿途可维护映射;数据报一般携完整目的地址,每个分组独立选择下一跳。查漏

核心结论

虚电路先建立逻辑路径,沿途可维护映射;数据报一般携完整目的地址,每个分组独立选择下一跳。

条件与过程

虚电路标识通常局部有效并可逐跳改写;虚电路不同于为连接独占整个物理电路。

例子

交换机可将入端口上的 VCI 5 映射为另一出端口的 VCI 9,无须全网使用同一个编号。

辨析边界

不能仅凭面向连接就断言“必可靠”;可靠性还依赖相应协议机制。

组帧:字节填充与零比特填充字节填充以转义字节区分数据中的特殊字节;零比特填充在出现连续五个 1 后插入 0,避免伪造标志序列。查漏

核心结论

字节填充以转义字节区分数据中的特殊字节;零比特填充在出现连续五个 1 后插入 0,避免伪造标志序列。

条件与过程

零比特填充的处理对象是数据/相关帧字段,不把边界标志也递归填充;接收端按规则去掉填充。

例子

原数据 111111 经填充成为 1111101,即五个 1 后加 0,再继续处理剩余的 1。

辨析边界

填充位不算原始有效载荷;连续 1 的计数规则不能误写成连续六个 1 后再填。

海明距离与检错/纠错最小码距 dmin 的码可保证检出至多 dmin−1 位错,纠正至多 ⌊(dmin−1)/2⌋ 位错。查漏

核心结论

最小码距 dmin 的码可保证检出至多 dmin−1 位错,纠正至多 ⌊(dmin−1)/2⌋ 位错。

条件与过程

若要同时纠正 t 位并保证检出额外 s 位,可按具体要求利用码距界判断;普通海明码与扩展海明码能力不同。

例子

dmin=4 可保证检测 3 位错,或纠正 1 位错;不能因此说能纠正 3 位错。

辨析边界

检错和纠错能力不是同一个数;海明校验位数量条件 2ʳ≥m+r+1 对应单错纠正编码的基本构造。

GBN 与 SR 的窗口限制m 位序号,经典 GBN 接收窗口为 1,发送窗口≤2ᵐ−1;经典 SR 收发窗口相等时窗口≤2ᵐ⁻¹。查漏

核心结论

m 位序号,经典 GBN 接收窗口为 1,发送窗口≤2ᵐ−1;经典 SR 收发窗口相等时窗口≤2ᵐ⁻¹。

条件与过程

SR 接收可缓存窗口内乱序分组,只选择性重传;GBN 常丢弃失序分组,超时后重传一段未确认分组。

例子

3 位序号:GBN 最大常用发送窗口 7;SR 等大窗口最大 4。

辨析边界

不等大 SR 窗口可按 Ws+Wr≤2ᵐ 判断,不能把等大窗口的上界直接用于所有变式。

令牌传递协议只有持有令牌的站点可以按规则占用共享信道,令牌传递提供受控的发送机会。查漏

核心结论

只有持有令牌的站点可以按规则占用共享信道,令牌传递提供受控的发送机会。

条件与过程

令牌是控制信息;需处理令牌丢失、重复、持有时间和站点失效等问题。拓扑的逻辑环与物理布线未必相同。

例子

某站无数据时可很快转发令牌;有数据也通常只能在允许的持有时间内发送。

辨析边界

无争用发送不等于没有控制开销,更不保证任意负载下等待时间为零。

PPP 的组帧、控制与 ARPPPP 用于点到点链路,包括封装、LCP 和网络层配置相关 NCP;常规 PPP 通过 FCS 检错,不提供可靠重传机制。查漏

核心结论

PPP 用于点到点链路,包括封装、LCP 和网络层配置相关 NCP;常规 PPP 通过 FCS 检错,不提供可靠重传机制。

条件与过程

异步链路常采用字节填充,同步链路可用比特填充;链路只有两个端点,不需以太网式 ARP 来寻找下一跳 MAC。

例子

IP 分组经 PPP 封装给唯一对端;不需要先广播“谁有这个 IP”的 ARP 请求。

辨析边界

不使用 ARP 不意味着链路不需任何配置;PPP 有地址字段也不能据此认为存在以太网 MAC 地址解析过程。

VLAN 与 802.1QVLAN 划分二层广播域,跨 VLAN 通信通常需要三层转发。802.1Q 在常见以太帧中加入 4 B 标签。查漏

核心结论

VLAN 划分二层广播域,跨 VLAN 通信通常需要三层转发。802.1Q 在常见以太帧中加入 4 B 标签。

条件与过程

标签含 TPID、优先级等以及 12 位 VID;VID 0 和 4095 有特殊/保留含义,不能全部当普通 VLAN 使用。

例子

同一交换机的两个端口属于不同 VLAN,广播通常不会直接在两个 VLAN 间传播;Trunk 可承载多个 VLAN。

辨析边界

标签使帧长度增加但不等于 IP 首部增加 4 B;Access/Trunk 的具体无标签处理按配置与题设。

网络、传输与应用

SDN 控制平面与数据平面控制平面决定转发规则,数据平面按规则处理分组;SDN 强调两者分离以及可编程控制。查漏

核心结论

控制平面决定转发规则,数据平面按规则处理分组;SDN 强调两者分离以及可编程控制。

条件与过程

控制器通常逻辑集中,物理实现可分布;交换设备仍能依据已有流表本地转发。

例子

新流无匹配规则时可向控制器请求决策,规则下发后后续分组直接按流表转发。

辨析边界

不能说每个分组都一定先送到控制器,也不能把逻辑集中理解成只允许一台物理服务器。

IPv4 首部校验和与复用分用IPv4 首部校验和只覆盖 IPv4 首部,包括选项,不覆盖 IP 数据部分;TTL 等首部变化时需相应更新。查漏

核心结论

IPv4 首部校验和只覆盖 IPv4 首部,包括选项,不覆盖 IP 数据部分;TTL 等首部变化时需相应更新。

条件与过程

IPv4 的 Protocol 字段识别上层协议,可向 TCP/UDP 等分用;端口号则进一步区分传输层端点。

例子

路由器转发使 TTL 减 1,因此校验和需随之调整;TCP 校验和覆盖 TCP 首部、数据并纳入伪首部。

辨析边界

IP 不校验载荷不等于 TCP/UDP 不校验数据;不能把 IP 的协议号与 TCP 端口号混为一谈。

IPv6 基本首部、扩展首部与载荷长度IPv6 基本首部固定 40 B,没有 IPv4 式首部校验和;Next Header 串联扩展首部或指向上层协议。查漏

核心结论

IPv6 基本首部固定 40 B,没有 IPv4 式首部校验和;Next Header 串联扩展首部或指向上层协议。

条件与过程

普通 IPv6 Payload Length 包含扩展首部和上层数据,不含 40 B 基本首部;扩展首部长度因类型而异,分片首部固定 8 B。

例子

有效载荷长度 1200 B,其中扩展首部共 16 B,则其后上层部分为 1184 B,总 IPv6 包长为 1240 B。

辨析边界

不能说所有扩展首部都是 8 B;分片通常由源端做,路由器不会像 IPv4 那样替源端进行分片。巨型载荷选项另有规则。

IP 组播与分组复制主机通过组成员管理协议表达接收意愿;组播路由依据组播转发状态,在分叉点向所需出接口复制。查漏

核心结论

主机通过组成员管理协议表达接收意愿;组播路由依据组播转发状态,在分叉点向所需出接口复制。

条件与过程

IPv4 本地成员关系常用 IGMP;跨路由器的组播树由组播路由协议等维护;转发表可按 (*,G) 或 (S,G) 组织。

例子

某组在出接口 1、3 下游有接收者,路由器仅向这两条接口转发副本,并按相应反向路径检查等规则防环。

辨析边界

不能说路由器向所有端口复制,也不能只靠普通单播路由表完成所有组播决策;IGMP 不负责全网组播选路。

移动 IPv4 的通信过程移动结点保留归属地址,离开归属网络后取得转交地址并向归属代理登记;归属代理可把发往归属地址的包隧道转交。查漏

核心结论

移动结点保留归属地址,离开归属网络后取得转交地址并向归属代理登记;归属代理可把发往归属地址的包隧道转交。

条件与过程

传统模型可用外地代理转交地址或同址转交地址;回程可能直接发往通信对端,也可能采用反向隧道。

例子

对端→归属网络→归属代理封装→转交地址→移动结点;这体现可能出现的三角路由。

辨析边界

移动 IPv4 的外地代理不是移动 IPv6 的无条件必备组件;不要混合两个版本的流程。

UDP 伪首部与全 0/全 1UDP 校验覆盖伪首部、UDP 首部及数据;奇数字节时计算末尾补零,补零不作为实际数据发送。查漏

核心结论

UDP 校验覆盖伪首部、UDP 首部及数据;奇数字节时计算末尾补零,补零不作为实际数据发送。

条件与过程

伪首部提供源/目的 IP、协议号和 UDP 长度等信息,不是 UDP 实际首部字段。IPv4 中首部校验和全 0 表示未使用校验。

例子

若求和取反后校验值恰为 0x0000,发送时用 0xFFFF 表示;若计算所得本来就是 0xFFFF,也可以发送全 1。

辨析边界

不能说“UDP 校验和不可能全 1”;IPv6 中 UDP 校验和通常必须使用,特定隧道例外不应推广成一般规则。

TCP 四类计时器重传计时器用于确认迟迟未到的重传;持续计时器解决零窗口后窗口更新丢失;保活检测长期空闲连接;TIME-WAIT 维持相应等待状态。查漏

核心结论

重传计时器用于确认迟迟未到的重传;持续计时器解决零窗口后窗口更新丢失;保活检测长期空闲连接;TIME-WAIT 维持相应等待状态。

条件与过程

零窗口探测关注接收窗口恢复;保活并非所有连接必须开启。教材 TIME-WAIT 常按 2MSL 讨论。

例子

接收方从零窗口恢复后发出的窗口更新丢失,发送方通过持续计时器触发探测,避免一直互等。

辨析边界

持续计时器不是拥塞超时,保活不是重传计时器;不能把四者的触发条件和目的互换。

TCP URG 与紧急指针URG=1 表示紧急指针字段有意义,用于标记 TCP 字节流中的紧急数据边界相关位置。查漏

核心结论

URG=1 表示紧急指针字段有意义,用于标记 TCP 字节流中的紧急数据边界相关位置。

条件与过程

紧急指针是相对本报文段序号的偏移;边界细节存在历史实现差异,考题按给定教材/协议约定处理。

例子

URG 与 PSH 不同:前者标记紧急机制,后者提示尽快把已接收数据交给应用。

辨析边界

紧急数据仍属于同一 TCP 字节流,不是建立了第二条独立传输连接,也不保证绕过网络拥塞立刻送达。

DNS 递归与迭代递归查询要求被询问者代为取得最终答案或报告错误;迭代查询可返回下一步应询问的服务器信息。查漏

核心结论

递归查询要求被询问者代为取得最终答案或报告错误;迭代查询可返回下一步应询问的服务器信息。

条件与过程

主机到本地递归解析器常用递归;解析器向根、顶级域、权威服务器常用迭代并利用缓存。传统 DNS 常用 UDP 53,也使用 TCP 53。

例子

解析器先问根得到顶级域服务器线索,再逐级查询,得到权威答案后缓存并回复客户端。

辨析边界

不能说 DNS 只用 UDP;缓存命中时不必重新走完整根到权威路径。

FTP 控制连接与数据连接传统 FTP 服务器控制端口是 TCP 21;数据连接端口依主动/被动模式和配置而定。查漏

核心结论

传统 FTP 服务器控制端口是 TCP 21;数据连接端口依主动/被动模式和配置而定。

条件与过程

经典主动模式服务器常从 TCP 20 发起数据连接;被动模式客户端连接服务器协商出的数据监听端口。

例子

客户端发 PASV 后获得服务器选定端口,再主动连接该端口用于传文件,控制连接仍独立存在。

辨析边界

数据端口不是永远 20;21 是默认控制端口,服务也可配置其他端口。“始终为 21”不能脱离题设说。

SMTP、POP3、MIME 的分工SMTP 用于提交/转发邮件;POP3 用于从邮箱服务器取信;MIME 描述非 ASCII 内容、多媒体及多部分邮件的编码格式。查漏

核心结论

SMTP 用于提交/转发邮件;POP3 用于从邮箱服务器取信;MIME 描述非 ASCII 内容、多媒体及多部分邮件的编码格式。

条件与过程

发送人与接收人使用同一邮件系统时,可直接本地投递,无须一定再经过服务器间 SMTP;用户代理到服务器的提交仍需相应机制。

例子

带附件的邮件借 MIME 描述内容类型与编码,再经 SMTP 传输;MIME 本身不是负责在两台主机间运送邮件的传输协议。

辨析边界

POP3 不负责发送邮件,MIME 不等于邮件加密;邮件服务器与用户代理的角色应分开。

HTTP 持续连接、Cookie 与条件请求持续连接复用连接传多个请求/响应;Cookie 随后按域、路径等匹配规则由浏览器携带;条件请求可验证缓存是否仍有效。查漏

核心结论

持续连接复用连接传多个请求/响应;Cookie 随后按域、路径等匹配规则由浏览器携带;条件请求可验证缓存是否仍有效。

条件与过程

服务器通过 Set-Cookie 设置浏览器状态;服务端可将 Cookie 标识映射到会话,也可采用签名等无独立会话表的设计。ETag/Last-Modified 用于缓存验证。

例子

客户端带 If-None-Match,资源未变时服务器可回 304,客户端复用缓存正文。

辨析边界

Cookie 并不要求服务器必有一条对应记录;304 通常没有该资源的完整响应正文;持续连接不等于请求天然并行。

辨析方法

定义 → 条件 → 过程 → 区别

操作系统五组易混概念
概念判断边界
缺页/地址越界缺页:地址合法但页面暂不在内存;越界:地址不属于允许访问的范围。权限错误又是另一种保护问题。
中断/进程切换处理完中断可返回原任务;是否调度和切换,取决于就绪状态、优先级和调度时机。
硬链接/软链接硬链接与原名共享 inode,软链接保存路径且有自己的 inode。
缓冲/缓存缓冲侧重协调传输单位与速度,缓存侧重复用已有副本以减少访问;实际机制可兼具两种作用。
物理/逻辑格式化前者建立介质的底层组织,后者建立文件系统;分区划分逻辑区域,三者分开判断。

遇到“总是”“一定”“仅”“必须”,先检查实现模型、指令语义、接口约定与适用范围。能用一个反例推翻绝对说法,比只背结论更可靠。

建议依次排查操作系统文件与 I/O、网络协议细节、计组硬件控制、数据结构特殊存储。保留 Cache、PV、分页计算和算法设计的主线复习时间。

结合各卡片的例子反查概念,再尝试改变题设中的一个条件,判断原结论是否仍成立。