皮皮灰数据结构计算机组成原理
1.下列程序段的时间复杂度是( )。
cppint i = 1, count = 0; while (i <= n) { for (int j = 1; j <= i; j++) count++; i *= 2; }
A. O(n) B. O(nlogn) C. O(logn) D. O(n²)
答案:A. O(n)
程序主要包含两个嵌套的循环:
外层 while 循环:i 从 1 开始,每次乘以 2,直到 i 超过 n。
内层 for 循环:从 1 到 i 进行循环。
我们逐步分析:
外层 while 循环:
初始时 i = 1。
每次迭代后,i 变为之前的 2 倍,即 i 的值依次是 1, 2, 4, 8, ..., 2^k。
这个循环持续到 i > n,即 2^k > n,因此迭代次数 k 满足 2^k≈n 或 k=log2n。
因此,外层 while 循环迭代次数是 O(logn)。
内层 for 循环:
内层循环次数取决于当前的 i 值,每次从 1 到 i 进行迭代。
当 i = 1 时,内层循环执行 1 次;
当 i = 2 时,内层循环执行 2 次;
当 i = 4 时,内层循环执行 4 次;
...
当 i = 2^k 时,内层循环执行 2k 次。
总的来说,内层循环在每次 while 循环中执行的次数是:1+2+4+8+...+2log2n。
2n-1(等比数列求和)故时间复杂度为 O (n)。
解析:i 依次为 1,2,4,...,2^k(2^k ≤n),循环次数为 1+2+4+...+2^k = 2^(k+1)-1 ≈n,时间复杂度为 O (n)。
2.算法 B 用栈检查字符串中的括号匹配,栈的容量为 2。
下列字符串中,B 不能处理的是( )。
A. (a + [b - c]) + e
B. [a + (b + c)] (d + e)
C. (a + [b - (c + d)] + (e - f))
D. [a + [b - c] - (d + e)]
【皮皮灰】C. (a + [b - (c + d)] + (e - f))
选项 A:括号序列为 ([ ])
处理流程:(入栈(深度 1)→ [入栈(深度 2)→ ] 出栈(深度 1)→ ) 出栈(深度 0)。
最大深度 2,可处理。
选项 B:括号序列为 [ ( ) ] ( )
处理流程:[入栈(深度 1)→ (入栈(深度 2)→ ) 出栈(深度 1)→ ] 出栈(深度 0)→ (入栈(深度 1)→ ) 出栈(深度 0)。
最大深度 2,可处理。
选项 C:括号序列为 ( [ ( ( ) ] ( ) )
处理流程:(入栈(深度 1)→ [入栈(深度 2)→ (入栈(此时栈内已有 (和 [,深度 3,超过容量 2)→ 栈溢出,无法处理。
最大深度 3,不可处理。
选项 D:括号序列为 [ [ ( ) ] ( ) ]
处理流程:[入栈(深度 1)→ [入栈(深度 2)→ (入栈(深度 3)→ ) 出栈(深度 2)→ ] 出栈(深度 1)→ (入栈(深度 2)→ ) 出栈(深度 1)→ ] 出栈(深度 0)。
最大深度2,可处理。
3.二叉树用顺序存储(数组 R),-1 表示节点不存在。下列数组中,不能表示二叉树的是( )。
A. (10, 5, 15, -1, 7, -1, 20)
B. (8, -1, 12, 10, -1, -1, 15)
C. (25, 18, 30, 16, -1, -1, -1)
D. (5, 3, 7, -1, 4, 6, -1)
【皮皮灰】B. (8, -1, 12, 10, -1, -1, 15)
数组下标为 i 的节点,左孩子下标为 2i + 1,右孩子下标为 2i + 2;若节点 R [i] = -1(不存在),则其左、右孩子必须也不存在(即 R [2i + 1] 和 R [2i + 2] 必为 - 1 )。
选项 A:(10, 5, 15, -1, 7, -1, 20)
下标 0(10,根节点):左孩子下标 1(5,存在),右孩子下标 2(15,存在),合理;
下标 1(5):左孩子下标 3(-1,不存在),右孩子下标 4(7,存在),合理(存在的节点可只有右孩子);
下标 2(15):左孩子下标 5(-1,不存在),右孩子下标 6(20,存在),合理;
其他下标(3、5)为 - 1,其对应的孩子下标(7、8 等,超出数组范围)无需考虑。无矛盾,可表示二叉树。
选项 B:(8, -1, 12, 10, -1, -1, 15)
下标 0(根节点 8):左孩子下标 1(-1,不存在),右孩子下标 2(12,存在),初始合理;
关键矛盾:下标 1 为 - 1(节点不存在),但其左孩子下标应为 2×1 + 1 = 3,而 R [3] = 10(存在)。根据规则,不存在的节点不能有孩子,此处违反逻辑。无法表示二叉树。
选项 C:(25, 18, 30, 16, -1, -1, -1)
下标 0(根节点 25):左孩子下标 1(18,存在),右孩子下标 2(30,存在),合理;
下标 1(18):左孩子下标 3(16,存在),右孩子下标 4(-1,不存在),合理;
下标 2(30):左孩子下标 5(-1,不存在),右孩子下标 6(-1,不存在),合理(存在的节点可无孩子);
其他下标(4、5、6)为 - 1,无对应的孩子冲突。无矛盾,可表示二叉树。
选项 D:(5, 3, 7, -1, 4, 6, -1)
下标 0(根节点 5):左孩子下标 1(3,存在),右孩子下标 2(7,存在),合理;
下标 1(3):左孩子下标 3(-1,不存在),右孩子下标 4(4,存在),合理;
下标 2(7):左孩子下标 5(6,存在),右孩子下标 6(-1,不存在),合理;
其他下标(3、6)为 - 1,无对应的孩子冲突。无矛盾,可表示二叉树。
综上,选 B。
4.下列关于二叉树和森林的叙述中,正确的是( )。
A. 完全二叉树中,叶子节点只能在最后两层出现
B. 森林转换为二叉树后,二叉树的右子树一定为空
C. 二叉树中,度为 1 的节点数等于叶节点数减 1
D. 任何一棵二叉树都能唯一地转换为一个森林
【皮皮灰】A. 完全二叉树中,叶子节点只能在最后两层出现
选项 A:完全二叉树的定义为:深度为 k 的完全二叉树,除第 k 层外,其余各层(1 至 k - 1)的节点均满,且第 k 层的节点从左到右连续排列。叶子节点(度为 0 的节点)只能出现在最后两层(第 k 层和第 k - 1 层),此叙述正确。
选项 B:森林转换为二叉树的规则是:将各树转为二叉树后,后续树的根节点依次作为前一棵树根节点的右孩子。若森林包含多棵树,转换后的二叉树右子树不为空,故该叙述错误。
选项 C:二叉树中,叶节点数(n₀)、度为 2 的节点数(n₂)满足关系 n₀ = n₂ + 1,与度为 1 的节点数(n₁)无关,故该叙述错误。
选项 D:二叉树转换为森林时,若二叉树右子树为空,转换结果为单棵树(森林仅含一棵树);若右子树非空,对应多棵树。但 "森林" 是 m(m≥0)棵树的集合,单棵树属于特殊森林,转换是唯一的。不过,此选项的表述易误解为 "森林必须含多棵树",且相比之下 A 的叙述更严谨无误。
综上,选 A。
5.字符集含 6 个字符,频次分别为 1、2、3、5、7、9。构造哈夫曼编码后,编码长度为 3 的字符个数是( )。
A. 1
B. 2
C. 3
D. 4
【皮皮灰】A. 1
哈夫曼树构造步骤:
初始字符频次:1、2、3、5、7、9(共 6 个叶子节点)。
第 1 次合并:选取最小的 1 和 2,合并为新节点 3(频次 1 + 2 = 3),剩余节点:3(新)、3(原)、5、7、9。
第 2 次合并:选取最小的 3(新)和 3(原),合并为新节点 6(3 + 3 = 6),剩余节点:5、6、7、9。
第 3 次合并:选取最小的 5 和 6,合并为新节点 11(5 + 6 = 11),剩余节点:7、9、11。
第 4 次合并:选取最小的 7 和 9,合并为新节点 16(7 + 9 = 16),剩余节点:11、16。
第 5 次合并:最后合并 11 和 16,得到根节点 27(11 + 16 = 27)。
各字符编码长度(路径边数):
F (9) 可能会得到编码 0(长度 1)
E (7) 可能会得到编码 10(长度 2)
D (5) 可能会得到编码 110(长度 3)
C (3) 可能会得到编码 1110(长度 4)
A (1) 可能会得到编码 11110(长度 5)
B (2) 可能会得到编码 11111(长度 5)
6.下列关于图的叙述中,正确的是( )。
A. 无向连通图的生成树一定包含所有边
B. 有向图的强连通分量个数至少为 1
C. 存在拓扑排序的图一定是有向完全图
D. 用 DFS 遍历无向图时,非树边必为交叉边
【皮皮灰】B. 有向图的强连通分量个数至少为 1
选项 A:无向连通图的生成树是包含所有顶点且边数为 (n - 1)(n 为顶点数)的极小连通子图,不包含所有边。因此 A 错误。
选项 B:强连通分量是有向图中极大的强连通子图。任何有向图至少有一个强连通分量(自身,即使是单个孤立顶点也满足强连通性)。因此 B 正确。
选项 C:存在拓扑排序的图必须是有向无环图(DAG),而有向完全图中任意两个顶点间都有双向边,必然存在环,不可能有拓扑排序。因此 C 错误。
选项 D:DFS 遍历无向图时,非树边只能是回边(连接当前节点与祖先节点的边),因为无向图的边是双向的,不存在交叉边(交叉边是有向图中不同 DFS 树分支间的边)。因此 D 错误。
8.对一个集合连续的做两个操作:首先删除一个元素,然后马上将刚才被删除的元素再插入回去。在两个操作进行之前和之后,集合的逻辑结构没有任何改变。若对三种数据结构查找树(即二叉排序树、散列表和 B + 树)分别执行以上操作,则其中操作之前和之后必定完全相同的数据结构有( )种。
A. 0
B. 1
C. 2
D. 3
【皮皮灰】B. 1
1.二叉排序树(BST)
删除特性:若删除的节点有两个子节点,需用后继节点(或前驱节点)替换,这会改变树的结构(如节点的父子关系、树的高度)。
插入特性:插入时按 "左小右大" 规则找到新位置,与原节点位置可能不同(因删除操作已改变树结构)。
反例:
原树:3(根),左子 2,右子 4。
删除 3:用后继 4 替换,树变为 4(根),左子 2。
插入 3:按 BST 规则,3 会插入到 2 的右子,树变为 4(根),左子 2,右子 3。
操作后树结构与原树不同(根节点从 3 变为 4)。
结论:二叉排序树操作前后不一定相同。
2.散列表
删除特性:
若用链地址法:删除元素是从链表中移除,插入时可能添加到链表头部 / 尾部,导致链表顺序变化。
若用开放定址法:删除后标记为 "删除",插入时可能跳过该位置(因有删除标记),导致探测路径变化。
插入特性:哈希函数和冲突处理方式决定了插入位置,与原位置无必然关联(如链地址法的链表顺序、开放定址法的探测偏移)。
结论:散列表操作前后不一定相同(物理结构或逻辑顺序会变)。
3.B + 树
结构特性:叶子节点是有序链表,非叶子节点是索引,插入和删除严格遵循 "键有序" 和 "平衡规则"。
删除与插入的可逆性:
删除元素时,若节点元素数不足,会通过合并相邻节点维持平衡;
插入相同元素时,会找到原叶子节点的有序位置(因键值唯一,插入位置由大小决定),且节点元素数恢复后,之前的合并操作会被反向分裂还原。
例如:叶子节点 [2,3,4] 删除 3 后变 [2,4](若满足最小容量则不合并),插入 3 后回到 [2,3,4];
若删除后合并(如 [1,2] 和 [3,4] 合并为 [1,3,4]),插入 2 会分裂为 [1,2] 和 [3,4],恢复原结构。
结论:B + 树的键有序性和平衡规则保证,删除并插入相同元素后,逻辑结构(键的顺序、层次关系)必定完全相同。
9.下列关于散列表的叙述中,正确的是( )。
A. 链地址法处理冲突时,查找长度只与同义词个数有关
B. 开放定址法中,删除节点后必须做 "标记" 而不能真正删除
C. 哈希函数越复杂,散列地址分布越均匀
D. 负载因子越大,散列表的查找效率越高
【皮皮灰】B. 开放定址法中,删除节点后必须做 "标记" 而不能真正删除
选项 A:链地址法处理冲突时,查找长度不仅与同义词个数有关,还与同义词在链表中的位置相关(如查找链表末尾元素比查找表头元素需要更多比较),因此 "只与同义词个数有关" 的说法错误。
选项 B:开放定址法中,删除节点若直接清空位置,会导致后续查找依赖该节点探测序列的元素时,因遇到空位而提前终止查找(误认为不存在)。因此必须用 "标记"(如墓碑标记)表示该位置曾有元素,查找时继续探测,插入时可覆盖标记,该说法正确。
选项 C:哈希函数的均匀性取决于其设计逻辑,与复杂度无必然联系。简单的哈希函数(如除留余数法)若设计合理,也能实现散列地址的均匀分布,因此 "越复杂越均匀" 错误。
选项 D:负载因子越大,表中元素越密集,冲突概率越高,查找时需要的探测次数越多,效率越低,因此该说法错误。
10.在最好情况下,移动次数为 0 的排序算法是( )。
A. 快速排序
B. 直接插入排序
C. 简单选择排序
D. 归并排序
【皮皮灰】B. 直接插入排序
选项 A(快速排序):最好情况下(每次划分均衡),仍需通过交换元素实现分区,必然存在元素移动,移动次数不为 0。
选项 B(直接插入排序):最好情况为输入序列已有序。此时,每个元素插入时,前面的元素已按序排列,无需后移前面的元素,直接放在当前位置,移动次数为 0。
选项 C(简单选择排序):无论输入是否有序,每次都会选择最小元素与当前位置交换(即使最小元素已在当前位置,标准实现也可能执行交换操作),必然存在元素移动,移动次数不为 0。
选项 D(归并排序):归并过程需借助辅助数组,合并时需将元素从辅助数组复制回原数组,无论输入是否有序,均存在元素移动,移动次数不为 0。
11.对初始序列(12,35,9,28,67,5,40,18)进行排序,前两趟结果如下:
第 1 趟:12,5,9,18,67,35,40,28
第 2 趟:9,5,12,18,40,28,67,35
则采用的排序算法是( )。
A. 归并排序
B. 希尔排序
C. 快速排序
D. 基数排序
【皮皮灰】B. 希尔排序
排序算法判断
选项 A(归并排序):归并排序每趟合并相邻子数组,若按 2 路归并,第 1 趟应得到两个有序子数组(如 [12,35,9,28] 和 [67,5,40,18]),但实际结果并非如此,排除。
选项 B(希尔排序):按增量 4 和 2 分组插入排序,符合两趟结果的特征。
选项 C(快速排序):快速排序每趟确定基准元素位置,且基准左右元素需满足大小关系。但第 1 趟结果中,12 左侧无元素,右侧元素(如 5、9)不满足 "均大于等于基准",排除。
选项 D(基数排序):基数排序按位(个位、十位)排序,第 1 趟应按个位排序,结果应为 [5,35,40,18,28,12,9,67],与实际不符,排除。
皮皮灰计算机组成原理
1.在 8 位字长的计算机中,若带符号整数 x 的补码为 80H,将其转换为 unsigned char 类型后的值为( )。
A. 0
B. 128
C. -128
D. 256
【皮皮灰】B. 128
补码 80H 的二进制形式:十六进制 80H 转换为二进制为 1000 0000(8 位)。
带符号整数的补码含义:8 位带符号整数的补码中,最高位为符号位(1 表示负数)。1000 0000 是特殊补码,代表 - 128(8 位补码的范围是 - 128 ~ +127)。
转换为 unsigned char 类型:unsigned char 是无符号 8 位整数,最高位为数值位,无符号含义。此时 1000 0000 表示的数值为 2^7 = 128。
2.在 IEEE 754 单精度标准下,十六进制数 C1480000H 对应的真值是()。
A. -12.5
B. 12.5
C. -6.25
D. -9.0
【皮皮灰】A. -12.5
步骤 1:明确 IEEE 754 单精度格式
单精度浮点数共 32 位,分为三部分:
符号位(1 位,最高位,第 31 位):0 表示正,1 表示负。
阶码(8 位,第 30 - 23 位):采用偏移码,偏移量为 127,阶码真值 = 阶码字段值 - 127。
尾数(23 位,第 22 - 0 位):隐含整数部分 "1",实际尾数为 1. 尾数字段(二进制)。
步骤 2:将十六进制转换为二进制
十六进制数 C1480000H 每一位对应 4 位二进制,转换后为:
1100 0001 0100 1000 0000 0000 0000 0000
(32 位二进制:最高位为第 31 位,最低位为第 0 位)
步骤 3:拆分符号位、阶码、尾数
1.符号位(第 31 位):二进制最高位为 1,表示真值为负数。
2.阶码(第 30 - 23 位):对应二进制片段为 10000010。
阶码字段的十进制值:10000010(二进制) = 128 + 2 = 130。
阶码真值:130 - 127 = 3。
3.尾数(第 22 - 0 位):对应二进制片段为 10010000000000000000000(共 23 位)。
隐含整数部分 "1",实际尾数为 1.1001(二进制,后续 0 可省略)。
步骤 4:计算真值
真值公式:符号位 ×(1. 尾数)× 2^ 阶码
符号位:-1(因符号位为 1)。
尾数(十进制):1.1001(二进制) = 1 + 2^(-1) + 2^(-4) = 1 + 0.5 + 0.0625 = 1.5625。
阶码:3,即 2^3 = 8。
因此,真值 = -1 × 1.5625 × 8 = -12.5。
3.假设 32 位计算机中,带符号整数 x 和 y 的补码分别为 [X] 补 = FFFEH,[Y] 补 = 0002H,则 x + y 的补码及溢出标志 OF 分别为( )。
A. 00000000H,OF = 0
B. 00000000H,OF = 1
C. FFFFFF00H,OF = 0
D. FFFFFF00H,OF = 1
【皮皮灰】A. 00000000H,OF = 0
步骤 1:明确补码加法规则
带符号整数的补码加法满足:[x + y] 补 = [x] 补 + [y] 补(模 2³²,即 32 位下取低 32 位结果)。
步骤 2:转换补码为 32 位二进制形式
32 位下,[x] 补 = FFFEH 实际为 0xFFFFFFFE(十六进制,最高位为 1,符号位为负)。
32 位下,[y] 补 = 0002H 实际为 0x00000002(十六进制,最高位为 0,符号位为正)。
步骤 3:计算补码之和
补码加法直接按二进制(或十六进制)相加:
0xFFFFFFFE + 0x00000002 = 0x100000000
由于是 32 位运算,取低 32 位结果为 0x00000000,即 [x + y] 补 = 00000000H。
步骤 4:判断溢出标志 OF
溢出标志 OF 用于表示带符号数加法结果超出 32 位补码的表示范围(-2³¹ ~ 2³¹ - 1)。判断规则:两个同号数相加,结果符号与操作数符号相反时溢出;异号数相加一定不溢出。
x 为负数([x] 补最高位为 1),y 为正数([y] 补最高位为 0),属于异号数相加,因此无溢出,即 OF = 0。
结论:x + y 的补码为 00000000H,溢出标志 OF 为 0。
4.某 32 位计算机按字节编址,采用大端方式存放数据。若结构体数组:
cppstruct data { short a; int b; char c; } arr[10];
的起始地址为 0000 1000H,则 arr [1].b 的起始地址是( )。
A. 0000 1008H
B. 0000 100CH
C. 0000 1010H
D. 0000 1014H
【皮皮灰】C. 0000 1010H
步骤 1:结构体对齐规则
在 32 位系统中,对齐规则为:
short a(2 字节):起始地址需 2 字节对齐。
int b(4 字节):起始地址需 4 字节对齐。
char c(1 字节):无特殊对齐要求。
结构体总大小:需为最大成员(4 字节)的整数倍。
步骤 2:结构体成员布局
arr [0] 的内存布局:
short a:占用 0000 1000H ~ 0000 1001H(2 字节)。
int b:需从 4 字节对齐地址开始,因此跳过 1002H ~ 1003H(2 字节填充),占用 0000 1004H ~ 1007H(4 字节)。
char c:占用 0000 1008H(1 字节)。
填充:为满足结构体总大小 = 12 字节(4 的倍数),需在 c 后填充 3 字节(1009H ~ 100BH)。
因此,arr [0] 的总大小为 12 字节(0000 1000H ~ 100BH)。
步骤 3:计算 arr [1].b 的地址
arr [1] 的起始地址:
arr [0] 的起始地址 + 12 字节 = 0000 100CH。
arr [1] 内成员布局:
short a:占用 0000 100CH ~ 100DH(2 字节)。
int b:需从 4 字节对齐地址开始,因此 b 的起始地址为 0000 1010H(跳过 100EH ~ 100FH)。
最终,arr [1].b 的起始地址为 0000 1010H。
5.在计算机体系结构中,下列关于指令集架构(ISA)的描述中,哪一项是不正确的( )。
A. ISA 定义了指令的格式,包括操作码和操作数的布局。
B. ISA 规定了指令的寻址方式,允许程序员选择如何访问数据。
C. ISA 决定了处理器的时钟频率,以影响指令的执行速度。
D. ISA 包含了对数据类型的支持,例如整型、浮点型等。
【皮皮灰】C. ISA 决定了处理器的时钟频率,以影响指令的执行速度。
A. 正确,ISA 确实定义了指令的格式,包括操作码和操作数的布局。
B. 正确,ISA 规定了多种寻址方式,程序员可以使用这些方式来访问数据。
C. 错误,ISA 不决定处理器的时钟频率。时钟频率是由硬件设计和实现相关的因素决定的,而不是由指令集架构决定。
D. 正确,ISA 包含对多种数据类型的支持,包括整型、浮点型等。
6.下列关于 CISC 的叙述中,正确的是( )。
A. 指令系统精简,指令长度固定
B. 多数指令需多个时钟周期完成
C. 不支持复杂寻址方式
D. 更适合采用硬连线控制器
【皮皮灰】B. 多数指令需多个时钟周期完成
A. 指令系统精简,指令长度固定:错误。CISC 的指令系统复杂多样,指令长度可变(如 x86 架构),而指令系统精简、长度固定是 RISC 的特点。
B. 多数指令需多个时钟周期完成:正确。CISC 中复杂指令(如内存到内存操作)可能需要多个时钟周期执行,而 RISC 通常单周期执行。
C. 不支持复杂寻址方式:错误。CISC 的优势之一是支持丰富的寻址方式(如基址变址寻址、相对寻址等),以简化程序设计。
D. 更适合采用硬连线控制器:错误。CISC 指令复杂,微程序控制器更适合实现其控制逻辑;硬连线控制器通常用于 RISC(如 MIPS)。
7.下列关于 Cache 和 CPI 的叙述中,正确的是( )。
A. 增加 Cache 容量一定能降低 CPI
B. 指令 Cache 缺失对 CPI 的影响大于数据 Cache 缺失
C. 采用多级 Cache 可降低平均访问时间,从而降低 CPI
D. Cache 块大小越大,CPI 一定越小
【皮皮灰】C. 采用多级 Cache 可降低平均访问时间,从而降低 CPI
A. 错误:增加 Cache 容量可降低缺失率,但并非 "一定" 降低 CPI。当 Cache 容量过大时,可能导致命中时间延长(如访问延迟增加),反而可能抵消缺失率下降的收益,甚至使 CPI 上升。
B. 错误:指令 Cache 缺失和数据 Cache 缺失对 CPI 的影响需结合具体场景。指令 Cache 缺失会阻塞指令流水线,数据 Cache 缺失可能影响数据访问,但两者的影响程度没有绝对的 "大于" 关系(例如,频繁的数据 Cache 缺失可能更显著影响性能)。
C. 正确:多级 Cache(如 L1、L2、L3)通过平衡命中时间(L1 快)和缺失率(L2/L3 容量更大),可降低平均访问时间。平均访问时间减少会减少 CPU 等待内存的时钟周期,从而降低 CPI。
D. 错误:Cache 块大小增大时,初期因空间局部性可降低缺失率,但块过大可能导致:①缺失损失增加(加载大区块耗时更长);②冲突缺失或容量缺失上升(块过大导致 Cache 能容纳的总块数减少),因此 CPI 并非 "一定" 减小。
8.下列关于 CPU 数据通路的叙述中,错误的是( )。
A. 算术逻辑单元(ALU)可实现数据的加减运算
B. 数据通路中需包含程序状态字(PSW)寄存器
C. 单总线结构中,同一时刻只能传输一个数据
D. 寄存器堆的读写操作可在一个时钟周期内完成
【皮皮灰】B. 数据通路中需包含程序状态字(PSW)寄存器
A. 正确:ALU 的核心功能包括算术运算(如加减)和逻辑运算,这是数据通路中实现数据处理的基础,因此该叙述正确。
B. 错误:程序状态字(PSW)寄存器用于存储运算结果的状态标志(如进位、零标志等),但其并非数据通路 "必须" 包含的部件。例如,在极简 CPU 设计中,若不支持条件跳转等依赖状态标志的指令,可能无需 PSW 寄存器,状态信息可直接通过 ALU 输出临时使用。因此 "需包含" 的表述不准确。
C. 正确:单总线结构中,所有部件共享一条总线,总线为独占资源,同一时刻只能传输一个数据,否则会发生冲突,该叙述正确。
D. 正确:寄存器堆通常设计为多端口(如 2 读 1 写),读操作通过组合逻辑在时钟周期内完成,写操作在时钟边沿触发,因此读写操作可在一个时钟周期内有序完成(读在周期内,写在周期末尾),该叙述正确。
9.某同步总线采用双倍数据率(DDR)技术,工作频率为 800 MHz,总线宽度为 32 位,则其带宽为( )。
A. 2.4 GB/s
B. 3.2 GB/s
C. 4.8 GB/s
D. 6.4 GB/s
【皮皮灰】D. 6.4 GB/s
总线带宽的计算公式为:带宽 = 总线宽度(字节)× 工作频率 × 数据率倍数
代入题目数据:
总线宽度:32 位 = 4 字节(1 字节 = 8 位)
工作频率:800 MHz = 800×10⁶次 / 秒
数据率倍数:DDR 技术在每个时钟周期传输 2 次数据(上升沿 + 下降沿)
因此:带宽 = 4 字节 × 800×10⁶Hz × 2 = 6400×10⁶B/s = 6.4 GB/s
10.下列设备中,不适合采用 DMA 方式传输数据的是( )。
I. 鼠标 II. 显卡 III. 扫描仪 IV. 调制解调器
A. 仅 I
B. 仅 IV
C. I、IV
D. II、III
【皮皮灰】C. I、IV
DMA(直接存储器访问)适用于高速、大批量、连续数据传输的外设,可减少 CPU 干预,提高效率。不适合 DMA 的设备通常是低速、数据量小、传输不连续的外设,这类设备更适合中断方式。
I. 鼠标:低速输入设备,数据传输量极小(每次操作仅几个字节),且传输不连续,适合中断方式,不适合 DMA。
II. 显卡:需频繁与内存交换大量图像数据(如帧缓冲数据),属于高速、连续传输,适合 DMA。
III. 扫描仪:扫描过程中产生大量图像数据,需连续传输到内存,属于高速、批量传输,适合 DMA。
IV. 调制解调器:传输速率较低(早期尤其明显),数据传输量小且不连续,适合中断方式,不适合 DMA。
11.下列事件中,会触发内部中断的是( )。
A. 电源故障
B. 除数为零
C. 打印机缺纸
D. 网卡接收数据完成
【皮皮灰】B. 除数为零
A. 电源故障:属于外部硬件异常,触发外部中断(非屏蔽中断)。
B. 除数为零:是程序执行过程中 CPU 内部检测到的算术异常,属于内部中断(也称为 "异常")。
C. 打印机缺纸:由外部设备(打印机)状态变化触发,属于外部中断。
D. 网卡接收数据完成:由外部设备(网卡)操作完成触发,属于外部中断。
皮皮灰操作系统
1.在分时操作系统的进程上下文切换中,必须由操作系统主动更新的寄存器是( )。
I. 多级页表架构下的页目录基址寄存器
II. 用户栈指针寄存器
III. 系统时钟滴答计数器
IV. 中断屏蔽寄存器
A. 仅 I、II
B. 仅 I、III
C. 仅 I、II、IV
D. 仅 III、IV
【皮皮灰解析】A. 仅 I、II
对于 I. 页目录基址寄存器(多级页表场景):在多级页表的系统环境里,每个进程都有其独立的页表,这些页表用于实现虚拟地址到物理地址的转换。当进行进程切换时,为了保证新进程能正确地进行地址转换,操作系统必须主动更新页目录基址寄存器,将其内容替换为新进程对应的页表基址,所以该寄存器需要由操作系统在进程切换时主动更新。
对于 II. 栈指针寄存器:栈指针寄存器存储着当前进程栈顶的地址,不同进程的栈是相互独立的。在进程切换过程中,为了让新进程能够正确地使用自己的栈空间(进行函数调用、局部变量存储等操作),操作系统需要恢复新进程的栈指针,也就是要主动更新栈指针寄存器,使其指向新进程栈顶的正确位置,因此该寄存器在进程切换时会被操作系统主动更新。
对于 III. 时钟滴答计数器:时钟滴答计数器主要用于系统级的计时功能,比如记录系统运行的时间、为进程调度提供时间片依据等。它的计数过程是持续进行的,与具体的进程切换没有直接关联,不会因为进程的切换而需要操作系统去主动更新其数值,无论哪个进程在运行,它都会按照自身的计时逻辑工作 。
对于 IV. 中断屏蔽寄存器:中断屏蔽寄存器用于控制当前进程能够响应的中断类型。它的设置通常是由进程自身根据需求来决定的(例如,进程在进入临界区时可能会设置屏蔽某些中断,以保证临界区代码的原子性执行 ),而不是在进程切换时由操作系统强制进行更新。操作系统在进程切换时,会恢复新进程之前保存的中断屏蔽状态,而不是主动去更新它来改变新进程的中断响应规则。
2.关于容器虚拟化技术(如 Docker),下列说法正确的是( )。
A. 容器内操作系统需包含完整内核,与宿主机内核完全独立
B. 容器共享宿主机内核,其资源隔离性低于基于 VMM 的传统虚拟机
C. 容器可直接访问宿主机物理硬件,无需通过宿主机内核转发
D. 同一宿主机上的所有容器必须运行相同版本的操作系统
【皮皮灰解析】B. 容器共享宿主机内核,隔离性低于传统虚拟机(VMM 方案)
A. 容器内操作系统需完整内核,与宿主机独立:错误。容器并不需要完整的操作系统内核。容器与宿主机共享相同的内核,容器中的操作系统只是一个用户空间,不需要独立的内核。
B. 容器共享宿主机内核,隔离性低于传统虚拟机(VMM 方案):正确。容器共享宿主机的操作系统内核,且虚拟化层(容器)提供的隔离性相较于传统虚拟机(VMM)要低,因为虚拟机通过硬件虚拟化来完全隔离操作系统,而容器是共享宿主机的内核。
C. 容器可直接访问宿主机物理硬件,无需内核转发:错误。容器仍然通过宿主机内核进行访问,不直接访问宿主机物理硬件。容器与宿主机的硬件访问需要通过内核进行管理和转发。
D. 同一宿主机上的容器必须运行相同版本操作系统:错误。容器与宿主机操作系统的版本无关。容器共享宿主机内核,但它们可以使用不同的用户空间环境,允许在同一宿主机上运行不同版本的操作系统。
3.采用抢占式优先级调度算法,就绪队列以双向链表实现(高优先级进程位于链表前端)。若队列长度为 n,则新进程插入队列、高优先级进程抢占出队的时间复杂度分别为( )。
A. 插入 O (n),抢占出队 O (1)
B. 插入 O (1),抢占出队 O (n)
C. 插入 O (n),抢占出队 O (n)
D. 插入 O (1),抢占出队 O (1)
【皮皮灰解析】A. 插入 O (n)、抢占出队 O (1)
在抢占式优先级调度中,队列采用双向链表实现,高优先级的进程靠前。对于队列长度为 n 的情况:
插入操作:插入操作需要将新进程按照优先级顺序插入到队列中。因为队列是双向链表,所以需要遍历队列来找到合适的插入位置。最坏情况下,需要遍历整个队列,时间复杂度为 O (n)。
抢占出队操作:抢占式调度意味着当前运行的进程被中断后会进行出队操作。在双向链表中,抢占出队的操作通常是删除队头元素,也就是删除优先级最高的进程。这种操作不需要遍历链表,直接操作队头节点,因此时间复杂度为 O (1)。
4.某进程分配 4 个页框,初始页框中已加载页面 {1,3,0,5}。若页面访问序列为 {1,3,0,5,3,1,4,0,2,3,0,2,4},采用 LRU(最近最少使用)局部置换策略,则该序列的缺页次数是( )。
A. 3
B. 4
C. 5
D. 6
【皮皮灰解析】B. 4
|------|------|-------------------|------|------|-------------------|
| 访问序号 | 访问页面 | 当前页框(LRU 顺序,左为最近) | 是否缺页 | 缺页次数 | 说明(若缺页,置换最久未使用页面) |
| 0 | 1 | [1, 3, 0, 5] | 否 | 0 | 1 在页框中,更新为最近使用 |
| 1 | 3 | [3, 1, 0, 5] | 否 | 0 | 3 在页框中,更新为最近使用 |
| 2 | 0 | [0, 3, 1, 5] | 否 | 0 | 0 在页框中,更新为最近使用 |
| 3 | 5 | [5, 0, 3, 1] | 否 | 0 | 5 在页框中,更新为最近使用 |
| 4 | 3 | [3, 5, 0, 1] | 否 | 0 | 3 在页框中,更新为最近使用 |
| 5 | 1 | [1, 3, 5, 0] | 否 | 0 | 1 在页框中,更新为最近使用 |
| 6 | 4 | [4, 1, 3, 5] | 是 | 1 | 4 不在页框,置换最久未使用的 0 |
| 7 | 0 | [0, 4, 1, 3] | 是 | 2 | 0 不在页框,置换最久未使用的 5 |
| 8 | 2 | [2, 0, 4, 1] | 是 | 3 | 2 不在页框,置换最久未使用的 3 |
| 9 | 3 | [3, 2, 0, 4] | 是 | 4 | 3 不在页框,置换最久未使用的 1 |
| 10 | 0 | [0, 3, 2, 4] | 否 | 4 | 0 在页框中,更新为最近使用 |
| 11 | 2 | [2, 0, 3, 4] | 否 | 4 | 2 在页框中,更新为最近使用 |
| 12 | 4 | [4, 2, 0, 3] | 否 | 4 | 4 在页框中,更新为最近使用 |5.决定单个进程运行所需最小页框数的关键因素是( )。
A. 进程堆区的动态分配大小
B. 系统内存分页的页面大小
C. 指令系统支持的地址访问模式(如间接寻址深度)
D. 物理内存的总容量大小
【皮皮灰解析】决定进程所需最小页框数的关键因素是 C. 指令的地址访问模式。
A. 进程堆区大小:堆区的大小会影响进程的内存需求,但并不直接决定最小页框数,因为分页管理并不关注内存的具体内容或类型,而是基于页面的划分。
B. 内存分页大小:虽然分页大小会影响每页能够装载的数据量,但它并不是决定最小页框数的关键因素。最小页框数是根据进程的内存需求(尤其是实际访问模式)来确定的。
C. 指令的地址访问模式:这个因素决定了进程实际访问的内存区域和频率。如果进程的内存访问是局部的(如局部性原理),那么可能只需要较少的页框。地址访问模式会直接影响进程的内存使用,从而决定所需的最小页框数。
D. 物理内存总容量:物理内存的总容量会影响系统整体的内存管理,但它并不直接决定某个进程的最小页框数。每个进程所需的页框数与物理内存容量无关,主要由进程的内存需求决定。
6.关于操作系统虚拟文件系统(VFS),下列说法错误的是( )。
A. VFS 为用户态程序提供统一的文件操作接口(如 open、read、write)
B. 各类文件系统(如 ext4、NFS、FAT32)需实现 VFS 定义的标准操作接口
C. VFS 可直接管理磁盘硬件资源,无需依赖底层设备驱动程序
D. VFS 通过 inode 结构抽象文件元数据(如大小、权限),屏蔽不同文件系统的实现差异
【皮皮灰解析】C. VFS 可直接管理磁盘硬件,无需依赖底层驱动
A. VFS 为用户态程序提供统一文件操作接口(如 open、read):正确。VFS 提供统一的文件操作接口,允许用户程序通过标准接口(如 open ()、read () 等)进行文件操作,而不需要关心具体的文件系统实现。
B. 不同文件系统(如 ext4、NFS)需实现 VFS 定义的操作接口:正确。VFS 定义了一组文件系统操作的标准接口,不同的文件系统(如 ext4、NFS)需要实现这些接口以便与 VFS 进行交互。
C. VFS 可直接管理磁盘硬件,无需依赖底层驱动:错误。VFS 本身并不直接与磁盘硬件交互,它依赖于底层的设备驱动来访问硬件。VFS 提供的是抽象的文件操作接口,具体的磁盘操作由文件系统的底层驱动(如硬盘驱动、磁盘管理模块等)处理。
D. VFS 通过 inode 抽象文件元数据,屏蔽不同文件系统差异:正确。VFS 通过 inode 抽象文件的元数据,使得不同的文件系统可以用统一的方式表示文件的基本信息(如文件权限、大小、修改时间等),从而屏蔽了不同文件系统的差异。
7.某文件系统采用混合索引结构(直接块 + 多级间接块),当用户删除文件 test.txt 时,文件系统不会执行的操作是( )。
A. 将该文件的索引节点标记为 "已删除" 状态
B. 回收文件所占用的磁盘数据块至空闲块管理系统
C. 从其父目录文件中移除 test.txt 对应的目录项(含文件名与 inode 号)
D. 清空该文件索引节点中记录的访问权限信息(如读 / 写 / 执行权限)
【皮皮灰解析】D. 清空索引节点的访问权限信息。
A. 标记文件索引节点为 "删除" 状态:正确。当删除文件时,文件的索引节点(inode)会被标记为 "已删除" 状态,以表示该文件不再有效。
B. 回收文件占用的磁盘数据块:正确。文件的磁盘数据块会被回收,并可以被其他文件重新使用。
C. 从父目录中移除 test.txt 的目录项:正确。文件的目录项会从父目录中移除,这样文件在目录结构中不再存在。
D. 清空索引节点的访问权限信息:错误。索引节点中的访问权限信息(如文件的读、写、执行权限)通常会在文件删除时被清空,但是删除操作本身并不特别涉及这一部分,而是由文件系统在标记文件为已删除时清理索引节点的数据。
因此,文件系统在删除文件时不会执行的是:
8.内存映射文件(mmap)的特性包括( )。
Ⅰ. 支持进程间共享,且通过写时复制(Copy - On - Write)机制保证数据隔离
Ⅱ. 映射后对文件的读写操作等价于内存访问,无需调用 read/write 等系统调用
Ⅲ. 可映射超过物理内存总容量的大型文件,依赖虚拟内存的按需分页机制
Ⅳ. 映射区域的大小必须是文件总大小的整数倍
A. 仅 Ⅰ、Ⅱ
B. 仅 Ⅰ、Ⅱ、Ⅲ
C. 仅 Ⅱ、Ⅲ、Ⅳ
D. Ⅰ、Ⅱ、Ⅲ、Ⅳ
【皮皮灰解析】B. 仅 Ⅰ、Ⅱ、Ⅲ
Ⅰ 正确:内存映射文件支持 "写时复制" 机制,当多个进程映射同一文件时,若某进程修改映射区域,系统会为其创建私有副本(不影响其他进程),实现高效共享与隔离。
Ⅱ 正确:文件映射到虚拟地址空间后,进程可直接通过内存读写指令(如 mov)操作文件内容,内核会自动同步到磁盘,无需调用 read/write 等系统调用,减少用户态与内核态切换开销。
Ⅲ 正确:依托虚拟内存的分页机制,即使文件大小超过物理内存,系统也可仅加载当前访问的页面(按需分页),实现对大文件的映射(逻辑上 "全映射",物理上 "部分加载")。
Ⅳ 错误:映射区域可自定义大小(如仅映射文件前 1KB),无需严格为文件大小的整数倍,操作系统会自动处理边界对齐(如按页大小向上取整)。
9.下列技术中,专门用于记录磁盘空闲块状态的是( )。
A. 索引节点(inode)中的空闲标记位
B. 空闲块链表(Free Block List)
C. 文件分配表(FAT)中的未使用簇标记
D. 目录项中的文件删除标记
【皮皮灰解析】B. 空闲块链表(Free Block List)
A. 索引节点的空闲位:索引节点用于描述文件的元数据(如文件大小、权限等),而不是用于记录磁盘空闲块。空闲块通常不会直接在索引节点中记录。
B. 空闲块链表:正确。空闲块链表是记录磁盘上哪些数据块是空闲的常见方式。链表结构可以高效地维护空闲块的状态,确保在分配和回收磁盘空间时操作快速且简便。
C. 文件分配表(FAT)的空闲标记:虽然文件分配表(FAT)用于记录文件的数据块分配情况,但它并不是专门用于记录磁盘空闲块的技术。FAT 文件系统会标记哪些块是空闲的,但它主要是用于文件的块管理。
D. 目录项的删除标记:目录项删除标记用于表示文件的删除状态,并不是用于记录磁盘空闲块。它和文件系统中文件的管理有关,而非空闲磁盘块的管理。
10.文件系统对机械硬盘(HDD)和固态硬盘(SSD)的共性优化措施是( )。
A. 减少磁头寻道时间
B. 基于闪存特性的磨损均衡算法
C. 以块(Block)为单位分配存储空间
D. 优化磁盘旋转延迟
【皮皮灰解析】C. 按块分配存储空间
A. 减少磁头寻道次数(仅机械盘需):这是针对机械硬盘的优化。机械硬盘通过磁头在磁盘表面寻址,因此减少磁头的寻道次数可以提高访问效率。SSD 由于没有机械部件,因此不需要这种优化。
B. 基于闪存磨损均衡(仅 SSD 需):这是针对 SSD 的特定优化。SSD 使用闪存作为存储介质,闪存有写入次数限制,因此需要通过磨损均衡算法来平衡各个存储块的使用,以延长硬盘的寿命。机械硬盘没有类似的磨损问题。
C. 按块分配存储空间:这是机械硬盘和 SSD 都采用的优化策略。无论是机械硬盘还是 SSD,文件系统都会将存储空间按块(或者称为簇)进行分配和管理。块分配是磁盘管理的基本单元,适用于所有存储介质。
D. 优化旋转延迟(仅机械盘需):这是针对机械硬盘的优化。机械硬盘的存取速度受限于磁盘的旋转速度和磁头的定位,优化旋转延迟可以提高磁盘的性能。SSD 没有旋转延迟的问题,因此不需要此优化。
皮皮灰计算机网络
1.主机 A 向主机 B 传输 1MB(1M = 10⁶)文件,采用电路交换、报文交换、分组交换(分组大小 1KB,头部 20B)。设电路交换建立连接需 10ms,传输速率 10Mbps;报文交换经 3 个节点,每个节点存储转发延迟 5ms;分组交换经 3 个节点,每个节点存储转发延迟 5ms。三者耗时 Tcs、Tms、Tps 的大小关系是( )。
A. Tcs>Tms>Tps
B. Tms>Tps>Tcs
C. Tms>Tcs>Tps
D. Tps>Tms>Tcs
【皮皮灰】B. Tms>Tps>Tcs
电路交换(Tcs):时间 = 建立连接时间 + 数据传输时间。
建立连接:10ms。
传输时间:1MB = 10⁶B = 8×10⁶bit,速率 10Mbps(10⁷bit/s),传输时间 = 8×10⁶/10⁷ = 0.8s = 800ms。
Tcs = 10 + 800 = 810ms。
报文交换(Tms):
报文交换中,整个文件作为一个报文,每个节点需完全接收后转发(存储转发),总时间包括传输时间和节点处理延迟。
报文大小:与文件大小相同(1MB = 8×10⁶bit,无额外头部)。
传输时间:经 3 个节点意味着需经过 4 段链路(A→节点 1→节点 2→节点 3→B),每段链路传输时间为 800ms(同电路交换的传输时间),总传输时间 = 4×800ms = 3200ms。
节点处理延迟:3 个节点,每个 5ms,总延迟 = 3×5ms = 15ms。
总时间 Tms:传输时间 + 处理延迟 = 3200ms + 15ms = 3215ms。
分组交换(Tps):
时间 = 首个分组端到端时间 + 剩余分组传输时间(并行传输)。
分组大小 1KB(含 20B 头部,总 1024B = 8192bit),传输 1 个分组时间 = 8192/10⁷≈0.819ms
文件 1MB(10⁶B),数据部分每分组 1004B(1024 - 20),需分组数 = 997 个。
首个分组端到端时间:4 段链路传输(3 节点 + 1 终端) + 3 节点存储转发 = 4×0.819 + 3×5≈18.28ms
剩余 996 个分组并行传输:996×0.819≈816ms
Tps = 18.28 + 816≈834ms。
2.差错编码的编码集为 {001101,010110,100011,111000},其检错、纠错能力是( )。
A. 检错≤2 位,纠错≤1 位
B. 检错≤2 位,纠错≤2 位
C. 检错≤3 位,纠错≤1 位
D. 检错≤3 位,纠错≤2 位
【皮皮灰】C. 检错≤3 位,纠错≤1 位
步骤 1:计算最小汉明距离
{001101, 010110, 100011, 111000} 中任意两个编码的汉明距离:
001101 与 010110 的汉明距离为 4
001101 与 100011 的汉明距离为 4
001101 与 111000 的汉明距离为 4
010110 与 100011 的汉明距离为 4
010110 与 111000 的汉明距离为 4
100011 与 111000 的汉明距离为 4
因此,最小汉明距离 d = 4。
步骤 2:根据公式确定检错和纠错能力
检错能力:根据公式 d≥e + 1,可以得出最多可检测 e 位错误:e≤d - 1
当 d = 4 时,e≤4 - 1 = 3,所以,检错能力为 < 3 位。
纠错能力:根据公式 d≥2t + 1,可以得出最多可纠正 t 位错误:t≤(d - 1)/2
当 d = 4 时,t≤(4 - 1)/2 = 1.5,取整数,得到 t = 1,因此,纠错能力为≤1 位。
根据以上分析,该编码集的能力为:
检错能力:<3 位,纠错能力:<1 位
3.10Base - T 以太网中,主机连续发生 8 次冲突,再次发送的最大时间间隔为( )。
A. 26.624ms
B. 27.2384ms
C. 13.056ms
D. 51.2ms
【皮皮灰】C. 13.056ms
10Base - T 以太网采用二进制指数退避算法处理冲突重传,关键规则如下:
基本退避时间:10Base - T 的争用期为 51.2 微秒(μs),即 1 个时隙时间。
退避次数(n):冲突后 n 递增,上限为 10(即第 11 次冲突时,n = 10)。
随机因子 k:取值范围为 0~(2ⁿ - 1),但当 n≥10 时,k 固定为 0~1023(即 2¹⁰ - 1)。
具体计算:
主机连续发生 8 次冲突,此时退避次数 n = 8:
k 的最大取值为 2⁸ - 1 = 255。
最大时间间隔 = 255×51.2μs = 13056μs = 13.056ms。
4.某主机首次通过 DHCP 协议申请 IP 地址,在发送 DHCPREQUEST 报文时,封装该报文的 IP 数据报的源 IP 地址和目的 IP 地址分别是( )。
A. 0.0.0.0 255.255.255.255
B. 0.0.0.0 192.168.1.1(DHCP 服务器 IP)
C. 192.168.1.100(已分配 IP) 255.255.255.255
D. 192.168.1.100(已分配 IP) 192.168.1.1(DHCP 服务器 IP)
【皮皮灰】A. 0.0.0.0 255.255.255.255
场景分析:主机首次申请 IP,尚未获得有效 IP 地址。
源 IP 地址:客户端无 IP 时,源 IP 设为 0.0.0.0(表示未指定)。
目的 IP 地址:DHCPREQUEST 需广播到整个网络(让所有 DHCP 服务器响应),故目的 IP 为 255.255.255.255(有限广播地址)。
选项排除:
B:目的 IP 为单播(服务器 IP),错误(首次申请时客户端未知服务器 IP,需广播);
C、D:源 IP 为已分配 IP,不符合 "首次申请" 场景(首次申请未分配 IP)。
5.NAT 路由器转发 TCP 分组到外网时,TCP 首部必然修改的字段是( )。
Ⅰ 源端口号
Ⅱ 目的端口号
Ⅲ 序列号
Ⅳ 校验和
A. Ⅰ、Ⅳ
B. Ⅱ、Ⅲ
C. Ⅰ、Ⅲ
D. Ⅱ、Ⅳ
【皮皮灰】A. Ⅰ、Ⅳ
在 NAT(网络地址转换)路由器转发 TCP 分组到外网时,主要会对源 IP 地址和源端口号进行修改,以便能够正确地将返回的数据包发送回内部主机。具体分析如下:
源端口号(Ⅰ):NAT 路由器会修改源端口号,以确保它能跟踪内部主机的会话并将返回流量正确地路由到相应的主机。
目的端口号(Ⅱ):一般情况下,目的端口号不会被修改,因为它是指向目标服务的端口。
序列号(Ⅲ):序列号是 TCP 协议中的数据流控制字段,NAT 不会修改该字段。
校验和(Ⅳ):校验和在 TCP 首部中是用来验证数据的完整性,虽然 NAT 修改了源端口号和源 IP 地址,但校验和也需要重新计算以反映这些变化。
6.t0 时刻,TCP 连接的 ssthresh = 16,拥塞窗口 cwnd = 4,发送窗口 = 4,MSS = 1000B,t1 时刻收到 3 个重复 ACK,则 t1 时刻后,甲可发送的最大 TCP 段数为( )。
A. 4
B. 8
C. 16
D. 2
【皮皮灰】D. 2
关键条件分析:
初始状态:ssthresh = 16,cwnd = 4(拥塞窗口,单位为 MSS),发送窗口 = 4(由 cwnd 和接收窗口共同决定,此处接收窗口不限制,发送窗口 = cwnd)。
触发事件:收到 3 个重复 ACK,这是 TCP 检测到报文段丢失的标志,会触发快速重传,而非超时重传,因此进入快速恢复阶段(而非慢启动)。
快速恢复阶段的操作:
更新慢启动阈值(ssthresh):当收到 3 个重复 ACK 时,首先将 ssthresh 设置为当前拥塞窗口的一半,即 ssthresh = cwnd / 2 = 4 / 2 = 2。
调整拥塞窗口(cwnd):快速恢复中,初始拥塞窗口设置为 cwnd = ssthresh(此处不额外累加重复 ACK 的数量,因题目问的是 "t1 时刻后" 立即可发送的最大段数,未经过后续重传 ACK 的累加过程)。
发送窗口的确定:
发送窗口大小由 min (cwnd, 接收窗口) 决定。由于初始发送窗口 = 4(接收窗口≥4),此时 cwnd = 2,因此发送窗口 = 2,即最多可发送 2 个 TCP 段。
7.DNS 查询大报文(超过 512B)时,UDP 和 TCP 的最短耗时(RTT=10ms)为( )。
A. 10ms、30ms
B. 10ms、20ms
C. 20ms、30ms
D. 20ms、20ms
【皮皮灰】B. 10ms、20ms
UDP 耗时分析:
DNS 默认使用 UDP 进行查询,且最大报文长度为 512B。
当响应报文超过 512B 时,服务器返回一个 "截断标志"(TC=1),指示响应被截断。
在这种情况下,UDP 的一次查询 - 响应交互只需一个 RTT(即客户端发送查询,服务器返回截断响应),因此耗时为 10ms。
TCP 耗时分析:
TCP 可以处理大报文,但需要先建立连接,这涉及三次握手:
第一步:客户端发送 SYN,耗时 10ms。
第二步:服务器返回 SYN - ACK,耗时 10ms。
第三步:客户端发送 ACK,耗时 10ms。
建立连接后,进行 DNS 查询并接收完整响应,这又耗时一个 RTT 10ms。
因此,TCP 的总耗时为 10ms (握手) + 10ms (查询响应) = 20ms。
8.关于 IMAP 协议,正确的是( )。
I 支持在线管理邮件(文件夹、标记)
II 仅支持邮件下载到本地
III 需保持 TCP 连接在线
IV 支持多设备同步邮件状态
A. I、III、IV
B. II、III、IV
C. I、II、IV
D. I、II、III
【皮皮灰】A. I、III、IV
I. 支持在线管理邮件(文件夹、标记)
正确:IMAP 允许用户在服务器上进行邮件的在线管理,包括创建文件夹、标记邮件等。
II. 仅支持邮件下载到本地
错误:IMAP 允许用户在线查看邮件,并且可以选择下载邮件,不同于 POP3,它只支持下载。
III. 需保持 TCP 连接在线
正确:IMAP 需要一个持续的 TCP 连接,以便实时同步邮件和状态。
IV. 支持多设备同步邮件状态
正确:IMAP 允许多个设备访问同一邮箱,并且可以同步邮件状态(例如已读、未读、标记等)。
408第1套模拟题笔记(灰灰考研)
丰锋ff2025-08-16 22:40