易错易混与冷门考点
211 个知识点,按 408 四科章节整理。含个人错题、易错易混、冷门细节、记忆公式与结构图;复杂计算放在独立专项。
211 个知识点,按 408 四科章节整理。含个人错题、易错易混、冷门细节、记忆公式与结构图;复杂计算放在独立专项。
共 211 条,按科目与章节分类。点击知识点展开解析。
复习标记只保存在当前浏览器;重置筛选不会清除标记。
没有匹配内容。试试减少关键词或重置筛选。
50 条 · 7 个章节
补充知识点
L != NULL 就代表表中有元素。
带头结点:L 存在时,L->next == NULL 表示空表;不带头结点:L == NULL 表示空表。
头结点不存放有效数据。计算表长、遍历和删除时,起点必须与题设一致;若允许 L 本身为空,还要先做空指针保护。
带头结点的空表仍有一个头结点,但有效元素个数为 0。
从 L->next 开始,只计数据结点。
补充知识点
改完 p->next 后,还能沿原链继续遍历。
覆盖链接前先保存旧后继;free 后不能再读取该结点。
逆置和删除都会改变链路。先保存 next = p->next,再改链接或释放 p,最后用 next 继续。
头插逆置中若先令 p->next = L->next,再用 p = p->next,会回到新链而不是原链。
相关真题:2024 · 第 1 题
不能;应在释放前保存后继。
补充知识点
front == rear 一定能同时判断空和满。
牺牲一格:空为 front == rear,满为 (rear+1)%M == front;计数器法用 count 区分。
不同约定不能混用。牺牲一格的数组长度 M 只能存 M−1 个元素;rear 通常指向下一插入位置。
M=5 的牺牲一格循环队列,最大有效容量为 4。
(rear-front+M)%M。
补充知识点
栈里只记括号数量,左右数量相等就说明匹配。
必须同时检查嵌套顺序与括号种类;右括号应与栈顶左括号配对。后缀求值要区分弹栈顺序。
扫描左括号入栈,右括号时栈空或类型不符则失败;扫描结束栈须空。后缀二元运算第一次弹出的是右操作数。
([)] 数量相等但嵌套不合法;后缀 a b − 的运算是 a−b。
相关真题:2025 · 第 2 题
括号匹配栈的最大深度由扫描时同时未匹配的左括号数决定。
408 章节补全
顺序表既然能随机访问,任意位置插入删除也都是 O(1)。
按下标访问 O(1);一般位置插入或删除需移动后续元素,最坏和常见平均为 O(n)。按值查找无序表通常 O(n)。
尾插在容量足够时可 O(1),扩容会产生额外开销。只给下标与只给值的操作成本不同;复杂度必须包含定位。
长度 n 的表头插入,需要把原有 n 个元素后移。
不需要;但删除一般中间位置需移动后续元素。
408 章节补全
双向链表插入只改前驱的 next;循环链表遇 NULL 结束。
双向插入需维护双方的前后链接;循环链表通常回到头结点或起点时停止,不能照搬 NULL 终止。
典型 p 后插 q:q->next=p->next,q->prior=p,再更新旧后继 prior 和 p->next。带/不带头结点及空表不同,单独处理边界。
有头结点的双向循环空表可令 head->next=head->prior=head。
不够,还需维护后继的 prior;并处理题设中的边界结点。
近期代码批改:中序遍历与加括号条件
左孩子为空或右孩子为空,就决定是否输出括号。
空结点返回;叶子输出操作数;非根的非叶结点通常在整个子表达式外加一对括号。
根可省最外层括号;括号必须在左递归前打开、右递归后关闭。若题设含一元运算符,应按其孩子约定处理,不能把“仅有右孩子”误当叶子。
a+b 的子树应输出 (a+b),而不是 (a)+(b)。根是乘号时,可输出 (a+b)*c。
typedef struct Node {
char data;
struct Node *left, *right;
} Node;
void printExpr(const Node *p, int isRoot) {
if (p == NULL) return;
int nonLeaf = p->left != NULL || p->right != NULL;
if (!isRoot && nonLeaf) putchar('(');
printExpr(p->left, 0);
putchar(p->data);
printExpr(p->right, 0);
if (!isRoot && nonLeaf) putchar(')');
}
/* #include <stdio.h>;调用 printExpr(root, 1)。
本例结点 data 为单字符,二元或右孩子承载的一元表达式。 */p 非空且 (p->left != NULL || p->right != NULL)。
近期批改:树高与最少结点公式的变量约定
所有高度为 h 的二叉树都有 2^h−1 个结点。
规定根为第 1 层:普通二叉树最少 h 个、最多 2^h−1 个;AVL 最少结点满足 N(h)=N(h−1)+N(h−2)+1。
AVL 的左右子树高度差至多 1。最少结点时取高度 h−1 与 h−2;N(0)=0、N(1)=1。B 树或红黑树不能直接套此式。
h=3 时普通二叉树可只有 3 个结点,AVL 至少 4 个,满二叉树有 7 个。
树的类型、高度从 0 还是 1 开始,以及是否含外部结点。
补充知识点
二叉排序树查找总是 O(log n)。
二叉排序树的查找复杂度为 O(h);退化成链时为 O(n),平衡树才把高度控制在 O(log n)。
中序有序是键值约束,不是高度约束。插入有序序列到普通 BST 可以产生单链。
依次插入 1、2、3、4 到普通 BST,可能形成全右链。
相关真题:2024 · 第 7 题
不能,仍取决于高度。
补充知识点
所有 left/right 指针都可以递归访问。
先看 ltag/rtag:孩子才递归,线索指向指定遍历序列的前驱或后继。
常用约定 tag=0 为孩子、tag=1 为线索,但要以题设为准。把线索当孩子可形成重复访问或环。
中序线索树中,右线索可以直接指向中序后继;右孩子则要找其子树的最左结点。
不能,递归前须检查标志位。
补充知识点
B+ 树的内部结点也用于终止记录查找。
典型 B+ 树的记录或记录指针位于叶结点,内部结点用于索引;B 树可以在内部结点查找成功。
B+ 树叶结点按键值链接,便于范围扫描。m 阶的键数/孩子数约定需看题目,尤其根的下限。
查一个很靠近根索引键的记录,B+ 树仍需走到叶结点。
相关真题:2022 · 第 8 题;2025 · 第 8 题
典型 B+ 树,利用叶结点链。
补充知识点
权值相同就只能得到同一个编码;编码长度完全相等。
哈夫曼算法构造最小带权路径长度的前缀编码树;左右次序和同权选择可产生不同的最优编码。
n 个叶结点的二叉哈夫曼树(n>1)有 2n−1 个结点,不含度为 1 的结点。前缀性允许无需分隔符逐字解码。
交换某结点左右子树可改变码字,但不改变对应路径长度与 WPL。
相关真题:2022 · 第 5 题;2025 · 第 5 题
不意味着,具体码字可不同。
408 记忆与概念补充
高度公式中的 n 是结点数;m 是最少孩子数。
非空 m 阶 B 树(m≥3),m 为最大孩子数;n 为关键字总数,h 为含关键字结点的层数,根为第 1 层,a=⌈m/2⌉。
同一高度下,填满得到最大关键字数,稀疏得到最小关键字数。由两端反解 h,并按整数高度取整。空的失败结点不计入 h;空树另行约定。
m=5、h=3:最少 2×3²−1=17 个关键字,最多 5³−1=124 个。n=17 时只能 h=2 或 3;不是唯一高度。
| 记忆项 | 公式(上述约定) |
|---|---|
| 最少关键字数 | n_min(h)=2a^(h−1)−1 |
| 最多关键字数 | n_max(h)=m^h−1 |
| 整数高度下界 | h≥⌈log_m(n+1)⌉ |
| 整数高度上界 | h≤⌊1+log_a((n+1)/2)⌋ |
不能;下界为 2,上界为 3,必须结合实际结构。
408 记忆与概念补充
根与所有非根结点都至少有 ⌈m/2⌉ 个实际孩子。
非根结点关键字数在 a−1~m−1;非叶根至少 2 个孩子、至少 1 个关键字。叶结点没有实际孩子,但仍受关键字数约束。
内部结点有 k 个关键字就有 k+1 个实际孩子。仅含根的非空树有 1~m−1 个关键字;不能把“非根内部孩子下限”机械套给根或数据叶结点。
5 阶 B 树的非根结点至少 2 个关键字;非叶根可以只有 1 个关键字、2 个孩子。
不正确;这里叶是含关键字的终端结点,不含失败结点。
408 记忆与概念补充
所有树都满足叶结点数等于度为 2 的结点数加 1。
任何非空二叉树满足 n₀=n₂+1;n₁ 不影响这个等式。
n=n₀+n₁+n₂;边数 n−1=n₁+2n₂,联立得到结论。适用于普通二叉树,不要求满或完全;一般多叉树另有关系。
只有一条长度 4 的单链:n₀=1、n₂=0,仍满足。
8 个。
408 记忆与概念补充
完全二叉树必须每层都满,叶子编号总从 n/2 开始。
n≥1、根为第 1 层:高度 h=⌊log₂n⌋+1;用 1 起始编号,父结点 ⌊i/2⌋,孩子编号为 2i、2i+1(须≤n)。
完全二叉树最后一层可不满但从左连续排列;最后一个非叶结点编号 ⌊n/2⌋,叶从 ⌊n/2⌋+1 开始。0 起始数组需改为 2i+1、2i+2。
n=6:高度 3,叶编号为 4、5、6;结点 3 只有左孩子 6。
不允许,应有左孩子 6,不应有右孩子 7。
408 记忆与概念补充
红结点的两个孩子可以有一个红结点;高度等于黑高。
红结点的孩子必须为黑;每条到 NIL 叶的路径黑结点数一致。红黑树最长根到叶路径不超过最短路径的两倍。
相邻红结点被禁止,所以红结点数量受黑结点间隔限制。黑高是否计入当前根和 NIL 需按题设,不能直接把不同教材的数字相加。
同一条路径可穿插红结点,但不能出现红→红。
不能,先统一黑高、实际高度和外部叶的计数约定。
408 记忆与概念补充
WPL 是所有结点的权值与深度乘积之和。
WPL=Σ(叶权×根到叶边数);也等于构造过程中每次合并产生的内部结点权值之和。
每次合并使对应子树中的叶子深度增加 1,所以它们的权之和贡献一次。根深度取 0,不能按根为第 1 层的层号直接相乘。
叶权 1、2、3:先合并 1+2=3,再合并 3+3=6,WPL=3+6=9。
0;单字符编码人为设 1 位是另一种编码约定。
408 章节补全
先序加后序能唯一确定任何二叉树。
关键字互异时,先序+中序或后序+中序可唯一恢复二叉树;先序+后序一般不能。
先序首元素/后序末元素确定根,中序根位置分左右子树。重复标签可能破坏唯一性;只有一个孩子时先后序不能分辨它在左还是右。
两个结点 a→b,b 为左孩子或右孩子,先序都是 ab,后序都是 ba。
可以逐步选出各子树层序最先出现的根;仅中序本身不够。
408 章节补全
树转成二叉树后,二叉树的右孩子仍是原树的孩子。
左指针指原树的第一个孩子,右指针指原树的下一个兄弟;森林各根也通过右兄弟链连接。
转换保留的是孩子和兄弟关系,二叉树中的度和原树的度不同。原树的先根遍历对应转换后二叉树的先序;原树后根对应中序(按常见约定)。
原树根有 3 个孩子,可表示成首孩子和连续右兄弟链,不要求二叉根有 3 个指针。
能,右孩子可能是它的兄弟,因此原树叶和二叉树叶不能等同。
408 章节补全
LL 型意味着向左旋,RR 型意味着向右旋。
LL 用右旋,RR 用左旋,LR 先左旋子树再右旋,RL 先右旋子树再左旋。
名称描述从最低失衡祖先出发经过的两段方向,不是最终旋转方向。旋转只改局部指针,需保持中序顺序;删除可能需要向上继续调整。
依次插入 3、2、1,根 3 为 LL 失衡,对 3 右旋使 2 成为局部根。
不是,先对左子树左旋,再对失衡根右旋。
408 章节补全
并查集的父指针表示图中实际的一条边;按秩等于总按编号。
并查集维护不相交集合,find 返回代表,union 合并集合;按秩/按大小控制树高,路径压缩缩短 find 路径。
根表示集合代表,不一定是某种数值最小顶点。优化后的摊还复杂度近似常数,但不能把任意一次未压缩查找都宣称严格 O(1)。
Kruskal 中边两端已属同一集合,加入该边会形成环,可跳过。
该元素当前所在集合的代表结点。
408 章节补全
任意 m 叉树每个非叶结点都恰有 m 个孩子,也满足 B 树高度界。
树 n 个结点有 n−1 条边;结点孩子数之和为 n−1。一般 m 叉树只限制最多 m 个孩子,不保证半满与叶层一致。
若所有非叶恰为 m 个孩子,则 n=mI+1、叶数 L=(m−1)I+1,I 为非叶数;无此条件不能套。B 树关键字数与树结点数仍是不同量。
一棵普通三叉树可以是一条长链,因此高度可为 n,不能套 B 树的对数高度界。
不是,树结点度常指孩子数,无向图度计关联边。
补充知识点
BFS 能求任意带权图最短路。
BFS 保证边数最少;边权相同且非负时,也能给出权值最短路。一般非负带权图用 Dijkstra。
BFS 按层扩展而不比较累计权值。标记通常应在入队时完成,防止同一顶点重复入队。
一条直接边权 10,两条间接边各权 1:BFS 边数最少路径的权值却为 10。
相关真题:2025 · 第 6 题
首次发现并入队时。
补充知识点
两种算法都不能有负边。
Dijkstra 要求非负边权;Floyd 可处理负边,但不能直接以存在负权回路的结果作为有限最短路。
Dijkstra 的已确定最短距离可能被后来负边推翻。Floyd 的 k 必须作为最外层,表示允许的中间顶点集合。
含负边且无负环的图可以使用 Floyd;不能只因负边就判它失效。
中间顶点 k。
补充知识点
最小生成树保证根到每点距离最短。
MST 最小化整棵树边权总和;最短路径树保证给定源到各点的路径最短。
两种优化目标不同。Prim/Kruskal 用于无向带权图;非连通图得到最小生成森林。负权不会破坏 MST 的适用性。
三角形边 AB=2、BC=2、AC=3:MST 可选 AB、BC,但 A 到 C 路径为 4,比直接边 3 长。
可以。
补充知识点
拓扑序唯一才说明没有环;关键活动只有一条链。
DAG 可有多种拓扑序;删去顶点数不足总数说明有环。AOE 网中 e=l 的活动为关键活动。
关键路径可能有多条。只缩短一条关键路径上的某活动,未必缩短总工期;延长任一关键活动则可能延长工期。
两个独立顶点可以任意先后,拓扑序不唯一,但图无环。
相关真题:2022 · 第 7 题;2025 · 第 6 题
不一定,其他关键路径可能仍决定工期。
408 记忆与概念补充
有向图所有顶点的出度和等于 2|E|。
无向图度数和=2|E|;有向图入度和=出度和=|E|。树有 n 个顶点时边数为 n−1。
一条无向边贡献两个端点的度;一条有向边贡献起点出度与终点入度各一次。允许自环时无向自环计度 2,简单图通常不含自环。
有向图有 6 条边,所有顶点出度之和为 6,不是 12。
是;只给边数 n−1 而不保证连通则不能这样判断。
408 章节补全
邻接表每个无向边只出现一次;十字链表用于无向图。
邻接矩阵占 O(V²),邻接表占 O(V+E);无向邻接表常每边存两次。十字链表用于有向图,邻接多重表用于无向图。
无向邻接矩阵通常对称;有向邻接表可方便找出边,入边可用逆邻接表;十字链表把入/出链接汇于同一边结点。
有向矩阵按 A[i][j] 表示 i→j,则第 i 行关联出边、第 i 列关联入边。
不总是;允许权 0 时需另用无边标记,通常还要处理对角线。
408 章节补全
从一个起点 DFS 后,所有图的顶点都已访问。
非连通图需外层循环从未访问顶点继续。邻接表遍历 O(V+E),矩阵通常 O(V²)。
DFS 栈/递归与 BFS 队列的最大空间通常 O(V)。访问标记不能在每个新起点前清空,否则可能重复;BFS 通常在入队时标记。
一个图有两个互不相连的三角形,从第一个三角形出发无法到达另一分量。
不一定,可用显式栈实现,但要维护正确的访问与推进顺序。
408 章节补全
DFS 遇到已访问顶点就说明所有图有环;单向可达就是强连通。
无向连通要求任意两点有路径;有向强连通要求互相可达。无向 DFS 应排除父边;有向环常看指向递归栈中顶点的边。
有向图已访问的顶点可能已完成,单纯 visited 无法区分回边。无向图需考虑边模型,含重边时不能仅按顶点父亲排除所有同向连接。
DAG 的两个分支汇合到同一已访问点,并不意味着存在环。
不能。
408 章节补全
Prim 每轮选全图最小未选边,Kruskal 每轮选最近顶点。
Prim 在当前树与外部之间选最轻跨边;Kruskal 按全局边权排序,加入不成环的边。
朴素矩阵 Prim 为 O(V²),邻接表+堆常为 O(E log V);Kruskal 主要排序 O(E log E)。边权重复可能产生多个同权 MST,不代表不存在解。
Prim 不能选两端都在树外的全局最轻边来扩展当前树。
并查集。
近期算法批改:分区、返回值、递归终止与额外空间
划分后还递归处理包含已归位枢轴的同一区间。
若划分返回已归位的下标 p,递归 [low,p−1] 与 [p+1,high],并以 low>=high 终止。
划分方案有不同返回约定,Hoare 分割点不一定是枢轴最终位置,不能混套区间。必须保存枢轴值并保证扫描前进。
长度为 1 或全相等数组是必须检查的边界;不缩小区间可能无限递归。
相关真题:2022 · 第 11 题;2024 · 第 8 题
int partition(int a[], int low, int high) {
int pivot = a[low];
while (low < high) {
while (low < high && a[high] >= pivot) --high;
a[low] = a[high];
while (low < high && a[low] <= pivot) ++low;
a[high] = a[low];
}
a[low] = pivot;
return low;
}
void quickSort(int a[], int low, int high) {
if (low >= high) return;
int p = partition(a, low, high);
quickSort(a, low, p - 1);
quickSort(a, p + 1, high);
}
/* 调用 quickSort(a, 0, n-1)。
此首元素枢轴实现平均 O(n log n),最坏 O(n²);
递归栈平均 O(log n),最坏 O(n)。 */这种约定下不应保留;两侧排除 p。
补充知识点
稳定表示运行时间稳定,或所有归并写法都稳定。
稳定表示相等关键字的记录保持原相对次序;归并相等时应先取左段,直接插入不跨越相等记录。
常见稳定:直接插入、冒泡、归并、LSD 基数;常见不稳定:希尔、简单选择、堆、快排。稳定性受实现影响。
两条记录键都为 5,分别附带 a、b;排序后 a 仍在 b 前才保持该对稳定。
相关真题:2022 · 第 11 题
可能破坏稳定性。
补充知识点
建堆每个结点都 O(log n),所以必为 O(n log n)。
自底向上建堆总时间 O(n);逐个插入建堆最坏 O(n log n);堆排序整体 O(n log n)。
自底向上建堆中,多数结点接近叶子,调整高度很小。不能把所有结点都按根的高度估计为紧确界。
堆只保证父子大小关系,中序遍历并不有序。
相关真题:2024 · 第 9 题
不保证。
补充知识点
只要元素有序,链表折半查找也有 O(log n) 时间。
数组支持 O(1) 随机访问;链表定位中点需遍历。分块查找只要求块间有序、块内可无序。
折半减少比较次数不等于减少定位时间。分块索引可折半,但块内通常顺序查找。
链表不断找中点,不能直接宣称总时间 O(log n)。
相关真题:2024 · 第 5 题;2025 · 第 7 题
不要求,必须保证块间有序。
补充知识点
不同教材的 next 数组可以不转换直接混用;失配时主串指针回退。
next/nextval 的值取决于从 0/1 开始及失配时更新约定;KMP 通常保持主串指针前进,只调整模式位置。
nextval 在回退后字符仍相等时继续跳转,减少重复比较;不能把最长相等前后缀长度直接当所有版本的 next 下标。
先写清 i、j 的初值和 j=next[j] 的含义,再推数组;避免差 1。
相关真题:2024 · 第 6 题
预处理加匹配为 O(n+m),n 为主串长、m 为模式长。
补充知识点
败者树根结点总保存当前最大记录;增大归并路数只减少比较次数。
升序多路归并选当前最小记录;败者树内部保存比较败者,专门的冠军位置通常保存获胜归并段编号。
结构图的根与额外冠军结点须按题设区分。提高归并路数减少归并趟数和外存 I/O,但比较及缓冲区开销也要考虑。
置换选择生成的初始归并段可长于工作区容量,不应按固定块数机械分段。
相关真题:2024 · 第 11 题
k 个有序归并段,每个段可以包含很多记录。
408 记忆与概念补充
删除散列表元素后立即把槽设成从未使用的空槽。
开放定址删除通常保留删除标记,查找遇删除标记继续探测;遇从未使用的空槽才可在对应规则下判失败。
冲突记录可能被探测到后面的槽,清成空槽会截断探测链。插入可利用删除槽,但必须保证查重和停止规则正确;链地址法删除是另一机制。
关键字 A、B 冲突,B 存在 A 后面;删 A 后若查找立即停止,可能漏掉 B。
不表示,应继续探测。
408 章节补全
删掉有两孩子的结点,直接用左孩子顶上且丢掉右子树。
有两子树时,常用中序前驱或后继替代键,再在对应原位置删除该结点;需保留 BST 有序性和链接。
前驱是左子树最大值,后继是右子树最小值,它们在原位置至多有一个孩子,便于链接修复。键值与附带记录应一起处理。
用右子树最小结点替代后,其原父结点应接上该结点可能存在的右孩子。
不等同,应沿左子树最右路径寻找。
408 章节补全
ASL 是最长查找次数,成功和失败有相同平均值。
ASL=Σ(查找概率×比较次数)。成功按实际元素计,失败按间隙或不可达范围计,需看判定树与概率。
有序顺序查找遇更大的元素可提前失败;折半查找的失败叶/间隙也有不同路径长度。不能未说明均匀概率就直接平均。
某元素概率高而位置靠后,会显著提高顺序查找 ASL。
不能,那是最坏情况指标,平均应加权。
408 章节补全
散列地址不同就永远不会冲突;二次探测必遍历所有槽。
同义词初始散列地址相同;开放定址中的后续冲突也可能发生在非同义词间。α=元素数/散列表槽数反映装填程度。
性能还依赖散列函数与冲突处理。线性探测可在未满时按完整步进找到空位,但可能聚集;二次探测能否覆盖全部槽取决于表长和探测规则。
一个被冲突挤到槽 4 的记录,可以与初始散列地址为 4 的另一记录发生冲突。
不同,前者沿探测序列,后者在桶链中查找。
408 章节补全
O(n log n) 的排序都稳定;归并和快排的空间都 O(1)。
按具体算法和实现判断,时间、辅助空间和稳定性是三类指标,不能互相推出。
直接插入/冒泡对已排序输入可为 O(n)(冒泡须设置早停);简单选择通常始终 Θ(n²)。递归栈算空间;LSD 基数的每趟分配/收集需稳定。
比较排序最坏时间下界 Ω(n log n) 不适用于利用键位数的基数排序。
| 算法 | 平均 / 最坏时间 | 典型辅助空间 | 通常稳定 |
|---|---|---|---|
| 直接插入/冒泡 | O(n²) / O(n²) | O(1) | 是 |
| 简单选择 | O(n²) / O(n²) | O(1) | 否 |
| 希尔 | 依增量序列而变 | O(1) | 否 |
| 快排 | O(n log n) / O(n²) | 栈平均 O(log n),最坏 O(n) | 否 |
| 堆排序 | O(n log n) / O(n log n) | O(1) | 否 |
| 二路归并 | O(n log n) / O(n log n) | O(n) | 相等先取左时是 |
| LSD 基数 | O(d(n+r)) | O(n+r) | 每趟稳定时是 |
常见交换实现移动次数 O(n),比较次数 Θ(n²)。
408 章节补全
工作区能放 w 个记录,就只能生成长度 w 的初始归并段。
置换选择用“当前段/下一段”标记和最小记录选择,初始归并段可长于工作区;k 路归并将若干有序段逐趟合并。
若初始 r 段且每趟最多合并 k 段,k≥2 时归并趟数通常为 ⌈log_k r⌉。I/O 次数还看初始生成与末次输出是否计入,不能用趟数代替总读写量。
输入近乎升序可产生很长初始段,逆序时可能较短;段长取决于输入。
不,应为各路及输出安排相应缓冲。
408 章节补全
链表是一种逻辑结构,顺序表和线性表互不相关。
逻辑结构描述元素关系:线性、树、图等;存储结构描述内存实现:顺序、链式、索引、散列。ADT 由数据对象、关系和操作组成。
同一种逻辑结构可有多种存储方式。算法依赖访问接口和存储代价,不应仅按逻辑关系判断复杂度;ADT 可隐藏具体实现。
线性表可用顺序表或链表实现,逻辑上都是线性关系。
不能,也能顺序存储,完全二叉树尤其适合数组编号。
408 章节补全
两层循环必为 O(n²);所有 O(1) 额外数组的递归都为 O(1) 空间。
时间复杂度累计实际操作次数;独立阶段相加取主导项,嵌套次数需按内层边界求和。空间通常计辅助空间并包括递归栈。
i 每轮翻倍而内层循环 i 次时,总量可为 1+2+4+…=O(n),不是 O(n log n)。O 是渐近上界,不总代表紧确界;平均、最好、最坏要分开。
递归遍历一棵退化树,栈深 h=n,辅助空间为 O(n)。
O(log n);若内层工作变化,须再累计各轮代价。
408 章节补全
top 初始为 −1 和初始为 0 的栈可使用同一入栈代码。
top 可指栈顶元素或下一空位,入栈/出栈先后需统一。两栈共享数组时从两端增长,共享空闲空间。
若 top 指栈顶,空栈 top=−1,入栈通常 a[++top]=x;若 top 指下一个空位,则 a[top++]=x。函数递归用调用栈,不能省略终止条件。
两端共享栈若 top1+1==top2,表示两栈之间无空槽。
这种固定分区失去动态共享空闲空间的主要作用。
408 章节补全
C 风格字符串的字符数包含末尾 \0;空串和空格串一样。
抽象串是有限字符序列,长度计有效字符;C 的结束标志 \0 不计字符串字符数。空串长度 0,空格串含实际空格。
子串是连续字符,子序列可以不连续。朴素匹配失配后需重新尝试位置,最坏 O(nm);KMP 用模式信息减少回退,O(n+m)。
"a b" 长度为 3;"" 为 0;存入 C 数组还要留结束标志位。
不是,但可以是子序列。
408 章节补全
二维数组的任意存储顺序都是 base+(i×行数+j)×元素大小。
行优先:一行内相邻元素连续;列优先:一列内相邻元素连续。下标起点和每维长度决定偏移。
若行下标起点 r₀、列下标起点 c₀,行数 R、列数 C,行优先偏移=[(i−r₀)C+(j−c₀)]L;列优先=[(j−c₀)R+(i−r₀)]L。L 为元素字节数。
C 的普通二维数组通常行优先,a[i][j+1] 与 a[i][j] 相差一个元素大小。
行优先跨一行乘列数;列优先跨一列乘行数。
408 章节补全
对称矩阵与稀疏矩阵都按下三角连续压缩,零元素不用任何信息。
对称矩阵只存一半;三角矩阵可另存共同常数;带状矩阵只存带内元素;稀疏矩阵常用三元组或十字链表。
上/下三角、行/列优先、0/1 起始都会改变地址公式。三元组保存行、列、值,顺序不当会影响访问;十字链表提供行链和列链。
n 阶对称矩阵存下三角含对角线需 n(n+1)/2 个元素,而非 n²。
不可直接套,必须先确定存储顺序和下标约定。
52 条 · 8 个章节
近期错题:机器字长及相关宽度
机器字长一定等于地址位数、指令长度或数据总线宽度。
机器字长通常是 CPU 一次整数运算的基本位数,与通用寄存器和整数 ALU 宽度密切相关;其他宽度可不同。
变长指令可以跨多个字;总线可分多次传送一个字。寻址范围取决于地址位数与按字/按字节编址约定。
32 位机器并不意味着每条指令均为 32 位,也不意味着所有总线都是 32 位。
不能,还需要地址位数和编址单位。
近期错题:MSB/LSB 与数值解释
低地址一定存放数值的最高位。
MSB/LSB 表示位权;大小端描述多字节数据的字节地址顺序。
大端低地址存最高有效字节,小端低地址存最低有效字节;一个字节内部的位权不会因大小端而反转。
0x12345678:大端低地址为 0x12,小端为 0x78。
相关真题:2025 · 第 15 题
不反转。
近期错题:有符号与无符号的比较
混合比较一律按无符号,或最高位为 1 就必为负数。
硬件位串需按指定类型解释;C 混合比较还要按整数提升和通常算术转换判断。
同等级 signed int 与 unsigned int 常转为 unsigned;若更高等级有符号类型能表示较低等级无符号类型的全部值,则可转为该有符号类型。
同宽 int 与 unsigned int 比较:-1 通常转为最大的 unsigned int。不能把这一例推广到所有类型组合。
相关真题:2025 · 第 12 题
类型、位宽、等级、表示范围及题设语言规则。
补充知识点
提高精度就是左侧一律补 0。
补码有符号数扩宽用符号扩展;无符号数扩宽用零扩展;截断可能改变值。
补码符号扩展保持数值不变。低位截取只有原值在目标范围内才保持数值;浮点扩精度有不同格式转换规则。
8 位补码 11111111 表示 −1,扩为 16 位应为 1111111111111111。
相关真题:2024 · 第 12 题;2025 · 第 12 题
补符号位 1。
408 记忆与概念补充
阶码全 0 或全 1 时都照正规数的隐含 1 公式解释。
单精度 E 为 8 位、F 为 23 位。正规数 1≤E≤254;E=0 用隐含 0,E=255 表示无穷或 NaN。
正规数=(−1)^s×(1.F)₂×2^(E−127);非正规非零数=(−1)^s×(0.F)₂×2^(−126)。不要把 E=0 的指数写成 −127。
E=0、F=0 表示 ±0;E=255、F=0 表示 ±∞;E=255、F≠0 表示 NaN。
| 阶码 E | 尾数 F | 解释 |
|---|---|---|
| 0 | 0 | 正零/负零 |
| 0 | 非 0 | 非正规数 |
| 1~254 | 任意 | 正规数(隐含 1) |
| 255 | 0 | 正/负无穷 |
| 255 | 非 0 | NaN |
没有,隐含位为 0。
408 章节补全
n 位补码与原码的负数范围完全相同;移码总只翻符号位。
n 位补码范围为 −2^(n−1)~2^(n−1)−1,零唯一;常见原码/反码范围为 ±(2^(n−1)−1),零有正负两种。
移码是给真值加偏置;只有特定偏置下才可与补码用翻最高位建立简单关系。IEEE 阶码偏置不是任意普通移码例题的偏置。
8 位补码能表示 −128,8 位原码通常不能。
不对,应按补码权值或取反加一等正确方式求值。
408 章节补全
单个奇偶位可以检测所有多位错误并定位错误位置。
奇偶校验可检出奇数位翻转,不能定位;海明码通过多个校验关系形成综合征,典型最小距离 3 的码可纠一位。
若要同时实现单错纠正和双错检测,常加整体奇偶位成为扩展海明码。理论能力由最小码距决定:检 d−1 位、纠 ⌊(d−1)/2⌋ 位。
翻转两位可能让普通奇偶校验仍满足,而不是一定被检出。
2^r≥m+r+1,为无错及每个单比特错误预留可区分状态。
近期批改回顾:补码移位与数值范围
负数算术右移总是按向 0 取整除以 2;左移永远等价于乘 2。
通常补码算术右移补符号位,相当于除 2 向负无穷取整;左移可能溢出,须先检查范围。
逻辑右移补 0。题目若指定 C 语言而非机器移位,应注意版本和实现规则,不把硬件题的结论无条件套到源语言。
8 位补码 −3 算术右移一位常得到 −2,而不是 −1。
不同,补入的高位不同。
近期错题:浮点左规
左规时阶码加 1;对阶把较大阶码向较小阶码调整。
对阶通常小阶向大阶、尾数右移;左规尾数左移、阶码减小;右规尾数右移、阶码增大。
保持数值不变需要尾数和阶码反向变化。舍入可能再次引起右规,不能只在开始检查阶码范围。IEEE 与题设补码尾数格式的规格化判据不同。
尾数左移一位放大 2 倍,阶码减 1 才抵消该变化。
相关真题:2022 · 第 14 题;2025 · 第 13 题
不用于;正规数隐含 1,非正规数隐含 0。
补充知识点
最高位有进位就说明补码溢出。
CF 反映无符号进位/借位相关情况,OF 反映有符号溢出;具体减法借位标志定义看机器约定。
同一位串运算可按有符号或无符号解释。补码加法同号相加结果异号发生有符号溢出;不能仅看最高位进位。
8 位 127+1 得位串 10000000:有符号溢出,未产生第 9 位进位。
相关真题:2025 · 第 14 题
模 256 结果为 0,并有进位;不能由此直接推出 OF=1。
补充知识点
单精度浮点能表示很大的数,因此范围内所有整数都能精确表示。
表示范围由阶码等决定,有效精度由尾数决定;IEEE 单精度正规数通常有 24 位有效二进制精度。
单精度可连续精确表示的整数范围通常到 ±2^24;超过后并非所有整数可精确表示。双精度有 53 位有效精度。
2^24 可精确表示,但 2^24+1 在单精度中通常不能精确表示。
相关真题:2024 · 第 14 题
不够,还要检查所需精度。
408 记忆与概念补充
乘法器只需要一个结果寄存器,移位一定只移动被乘数。
乘法基本操作是“按乘数位决定加法,再移位”;硬件含被乘数寄存器、部分积/乘数寄存器、加法器和控制计数。
图采用无符号组合右移模型:M 保存被乘数,Q 初始保存乘数,A 初始为 0;Q₀=1 则 A+M,经 C:A:Q 联合逻辑右移。保留加法进位 C,进行 n 轮,最终 A:Q 是 2n 位乘积。
4 位无符号 15×15 需要 8 位保存 225;若丢掉加法进位可能算错。
两个 n 位无符号数的完整乘积需要至多 2n 位。
408 记忆与概念补充
所有乘法器都必须花 n 个时钟周期;阵列乘法完全不使用加法。
迭代乘法器复用加法器,分多轮加移;阵列乘法器用硬件并行生成并累加部分积。
阵列实现可减少迭代轮次但组合延迟更长、硬件更多;是否一拍完成取决于电路、时钟周期和流水化。不能把算法步骤数直接当任意机器的周期数。
同一乘法指令可由组合阵列、多周期迭代或流水化单元实现。
不必然,需看具体实现与题设。
408 记忆与概念补充
01 做减法,10 做加法;每轮使用逻辑右移。
规定观察顺序为 Q₀Q₋₁:01 加 M,10 减 M,00/11 不加减,然后 A:Q:Q₋₁ 算术右移。
Q₋₁ 初始为 0,用相邻位变化编码连续 1。必须保留符号,并给 −M 留出可表示的位宽,尤其 M 为最小负数时;不同教材若写 Q₋₁Q₀,表的方向须转换。 若中间 A 扩成 n+1 位,最终去掉冗余符号扩展位,按题设取 2n 位乘积。
Q₀=1、Q₋₁=0 对应 10,所以 A←A−M,不是 A+M。
| Q₀Q₋₁ | 移位前操作 |
|---|---|
| 00 或 11 | A 不变 |
| 01 | A←A+M |
| 10 | A←A−M |
补 A 的符号位;不是一律补 0。
408 记忆与概念补充
商和余数存放位置永远是某两个固定编号的 CPU 寄存器。
概念模型中 M 保存除数,A 保存部分余数,Q 初始装被除数并逐位形成商;位置是模型约定,不是所有 ISA 的固定寄存器号。
图采用恢复余数的无符号迭代模型:A:Q 左移→A−M→若负则恢复并写商位 0,非负写商位 1。A 需留足试减的额外位,迭代 n 轮,最终 Q 为商、A 为余数。
13÷3 的最终商为 4、余数为 1,满足 13=3×4+1。
开始保存被除数,结束保存商。
408 记忆与概念补充
“不恢复余数”意味着最终负余数可以原样输出。
恢复法试减为负时加回除数;不恢复法根据前轮余数符号选择下一步加或减,结束时可能仍需修正余数。
无符号标准移位版本:旧 A≥0 时下一轮左移后减 M;旧 A<0 时左移后加 M,再据结果设置商位。若最终 A<0,补加 M 修正。补码有符号算法另看题设。
“下一轮用加法替代立即恢复”不等于永远没有任何恢复或末尾校正。
需要,无符号且 M>0 时应满足 0≤R<M。
408 记忆与概念补充
只检查除数不为 0 就能保证有符号除法合法。
还要检查目标商是否可表示;n 位补码最小值 −2^(n−1) 除以 −1,商为 2^(n−1),超出 n 位有符号范围。
对双字长被除数/单字长商,也需专门检查商位宽。机器整数除法和浮点除法的异常处理不同,不能混用。
8 位补码 −128÷(−1) 的数学商为 128,无法装入 8 位有符号结果。
不会,−128 在 8 位补码范围内。
408 章节补全
补码减法等于把被减数取补;双符号位相同表示溢出。
A−B 以 A+(−B 的补码)实现;常见双符号位运算中 01 为正溢出、10 为负溢出,00/11 未发生该类溢出。
位宽固定时结果截取低位,但有符号溢出仍要检查。形成 −B 时注意最小负数边界;借位、进位、OF、符号位不能混称。
正数减负数可能正溢出,而不同号相加通常不会有有符号加法溢出。
不能,还需按减法符号关系或最高位进/出位关系判断。
408 章节补全
先行进位是把整数的各位顺序相加,只提高时钟频率。
串行进位逐级等待低位进位;先行进位根据产生/传递函数并行推导进位,缩短关键路径。
两者都执行相同二进制加法,但延迟和硬件代价不同。多级先行进位还按组组织,不能只按全宽线性级数估算。
8 位加法的最高位不必在先行结构中等 7 次逐位传播才得到进位。
不会,差别是实现与速度等代价。
408 章节补全
浮点相加可直接加阶码;舍入发生一次后无需再检查溢出。
加减先对阶,再对尾数运算,规格化并舍入;乘除则按规则处理阶码与尾数,最终仍检查规格化和范围。
对阶尾数右移可能丢位,需保护/舍入/粘滞信息。舍入进位可能需要再次右规;阶码上溢与尾数暂时超范围不同,下溢可能转为非正规数或按题设处理。
两个尾数相加超过正规范围,可右移尾数并增加阶码。
再次右规并更新阶码,检查最终可表示性。
近期错题:过程调用、PC 与 RET
CALL 或 RET 的目标偶然等于下一条地址,就算顺序执行。
顺序执行按指令长度推进;CALL 设置调用目标并保存返回地址;RET 从保存位置取得返回地址。
“下一条执行的指令”可以是转移目标,而“内存中紧邻的下一条”指顺序后继。即使两个数值恰好相同,也不改变地址来源和指令语义。
CALL 的目标可恰好紧邻,但它仍按调用语义执行;RET 通常返回对应调用后的指令。
不是,通常是先前保存的调用后续地址。
近期错题:控制部件的组成
IR 存的是运算数据,译码器完成算术运算。
PC 保存指令地址,IR 保存当前指令,译码器分析操作码;通常都归入控制部件。
IR 不一定在每个执行微操作中变化。ALU 完成运算,控制器生成相应微操作控制信号;具体组成以题设模型为准。
指令取出后送入 IR,随后译码;执行期间 PC 可能已指向后继。
相关真题:2025 · 第 19 题
通常是 IR 中的操作码等指令字段。
近期批改回顾:寻址与数据通路
M[address] 总能直接作为操作数。
先按寻址方式求有效地址 EA,再依指令访问 M[EA];立即数是指令内的数据。
直接寻址 EA=A;一次间接寻址 EA=M[A];基址/变址/相对寻址还需叠加相应寄存器。计算时须区分地址、地址处的指针和最终操作数。
一次间接寻址:A=100,M[100]=200,M[200]=7,操作数是 7。
不是,通常是有效地址。
补充知识点
时钟周期、Cache 容量和加法器结构都属于 ISA 的必然规定。
ISA 规定软件可见的指令、寄存器、数据类型及寻址等接口;流水线级数和具体电路通常属于实现。
相同 ISA 可由不同处理器实现,性能和内部结构可以不同。某些状态寄存器或扩展特性是否可见仍要看具体 ISA。
支持相同指令集的两个 CPU 可以有不同 Cache 和不同主频。
相关真题:2025 · 第 16 题
通常属于 ISA。
408 章节补全
操作码增加一位不影响地址空间;扩展操作码按最短码长度直接相加。
固定总长下,操作码与地址字段共享位数预算;扩展操作码通过前缀区分不同格式,需要避免编码冲突。
多地址指令耗较多地址字段,留给短操作码的位数较少。已使用的短操作码前缀会占用对应的所有更长编码,不可重复计数。
一个已分配的 k 位操作码,可排除具有该前缀的 2^(l−k) 个 l 位长编码。
不必,可固定或可变,也可跨多个机器字。
408 章节补全
基址、变址、相对寻址都以 IR 地址字段直接作最终地址。
基址常为基址寄存器+位移;变址常为变址寄存器+地址/位移;相对寻址为规定时刻的 PC+相对位移。
位移可能有符号,需要扩展。PC 究竟是当前指令地址还是已更新后的顺序后继,要看题设;基址与变址在硬件求和相似,但用途和可变部分不同。
数组遍历常改变变址寄存器;程序重定位常调整基址。
不应,按题设有符号位移进行符号扩展。
408 章节补全
RISC 的所有指令都固定一拍完成;CISC 不可能流水化。
典型 RISC 强调较规则的指令、寄存器操作和 Load/Store 访问存储器,利于流水;CISC 通常有较复杂格式与操作。
这些是风格特征,不是对所有实现的绝对保证。现代处理器可把复杂指令分解成内部操作;访存、乘除或异常可能使执行时间不同。
典型 Load/Store ISA 中算术指令主要在寄存器间运算,访存由专门指令完成。
不必然,乘除等可以多周期。
408 章节补全
单内部总线能同拍把任意两个寄存器同时驱动到同一 ALU 输入。
单总线一次通常只有一个源驱动;ALU 常需 Y 等暂存第一个操作数,Z 等暂存结果,再按微操作转送。
控制信号需同时满足总线不冲突、源有效、目标写入、ALU 功能及存储器时序。MAR 送地址、MDR 传数据不能互换;具体寄存器名看题图。
实现 R1←R1+R2 可分为 R1→Y、R2与Y运算→Z、Z→R1 等微步骤。
不能,通常会造成驱动冲突,除非题图明确有特殊机制。
近期批改:Cache 组号、标记与地址拆分
主存块号就是 Cache 组号;标记包含组号。
主存块号=地址/块大小向下取整;组号=块号 mod 组数;标记=块号/组数向下取整。
按字节编址且参数为 2 的幂时:低位为块内偏移,中间为组索引,高位为标记。组数=数据容量/(块大小×路数),不能把路数当组数。
两块映射到同一组,还需要比较标记;组相同不代表命中。
相关真题:2022 · 第 16 题
组数减少,索引位减少;地址位数和块大小不变时标记位增加。
补充知识点
写回一定等于写分配;写直达必然没有缓存。
写直达/写回规定写命中后如何更新下层;写分配/非写分配规定写不命中时是否把块调入。
两套策略分别回答不同问题。写回通常需要脏位;替换干净块无需写回。题目给出组合时必须按组合执行。
写回且写分配:写缺失先调块,修改后置脏,替换脏块再写回。
相关真题:2024 · 第 16 题
不能;有效位表示内容是否有效,脏位表示是否相对下层被修改。
补充知识点
MAR 位数必须等于 MDR 位数。
MAR 保存地址,其位数关联寻址范围;MDR 保存一次数据传送的内容,位数关联数据通路。
按字节编址时 n 位地址可表示 2^n 个字节地址。按字编址则表示 2^n 个字,容量还需乘每字字节数。
MAR 为 24 位而 MDR 为 32 位,不矛盾;不能用 MDR 位数直接计算地址容量。
2^24 B,即 16 MiB。
408 章节补全
DRAM 读出不需恢复,SRAM 每隔一段时间必须刷新。
SRAM 依靠双稳态电路保存,通常不需刷新;DRAM 用电容保存,需刷新且读出常需恢复。ROM 类用于非易失保存。
DRAM 容量密度高、常作主存,SRAM 较快常作 Cache。刷新并非 CPU 逐条执行读写指令完成;读写周期与刷新开销要区分。
断电后普通 SRAM/DRAM 数据通常丢失,不能因 SRAM 不刷新就认为它非易失。
不能,仍属易失存储器。
408 章节补全
芯片数量只等于总容量比,连线方式不必区分。
位扩展并联增加一个地址的数据位数;字扩展增加可寻址字数,需要片选区分组。
总片数可按目标总位数/单片总位数求,但仍需按每组位宽、组数和地址线划分连线。读写控制、地址输入可共用,数据线和片选要按方案组织。
8K×8 的芯片构成 16K×16:每组 2 片位扩展,2 组字扩展,共 4 片。
相同,分别提供该地址不同的数据位。
408 章节补全
低位交叉让连续地址全落在同一模块。
低位交叉用低地址位选模块,连续地址分散到不同模块,适合重叠访问;高位交叉用高位选模块,连续块可在同一模块。
并行访存受模块忙闲、周期和发起间隔限制。对步长与模块数有规律的访问,低位交叉也可能持续冲突,不能保证任意访问都满带宽。
4 模块低位交叉时,地址 0、1、2、3 分别去模块 0、1、2、3。
不一定,可能总落在同一模块。
408 章节补全
全相联仍必须有 Cache 行号字段;直接映射能把冲突块放到任意行。
直接映射每块只有一个行位置;全相联可放任意行;组相联先定位组,再在组内任意路寻找。
直接映射比较少但冲突限制强;全相联查找代价大,索引字段可无;组相联折中。每一路保存自身标记与状态;命中需有效位和标记匹配。
两主存块映同一直接行会互相替换;组内有多个路时可同时驻留。
不会,仍需在块内选择字节/字。
408 章节补全
MMU 保存整个进程的所有数据,页表只记录是否在 Cache 中。
MMU 按页表/TLB 完成地址转换和保护检查;页表项记录页框、存在与权限等,页表基址帮助找到页表。
TLB 可能包含地址空间标识以区分进程;切换时如何处理看实现。页框号与页内偏移拼出物理地址,缺页由硬件检测并转交 OS 处理。
同一虚拟页号在两个进程中可映射到不同物理页框。
不能,仍需保护检查,可能触发保护异常。
408 章节补全
存取时间、存储周期与 CPU 时钟周期永远相等。
存取时间是请求到数据有效的延迟;存储周期还包括恢复等使下次同类操作可开始的间隔;CPU 时钟周期是处理器节拍。
突发传输常首次延迟较长,随后连续传多字,摊薄地址/访问开销。刷新、行命中/未命中等可改变 DRAM 时序,题目必须明确计时模型。
总线有数据阶段不代表主存每个周期都能接受独立访问,仍受存储周期约束。
不能,需按完整事务和重叠规则计算。
近期批改回顾:无转发流水线与指令相关
相关指令必停顿;有转发就不会停顿。
数据相关是依赖关系;是否形成冒险及停顿取决于流水线阶段、写回/读寄存器时序与转发路径。
ALU 结果可提前转发;典型五段流水线的紧邻 load-use 仍可能停一拍。无转发题必须等结果可读,不能擅自套转发时序。
同一周期能否先写后读寄存器文件,必须看题设。
相关真题:2024 · 第 19 题;2025 · 第 19 题
不能,还可能有 load-use、控制冒险和结构冒险。
补充知识点
微程序存放在普通主存,微指令由程序员直接编写执行。
微程序控制器用控制存储器中的微指令生成控制信号;一条机器指令通常对应一个微程序。
机器指令描述软件层操作,微指令描述一个微周期的控制操作。水平型允许较多并行控制,垂直型编码更紧凑、译码更多。
取指微程序可由多条微指令组成,并由多种机器指令共享。
相关真题:2024 · 第 13 题
不是,通常由微地址寄存器管理控制存储器地址。
408 记忆与概念补充
CPI 小的机器运行所有程序都更快;频率等于数据传输率。
CPU 时间=指令数×平均 CPI×时钟周期=指令数×平均 CPI/主频。
比较时要同时考虑三个因子。总线时钟频率乘每拍传输次数才是传输频率,带宽再乘每次传送字节数;MT/s 与 MHz 不能无条件互换。
同一程序若机器 A 的 CPI 降低但时钟周期变大,CPU 时间不一定缩短。
按各类指令实际执行数量或比例加权,而不是按指令类别简单平均。
408 章节补全
一个时钟周期必执行一条指令;中断周期就是执行一次普通取指。
时钟周期是基本时间单位;一条指令可历经取指、间址、执行等阶段,必要时响应中断。机器周期的定义取决于题设模型。
间接寻址可能增加访存阶段;中断响应含保存断点及转向服务入口等操作。不要把存储周期、机器周期、指令周期都视为固定相等。
多周期 CPU 一条访存指令可以由多个时钟周期组成。
需要,中断响应阶段与服务程序执行仍应分别计入。
408 章节补全
k 级流水线任何情况下都使一条指令延迟变为原来的 1/k。
流水主要提高多条指令的吞吐;单条指令仍要经过各级。理想等长 k 段、每段 τ,n 条连续执行为 (k+n−1)τ。
非流水同模型为 nkτ,理想加速比 nk/(k+n−1),n 大时趋 k。锁存延迟、最长阶段、停顿和填充/排空降低实际收益。
k=5、n=1 时理想加速比为 1,不是 5。
不等于,两种指标不同。
近期批改:中断响应周期遗漏
只计算中断服务程序的执行时间。
若题目问一次中断总开销,应按题设计入响应、现场保存、服务、恢复和返回,避免遗漏或重复。
硬件完成哪些保存操作、软件完成哪些操作由体系结构决定。中断屏蔽与中断优先级也不同,不能只按服务程序条数估算。
题目另给“响应需要若干周期”,若不包含在服务时间中,就要单独计入。
相关真题:2024 · 第 21 题
不应,先确认各时间区间的定义。
补充知识点
DMA 完全不需要 CPU,也不使用中断。
中断方式通常由 CPU 指令搬运数据;DMA 控制器承担成块数据传送,CPU 负责初始化及结束处理。
DMA 可争用总线或访存周期,并在完成/异常时中断 CPU。降低 CPU 搬运负担不等于传送过程对 CPU 没有影响。
CPU 设置缓冲区地址、长度和方向后,DMA 按配置传送。
相关真题:2024 · 第 22 题
可以。
补充知识点
中断屏蔽字决定硬件同时请求时的全部响应次序。
响应优先级决定同时请求时先响应谁;处理优先级决定服务程序执行时允许谁嵌套,由屏蔽设置等控制。
两种次序可以不同。现场保存、断点保存和开/关中断的时机必须按题设区分,不能只比较中断号大小。
某源硬件响应优先级高,但服务时可被另一源打断,说明处理次序另有设置。
相关真题:2024 · 第 21 题
不一定,屏蔽与排队选择是不同机制。
408 章节补全
设备接口只有数据寄存器;统一编址访问设备不消耗任何地址空间。
接口常有数据、状态、控制寄存器;统一编址将 I/O 端口置入存储地址空间,独立编址用单独端口空间和访问指令。
查询方式检查状态,控制命令配置设备,数据寄存器承担实际传送。设备物理执行由控制器协作,CPU 不能把所有端口都当普通可缓存内存访问。
统一编址下,普通访存指令可按规定访问 I/O 区域,但会占地址范围。
不是,应区分状态/控制与数据。
408 章节补全
DMA 的每次传输都必须由 CPU 指令读取并再写入数据。
DMA 直接控制设备与主存传送;成组方式连续占用总线,周期挪用夺取部分访存周期,透明方式尽量利用 CPU 不需总线的时段。
各模式在 CPU 停顿、控制开销与传输速度间折中。CPU 初始化 DMA 和处理中断仍有开销;DMA 请求/总线授权不等于中断响应时机。
周期挪用让 CPU 暂失一个或一些访存周期,而不是必然中止整个程序到整块全部传完。
不意味着,只是尽量避免与 CPU 总线需求冲突。
408 章节补全
中断向量地址就是中断服务程序的入口地址,二者不能有区别。
向量通常含服务入口等信息;向量地址是存放该向量的表项位置;取表项后才得到入口。
不同架构可能直接编码入口或有不同表结构,以题设为准。硬件识别请求、形成向量地址、保存断点与跳转是不同动作;软件继续保存通用现场。
向量地址为 100,M[100]=200,则服务入口可为 200,不是 100。
不等同,要转向相应服务入口。
408 章节补全
存储程序计算机只允许数据放在内存,指令不属于存储内容。
冯·诺依曼思想把指令与数据存入存储器,按指令执行;哈佛结构将指令和数据存储/通路分开。
现代处理器可能主存统一而指令/数据 Cache 分开,不能只凭一级 Cache 分离就断言整个系统纯哈佛。软硬件共同决定执行行为。
一条机器指令在存储器中也以二进制编码保存。
由地址、程序执行阶段与体系结构的解释方式决定。
408 章节补全
汇编器负责把高级语言直接翻译成最终已装入的运行程序。
常见流程:预处理→编译→汇编→链接→装入;编译生成低层表示,汇编生成目标代码,链接处理符号与模块组合。
具体工具链可合并阶段,但职责仍需区分。目标文件未必已经解析全部外部符号;装入与执行时的动态链接也可另发生。
调用库函数的符号引用可在链接阶段与库模块对应。
不是,汇编用助记符表达低层指令,机器语言是其可执行编码。
408 章节补全
优先级高的设备一定不会让其他设备饥饿,链式查询对故障完全不敏感。
集中仲裁常见链式查询、计数器定时查询、独立请求;在控制线数量、优先级灵活性和响应速度间折中。
链式次序常赋予固定优先级且对链路故障敏感;计数器起点可影响公平;独立请求可更灵活但控制线更多。不能仅凭名称判断所有具体策略。
固定高优先级设备不断请求可能使低优先级长期等待。
不一定,应按总线仲裁规则。
408 章节补全
总线频率×位宽在任何事务模型下都等于有效数据吞吐率。
同步总线依赖共同节拍;异步常用握手;分离事务将请求和响应分开,释放等待期间的总线。
峰值带宽通常按每秒有效传输次数×每次字节数。地址阶段、等待周期、仲裁和协议开销会降低实际吞吐;时钟频率与双倍/多倍传输率要分开。
首拍发地址、后几拍等存储器时,不能把每拍都算成数据传输。
不是,64 位是 8 字节。
52 条 · 7 个章节
近期错题:多任务与并行
多任务操作系统必须有多个 CPU。
并发表示一段时间内多个任务都在推进;并行表示同一时刻同时执行。单核可以靠切换实现多任务并发。
单核普通执行流同一时刻仅执行一个线程,I/O 与 CPU 仍可重叠。多核提供多个硬件执行资源;逻辑处理器和物理芯片数量也不能直接等同。
单核轮流运行 A、B,两者都有进展但不必在同一时刻执行。
不能。
补充知识点
同一进程的线程共享所有寄存器和栈。
同进程线程通常共享地址空间和文件等资源,各有独立寄存器上下文和栈。
用户线程/内核线程的管理方式另需区分。一个进程可含多个线程,线程局部变量与共享变量不能仅靠变量名判断。
两个线程各自栈上的 x 不一定是同一个对象;访问同一全局 x 才可能竞争。
相关真题:2024 · 第 28 题
通常共享地址空间中的堆,但各有独立栈。
补充知识点
I/O 完成使进程直接从阻塞变为运行。
典型状态转换:运行→阻塞为等待事件;阻塞→就绪为事件完成;就绪→运行由调度分派。
运行→就绪可由时间片用尽或被抢占造成。阻塞进程缺少执行条件,不能靠给它 CPU 就解决等待。
I/O 完成后先进入就绪队列,可能仍需等待 CPU。
就绪态。
补充知识点
fork 后父子进程的所有变量永久共享。
父子进程有各自逻辑地址空间;写时复制可暂时共享物理页,写入时再复制。继承的文件描述符可引用同一打开文件描述。
父子都从 fork 返回处继续,返回值不同。普通内存修改不会自动修改对方的变量;共享映射是另一个机制。
同一继承文件的偏移可能共享,但局部变量 x 的写入通常各自独立。
不能。
408 章节补全
PCB 保存进程全部代码、堆和文件内容。
PCB 记录进程标识、状态、调度、资源和 CPU 上下文等控制信息,是系统管理进程的基础;代码与数据另占地址空间。
进程切换需保存/恢复寄存器及必要管理状态,不是复制全部内存。程序为静态代码,进程为运行实例,同一程序可对应多个进程。
多个进程可执行同一可执行文件,但有各自状态与逻辑地址空间。
不能,须保存在上下文中以恢复执行。
408 章节补全
exec 必然新建一个 PID;父进程终止必然终止每个子进程。
创建产生新进程控制结构;典型 exec 在现有进程中替换程序映像;终止回收资源并处理关联关系。
不同系统有不同父子终止策略,不能把级联终止作为所有系统必然行为。子进程继承与共享资源也要按规则区分。
fork 后子进程可 exec 新程序,但典型 Unix 中其 PID 不因 exec 本身变化。
不是,fork 创建运行实例,exec 替换程序映像。
408 章节补全
所有用户线程阻塞都使整个进程阻塞;所有模型都能多核并行。
多对一用户线程依赖一个内核执行实体,阻塞和并行受其限制;一对一由内核分别调度;多对多结合两层映射。
用户级切换可低开销,但不是所有阻塞都等价于整个进程被阻塞,须看是否陷入内核及映射方式。多核并行需要多个可并行内核执行实体。
多对一模型若一个线程进行阻塞系统调用,可影响同进程其他用户线程运行。
不一定,多对一模型可由用户线程库管理。
408 章节补全
独立进程只要虚拟地址相同就自动共享变量;匿名管道可任意随机定位。
IPC 可用共享内存、消息传递、管道等。共享内存让进程映射同一对象,但仍需同步;管道通常按字节流或给定消息规则顺序通信。
相同虚拟地址可映不同物理页。普通匿名管道与命名管道在使用范围上不同,读写端关闭、空/满等待影响行为。通信通道不自动提供所有并发互斥。
两个进程共享一页存数据,生产消费双方仍需约定有效数据与访问顺序。
不是,仍可能有数据竞争和顺序要求。
近期错题:时钟中断
每次时钟中断都会更换当前运行进程。
定时器产生时钟中断,OS 可更新时间、统计 CPU 使用和检查调度条件;是否切换由条件决定。
时钟中断是外部异步中断。时间片可能由多个时钟滴答组成;内核处理完中断后也可继续原任务。
时间片尚未用完且没有更高优先级任务,就可能继续运行当前进程。
可以。
近期批改:动态优先级漏计 CPU 时间
等待时间越长就一定优先级越高,CPU 时间可以忽略。
按题设同时更新 cpuTime、等待量等变量,确认“数值大优先”还是“数值小优先”,以及何时重新计算。
不同系统的优先级编号方向不同。到达、抢占、运行、阻塞等事件可能改变状态,静态排序不能替代过程推演。
若优先数含 CPU 使用项,运行中的进程会随 CPU 时间积累而变化。
优先数比较方向、更新公式、更新时刻。
补充知识点
只有抢占式算法才会饥饿;HRRN 只看作业长度。
SJF 可让长作业长期等待;HRRN 比较 (等待时间+服务时间)/服务时间,通常按非抢占方式选择。
等待越久,响应比越大,能缓解长期等待。绝对“不会饥饿”仍需结合有限作业或到达假设,不能对任何负载无条件保证。
一个长作业等待期间不断到来短作业,SJF 可能一直选短作业。
在服务时间固定时增大。
补充知识点
异常发生时 CPU 一定已在内核态;函数调用自动切换内核态。
中断/异常可以在用户态运行时发生;进入处理程序后由硬件切换到规定特权级。系统调用通过陷入机制请求内核服务。
外部中断通常异步;异常与当前指令同步。普通库函数可完全在用户态执行,也可能封装系统调用。发生前模式与处理时模式不能混淆。
用户程序访问不存在的页时可以触发缺页异常,而缺页处理程序在内核态执行。
相关真题:2022 · 第 31 题;2024 · 第 23 题
不必然,系统调用入口才需要特权切换。
408 章节补全
作业调度、交换调度与 CPU 调度都每执行一条指令进行一次。
高级调度选择作业进入系统/内存;中级调度管理换入换出;低级调度选择就绪任务使用 CPU。
并非所有 OS 都实现这三层。调度是选择,分派/切换是实施;用户态到内核态转换可仍属于同一进程,不必发生进程切换。
系统调用完成后返回原任务,发生模式切换但不一定换进程。
不能。
408 章节补全
响应时间等于程序从提交到全部完成的时间。
周转=完成−到达;带权周转=周转/服务时间;响应是首次有效响应前的等待;等待是处于等待 CPU 等状态的累计时间(按模型)。
有 I/O 时等待时间不能无条件用周转−CPU 服务时间,可能还需区分 I/O 等待。题设若是纯 CPU 作业模型,则常用该差值。
任务很快显示第一条输出但仍运行很久,响应短不代表周转短。
一般不等,应先分别求各任务比值再按规定平均。
408 章节补全
时间片轮转越大响应越好;SJF 都按抢占实现。
FCFS 按到达,SJF 常非抢占,SRTF 按剩余时间抢占;RR 轮流给时间片,多级反馈可按运行表现调整队列。
RR 片很大时可近似 FCFS,片太小切换开销大。到达、抢占、平局排序和新到任务插入位置改变结果,要明确约定。
一个长任务前面只有一个很短任务,SJF 可能先完成短任务以降低平均等待。
不,常见 HRRN 是非抢占,SRTF 是抢占。
408 章节补全
负载均衡只追求各核任务数量相同,迁移没有代价。
多处理机调度既考虑资源利用,也考虑缓存/NUMA 等局部性;处理机亲和性倾向保留任务在熟悉的处理机上。
共享或每核就绪队列均可采用;迁移可能损失 Cache 热数据并引入协调开销。任务数相等不代表工作量相等,软/硬亲和的限制也不同。
一个 CPU 密集任务与多个短等待任务,数量相同不代表计算负载相同。
不一定,可能损失局部性与增加管理开销。
近期批改回顾:PV 顺序与遗漏操作
先 P(mutex),再 P(empty/full) 总是安全。
典型有界缓冲区:生产者 P(empty)→P(mutex);消费者 P(full)→P(mutex),操作后释放互斥并通知对方。
如果持有互斥锁时等待 empty/full,对方可能无法进入缓冲区释放所需资源,形成死锁。每次成功申请都要有对应释放。
缓冲区已满,生产者先持有 mutex 再等 empty;消费者无法取得 mutex 去消费。
典型方案不应如此,应先 P(full)。
近期错题:线程变量与执行顺序
x++ 在所有机器上都是不可分的操作。
源代码的一行可能包含读、改、写多个步骤;共享变量并发访问需要适当同步。
局部变量名相同不一定共享;删掉某个线程的变量也不一定修复同步逻辑。应先明确各变量作用域、原子操作和访问顺序。
两线程同时读到 x=0,各自写回 1,最终值可能为 1 而不是 2。
不能,volatile 不是互斥或通用原子同步机制。
补充知识点
不安全状态就是已经死锁;打破任一必要条件仍可能形成同类资源死锁。
死锁是互相等待而无法推进;饥饿是长期得不到服务;不安全只表示无法保证存在安全序列,不等于当前已死锁。
经典可重用资源模型中,互斥、占有且等待、不可剥夺、循环等待是死锁的必要条件。破坏其中任一可预防该模型中的死锁。
银行家算法拒绝后不安全的请求,是避免风险,并非证明进程已经死锁。
不安全;但不安全状态不一定已经死锁。
补充知识点
发现一个进程当前资源不够,就判定整个状态不安全。
Need=Max−Allocation;安全检查尝试寻找 Need≤Work 的未完成进程,假想完成后 Work 加回其 Allocation。
选择是“存在某个可以完成的进程”,不是固定逐号顺序。申请首先检查 Request≤Need、Request≤Available,再试分配并检查安全性。
P1 暂不能完成,但 P2 能完成并释放资源,随后 P1 可能满足需要。
加回该进程当前已分配的 Allocation,不是 Max 或 Need。
408 章节补全
保证一次只有一人进入就一定满足所有同步正确性要求。
互斥只解决同时进入;还需考虑空闲让进、忙则等待、有限等待以及题设要求的让权等待。
自旋锁等待时忙等,不能无条件说满足让权等待;阻塞型等待可让出 CPU。应区分安全性(不同时进入)与进展/公平性。
一把永远无人释放的锁仍可互斥,却不能使等待任务正常推进。
资源是共享对象,临界区是访问该对象的受保护代码段。
408 章节补全
普通函数实现的 swap 与硬件原子 Swap 等价。
原子读改写将测试/修改作为不可分操作,可构造互斥;普通读写序列可能被交错,不等价。
硬件保证该操作原子不自动保证锁公平或让权等待。关闭中断在单核内核特定场景可防本核打断,但不能仅靠它阻止其他核并发访问。
两线程均读到 lock=0 再各写 1,会同时误以为获得锁。
不,锁的申请顺序等仍可能形成死锁。
408 章节补全
只用 turn 就同时满足任何情况下的互斥和空闲让进。
双进程 Peterson 用 flag 表示进入意愿、turn 打破同时竞争;经典证明基于读写原子和顺序一致等模型。
仅轮流进入可能在另一方不想进入时也阻挡自己。现代硬件/编译器可重排,真实代码还需适当内存语义;408 理论题按给定原子与顺序约定推演。
两者同时 flag=true 时,turn 为其中一个提供让步方向。
不能,二者解决的竞争条件不同。
408 章节补全
条件变量 signal 等于给资源数永久加一;唤醒后条件一定仍成立。
信号量维护计数并以 P/V 协调;管程封装共享状态和互斥;条件变量用于在条件不满足时等待并由通知唤醒。
Mesa 风格条件等待应在 while 中重查条件,因为唤醒后可能被他人先改变。条件通知不等于保留一个永久许可;不同管程语义需按题设。
消费者被唤醒但尚未拿锁前,另一个消费者可能取走唯一数据。
唤醒不保证自己实际获得运行时条件仍满足。
408 章节补全
读者之间必须全部互斥,写者优先总能避免所有任务饥饿。
读者可并发读取;写者需排他访问。读者计数本身要保护,访问策略区分读者优先、写者优先与公平方案。
首读者锁定写资源、末读者释放是一种常见读者优先方案;源源不断读者可能延迟写者。写者优先也可能使读者长期等待,不能只看互斥。
读者共享数据只读,但更新 readCount 属于写共享状态,需单独同步。
不能。
408 章节补全
每人依次拿左再拿右,只要叉子互斥就不会死锁。
各自持一支等待另一支可形成循环等待;可限制同时取叉人数、统一资源顺序或设计仲裁方案。
限制至多 n−1 人尝试是经典思路,但仍需完整释放路径;资源编号顺序消除循环等待。具体公平性另需验证。
5 人同时拿左叉后全等右叉,即使每支叉严格互斥,也仍可能死锁。
不自动保证,还需看公平与调度规则。
408 章节补全
银行家算法是死锁已经发生后的检测与解除算法。
预防破坏必要条件;避免动态保持安全;检测允许发生后识别;解除采取撤销/剥夺等策略。
银行家基于最大需求等信息进行避免。预防可能降低利用率;解除要选牺牲者并防重复牺牲造成饥饿。四类策略目的相近但时机不同。
统一资源申请顺序是预防;试分配后安全检查属于避免。
不是,典型避免会拒绝/延迟可能使状态不安全的请求。
408 章节补全
有向资源分配图只要有环就必然死锁。
单实例资源模型中环可构成死锁的充要条件;多实例资源中有环不一定死锁,需结合剩余实例和可完成进程检查。
请求边通常进程→资源,分配边资源→进程。多实例还有外部可完成进程释放资源的可能,单纯画环不能给出完整判定。
某类型还有一空闲实例可满足等待者,环内进程仍可能继续。
不能,方向代表等待与占用关系。
补充知识点
TLB 不命中就必须从磁盘调页。
TLB 缺失:查页表获得映射;缺页:所需页不在内存;Cache 缺失:数据不在该级缓存。
TLB 缓存的是地址转换结果,数据 Cache 缓存的是数据。页表存在位有效时,TLB 不命中仍可直接完成内存访问。
页在内存但其映射未进入 TLB,只发生 TLB miss,不发生 page fault。
相关真题:2022 · 第 29 题;2024 · 第 18 题
不能,两者缓存对象不同。
补充知识点
分页没有任何碎片;分段地址只需段号。
分页通常存在页内碎片;分段按逻辑段分配,可能有段间外部碎片。段式地址由段号和段内偏移组成。
固定页大小便于物理分配,逻辑段长度可变。段内偏移必须检查段限,不能只加基址。
最后一页用不满是内部碎片;空闲段间空洞是外部碎片。
不可行,会触发越界保护。
补充知识点
CLOCK 就是精确的 LRU。
CLOCK 利用访问位给页面第二次机会,是低开销近似;精确 LRU 需要更细的访问顺序信息。
基本 CLOCK 遇访问位 1 清零并继续,遇 0 选择。改进型还考虑修改位,其扫描规则须看题设。
两个页面都访问过,CLOCK 可能不保留它们的精确先后次序。
替换脏页可能需要写回,开销更大。
补充知识点
缺页越多说明 CPU 越忙,继续增加多道程序度就能改善。
工作集是最近一段访问中涉及的页面集合;内存不足以容纳活跃工作集可能引起频繁换页和抖动。
抖动时大量时间花在调页,CPU 利用率可能下降;应考虑减少多道程序度或增加可用页框。工作集大小与窗口和局部性相关。
进程刚切换阶段,工作集可能改变,不是永久不变的常数。
相关真题:2022 · 第 30 题
不能,可能进一步加重内存竞争。
408 记忆与概念补充
两级页表就把剩余地址位无条件平分;页表项越大索引位越多。
若每个下级页表恰好占一页,单表表项数=页大小/页表项大小;该级索引位数是表项数的 log₂(参数为 2 的幂)。
先从地址宽度扣除页内偏移,再按能容纳的表项数分各级索引。题设可以让页目录大小与下级页表大小不同,不能擅自平分。
32 位地址、4 KiB 页、4 B 页表项:页内偏移 12 位,下级索引 10 位,常见两级结构剩余目录索引 10 位。
普通分页中页大小相同,页内偏移不变。
408 章节补全
最佳适应留下的空闲区一定更容易使用,外部碎片越多内部碎片越多。
首次选首个够大空洞,最佳选最小够大,最坏选最大;伙伴按 2 的幂分配与指定伙伴合并。
最佳适应可能留下很多小孔洞;连续变长分配主要外部碎片,固定/对齐分配可有内部浪费。伙伴只合并同级且互为伙伴的空闲块,不是任意相邻块。
请求 18 单位,伙伴分配可能给 32 单位,剩余部分体现内部浪费。
不保证。
408 章节补全
增加页框后任何页面替换算法的缺页次数都不会增加。
OPT 替换未来最久不用页作理论最优;FIFO 替换最早进入页;LRU 替换过去最久不用页。FIFO 可发生 Belady 异常。
LRU 的栈性质使增加页框通常不增缺页,FIFO 不具此保证。最优基于未来信息不作一般在线实现;读序列时命中也可能更新 LRU 次序。
FIFO 某序列用更多页框反而更多缺页,是异常,不是计算一定错。
经典 FIFO 不这样更新入驻顺序;LRU 才更新最近访问信息。
408 章节补全
局部置换表示只能替换物理地址靠近缺页地址的页。
局部替换从本进程驻留页中选;全局替换可涉及其他进程页。驻留集大小可以固定或动态调整。
多进程共享物理内存时,分配策略与替换范围共同影响缺页和抖动。页框不足、访问局部性弱和多道度过高可能叠加;局部/全局是归属范围而非地址距离。
全局替换可能使另一进程失去页框,影响其未来访问。
不是,分配数量和替换范围是不同维度,组合需看策略。
408 章节补全
mmap 把整个文件立刻复制进进程每一个内存页,不涉及缺页。
内存映射文件把虚拟地址范围与文件内容关联,程序可通过访存访问,页面可按需装入。
共享/私有映射影响修改可见性和写回;私有映射可写时复制,不保证修改原文件。建立映射、读页、写回同步等是不同动作,不能只凭“映射”认定已物理加载全部文件。
首次读映射区域可能触发缺页,由系统把对应文件页装入内存。
不必然,通常不作为对原文件的共享写入。
近期批改:FAT 表项下标与链接方向
FAT 的表项按文件中的第 1、2、3 块编号。
FAT[当前磁盘块号] = 下一磁盘块号;目录记录起始块,链末使用结束标记。
FAT 集中保存链接信息。文件的逻辑块序号用于决定要走几次链,不等于 FAT 下标。不能把数据块里的内容当链接指针。
链 100→106→108:FAT[100]=106,FAT[106]=108,FAT[108]=结束标记。
不应,从起始块按链走两次。
补充知识点
位示图中的 1 永远代表空闲,磁盘块号直接等于字号。
按题设解释占用位;块号=字号×每字位数+字内位号,前提是两者均从 0 开始。
若编号从 1 开始需调整。位示图通常为每个磁盘块保留一位,其大小与总块数有关,不随当前空闲块数线性变化。
每字 32 位,0 起始编号的第 2 字第 3 位对应块号 67。
相关真题:2024 · 第 26 题
位值含义、字长、字和位编号起点,以及位从高位还是低位排列。
补充知识点
文件一被删除,所有已打开的描述符都立即失效。
在典型 Unix 语义下,unlink 删除一个目录链接;仍被打开或仍有硬链接的文件对象可以继续存在。
文件描述符表、系统打开文件表、inode 与目录项各有作用。硬链接共享同一文件对象;符号链接保存路径。
删掉一个硬链接名,另一个硬链接仍可访问同一文件。
相关真题:2024 · 第 29 题
符号链接。
408 记忆与概念补充
二级间接指针只多指向一块数据;索引块不占存储。
每个索引块可存 b/p 个地址(b 为块字节数,p 为地址字节数);一级间接覆盖 b/p 个数据块,二级覆盖 (b/p)² 个数据块。
若 inode 有 d 个直接、s 个一级、t 个二级指针,最大数据容量为 [d+s(b/p)+t(b/p)²]×b;这是数据字节,不包含索引块自身占用。
b=1024 B、p=4 B,则每索引块有 256 项,二级间接可覆盖 256² 个数据块。
不能,还应按实际使用情况计索引块。
408 章节补全
inode 内必定保存文件名,打开文件无需路径解析。
目录项建立名字到文件对象/标识的对应;inode 等元数据记录属性与块定位信息;路径按各级目录解析。
名字与对象分离有助硬链接。打开后用描述符定位打开对象不等于每次读都重走完整路径;缓存命中会改变实际磁盘访问次数。
/a/b/c 的打开可能依次解析 a、b、c 的目录项,而非直接按字符串计算数据块号。
不同,主要是命名与组织信息。
408 章节补全
链接分配随机访问任何逻辑块都 O(1),连续分配天然可无限增长。
连续分配随机定位简单但增长与外部碎片受限;链接分配易增长但常需沿链;索引分配通过索引定位块。
FAT 是链接信息集中化的形式;多级索引的随机定位仍有索引访问开销。最大容量、目录大小和磁盘读次数须按实际结构与缓存条件计算。
随机读链末块可能需追踪很多链接,不应直接把逻辑序号加到起始物理块号。
不是,主要保存数据块等地址。
408 章节补全
挂载必然把文件系统每个文件全部复制到内存,文件共享不需保护。
挂载把文件系统接入统一命名空间;权限/ACL 等保护决定主体可执行的操作,共享与保护共同管理访问。
读取目录和元数据不等于把全部数据加载。用户身份、操作类型、目录搜索权和文件权限可能共同决定访问;硬链接、打开引用和映射分别带来不同共享关系。
路径中的某目录无搜索权限时,即使知道目标文件名,也不一定能成功打开。
不能,写权限需另行检查。
408 章节补全
写入缓存后立即断电,磁盘必已有全部新数据;日志就是文件正文的完整备份。
缓存可提高 I/O 性能,写回策略决定落盘时机;文件系统日志/一致性机制帮助处理异常中断后的元数据或事务状态。
缓存脏块、内核缓冲、设备内部缓存的持久化保证不同。关闭文件不等于所有实现中硬件永久保存全部写入;同步语义要看规定。日志也不能替代独立备份。
目录项已改但分配表未完全落盘,崩溃可能产生一致性问题,需恢复机制。
不能,取决于日志模式、提交与持久化边界。
补充知识点
SPOOLing 把一台打印机变成多台物理设备;SCAN 就是访问最远请求后必回头。
SPOOLing 用磁盘队列虚拟共享独占设备;缓冲用于速率匹配。SCAN 走到边界再反向,LOOK 在该方向最后请求处反向。
SCAN/LOOK 的差别会影响移动距离;C-SCAN/C-LOOK 还需确认回程是否计距离。机制概念与题目计费约定应分开。
当前方向上最后请求是 80、磁盘边界是 99:LOOK 可在 80 反向,SCAN 到 99。
相关真题:2024 · 第 32 题
方向、边界、SCAN/LOOK 约定及回程距离是否计入。
408 章节补全
设备驱动等于所有应用程序的读写函数;缓冲完全不消耗内存。
常见层次包括用户 I/O、设备独立软件、驱动、中断处理与硬件。设备独立性用统一接口隐藏设备细节;缓冲协调速率与粒度。
逻辑设备到物理设备映射、权限、错误处理、缓冲可由不同层承担。单/双/循环缓冲影响并行与等待;中断服务结束时数据常先在内核缓冲,未必已经复制到用户缓冲。
键盘驱动处理中断数据后,应用仍可能需通过系统调用取得它。
可以按正确同步交替使用,但不能未经协调读写同一缓冲。
408 章节补全
SSD 的访问时延也必须按磁头寻道加旋转等待计算。
机械盘访问常含寻道、旋转等待和传输时间;SSD 无同样机械寻道,但有闪存擦写、映射和垃圾回收等开销。
平均旋转等待常为半圈,转速单位需转换。调度仍涉及访问模式和设备内部行为;不要把 HDD 的距离模型无条件用于 SSD。
转速 7200 rpm 等于 120 圈/s,一圈约 8.33 ms,平均等待约 4.17 ms(均匀位置模型)。
不能,定位/控制等固定开销可能占主要部分。
408 章节补全
异步表示 OS 不响应进程,互斥共享等于资源不允许多人使用。
并发为多任务一段时间内交替推进;共享为多个活动使用资源;虚拟把物理资源抽象成逻辑资源;异步体现推进时机不可预知。
互斥共享指同一时刻仅允许一个使用者,不是永久独占。虚拟 CPU 靠分时,虚拟内存靠地址映射等;这些术语要结合具体机制解释。
打印机可通过互斥或 SPOOLing 供多个进程使用,并不变成多台物理打印机。
不固定,受调度、I/O 和其他活动影响。
408 章节补全
分时系统的目标是严格满足所有事件的最迟截止时刻。
批处理重视吞吐与资源利用;分时重视交互响应;实时系统重视规定时间内完成任务,区分硬/软实时。
多道程序能在某任务等待 I/O 时运行其他任务。时间片越短不一定越好,切换开销会上升;硬实时截止期违反可能不可接受。
交互终端轮流获得 CPU 是分时;工控急迫任务须在期限内完成是实时要求。
不等于,重点是可保证的截止时间。
408 章节补全
微内核完全没有内核态服务;宏内核没有模块化可能。
宏内核将较多核心服务放内核空间;微内核保留较小核心,部分服务移到用户空间通过通信协作。
微内核有助隔离和扩展,但跨服务通信/切换带来代价;宏内核可以使用模块化设计,结构风格不等于有没有模块。虚拟机监控器也不等于普通微内核。
文件服务放用户进程不代表它不需要内核提供通信与保护机制。
不能无条件推出,取决于通信、实现及工作负载。
408 章节补全
OS 的全部代码在断电后仍留在 RAM,开机直接从普通应用入口执行。
启动由固件和引导程序等逐步加载/定位内核,再初始化必要硬件、内存与进程,随后启动服务和应用。
具体 BIOS/UEFI 流程不同;引导程序属于启动链的一环,不应混同整个 OS。内核建立中断/内存等基础后才能支持用户程序执行。
内核从持久存储加载到 RAM,不是 RAM 自己断电保存了整个系统。
不一定,现有文件系统元数据通常读取使用,格式化是另一操作。
57 条 · 5 个章节
补充知识点
带宽越大,传播时延一定越短。
发送时延=帧长/链路速率;传播时延=距离/信号传播速度。吞吐率是实际完成的传输率。
加大链路速率减少把比特推入链路的时间,不直接提高介质中的传播速度。还要区分排队和处理时延。
光纤长度固定时,从 100 Mb/s 升到 1 Gb/s 不会把传播时延降为原来的十分之一。
相关真题:2024 · 第 33 题
发送时延与传播时延;具体题设还可能有其他时延。
补充知识点
用任意一个公式就能得到最终可达速率。
理想低通信道奈奎斯特 R≤2B log₂M;含噪声香农 C=B log₂(1+S/N),B 用 Hz,信噪比代入线性值。
一个限制码元速率与调制等级,一个限制带噪声信道的信息容量。若两者条件均给出,应同时满足;有带通等模型须按题设。
信噪比 30 dB 对应线性比 1000,不能把 30 直接代入香农式。
相关真题:2022 · 第 34 题
S/N=10^(dB/10)。
补充知识点
CRC 可以自动修复所有单比特错误。
通常 CRC 用于检测,接收端检查余数;检出能力取决于生成多项式与差错模式。纠错需要额外编码机制。
模 2 除法使用异或,不进位、不借位。r 次生成多项式对应 r 位 CRC;余数为 0 也不能无条件证明绝无差错。
某些错误多项式是生成多项式的倍数,可能检测不出。
不能,只表示该校验未检测到错误。
补充知识点
两种协议的接收窗口都与发送窗口相同。
GBN 通常接收窗口为 1;SR 可缓存失序帧。k 位序号:GBN 发送窗口≤2^k−1;等大发送/接收窗口的 SR≤2^(k−1)。
SR 一般需要发送窗口+接收窗口≤序号空间,避免新旧帧混淆。窗口上限不是实际吞吐率,超时重传策略也不同。
3 位序号的等大 SR 窗口最多 4,而 GBN 发送窗口最多 7。
相关真题:2024 · 第 37 题
丢弃,并按协议重复确认此前连续收到的帧。
补充知识点
交换机每个端口划分一个广播域;全双工仍靠 CSMA/CD。
集线器共享碰撞域;普通二层交换机隔离端口碰撞域,但同 VLAN 通常同属广播域。全双工点对点链路无需 CSMA/CD。
广播域通常靠 VLAN 或路由器划分。CSMA/CD 属于共享半双工以太网的冲突检测机制;无线通常采用不同机制。
两个交换机端口属于同一 VLAN,广播帧仍可被转发到另一端口。
相关真题:2024 · 第 35 题
不是,需要 VLAN 等机制。
补充知识点
无线网络也边发送边可靠检测碰撞;RTS/CTS 能消除一切碰撞。
802.11 采用碰撞避免、确认及退避;RTS/CTS 可缓解隐藏站问题,其他站利用持续时间字段设置 NAV。
隐藏站未必能听见发送端,但可能听见接收端的 CTS。SIFS 通常短于 DIFS,便于 ACK 等响应优先发送;RTS 本身仍可能碰撞。
B 听不到 A 却听到 AP 的 CTS,可以据 NAV 延迟发送,避免干扰 A→AP。
相关真题:2024 · 第 36 题
不保证,主要缓解特定竞争问题。
408 章节补全
一个码元始终只有 1 bit;Manchester 完全不需要更多信号变化。
码元率以 Baud 计,信息速率以 bit/s 计;M 种可区分符号可承载 log₂M bit/码元。编码与调制分别组织基带表示或载波特性。
ASK 改幅度、FSK 改频率、PSK 改相位;Manchester 每位中部有跳变便于时钟提取,速率与带宽需依题设口径。不能把波特率直接当比特率。
4 种符号可表示 2 bit,因此 1000 Baud 理想信息率为 2000 bit/s(未另计开销)。
3 bit/码元。
408 章节补全
全双工等于一根线永远只有一个方向;光纤完全没有传播时延。
单工仅单方向;半双工双向但不能同时;全双工允许双向同时。双绞线、同轴、光纤、无线在带宽、干扰与距离方面不同。
光传播仍有有限速度,链路距离产生传播时延。复用用于共享资源;全双工不是将一条流自动翻倍为两倍单向吞吐。
对讲机常为半双工,不能双方同时讲话;全双工点对点以太网可同时发收。
不等于,仍有实际物理限制。
408 章节补全
统计时分复用给每个用户永久固定时隙;CDM 任意码片都正交。
频分分不同频带,时分分时隙,波分分光波长,码分利用可区分码序列。统计时分按需求动态组织。
正交码的内积用于分离信号,映射 0/1 到 ±1 及是否归一化需按题设。不是所有随机码字都满足正交;保护带/时隙标识等开销降低有效利用率。
普通同步 TDM 用户闲置时仍可能占固定槽,统计 TDM 可把槽给活跃用户。
光纤,以不同光波长复用。
408 章节补全
数据中出现帧界定符,就必须禁止该数据发送。
透明传输让任意数据不与边界控制混淆;字符填充用转义,典型比特填充在连续五个 1 后插 0。
发送端填充、接收端解除,填充位不属于原数据。PPP 等协议还需按实际链路和帧规则区分;不能在遇四个 1 时就插位。
原数据中的 01111110 可以通过填充避免被误认为 HDLC 标志。
不应,正确解除恢复原数据。
408 章节补全
CRC 检出错误就由 CRC 本身重新发送帧;停止等待可以不编号。
ARQ 用检错配合 ACK、序号和重传计时提供可靠传送;停止等待、GBN、SR 有不同窗口与重传范围。
停止等待要区分新帧和重传,常用交替位;ACK 丢失会导致重传,接收端需去重。丢数据、丢 ACK、超时过早的时间线要分别画。
接收端已收到帧 0,但 ACK 丢失;再次收到帧 0 不能重复交付。
不是,还用于识别新帧、重复与顺序。
408 章节补全
交换机根据目标 MAC 学习发送端位置,未知单播直接丢弃。
自学习通常用源 MAC 和入端口建立映射;已知目标按表转发,未知单播在相应广播域/VLAN 内泛洪。
若目标就在入端口关联网段可过滤。表项有老化机制,搬迁后可更新;泛洪不等于路由器跨网广播,也不能无限循环而不控制二层环路。
H1 从端口 1 发往未知 H2,交换机先学 H1→1,再泛洪寻找 H2。
不应,入端口关联的是本次帧源端。
408 章节补全
只要 IP 同网段,就可以跨不同 VLAN 直接通过二层广播 ARP。
VLAN 逻辑划分二层广播域;Trunk 可承载多个 VLAN 并标记所属关系;跨 VLAN 通常需三层转发。
IP 子网与 VLAN 是不同层的组织方式,常配套但不能互相替代。端口成员、标签与路由决定可达性;同交换机上的两个 VLAN 也可隔离广播。
H1、H2 配相同 IP 前缀但在隔离 VLAN 中,普通二层 ARP 不必可达对方。
不必,可通过相应链路跨交换机延伸。
补充知识点
跨网通信时 ARP 获取远端主机的 MAC。
先根据路由决定下一跳,再用 ARP 获取本链路上下一跳 IPv4 地址对应的 MAC。
目标不同网段时下一跳通常是网关。路由器每跳重封装链路层首部;通常端到端 IP 地址保持,NAT 是另一个机制。
访问远端网站时,局域网帧的目标 MAC 通常是网关 MAC,IP 目标仍是网站地址。
相关真题:2024 · 第 35 题
不能,通常限于本地广播域。
补充知识点
选路时选择数值最大的掩码或第一条匹配。
在所有匹配目的地址的路由中,选择前缀最长者;默认路由 /0 是最宽泛的后备项。
先检查地址是否匹配,再比较前缀长度。下一跳和出接口可能单独指定,不能把目的网段地址直接当下一跳。
10.1.2.3 同时匹配 10.0.0.0/8 与 10.1.2.0/24,选择 /24。
不能。
补充知识点
片偏移以字节计,分片总长度不含首部。
片偏移单位为 8 字节;总长度含该片 IP 首部;除最后一片外的数据部分通常是 8 的倍数。
偏移相对原始 IP 数据部分,不能把首部计入偏移。MF=1 表示后面还有片,最后片 MF=0;重组通常在目的主机完成。
片偏移 185 对应原数据的第 1480 字节处,不是第 185 字节。
不是;若后面还有分片,首片 MF=1。
补充知识点
IPv4 首部校验和覆盖用户数据;每次丢包都发 ICMP。
IPv4 首部校验和仅覆盖首部;转发时 TTL 递减导致首部校验需更新。ICMP 差错有发送限制。
TTL 归零时通常丢弃并可产生超时差错;不是所有数据包都允许返回差错,例如不对另一条 ICMP 差错再生成差错。IPv6 不使用同样首部校验和。
TCP 校验覆盖 TCP 首部与数据及伪首部,而 IPv4 的校验不覆盖 IP 负载。
不能,需要相应更新。
补充知识点
距离向量交换完整拓扑;链路状态只交换到目的地的距离。
距离向量交换距离及下一跳相关信息;链路状态发布本地链路状态,节点建立拓扑并计算最短路。
距离向量可能发生无穷计数,水平分割/毒性逆转用于缓解但不解决所有拓扑中的环路。链路状态也有传播与收敛时间。
RIP 属于距离向量;OSPF 属于链路状态。
不能。
补充知识点
默认网关随便填一个路由器地址;可用主机数一律为 2^h−2。
IPv4 网络地址由 IP 与掩码按位与得到;常规子网排除全 0/全 1 主机号,默认网关通常需在本地可达链路。
传统可用主机数规则对 /31 点到点与 /32 等特殊用途不直接适用。先看具体网段和用途,不能拿远端路由器地址作直接下一跳。
192.168.1.60/27 属于 192.168.1.32/27,广播为 .63;网关 .62 在该子网内。
相关真题:2022 · 第 35 题;2022 · 第 36 题
它不在该 /27 子网内,普通配置下不能直接这样使用。
补充知识点
南向接口连接业务应用与控制器,交换机自己承担全部集中控制。
SDN 分离控制与数据平面;南向接口连接控制器与转发设备,北向接口连接应用与控制器。
数据平面根据流表匹配和转发,控制平面制定策略与下发规则。OpenFlow 是常见南向接口协议之一,不是所有 SDN 的唯一实现。
控制器向交换机下发流表属于南向交互。
相关真题:2022 · 第 37 题
北向接口。
408 记忆与概念补充
TTL 就是一个 TCP 计时器;网络层所有时间参数都计数据重传。
IPv4 TTL 是首部中的生存限制字段;IP 重组超时用于清理不完整分片;RIP 更新/失效计时用于维护路由。
TTL 在现代转发中主要按跳数扣减,并非主机上“到时重发”的 RTO。IP 不因重组超时自动重传原数据报;端到端可靠性由上层协议另行处理。
路由器 TTL 归零丢包与目的主机分片迟迟不全,是不同的失效场景。
通常由执行重组的目的主机 IP 层维护。
408 记忆与概念补充
缺一个分片时,目的主机会永久保存已到分片,或重传缺片。
重组必须设置超时,届时丢弃不完整的数据报;IP 本身不提供按缺片自动重传机制。
超时不是片偏移,也不等于 RTT。不要将 IPv4 TTL 字段机械当成重组等待秒数。收到首片且满足 ICMP 发送条件时,可报告重组超时。
到达第 1、3 片而第 2 片一直未到,等待过期后不能把不完整内容直接交给 TCP。
不能,应按重组失败处理。
408 记忆与概念补充
路由 180 秒失效后立刻从表中物理删除;120 秒从最初更新时间起计。
RFC 2453 的典型参数:约每 30 s 定期更新,180 s 未获有效更新使路由超时,失效后再保留 120 s 供垃圾收集。
路由失效时度量设为 16,停止用于正常转发,但暂保留并通告不可达。垃圾收集从失效阶段开始,不是与最初的 180 s 同时开始;厂商的保持/清除参数可能另有设置。
无新路由等条件下,若从最近一次更新 t=0 计,t≈180 s 失效,再过 120 s 删除。
| 阶段 | 标准示例值 | 动作 |
|---|---|---|
| 周期更新 | 约 30 s | 向邻居通告路由 |
| 路由超时 | 180 s | 度量设 16,停止正常使用 |
| 垃圾收集 | 失效后 120 s | 删除失效表项 |
最大有效跳数 15,不可达度量 16。
408 章节补全
私网地址可在全互联网不经转换唯一可路由;NAT 只修改 MAC。
IPv4 地址定位网络接口,CIDR 用前缀划网段。私网范围常见 10/8、172.16/12、192.168/16;NAT 可改 IP,NAPT 还映射端口。
NAT 可能影响端到端地址与校验和;它不是路由器正常转发时必须执行的操作。端口用于区分传输端点,不能替代 IP 路由前缀。
多个内网主机共享一个公网地址时,可用不同外部端口区分会话。
不属于;该范围第二字节为 16~31。
408 章节补全
IPv6 地址仍为 32 位,路由器像 IPv4 一样按 MTU 随处分片。
IPv6 地址为 128 位,基本首部固定 40 B;中间路由器不按 IPv4方式分片,源端可使用分片扩展机制。
IPv6 无基本首部校验和,用邻居发现等代替 IPv4 ARP 的部分职责。地址压缩 :: 一处最多用一次,不能因此失去组数信息。
一个 IPv6 基本首部含地址与下一首部等字段,额外功能可用扩展首部。
没有同样的广播地址类型,常通过组播等机制实现相应用途。
408 章节补全
ICMP 替代 TCP 进行所有丢包重传,ping 属于 TCP 应用数据。
ICMP 传递网络差错和诊断/查询信息,通常作为 IP 负载。ping 常使用 Echo 请求/应答。
ICMP 不等于网络层可靠传输。TTL 到期、目的不可达等可报告,但有发送限制;不能对 ICMP 差错再层层生成差错。traceroute 利用逐跳 TTL 等机制及响应。
发出 ICMP 超时并不保证原数据报自动成功重发。
不是,仍要封装在 IP 和相应链路层之中。
408 章节补全
BGP 是链路状态协议;所有协议都按最少跳数选全网路径。
RIP 是域内距离向量,常按跳数;OSPF 是域内链路状态,按配置代价;BGP 是域间路径向量,考虑 AS 路径与策略。
协议用途、交换信息和路由度量不同。BGP 的策略不等于最短地理距离;OSPF 区域组织也不是 TCP 连接窗口。RIP/OSPF 并非应用文件传输协议。
RIP 的 16 代表不可达,不能因此认为其他协议也最大只有 15 跳。
不,BGP 主要交换自治系统之间的可达与策略路由信息。
408 章节补全
只有 TCP 才能出现流量控制;队列变长一定是接收主机缓冲不足。
流量控制匹配发送/接收能力,拥塞控制处理网络资源负载;链路层和传输层均可有各自的流控机制,QoS 涉及时延/吞吐等服务指标。
瓶颈路由队列因网络拥塞增长不等于终端 rwnd=0。资源预留、调度、整形等可影响服务;不要把不同层机制混为一个计时器。
发送端路由器出口拥挤时,终端接收缓冲仍可能有大量空间。
不能。
408 章节补全
首部长度、总长度和片偏移全都以字节为单位。
IPv4 首部长度以 4 B 为单位,总长度以 B 为单位,片偏移以 8 B 为单位;标识协助同一数据报分片重组,DF 禁止分片,MF 表示还有后续片。
基本首部 20 B,带选项可更长;MTU 限制所承载的 IP 数据报大小。源/目的地址、协议号、TTL 与首部校验字段作用不同,不能把端口写成 IP 首部固有字段。
DF=1 且需要更小 MTU 而无法直接发送时,不能照常让路由器分片。
不在,端口属于传输层首部。
408 路由与地址解析的冷门辨析
ARP 解析一次就可永远不再验证,所有 OS 老化时间固定相同。
ARP 缓存需淘汰或验证失效的 IP→MAC 映射;若用老化定时,超时值应允许按实现或配置调整。
换网卡、主机移动等可能使旧映射失效。缓存老化、等待 ARP 回答和 TCP 重传是不同机制;交换机 MAC 表老化也不是同一个表。不要背成所有设备固定若干分钟。
同一 IP 后来对应新网卡时,旧 MAC 映射不能永久沿用。
不同,前者映 IP→MAC,后者常映 MAC→端口。
408 路由与地址解析的冷门辨析
OSPF 不收到一个 Hello 就必立刻宣告邻居失效;Dead 与 LSA Age 是同一个时间字段。
Hello 周期发送以发现/维护邻居;Dead 等待过期表示一段时间未获邻居 Hello;LSA Age 管理链路状态通告的年龄,职责不同。
相邻接口的相关参数需匹配以正常形成邻居关系。10 s/40 s 是常见广播网配置例子,不是所有网络类型的固定值;具体题目给值时按题设。
接口 Hello 为 10 s、Dead 为 40 s 时,不能只因漏掉一次 Hello 就立即按 Dead 超时处理。
不能,它们属于不同协议和参数体系。
408 路由与地址解析的冷门辨析
BGP 使用 TCP,所以不需要自己的 KEEPALIVE;所有保持时间固定 180 s。
BGP 有自己的 KEEPALIVE 消息和 Hold 机制,用于维护 BGP 会话;它们不同于 TCP 层可选保活。
Hold Time 按本端配置与对端 OPEN 声明取较小值;接收有效的 KEEPALIVE/UPDATE 可维护保持计时,期满会处理会话失效。协商为 0 时不启动 Hold Timer,也不定期发送 KEEPALIVE;不能硬套厂商默认值。
即使 TCP 底层尚未给出断连错误,BGP 的保持时间也可能先超时。
参考:RFC 4271:BGP KEEPALIVE 与 Hold Timer
不等价,协议层、报文和维护对象均不同。
补充知识点
ACK 确认号表示最后收到的字节;纯 ACK 占一个序号。
确认号表示下一期待的字节序号;数据按字节编号;SYN 和 FIN 各占一个序号,纯 ACK 不占。
TCP 累积确认只确认连续前缀,不能因更高序号的数据到达就跨越缺口确认。序号按 32 位模空间处理。
收到从 100 开始的 20 字节连续数据后,确认号为 120。
不消耗。
补充知识点
rwnd 与 cwnd 都由接收端直接通知。
rwnd 反映接收缓冲能力;cwnd 反映发送端对网络拥塞的控制。可在途量通常受 min(rwnd,cwnd) 限制。
真正可新增发送的数量还要扣除已发送但未确认的数据。窗口单位、MSS 及题设拥塞算法要分清,不能只看其中一个窗口。
rwnd=8 MSS,cwnd=4 MSS,限制通常为 4 MSS;已有 3 MSS 在途时只剩约 1 MSS 余量。
不一定,仍受 cwnd 和在途数据限制。
补充知识点
慢开始每收到一个 ACK 就翻倍;所有丢包处理都相同。
理想条件下慢开始约每 RTT 翻倍,拥塞避免约每 RTT 增 1 MSS;每 ACK 的更新不同。
经典教材模型与具体 TCP 实现有差异。超时与三次重复 ACK 后的更新也不同,题目若给 Tahoe/Reno 或简化规则应按其处理。
当前窗口含多个段时,某一个 ACK 不会使整个窗口立即翻倍。
相关真题:2022 · 第 38 题
不能。
补充知识点
收到 FIN 后就不能再发送任何数据;四次挥手绝不可合并。
FIN 关闭该方向的发送,另一方向可继续;ACK 与 FIN 有时合并。主动关闭方通常进入 TIME_WAIT,标准时长为 2MSL。
TCP 是双向连接,两方向独立关闭。TIME_WAIT 有助于处理旧段和重传最后 ACK;不能仅用最后报文发送者判断所有状态。
A 发 FIN 后,B 确认并继续发送剩余数据,之后 B 再发 FIN。
相关真题:2022 · 第 39 题;2024 · 第 38 题
其发送方向尚未关闭时可以。
补充知识点
伪首部是另一个真正发送的 UDP 首部;UDP 校验与 CRC 相同。
UDP/TCP 使用反码和校验,计算时包含伪首部;伪首部借用 IP 地址等信息,不作为该传输层首部单独发送。
16 位反码和出现最高位进位要回卷相加,最后按位取反。奇数字节长度需为校验补 0,补字节不算有效数据。
算得 17 位和后,不能简单丢弃最高位而不回卷。
相关真题:2024 · 第 39 题
不算,UDP 长度包含 UDP 首部和数据。
408 记忆与概念补充
所有 TCP 定时器都是为了重传数据,超时就断开连接。
四类机制分别解决:未确认数据重传、零窗口探测、空闲连接存活探测、关闭后的 2MSL 等待。
这些计时器不是统一的固定时长。RTO 由 RTT 等估计;持续计时器不是拥塞控制;保活通常可选;TIME_WAIT 不是接收窗口探测。
题目说“窗口恢复通知可能丢失”应联想到持续计时器,而不是保活。
| 计时机制 | 触发场景 | 主要动作/目的 |
|---|---|---|
| 重传 RTO | 已发送数据未及时确认 | 重传最早未确认数据,超时退避 |
| 持续 / Persist | 对端公告零窗口 | 周期探测窗口,防止永久停发 |
| 保活 / Keepalive | 启用保活且连接长期空闲 | 探测对端是否仍存活 |
| TIME_WAIT | 主动关闭进入等待状态 | 等待 2MSL,处理旧段及最后 ACK 重传 |
持续处理零窗口带来的停发风险;保活探测长期空闲连接的对端是否仍可达。
408 记忆与概念补充
RTO 总等于一次测得的 RTT;重传后任何 ACK 都可用来估计 RTT。
RTO 依据平滑 RTT 和波动估计;无消除歧义手段时,不用已重传报文段测 RTT。
RFC 模型:RTO=SRTT+max(G,4×RTTVAR),G 是计时精度。后续更新 RTTVAR 使用更新前的 SRTT。考试给简化加权公式或常量时,按题设。
ACK 到来时若原报文和重传报文都可能导致它,无法明确对应哪一次发送时间。
避免把 ACK 归属不明确的往返时间作为样本;时间戳等消歧方案另论。
408 记忆与概念补充
收到 3 个重复 ACK 等同于 RTO 到期。
快速重传由重复 ACK 等信号触发,可在 RTO 到期前重传;超时重传由重传计时器到期触发。
经典教材模型中,两种事件对拥塞窗口的处理可以不同。RTO 超时通常指数退避;不能把 TCP Reno 的重复 ACK 处理套成超时处理。
三个重复 ACK 已提示缺口时,不必再等待原重传计时器走完。
不需要。
408 记忆与概念补充
rwnd=0 后发送方永不再发送任何报文;窗口更新丢失只能等重传定时器。
零窗口使正常数据发送受限,发送方使用探测机制获取新窗口信息,避免双方永久等待。
对端可能已经空出缓冲区,但携带窗口更新的 ACK 不保证可靠送达。探测有助重新得知窗口;它不代表把 cwnd 当作 rwnd,更不等于认为对端已掉线。
接收方窗口从 0 恢复到非 0,但通知丢失,发送方可通过探测发现恢复。
不应如此,可继续零窗口探测,具体终止策略以题设或实现为准。
408 记忆与概念补充
保活是每个 TCP 连接必启用的机制;一次探测失败就判掉线。
TCP 保活可选,可按连接启用;长期空闲后探测,单次无响应不足以断言连接死亡。
教材常以约 2 小时等数值举例;RFC 规定默认关闭,启用时默认空闲间隔不小于 2 小时。考试若另给时间和次数,按题设;不要把系统配置当永久标准。
一个只是不发送业务数据的健康连接不必关闭;保活与应用层心跳也不是同一层机制。
不能,值可配置,题目有约定时按约定。
408 记忆与概念补充
2MSL 从发出第一个 FIN 时开始;最后 ACK 本身可靠重传。
主动关闭方通常在收到对方 FIN 并发送最后 ACK 后进入 TIME_WAIT,按该状态计 2MSL;再次收到 FIN 时可重新发送 ACK 并重启等待。
等待期间既给旧报文消失留时间,也给对方重传 FIN、自己补发 ACK 留时间。FIN 往返和数据传输耗时若题目要求总时长,应另行加上。
只问 TIME_WAIT 驻留为 2MSL;问从连接建立到 CLOSED,就不能只答 2MSL。
对方重传 FIN,TIME_WAIT 方再确认;纯 ACK 不按数据报文那样独立可靠重传。
408 记忆与概念补充
延迟 ACK 与发送端的超时重传计时器是同一个。
延迟 ACK 是接收端短时延后发送确认的机制;RTO 是发送端等待确认的机制,职责和所在端不同。
延迟确认可减少独立 ACK 数量或等待捎带,但不能无期限等待。若题目给延迟时间,就计入 RTT/时间线;不能认为每个数据段立即返回 ACK。
接收端短时等下一段以合并确认,会影响观察到的确认间隔,但不改变 ACK 的累计语义。
不会。
408 章节补全
TCP 保留每次 write 的报文边界;UDP 无连接就不需要端口。
TCP 提供有连接的可靠字节流,不保留应用写入边界;UDP 提供无连接数据报,仍用端口复用/分用。
端点通常由地址、端口与协议关联;TCP 连接以双端组合区分。UDP 首部 8 B,TCP 基本首部 20 B,可有选项。可靠与实时适用性取决于需求,不是协议名称直接决定。
一次发送 100 B、再发送 50 B,TCP 接收 API 可按不同批次交付,应用需自定义消息边界。
通常保留;但应用仍需面对丢失、重排及最大长度等约束。
408 章节补全
第三次握手必再带 SYN,客户端第一个数据从初始序号本身开始。
典型握手:SYN(seq=x);SYN+ACK(seq=y,ack=x+1);ACK(seq=x+1,ack=y+1)。双方 SYN 各占 1 个序号。
第三次 ACK 可带数据,纯 ACK 不耗序号。握手交换初始序号并确认两方向通信,不保证身份认证或消息加密;中途丢失可触发重传。
若客户端初始 x=100,SYN 被确认后的下一个数据序号通常从 101 开始。
不必,两端各有自己的序号空间。
408 章节补全
ACK 标志为 0 时确认号仍总作为有效累积确认;FIN 和 RST 语义相同。
ACK 标志指确认字段有效;SYN 建立同步,FIN 正常关闭发送方向,RST 重置连接。首部长度字段以 4 B 为单位。
基本首部 20 B,可含选项至 60 B;确认号、窗口、校验和等职责不同。RST 不是正常半关闭的替代说法,控制标志组合需结合连接状态判定。
首部长度值 5 对应 20 B,不是 5 B。
表达接收窗口相关值,cwnd 是发送端拥塞控制状态,不直接放在该字段。
补充知识点
DNS 只使用 UDP;客户端自己一定迭代访问所有服务器。
主机通常向递归解析器查询,解析器可迭代访问权威体系;DNS 既可用 UDP,也可用 TCP。
缓存可缩短流程,不能每次都按“根→顶级域→权威”完整计算。区域传送等常用 TCP,响应截断后可重试 TCP。
本地解析器命中缓存时,不必访问根服务器。
可以,不能绝对说只用 UDP。
补充知识点
FTP 控制与数据同一连接;SMTP 用于收取邮箱邮件。
FTP 分控制与数据连接,主动/被动模式影响数据连接发起方;SMTP 用于邮件传输,POP3/IMAP 用于访问邮件。
HTTP 持久连接复用连接,但不等于 HTTP/1.1 普通串行请求自动并行。涉及持久连接或流水线请求时,须按题设版本与规则判断。
FTP 控制连接常用端口 21,不能因此断言所有数据连接都固定由服务器端口 20 发起。
不同,IMAP 访问邮箱,SMTP 传送邮件。
408 章节补全
域名查询返回的永远只有一条 IPv4 地址,TTL 表示 TCP 时间等待。
A 映 IPv4,AAAA 映 IPv6,CNAME 表示别名,MX 指示邮件交换。DNS TTL 控制缓存有效期,和 IP TTL 不同。
一个名字可有多条记录,别名解析可能需继续查询。缓存减少查询次数但可能短时保留旧数据;权威回答与递归解析器缓存回答要区分。
MX 是邮件服务器相关记录,不等于浏览器直接访问的网页服务器 A 记录。
不是,DNS 缓存 TTL 与 IP 首部 TTL 完全不同。
408 章节补全
DHCP 只分配 MAC 地址;DISCOVER 是 TCP 建立连接报文。
DHCP 为主机提供租约式 IP 配置,常见流程 Discover→Offer→Request→Ack;常用 UDP 服务端 67、客户端 68。
初始客户端尚无可用 IP,常通过广播发现。租约续租不同于 TCP 保活;DNS、DHCP、HTTP、邮件协议分工不同。端口是常见默认约定,服务可另配置。
DHCP 可以同时给网关和 DNS 服务器配置,后者由 DNS 服务执行名字解析。
| 服务 | 常见默认端口 | 主要用途 |
|---|---|---|
| HTTP / HTTPS | 80 / 443 | 网页请求 / 加密访问 |
| DNS | 53(UDP/TCP) | 域名记录查询 |
| DHCP | 67 / 68(UDP) | 服务器 / 客户端配置 |
| FTP 控制 | 21(TCP) | 文件传输控制通道 |
| SMTP | 25(TCP) | 邮件传输 |
| POP3 / IMAP | 110 / 143(TCP) | 邮件访问 |
分别常用 80、443、53、21、25、110、143;安全扩展或自定义服务可能另用端口。
408 章节补全
HTTP/1.1 持久连接自动意味着所有对象同时返回;HTTP 状态码与 TCP 状态相同。
HTTP 定义请求方法、资源和响应状态;持久连接复用已建立连接,减少重复握手,但是否流水线/并行需看题设。
页面可能含 HTML 和多个嵌入对象,DNS、TCP、请求/响应与对象发送时间要分开。GET、POST、HEAD 等方法不同;HTTP 200/404 是应用响应,不是 TCP 连接状态。
一个 HTML 引用 3 张图片,不能仅因只有一页就只算一次资源请求。
通常不需要,可在已有连接上复用;具体请求方式仍需看题设。
408 章节补全
所有 FTP 数据连接都由服务器端口 20 发起到客户端。
FTP 控制连接常到服务器 TCP 21;主动模式典型由服务器发起数据连接,被动模式由客户端连接服务器指定数据端口。
控制命令与文件内容分通道;不同文件或目录列表可使用单独数据连接。NAT/防火墙可影响主动模式可达,不能把端口 20 当所有模式的固定结论。
被动模式中服务器返回可连接数据端口,客户端主动去连该端口。
可以,数据连接不只用于文件正文。
408 章节补全
MIME 是传送邮件的可靠传输协议;SMTP 负责用户所有邮箱同步。
SMTP 负责邮件传输;POP3/IMAP 访问邮箱;MIME 扩展邮件内容格式,使非 ASCII 内容和附件可表示。
邮件客户端到提交服务器、服务器之间传递、收件客户端取信是不同阶段。IMAP 支持服务器端邮箱组织与同步;默认端口和加密/提交端口需按题设区别。
附件可通过 MIME 编码随邮件内容传递,但最终传输仍依赖相应邮件协议。
不替代,它描述内容类型与编码格式。
408 章节补全
交换机、路由器和 TCP 都工作在同一层;每层都把数据叫帧。
常用五层:应用、传输、网络、数据链路、物理;封装逐层增加所需控制信息,接收端按协议解封装。
OSI 为七层,TCP/IP 教材可用四层/五层模型,不应因名称不同就认为协议所属层不同。典型路由器主要网络层转发,普通二层交换机主要链路层转发。
TCP 段封装进 IP 数据报,再进链路帧,通过比特信号发送。
不需要,转发依据主要是网络层相关信息。
408 章节补全
同层实体之间的规则叫接口,邻层提供的功能叫协议。
协议约定对等实体通信规则;服务是本层向上层提供的能力;接口描述相邻层如何调用该服务。
服务由下层向上层提供,而协议在对等层之间逻辑执行;实际数据经下层传输。协议的语法、语义、时序是不同内容。
TCP 向应用提供可靠字节流,是服务;TCP 首部与状态转换规则属于协议。
不必,TCP 可在无连接 IP 上实现连接服务。
408 章节补全
分组交换不需排队,也总比分组之外所有方式耗时短。
电路交换先建立专用通路;报文交换完整报文逐跳存储转发;分组交换分块转发,可流水化并统计复用。
电路需建连但后续传输可少逐跳存储;分组有首部、排队和丢失重排代价。比较时统一文件大小、分组大小、链路速率与存储转发约定。
一条长报文拆成多包后可在不同链路重叠传送,而不是每跳都等待全文件。
不能,需要具体参数和流量条件。
个人错题包含近期答卷错误、概念疑问和不完整步骤;补充知识点单独标注。分类可重叠。“近年考查”标出已核对真题的年份与题号,供重点复习,不是下次考试的概率预测。冷门指容易漏复习的细节,不代表统计后的出题频率。概念解析为重新组织的讲解,具体真题仍以题设为准。
本页先整理已取回的近期问题,未核实的题号和成绩不填。按公开 408 四科章节组织,不把实现特例当作通用公式。更新:2026-10-12。