shuatigo
只考虑主考点
计算机408

2012计算机408全卷预览

2012年计算机408真题

2012年计算机408真题完整试卷,包含 40 道选择题、0 道填空题和 7 道解答题,共 47 题,题目分值合计 150 分。可按目录阅读全卷,展开参考答案解析,或进入对应题目练习。

返回年度练习
47题全卷题目
150分题目分值合计
40题选择题 · 80分
0题填空题 · 0分
7题解答题 · 70分

选择题

40 题 · 共 80 分

第 1 题

数据结构
2 分

求整数 nn ( n⩾0n \geqslant 0 ) 阶乘的算法如下,其时间复杂度是( )。

c 复制代码
int fact(int n){
    if (n<=1) return 1;
    return n*fact(n-1);
} 

A. O(log⁡2n)O(\log_2n)

B. O(n)O(n)

C. O(nlog⁡2n)O(n\log_2n)

D. O(n2)O(n^{2})

查看答案与解析收起答案与解析

参考答案:B

答案:B。

递归时间要看调用了多少次,以及每次额外做多少工作。fact(n)只调用一次fact(n−1),参数依次为n、n−1、……、1,共n层,每层除递归外只有判断、一次乘法和返回,按常数时间计算。因此 T(n)=T(n−1)+O(1)T(n)=T(n-1)+O(1),展开得到 T(n)=O(n)T(n)=O(n),选B。A要求每次把规模按比例缩小,如n/2;C要求每层还有对数等额外工作;D通常对应各层额外工作随规模线性增长,本程序都不具备。n=0、1会立即返回,但渐近复杂度考察n增大的情形;递归栈占O(n)空间,这是空间开销,不能误算成额外时间因子。

进入练习

第 2 题

数据结构
2 分

已知操作符包括 ‘+’、‘-’、‘*’、‘/’、‘(’ 和 ‘)’。将中缀表达式 a+b-a*((c+d)/e-f)+g 转换为等价的后缀表达式 ab+acd+e/f-*-g+ 时,用栈来存放暂时还不能确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是()。

A. 5

B. 7

C. 8

D. 11

查看答案与解析收起答案与解析

参考答案:A

答案:A。

中缀转后缀时,操作数直接输出;操作符需按优先级决定弹栈,左括号入栈,右括号把匹配括号之间的操作符弹出。读到a+b后,遇到同优先级的减号,应先弹出此前的+,因此不是把所有已读操作符都留在栈中。继续读 -a*((c+d 时,栈从底到顶为 -、*、(、(、+,共有5个,包括题目计入的括号。遇到第一个右括号后,+和内层左括号出栈,后续 /、- 的处理也不会超过5个,故选A。B、C、D分别多计了已经因优先级或括号匹配出栈的符号。最大深度发生在尚未遇到右括号、且嵌套运算都待定时。

进入练习

第 3 题

数据结构
2 分

若一棵二叉树的前序遍历序列为 a,e,b,d,ca, e, b, d, c ,后序遍历序列为 b,c,d,e,ab, c, d, e, a ,则根结点的孩子结点()。

A. 只有 ee

B. 有 e,be, b

C. 有 ee 、 cc

D. 无法确定

查看答案与解析收起答案与解析

参考答案:A

答案:A。

前序的第一个结点和后序的最后一个结点都是根,所以根为a。前序紧接根的e是根的第一个非空子树的根;若a有两个孩子,e子树在后序中应先结束,后面还会有另一个子树,才轮到a。现在后序中e恰好在a之前,且从b到e的4个结点全部属于e子树,说明a只有一个非空子树,孩子就是e,选A。B、C都额外添加了一个根的孩子,与该分段矛盾;D忽略了孩子身份已能确定。前后序未必能确定e是左孩子还是右孩子,也未必唯一确定整棵树,但“不确定左右位置”不等于“不确定有没有这个孩子”。

进入练习

第 4 题

数据结构
2 分

若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为1,则该平衡二叉树的结点总数为( )。

A. 10

B. 20

C. 32

D. 33

查看答案与解析收起答案与解析

参考答案:B

答案:B。

平衡因子是左子树高度减右子树高度。所有非叶结点因子均为1,意味着高度为h的非叶结点,其左右子树高度分别为h−1、h−2。规定空树高度0、叶结点高度1,令N(h)为结点数,则 N(h)=1+N(h−1)+N(h−2)N(h)=1+N(h-1)+N(h-2),初值N(0)=0、N(1)=1。逐层计算N(2)=2、N(3)=4、N(4)=7、N(5)=12、N(6)=20,所以选B。A的10少于高度6所需的最少结点数20,C的32与D的33不满足所有非叶结点平衡因子均为1时的递推。不能使用满二叉树的 2h−12^h-1,因为本题左右高度一直相差1;题中“平衡”允许高度差为1,并不表示左右子树等高。

进入练习

第 5 题

数据结构
2 分

对有 nn 个结点、 ee 条边且使用邻接表存储的有向图进行广度优先遍历,其算法的时间复杂度是()。

A. O(n)O(n)

B. O(e)O(e)

C. O(n+e)O(n + e)

D. O(ne)O(ne)

查看答案与解析收起答案与解析

参考答案:C

答案:C。

邻接表只保存实际存在的边。广度优先遍历把一个未访问顶点标记后入队,出队时扫描它的全部邻接边;借助visited数组,一个顶点最多入队、出队一次,总计O(n)。有向图每条边在其起点的邻接表中出现一次,扫描全部表共O(e),两部分相加为 O(n+e)O(n+e),选C。A忽略边的扫描,B忽略顶点及无出边顶点的处理,D把顶点和边数量错误地相乘。若图不连通,需从尚未访问的顶点重新启动BFS,仍然每个顶点、边只处理有限次;若改用邻接矩阵,即使边少也要扫描每行n个位置,复杂度才通常为O(n²)。

进入练习

第 6 题

数据结构
2 分

若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是()。

A. 存在,且唯一

B. 存在,且不唯一

C. 存在,可能不唯一

D. 无法确定是否存在

查看答案与解析收起答案与解析

参考答案:C

答案:C。

按本题采用的不含自环的有向图约定,邻接矩阵A[i][j]非零代表边i→j。主对角线以下全0,表示不存在i>j的边;于是每条边都由较小编号指向较大编号,按编号从小到大排列就是一个拓扑序列,必然存在。至于是否唯一,还要看边是否强制每两个顶点的先后:链0→1→2只有一种次序,而只有0→2的图可把1放在多个位置。所以结论是“存在,可能不唯一”,选C。A把唯一性说死,B把不唯一说死,D否认已经能够保证的存在性。无自环的条件不可省略为一般结论:若主对角线上允许表示自环,仅凭下三角为0不足以排除回路。

进入练习

第 7 题

数据结构
2 分

如右图所示的有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点 aa 到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是 bb ,第二条最短路径的目标顶点是 cc ,后续得到的其余各最短路径的目标顶点依次是()。

第 7 题图 1

A. d,e,fd, e, f

B. e,d,fe, d, f

C. f,d,ef, d, e

D. f,e,df, e, d

查看答案与解析收起答案与解析

参考答案:C

答案:C。

Dijkstra每轮选未确定顶点中当前距离最小者,选中后用它的出边更新距离。初始由a得到b=2、c=5,其他为∞;确定b后,c=min(5,2+1)=3,d=2+3=5。第二个确定c,经过c的出边得到f=3+1=4,d=min(5,3+3)=5,e=3+4=7。此时最小为f=4,所以第三个确定f;随后d=5,利用d→e权1,把e改成6,最后确定e。后续次序恰为f、d、e,选C。A、B在距离4的f之前选了更远的点,D在距离5的d之前选了e,均违背取最小暂定距离的原则。图中边有方向,不能把反向边自行加入松弛。

进入练习

第 8 题

数据结构
2 分

下列关于最小生成树的叙述中,正确的是()。

I. 最小生成树的代价唯一

II. 所有权值最小的边一定会出现在所有的最小生成树中

III. 使用普里姆(Prim)算法从不同顶点开始得到的最小生成树一定相同

IV. 使用普里姆算法和克鲁斯卡尔(Kruskal)算法得到的最小生成树总不相同

A. 仅 I

B. 仅 II

C. 仅 I、III

D. 仅 II、IV

查看答案与解析收起答案与解析

参考答案:A

答案:A。

最小生成树是连通无向带权图中总权值最小的生成树。I正确:边集可能有多个选择,但“最小总权值”作为一个数必然相同。II错误:设三角形的三边权值都是1,任意两边都是最小生成树,某条最小权边可被舍去。这个例子也说明III错误,Prim从不同起点或对同权边采用不同选择,可能得到不同边集。IV错误:若图的最小生成树唯一,Prim和Kruskal必定得到同一棵;即使不唯一也可能恰好选到同一棵。因此仅I正确,选A;B、D含错误的II,C含错误的III。“树的代价唯一”与“树本身唯一”要分开判断。

进入练习

第 9 题

数据结构
2 分

设有一棵 3 阶 B-树,如右图所示。删除关键字 78 后得到一棵新 B-树,其最右叶结点所含的关键字是()。

第 9 题图 1

A. 60

B. 60, 62

C. 62, 65

D. 65

查看答案与解析收起答案与解析

参考答案:D

答案:D。

3阶B树的非根结点至少有 ⌈3/2⌉−1=1\lceil3/2\rceil-1=1 个关键字,最多2个。图中最右叶结点只有78,删掉后变空,发生下溢;它的相邻左兄弟为[60,62],有2个关键字,可以借一个。借关键字不是直接把62放进最右叶,而要经父结点旋转:父结点原分隔关键字65下移到空叶结点,左兄弟最大关键字62上移替换父结点65。于是父结点变成[55,62],左兄弟变[60],最右叶变[65],其余结构不变,选D。A、B错误地把兄弟原内容当作新右叶,C把上移父结点的62也留在右叶。这样调整保持了左侧关键字<62<右叶65的有序关系。

进入练习

第 10 题

数据结构
2 分

在内部排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。下列排序方法中,每一趟排序结束时都至少能够确定一个元素最终位置的方法是( )。

I. 简单选择排序

II. 希尔排序

III. 快速排序

IV. 堆排序

V. 二路归并排序

A. 仅 I、III、IV

B. 仅 I、III、V

C. 仅 II、III、IV

D. 仅 III、IV、V

查看答案与解析收起答案与解析

参考答案:A

答案:A。

“确定最终位置”要求该元素以后不再需要改变它在整个排序序列中的位置。简单选择排序一趟把当前最小元素放到未排序区的首位,I满足;快速排序一趟划分把枢轴放到左右分区之间的最终位置,III满足;堆排序一趟取出最大元素放到尾部最终位置,IV满足。希尔排序仅让某个增量下的各组有序,后续缩小增量还会调整元素,II不保证;二路归并的中间趟只生成较长的有序段,段内元素仍可能因下一轮归并改变全局位置,V不保证。故只有I、III、IV,选A。B、D错误包含V,C错误包含II;不能把“局部有序”等同于“已有最终位置”。

进入练习

第 11 题

数据结构
2 分

对同一待排序序列分别进行折半插入和直接插入排序,两者之间可能的不同之处是()。

A. 排序的总趟数

B. 元素的移动次数

C. 使用辅助空间的数量

D. 元素之间的比较次数

查看答案与解析收起答案与解析

参考答案:D

答案:D。

直接插入排序逐个把第2到第n个元素插进前面的有序区;折半插入仍做同样n−1趟,只是用二分查找定位插入点,而不是从后向前逐个比较。因此A的总趟数相同,C都只需要常数额外空间;对于相同的插入次序和相同的等值处理约定,最终插入位置相同,需后移的元素也相同,B的移动次数不变。真正可能不同的是查找插入点的比较次数,选D:直接法可能比较有序区的多数元素,折半法每次约减半范围。折半插入能减少比较,却不能消除数组中元素后移,因而整体最坏时间仍为O(n²),不要把“二分查找”直接理解为整个排序O(nlogn)。

进入练习

第 12 题

计算机组成原理
2 分

假定基准程序 A 在某计算机上的运行时间为 100s,其中 90s 为 CPU 时间,其余为 I/O 时间。若 CPU 速度提高 50%,I/O 速度不变,则运行基准程序 A 所耗费的时间是()。

A. 55 s55 \mathrm{~s}

B. 60s

C. 65 s65 \mathrm{~s}

D. 70  s{70}\mathrm{\;s}

查看答案与解析收起答案与解析

参考答案:D

答案:D。

原总时间100s,其中CPU90s,I/O时间为100−90=10s。CPU速度“提高50%”表示速度变为原来的1.5倍,同样计算工作的时间应除以1.5,所以新CPU时间 90/1.5=6090/1.5=60 s;I/O没有加速,仍需10s,总计70s,选D。B的60s只算了CPU部分;A的55s可由错误地把CPU时间减半再加10得到;C的65s也没有使用正确的1.5倍时间关系。速度与时间互为倒数,速度增加50%并不意味着运行时间减少50%。分清可加速与不可加速部分后分别换算,是此类程序性能题的通用计算方法。

进入练习

第 13 题

计算机组成原理
2 分

假定编译器规定 int 和 short 类型长度分别为 32 位和 16 位,执行下列 C 语言语句:

c 复制代码
unsigned short x = 65530;
unsigned int y = x;

得到 y 的机器数为()。

A. 0000 7FFAH

B. 0000 FFFAH

C. FFFF 7FFAH

D. FFFF FFFAH

查看答案与解析收起答案与解析

参考答案:B

答案:B。

16位无符号数最大为65535=FFFFH,65530比它少5,所以x的机器数为FFFAH。赋给32位unsigned int时,需保持无符号数值65530不变,在高16位补0,低16位仍为FFFAH,得到0000FFFAH,选B。A的低位7FFAH不是65530,少了最高位的1;C不仅低位错误,还把高位补成1;D把FFFAH当作负的有符号short做了符号扩展。零扩展还是符号扩展取决于源数的有符号性质,不能仅凭x最高位为1就补1。变量y的数值仍为65530,没有因为类型变宽而改变。

进入练习

第 14 题

计算机组成原理
2 分

float 类型(即 IEEE 754 单精度浮点数格式)能表示的最大正整数是()。

A. 2126−21032^{126} - 2^{103}

B. 2127−21042^{127} - 2^{104}

C. 2127−21032^{127} - 2^{103}

D. 2128−21042^{128} - 2^{104}

查看答案与解析收起答案与解析

参考答案:D

答案:D。

IEEE 754单精度规格化数为 (−1)s(1.f)2×2E−127(-1)^s(1.f)_2\times2^{E-127}。要取最大有限正值,符号s=0,阶码不能用全1,因为它保留给无穷和NaN,所以最大E=254,实际指数为127;23位小数全1时有效数为 1+∑i=1232−i=2−2−231+\sum_{i=1}^{23}2^{-i}=2-2^{-23}。结果为 (2−2−23)2127=2128−2104(2-2^{-23})2^{127}=2^{128}-2^{104},本身是整数,选D。A、B、C的指数或尾数扣除项不对应这些最大字段。题目问“能表示的最大正整数”,不是问“所有整数都能连续精确表示到多大”;后者与24位有效精度有关,不能把两个问题混淆。

进入练习

第 15 题

计算机组成原理
2 分

某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定 int 型和 short 型长度分别为 32 位和 16 位,并且数据按边界对齐存储。某 C 语言程序段如下:

c 复制代码
struct {
    int a;
    char b;
    short c;
} record;
record.a = 273;

若 record 变量的首地址为 0xC008,则地址 0xC008 中内容及 record.c 的地址分别为()。

A. 0×00,0×C00D0 \times 00, 0 \times C00D

B. 0x00, 0xC00E

C. 0x11, 0xC00D

D. 0×11,0×C00E0 \times 11, 0 \times C00E

查看答案与解析收起答案与解析

参考答案:D

答案:D。

先处理数值,再处理布局。273=256+17=00000111H,小端把最低有效字节放在最低地址,所以a从C008开始的4字节依次为11、01、00、00,C008内容为11H。a占C008~C00B,char b紧接着在C00C,占1B;short c需按2字节边界对齐,C00D是奇地址,因此留作填充,c从C00E开始,占C00E~C00F。故选D。A、B错误地把首字节当成高位00,C虽首字节正确却让short从未对齐的C00D开始。结构体内可能有填充字节,不能直接按成员长度相加而忽略对齐;这里也不需要知道b、c的具体数值。

进入练习

第 16 题

计算机组成原理
2 分

下列关于闪存(Flash Memory)的叙述中,错误的是()。

A. 信息可读可写,并且读、写速度一样快

B. 存储元由 MOS 管组成, 是一种半导体存储器

C. 掉电后信息不丢失, 是一种非易失性存储器

D. 采用随机访问方式, 可替代计算机外部存储器

查看答案与解析收起答案与解析

参考答案:A

答案:A。

Flash通过半导体存储单元保存信息,掉电后仍保留内容,可用于固态外存。读取可以直接选择地址,而写入需要进行编程操作,改写通常还受块擦除机制约束,读取和写入的过程、耗时都不同,所以A的“读、写速度一样快”错误,应选A。B指出存储元采用MOS结构、属于半导体存储器,正确;C指出非易失性,正确;D指出可按地址访问并用于替代外部存储器,也正确。这里随机访问描述的是可定位访问地址,不表示任意字节都可以像SRAM那样以同样速度直接覆盖写。区分访问定位、读写机制和掉电保持三种属性,就不会因Flash可随机读而误判A。

进入练习

第 17 题

计算机组成原理
2 分

假设某计算机按字编址, Cache 有 4 个行, Cache 和主存之间交换的块大小为 1 个字。若 Cache 的内容初始为空, 采用 2 路组相联映射方式和 LRU 替换策略, 当访问的主存地址依次为 0, 4, 8, 2, 0, 6, 8, 6, 4, 8 时, 命中 Cache 的次数是 ( )。

A. 1

B. 2

C. 3

D. 4

查看答案与解析收起答案与解析

参考答案:C

答案:C。

先明确本题的映射模型。 Cache 有4行,2路组相联表示每组2行,因此共有2组,每组最多保存2个主存块。计算机按字编址,每块为1字,所以主存块号等于字地址,块内地址不占位。本题采用“主存也按每组2个连续块分组,再把主存组映射到Cache组”的组织方式:

主存组号=⌊字地址/2⌋,Cache组号=主存组号 mod 2.\text{主存组号}=\lfloor\text{字地址}/2\rfloor,\qquad \text{Cache组号}=\text{主存组号}\bmod2.

例如,地址0、1属于主存组0,映射到Cache组0;地址2、3属于主存组1,映射到Cache组1;地址4、5属于主存组2,仍映射到Cache组0。因而题中0、4、8映射到Cache组0,2、6映射到Cache组1。这相当于把地址从高到低划分为区号、Cache组号、组内块号、块内地址,其中组内块号占1位、块内地址占0位。不要把组内块号误说成块内地址。

逐次模拟LRU。 每组只在本组内替换。访问命中时也要更新最近使用次序;访问缺失且本组已满时,淘汰本组最久没有被访问的块。下表各组的块从左到右按“最久未使用→最近使用”排列:

次数 地址 Cache组号 是否命中 访问后组0 访问后组1
1 0 0 否 0 空
2 4 0 否 0,4 空
3 8 0 否 4,8 空
4 2 1 否 4,8 2
5 0 0 否 8,0 2
6 6 1 否 8,0 2,6
7 8 0 是 0,8 2,6
8 6 1 是 0,8 2,6
9 4 0 否 8,4 2,6
10 8 0 是 4,8 2,6

第7、8、10次访问命中,共3次,所以选C。第一次访问某块必然缺失;块曾经出现过也不代表一定命中,还要看它是否已被本组的LRU替换淘汰。

适用边界。 组相联组织还存在直接按“主存块号 mod Cache组数”选组的模型。若改用该模型,本题全部地址都是偶数,会集中到组0,只有第8次访问命中,结果为1次。这个结果对应另一种地址组织;本题计算采用上面明确给出的主存分组模型,不能把两种模型的选组规则与命中次数混合。

进入练习

第 18 题

计算机组成原理
2 分

某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有33个微命令,构成5个互斥类,分别包含7, 3, 12, 5和6个微命令,则操作控制字段至少有()。

A. 5位

B. 6位

C. 15位

D. 33 位

查看答案与解析收起答案与解析

参考答案:C

答案:C。

字段直接编码把互斥微命令放在同一个字段,用不同二进制编码选择其中一项;不同字段可同时发出命令。每一类除了实际微命令,还要留一种编码表示“本类不发微命令”,所以包含k条命令的字段至少需 ⌈log⁡2(k+1)⌉\lceil\log_2(k+1)\rceil 位。五类分别需 ⌈log⁡28⌉=3\lceil\log_2 8\rceil=3、⌈log⁡24⌉=2\lceil\log_2 4\rceil=2、⌈log⁡213⌉=4\lceil\log_2 13\rceil=4、⌈log⁡26⌉=3\lceil\log_2 6\rceil=3、⌈log⁡27⌉=3\lceil\log_2 7\rceil=3 位,合计15位,选C。A把字段数当作位数;B把33条命令放进一个全局选择字段,无法并行选择不同类;D是每命令一位的直接控制表示,没有利用互斥关系压缩。

进入练习

第 19 题

计算机组成原理
2 分

某同步总线的时钟频率为 100MHz100 \mathrm{MHz} , 宽度为 32 位, 地址线/数据线复用, 每传输一个地址或数据占用一个时钟周期。若该总线支持突发 (猝发) 传输方式, 则一次 “主存写” 总线事务传输 128 位数据所需要的时间至少是 ( )。

A. 20ns{20}\mathrm{{ns}}

B. 40ns

C. 50ns

D. 80ns

查看答案与解析收起答案与解析

参考答案:C

答案:C。

总线100MHz对应周期 1/(100×106)=101/(100\times10^6)=10 ns。宽度32位,每次数据传送只能搬32位,128位需要128/32=4个数据周期。地址线和数据线复用,传地址时不能同时传数据,因此先用1周期给出起始地址;突发方式随后连续传4个数据,不必为每个数据再传一次地址。总周期数1+4=5,耗时 5×10=505\times10=50 ns,选C。A仅20ns不够传4个数据;B的40ns漏掉地址周期;D的80ns相当于4次都单独传地址和数据,未利用突发传输。题目问至少时间,不额外添加未给出的仲裁、等待或应答延迟。

进入练习

第 20 题

计算机组成原理
2 分

下列关于 USB 总线特性的描述中,错误的是()。

A. 可实现外设的即插即用和热拔插

B. 可通过级联方式连接多台外设

C. 是一种通信总线,可连接不同外设

D. 同时可传输 2 位数据, 数据传输速率高

查看答案与解析收起答案与解析

参考答案:D

答案:D。

题目所讨论的USB是一种串行通信总线,数据按位依次传输;一对差分信号线用两根线的电压差表示同一个信号,不能解释为每次并行传两个独立比特。因此D的“同时可传输2位数据”错误,选D。A中的即插即用、热拔插是USB支持的外设连接特性;B中通过集线器级联可连接多台外设;C中USB可连接不同种类外设,均正确。串行传输并不等于低速,速率还取决于信号变化速度和协议编码等因素;反过来,数据传输速率高也不能证明它在两根线上并行传两个比特。识别总线的串行性质是本题关键。

进入练习

第 21 题

计算机组成原理
2 分

下列选项中,在 I/O 总线的数据线上传输的信息包括()。

I. I/O 接口中的命令字

II. I/O 接口中的状态字

III. 中断类型号

A. 仅 I、II

B. 仅 I、III

C. 仅II、III

D. I、II、III

查看答案与解析收起答案与解析

参考答案:D

答案:D。

总线的“数据线”不只传应用数据,也传可读写寄存器中的编码内容。CPU向I/O接口命令寄存器写入命令字时,命令作为数据在线上传输;读取状态寄存器时,状态字也通过数据线返回。中断响应时,接口提供的中断类型号同样是一个编码数据,可经数据线交给CPU。因此I、II、III都包括在内,选D。A漏掉类型号,B漏掉状态字,C漏掉命令字。必须把“命令字”与“读写控制信号”、把“中断类型号”与“中断请求线”区分开:前者是本次传送的内容,后者用于控制何时发生传送,才属于控制线信号。

进入练习

第 22 题

计算机组成原理
2 分

响应外部中断的过程中,中断隐指令完成的操作,除保护断点外,还包括()。

I. 关中断

II. 保存通用寄存器的内容

III. 形成中断服务程序入口地址并送PC

A. 仅 I、II

B. 仅 I、III

C. 仅 II\mathrm{II} 、 III\mathrm{III}

D. I、II、III

查看答案与解析收起答案与解析

参考答案:B

答案:B。

中断隐指令不是程序中显式写出的一条指令,而是CPU响应中断时由硬件完成的一组操作。除保存断点外,通常先关中断以保护入口阶段,再形成中断服务程序入口并送入PC,使后续取指转到服务程序,因此I、III正确。服务程序可能使用哪些通用寄存器,要由其软件代码决定并保存相应现场;“保存通用寄存器内容”不是本题规定的中断隐指令职责,II错误。故选B。A、C、D都含II,A、C还分别漏掉入口装入或关中断。保存断点与保存全部现场不同:断点至少涉及恢复原执行位置,通用寄存器保护通常在中断入口的软件中继续完成。

进入练习

第 23 题

操作系统
2 分

下列选项中,不可能在用户态发生的事件是()。

A. 系统调用

B. 外部中断

C. 进程切换

D. 缺页

查看答案与解析收起答案与解析

参考答案:C

答案:C。

题目问事件能否在CPU正在执行用户态程序时发生。用户程序主动执行系统调用指令,A可以在用户态发起;设备或时钟产生外部中断与当前程序模式无关,B可以在用户态到来;用户程序访问未驻留的虚拟页也可触发缺页,D可以。随后这些事件的处理会进入内核态,但“发生”与“处理”不是同一时刻。进程切换则需由内核保存当前进程上下文、选择另一个进程、恢复其地址空间和执行状态,实际切换操作不在用户态完成,因此选C。不要因为系统调用、缺页的处理程序在内核中,就误认为它们不能从用户态触发。

进入练习

第 24 题

操作系统
2 分

中断处理和子程序调用都需要压栈以保护现场,中断处理一定会保存而子程序调用不需要保存其内容的是()。

A. 程序计数器

B. 程序状态字寄存器

C. 通用数据寄存器

D. 通用地址寄存器

查看答案与解析收起答案与解析

参考答案:B

答案:B。

中断可能在程序没有预先安排的指令边界发生,返回后必须让原程序继续得到相同的条件判断和运行状态,所以一定要保存程序状态字PSW,包括条件码、处理器状态等,选B。普通子程序调用有约定好的调用规则,调用者或被调用者可按约定处理被破坏寄存器,并不要求每次都保存完整PSW。A的PC所代表的返回位置两者都要保留,子程序也必须知道返回何处;C、D的通用数据或地址寄存器则按实际使用和调用约定保存,不具有本题的必然差别。判断的重点是“中断一定保存,而普通调用不必统一保存”,不是说子程序绝不能主动保存状态字。

进入练习

第 25 题

操作系统
2 分

下列关于虚拟存储器的叙述中,正确的是()。

A. 虚拟存储只能基于连续分配技术

B. 虚拟存储只能基于非连续分配技术

C. 虚拟存储容量只受外存容量的限制

D. 虚拟存储容量只受内存容量的限制

查看答案与解析收起答案与解析

参考答案:B

答案:B。

虚拟存储允许程序只有当前需要的部分驻留内存,其余在后备存储中,并在访问时调入。为给分散驻留的页面或段建立映射,通常采用请求分页、请求分段等非连续分配机制,按本题的存储管理模型应选B。A把它限制为连续分配,无法体现按需调入和灵活映射。C、D把容量限制说成“只受”外存或内存之一约束也不对:虚拟地址宽度决定一个进程可表示的地址范围,可用后备存储及系统实现也限制可支持的容量,虚拟空间可以大于实际内存。虚拟存储扩展的是程序可用的逻辑空间,并不意味着无限容量或物理内存本身变大。

进入练习

第 26 题

操作系统
2 分

操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是()。

A. 用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序

B. 用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序

C. 用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序

D. 用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序

查看答案与解析收起答案与解析

参考答案:A

答案:A。

从上到下,用户级I/O软件提供应用使用的库函数或接口;设备无关软件统一处理缓冲、设备分配、命名、通用错误等工作;设备驱动把通用请求转换为某类控制器的具体命令;中断处理程序响应硬件完成事件,是最靠近设备的处理层。因此顺序为“用户级I/O软件→设备无关软件→设备驱动程序→中断处理程序”,选A。B颠倒驱动和中断层,C把设备相关驱动放到了设备无关层之前,D更让用户层直接面对中断处理,都不符合逐层封装的结构。完整I/O可能从上往下启动,又从下往上通知完成;题目考层次位置,而不是把整个执行过程只看成单向调用。

进入练习

第 27 题

操作系统
2 分

假设 5 个进程 P0,P1,P2,P3,P4P_{0}, P_{1}, P_{2}, P_{3}, P_{4} 共享三类资源 R1,R2,R3R_{1}, R_{2}, R_{3} ,这些资源总数分别为 18, 6, 22。 T0T_{0} 时刻的资源分配情况如下表所示,此时存在的一个安全序列是()。

进程 已分配 R1 已分配 R2 已分配 R3 最大需求 R1 最大需求 R2 最大需求 R3
P0 3 2 3 5 5 10
P1 4 0 3 5 3 6
P2 4 0 5 4 0 11
P3 2 0 4 4 2 5
P4 3 1 4 4 2 4

A. P0,P2,P4,P1,P3P_{0}, P_{2}, P_{4}, P_{1}, P_{3}

B. P1,P0,P3,P4,P2\mathrm{P_1,P_0,P_3,P_4,P_2}

C. P2,P1,P0,P3,P4\mathrm{P}_2, \mathrm{P}_1, \mathrm{P}_0, \mathrm{P}_3, \mathrm{P}_4

D. P3,P4,P2,P1,P0\mathrm{P}_3, \mathrm{P}_4, \mathrm{P}_2, \mathrm{P}_1, \mathrm{P}_0

第 27 题图 1
查看答案与解析收起答案与解析

参考答案:D

答案:D。

先算可用量。已分配总和为(16,3,19),总资源为(18,6,22),故Work=(2,3,3)。各进程尚需量Need=Max−Allocation,P0到P4依次为(2,3,7)、(1,3,3)、(0,0,6)、(2,2,1)、(1,1,0)。按D验证,每步Need≤Work才能完成,完成后只把原已分配量加回Work:

完成进程 执行前Work 尚需Need 执行后Work
P3 (2,3,3) (2,2,1) (4,3,7)
P4 (4,3,7) (1,1,0) (7,4,11)
P2 (7,4,11) (0,0,6) (11,4,16)
P1 (11,4,16) (1,3,3) (15,4,19)
P0 (15,4,19) (2,3,7) (18,6,22)

D全程满足。A以P0开头,R3需7而初始只有3;C以P2开头,R3需6,也失败;B虽可先完成P1,但其后Work=(6,3,6),仍不足P0的7个R3,所以B失败。故选D。

进入练习

第 28 题

操作系统
2 分

若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是()。

I. 若该文件的数据不在内存,则该进程进入睡眠等待状态

II. 请求 read 系统调用会导致 CPU 从用户态切换到核心态

III. read 系统调用的参数应包含文件的名称

A. 仅 I、II

B. 仅 I、III

C. 仅 II、III

D. I、II 和 III

查看答案与解析收起答案与解析

参考答案:A

答案:A。

普通阻塞式read读取磁盘文件时,若所需数据不在内核缓冲区,操作系统需发起磁盘I/O,进程等待数据就绪而进入睡眠/阻塞状态,I正确。系统调用是应用请求内核服务的入口,执行read请求会使CPU从用户态切换到核心态,II正确。read通常形如 read(fd, buf, count),传文件描述符、目标缓冲区和字节数;文件名用于先前的open,由文件描述符识别已打开文件,所以III错误。仅I、II成立,选A。B漏II并含III,C漏I并含III,D也误含III。这里是题设的普通读取流程,不应把异步接口或特意设置的非阻塞方式自行加进题设。

进入练习

第 29 题

操作系统
2 分

一个多道批处理系统中仅有 P1\mathbf{P}_1 和 P2\mathbf{P}_2 两个作业, P2\mathbf{P}_2 比 P1\mathbf{P}_1 晚 5 ms5 \mathrm{~ms} 到达。它们的计算和 I/O 操作顺序如下:

P1P_{1} :计算 60ms,I/O 80ms,计算 20ms

P2P_{2} :计算 120ms,I/O 40ms,计算 40ms

若不考虑调度和切换时间,则完成两个作业需要的时间最少是()。

A. 240 ms240 \mathrm{~ms}

B. 260ms

C. 340ms

D. 360ms

查看答案与解析收起答案与解析

参考答案:B

答案:B。

以P1到达为0时刻,安排如下,CPU和I/O可以重叠,但同一CPU一次只能执行一个作业:

时间/ms CPU I/O
0~60 P1第一次计算 无
60~140 P2第一次计算的一部分 P1的80ms I/O
140~180 P2继续第一次计算 无
180~200 P1最后20ms计算 P2的40ms I/O开始
200~220 空闲 P2继续I/O
220~260 P2最后40ms计算 无

P2在5ms已到达,60ms可开始。该安排260ms结束。还需证明不能更短:若P1先完成第一次计算,则P2第一次计算完成前,两个首次计算共60+120=180ms必须已做完,P2再需40ms I/O和40ms计算,结束至少在260ms。若P2先完成第一次计算,则P1首次计算完成也不能早于180ms,其后80ms I/O和20ms计算使结束至少280ms。因此260ms是最少时间,选B。A的240ms仅为CPU工作量,缺少不可全部隐藏的I/O;C、D没有充分重叠两作业。

进入练习

第 30 题

操作系统
2 分

若某单处理器多进程系统中有多个就绪态进程, 则下列关于处理机调度的叙述中, 错误的是 ( )。

A. 在进程结束时能进行处理机调度

B. 创建新进程后能进行处理机调度

C. 在进程处于临界区时不能进行处理机调度

D. 在系统调用完成并返回用户态时能进行处理机调度

查看答案与解析收起答案与解析

参考答案:C

答案:C。

普通临界区要求其他访问同一共享资源的进程不能同时进入,但不要求当前进程始终占有CPU。持锁进程仍可被抢占,其他就绪进程可执行不需要该锁的工作,因此“进程处于临界区时不能调度”是错误的绝对说法,选C。A中进程结束后当然要选其他就绪进程;B中新进程进入就绪队列可触发调度判断;D中系统调用完成、将返回用户态时也是内核检查是否需要切换的时机,均正确。某些内核关键区段会显式禁止抢占,但不能把这种特殊限制扩大为所有用户临界区。互斥保护资源访问,调度分配CPU,两种机制应分别理解。

进入练习

第 31 题

操作系统
2 分

下列关于进程和线程的叙述中,正确的是()。

A. 不管系统是否支持线程,进程都是资源分配的基本单位

B. 线程是资源分配的基本单位,进程是调度的基本单位

C. 系统级线程和用户级线程的切换都需要内核的支持

D. 同一进程中的各个线程拥有各自不同的地址空间

查看答案与解析收起答案与解析

参考答案:A

答案:A。

进程拥有地址空间、打开文件等资源,是资源分配的基本单位;支持线程后,多个线程共享进程资源,线程通常成为CPU调度和执行的基本单位,所以A正确,B把两者职责反了。内核级线程由内核管理,切换需要内核参与;用户级线程可由进程内线程库保存和恢复现场,内核可能看不到这些线程之间的切换,因此C的“两者都需要”错误。同一进程的线程共享地址空间,虽各有栈、寄存器和PC,不能据此说它们各有不同地址空间,D错误。线程私有执行现场与进程共享资源同时存在,既不是完全独立,也不是一切状态都共享。

进入练习

第 32 题

操作系统
2 分

下列选项中,不能改善磁盘设备 I/O 性能的是()。

A. 重排 I/O 请求次序

B. 在一个磁盘上设置多个分区

C. 预读和滞后写

D. 优化文件物理块的分布

查看答案与解析收起答案与解析

参考答案:B

答案:B。

机械磁盘访问时间包括寻道、旋转等待和数据传送。A重排I/O请求可减少磁头来回移动;C预读可能提前把将要用的数据送入缓存,滞后写可合并写请求,减少或隐藏访问开销;D把常一起访问的文件块合理放置,可减少跨位置寻道,均能改善性能。B在同一个磁盘上划多个分区只是逻辑划分,仍共享同一磁头机构和传输通道,没有凭空增加并行I/O能力,因此不能单凭分区数改善设备性能,选B。分区可能方便组织管理,但这与优化具体块布局不是一回事;跨分区频繁访问甚至可能增加寻道,不能把“多个分区”当作“多块物理磁盘”。

进入练习

第 33 题

计算机网络
2 分

在 TCP/IP 体系结构中, 直接为 ICMP 提供服务的协议是 ( )。

A. PPP

B. IP

C. UDP

D. TCP

查看答案与解析收起答案与解析

参考答案:B

答案:B。

ICMP用于IP网络中的差错报告和诊断等,其报文作为IP数据报的数据部分直接封装,由IP负责跨网络传送,所以直接提供服务的是IP,选B。A的PPP是点到点链路层协议,可能承载整个IP数据报,但不是ICMP的直接上一层承载关系;C、D的UDP、TCP是运输层协议,ICMP并不先交给它们再发送。判断“直接提供服务”可画出封装顺序:链路帧→IP首部→ICMP报文,中间没有TCP或UDP首部。ICMP虽经常由ping等应用使用,也不能因为应用调用它就把它误归成通过UDP或TCP发送的普通应用协议。

进入练习

第 34 题

计算机网络
2 分

在物理层接口特性中,用于描述完成每种功能的事件发生顺序的是()。

A. 机械特性

B. 功能特性

C. 过程特性

D. 电气特性

查看答案与解析收起答案与解析

参考答案:C

答案:C。

物理层接口规范分四类:机械特性规定接口形状、引脚数及排列等;电气特性规定电压、信号电平、传输速率等;功能特性规定各线或各引脚承担什么用途;过程特性规定完成一次功能时各事件、信号按什么顺序发生,例如先置请求、再等待响应、最后释放。题目强调“事件发生顺序”,对应过程特性,选C。A关注接口长什么样,B关注每个信号做什么,D关注电信号满足哪些数值要求,都没有直接回答先后顺序。功能特性与过程特性尤其易混:知道某线叫请求线只是功能,知道请求与应答如何配合才是过程。

进入练习

第 35 题

计算机网络
2 分

以太网的 MAC 协议提供的是()。

A. 无连接不可靠服务

B. 无连接可靠服务

C. 有连接不可靠服务

D. 有连接可靠服务

查看答案与解析收起答案与解析

参考答案:A

答案:A。

传统以太网MAC发送帧前不与接收方建立逻辑连接,帧携带目的MAC后就可发送,因此是无连接服务。它使用CRC检测帧是否出错,但接收方不会对每个正确帧发送MAC确认,出错或丢失的帧也不由该MAC机制保证恢复,所以是不可靠服务,选A。B把差错检测误当成可靠交付;C、D都增加了以太网MAC没有的建连过程,D还增加了可靠承诺。发送端检测碰撞并重新竞争是介质访问机制的一部分,也不能保证帧最终被目标正确接收。需要端到端可靠性时可由TCP等上层完成,各层的服务性质应分别判断。

进入练习

第 36 题

计算机网络
2 分

两台主机之间的数据链路层采用后退 NN 帧协议(GBN)传输数据,数据传输速率为 16kbps,单向传播时延为 270ms,数据帧长度范围是 128~512 字节,接收方总是以与数据帧等长的帧进行确认。为使信道利用率达到最高,帧序号的比特数至少为()。

A. 5

B. 4

C. 3

D. 2

查看答案与解析收起答案与解析

参考答案:B

答案:B。

发送窗口必须足够大,让最早一帧的确认返回之前仍有新帧可发。要覆盖允许的帧长范围,取128B最短帧,此时传播时延占比最大。数据与等长确认帧的发送时间均为 T=128×8/16000=0.064T=128\times8/16000=0.064 s=64ms。第一帧从开始发送到完整收到确认需 T+2×270+T=668T+2\times270+T=668 ms,因此窗口需满足 WT≥668WT\ge668,即 W≥⌈668/64⌉=11W\ge\lceil668/64\rceil=11。GBN使用k位序号时最大发送窗口为 2k−12^k-1,k=3只能7帧,不够;k=4可15帧,足够,选B。A的5位也够却不是最少,C的3位、D的2位不够。不能忽略确认帧的发送时间,也不能把GBN上限错用成SR的半序号空间规则。

进入练习

第 37 题

计算机网络
2 分

下列关于 IP 路由器功能的描述中,正确的是()。

I. 运行路由协议,设置路由表

II. 监测到拥塞时,合理丢弃 IP 分组

III. 对收到的IP分组头进行差错校验,确保传输的IP分组不丢失

IV. 根据收到的 IP 分组的目的 IP 地址,将其转发到合适的输出线路上

A. 仅 III、IV

B. 仅 I、II、III

C. 仅 I、II、IV

D. I、II、III、IV

查看答案与解析收起答案与解析

参考答案:C

答案:C。

路由器运行路由协议以学习和更新转发所需路由表,I正确;队列拥塞、空间不足等情况下可按策略丢弃IP分组,II正确;依据目的IP地址匹配路由并选择输出接口,IV正确。IPv4首部校验只能检测首部是否发生一定类型的错误,不能保证链路、队列和后续网络都不丢包,IP本来提供尽力而为服务,因此III后半句“确保不丢失”错误。仅I、II、IV成立,选C。A、B、D都含III,A还漏I、II,B漏IV。判断复合语句时需要整条都成立;不能因为路由器确实检查首部,就接受后面的可靠性保证。

进入练习

第 38 题

计算机网络
2 分

ARP 协议的功能是()。

A. 根据 IP 地址查询 MAC 地址

B. 根据 MAC 地址查询 IP 地址

C. 根据域名查询 IP 地址

D. 根据 IP 地址查询域名

查看答案与解析收起答案与解析

参考答案:A

答案:A。

IPv4主机在本链路发送帧,需要知道下一跳的MAC地址。ARP以目标IPv4地址发起查询,拥有该地址的设备返回MAC,建立“IP→MAC”的映射,因此选A。B是反向的MAC→IP方向,通常对应RARP这一不同协议的目标;C是域名→IP,由DNS等名称解析机制完成;D是IP→域名,可通过DNS的反向查询完成。若目的主机在同一子网,ARP查它的IP;若在其他子网,则先由路由选择网关,再ARP查网关IP。ARP广播限制在本链路,并不穿过所有路由器去找远端服务器MAC,这有助于理解它承担的地址解析范围。

进入练习

第 39 题

计算机网络
2 分

某主机的 IP 地址为 180.80.77.55,子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是()。

A. 180.80.76.0

B. 180.80.76.255

C. 180.80.77.255

D. 180.80.79.255

查看答案与解析收起答案与解析

参考答案:D

答案:D。

掩码255.255.252.0的第三字节252为11111100,前22位是网络位,后10位是主机位。先与主机地址按位与:第三字节 77 & 252=7677\,\&\,252=76,第四字节与0得0,所以网络地址为180.80.76.0。广播地址把全部10位主机位设1,使第三字节最后两位为11,即76+3=79,第四字节为255,得到180.80.79.255,选D。A是网络地址;B只把最后一字节置1,第三字节主机位未全1;C同样未把第三字节的两位全置1。/22子网跨越第三字节76、77、78、79四个取值,不能按默认/24只把原地址末字节改255。

进入练习

第 40 题

计算机网络
2 分

若用户 1 与用户 2 之间发送和接收电子邮件的过程如下图所示, 则图中①、②、③阶段分别使用的应用层协议可以是 ( )。

第 40 题图 1

A. SMTP, SMTP, SMTP

B. POP3, SMTP, POP3

C. POP3, SMTP, SMTP

D. SMTP, SMTP, POP3

查看答案与解析收起答案与解析

参考答案:D

答案:D。

图中①是用户1把邮件提交给自己的邮件服务器,②是发送方服务器把邮件转送到接收方服务器,二者均属于发送邮件,可使用SMTP。③是用户2从自己的邮件服务器取回已收邮件,可使用POP3。因此组合为SMTP、SMTP、POP3,选D。A误把SMTP用于③的取信;B把①的邮件提交错误地改成POP3;C既把①改成POP3,又把③改成SMTP。POP3用于读取邮箱中的邮件,不负责服务器间转投;SMTP负责提交和传送,不是常规的邮箱下载协议。题目问“可以是”,收信还可能采用其他取信协议,但无需因此改变图中这组可行的三阶段组合。

进入练习

解答题

7 题 · 共 70 分

第 41 题

数据结构
10 分

设有 6 个有序表 A, B, C, D, E, F, 分别含有 10, 35, 40, 50, 60 和 200 个数据元素, 各表中元素按升序排列。要求通过 5 次两两合并, 将 6 个表最终合并成 1 个升序表, 并在最坏情况下比较的总次数达到最小。请回答下列问题。

1)给出完整的合并过程,并求出最坏情况下比较的总次数。

2)根据你的合并过程,描述 n(n⩾2)n (n \geqslant 2) 个不等长升序表的合并策略,并说明理由。

查看答案与解析收起答案与解析

(1)完整合并过程。 两个长度为m、n的升序表用双指针归并:比较当前首元素,取较小者,直到一方为空,余下元素直接接上。最坏情况下两表元素交错,最后只剩一项不需比较,因此比较次数为m+n−1。要减小各元素反复参与合并的次数,应让短表先合并,长表尽量晚参加。

每次从当前各表中选两个最短的,得到:

次数 合并的表或长度 新表长度 最坏比较次数
1 A(10)+B(35) 45 10+35−1=44
2 C(40)+(AB)(45) 85 40+45−1=84
3 D(50)+E(60) 110 50+60−1=109
4 (CAB)(85)+(DE)(110) 195 85+110−1=194
5 195+F(200) 395 195+200−1=394

共5次两两合并,最终395个元素,最坏比较总数 44+84+109+194+394=82544+84+109+194+394=825。

(2)一般策略和理由。 对n个不等长有序表,将当前表长放入小根堆;反复取最短两个表合并,把新表长度放回,直到只剩一个。它与哈夫曼树的构造相同。

把原表看成合并树的叶子,表长是叶权,叶子到根经过几条边,该表全部元素就参加几次合并。因此各次合并后的总长度之和等于带权路径长度WPL;每次比较次数再减1,总比较为 WPL−(n−1)WPL-(n-1),而n−1固定,只需最小化WPL。

可在最优二叉合并树中把最短两个叶子安排为最深层的一对兄弟:把小权值与较深叶子交换不会增加WPL。把这两个叶子缩成权值之和的一个叶子,剩余仍是同类最优问题,所以反复合并两个最短表的贪心策略成立。小根堆管理长度需O(nlogn)时间、O(n)空间;实际数据合并成本还包括逐元素复制,不能只用堆操作时间概括全部合并过程。

进入练习

第 42 题

数据结构
13 分

假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间。例如,“loading”和“being”的存储映像如下图所示。

第 42 题图 1

设 str1 和 str2 分别指向两个单词所在单链表的头结点,链表结点结构为 data next,请设计一个时间上尽可能高效的算法,找出由 str1 和 str2 所指的两个链表共同后缀的起始位置(如图中字符 i 所在结点的位置 p)。要求:

1)给出算法的基本设计思想。

2)根据设计思想,采用 C 或 C++或 Java 语言描述算法,关键之处给出注释。

3)说明你所设计算法的时间复杂度。

查看答案与解析收起答案与解析

(1)设计思想。 单链表一旦指向同一结点,后继next只有一个,后面所有结点就相同,所以共享空间只能表现为共同后缀。要找的是同一个结点的地址,不是两个字符值相同的位置。

设两个表的有效字符结点数为m、n。先遍历求长度,让较长表的指针先走|m−n|步,此后两个指针到表尾的距离相同。再同步各走一步,第一次地址相等的非空结点就是共同后缀起点;若一起走到NULL仍未找到非空相同结点,说明没有共同后缀。带头结点不存单词字符,求长度和比较都从head->next开始。

(2)C实现。

c 复制代码
#include <stddef.h>

typedef struct Node {
    char data;
    struct Node *next;
} Node;

/* str1、str2指向两个有效的头结点;链表无环。 */
Node *common_suffix(Node *str1, Node *str2) {
    Node *p = str1->next, *q = str2->next;
    size_t m = 0, n = 0;
    for (Node *t = p; t != NULL; t = t->next) ++m;
    for (Node *t = q; t != NULL; t = t->next) ++n;
    while (m > n) { p = p->next; --m; }
    while (n > m) { q = q->next; --n; }
    while (p != q) {            /* 比较地址而不是data */
        p = p->next;
        q = q->next;
    }
    return p;                  /* 无共享后缀时返回NULL */
}

图中loading长7、being长5,loading指针先走2步,由l来到a;同步比较a与b、d与e,再到同一个i结点时地址相等,返回i的位置p。

正确性和边界。 对齐后两指针剩余长度相等,若存在共同后缀,则必同时到达其首结点;此前不同地址只是各自的私有前缀,因此第一次相等就是所求。若不共享空间,两指针最终同时为NULL,循环退出而不会访问NULL的next。空单词、长度相同、共享整个字符链都可由同一过程处理;字符串内容相同却分别存储时仍应返回NULL。

(3)复杂度。 两次求长度和同步扫描都至多遍历各表常数次,总时间 O(m+n)O(m+n),只用若干指针及计数,额外空间 O(1)O(1),也不改变原表结构。

进入练习

第 43 题

计算机组成原理
11 分

假定某计算机的CPU主频为80MHz,CPI为4,并且平均每条指令访存1.5次,主存与Cache之间交换的块大小为16B,Cache的命中率为 99%99\% ,存储器总线宽度为32位。请回答下列问题。

1)该计算机的 MIPS 数是多少?平均每秒 Cache 缺失的次数是多少?在不考虑 DMA 传送的情况下,主存带宽至少达到多少才能满足 CPU 的访存要求?

  1. 假定在 Cache 缺失的情况下访问主存时, 存在 0.0005%0.0005\% 的缺页率, 则 CPU 平均每秒产生多少次缺页异常? 若页面大小为 4KB, 每次缺页都需要访问磁盘, 访问磁盘时 DMA 传送采用周期挪用方式, 磁盘 I/O 接口的数据缓冲寄存器为 32 位, 则磁盘 I/O 接口平均每秒发出的 DMA 请求次数至少是多少?

3)CPU 和 DMA 控制器同时要求使用存储器总线时,哪个优先级更高?为什么?

  1. 为了提高性能, 主存采用 4 体低位交叉存储模式, 工作时每 1/41 / 4 个存储周期启动一个体。若每个体的存储周期为 50 ns50 \mathrm{~ns} , 则该主存能提供的最大带宽是多少?
查看答案与解析收起答案与解析

(1)指令速率、Cache缺失和主存带宽。 主频为80×10⁶周期/s,平均每条指令用4周期,所以指令速率 80×106/4=20×10680\times10^6/4=20\times10^6 条/s,MIPS=20。每条指令平均访存1.5次,Cache访问率为 20×106×1.5=30×10620\times10^6\times1.5=30\times10^6 次/s。命中率99%,缺失率1%,每秒缺失 30×106×0.01=30000030\times10^6\times0.01=300000 次。

一次缺失须从主存取完整16B块,而非只取CPU所要的一个字,因此主存最低带宽 300000×16=4.8×106300000\times16=4.8\times10^6 B/s=4.8MB/s。这里速率单位MB按十进制百万字节解释;没有题设以外的写回或协议附加开销。

(2)缺页和DMA请求。 给出的缺页率是“Cache缺失后访问主存”这一条件下的比例,应乘每秒主存访问300000次,而不能乘全部Cache访问。0.0005%=5×10−60.0005\%=5\times10^{-6},故平均每秒缺页 300000×5×10−6=1.5300000\times5\times10^{-6}=1.5 次。

每页4KB=4096B;接口缓冲寄存器32位=4B,周期挪用每搬运一个寄存器量需一次DMA请求,所以每页至少4096/4=1024次。平均请求率 1.5×1024=15361.5\times1024=1536 次/s。缺页次数1.5是长期平均频率,不要求某个具体1秒内实际发生半次异常。

(3)总线优先级。 DMA控制器应比CPU的访存请求优先。设备持续产生数据时,缓冲寄存器容量有限,迟迟不搬运可能被新数据覆盖;CPU则可等待一个或若干总线周期后继续,通常不会因此丢掉内部数据。这就是周期挪用允许DMA暂时占用存储总线的原因。

(4)四体交叉带宽。 每体存储周期50ns,启动间隔为50/4=12.5ns。顺序交叉访问、流水线进入稳定状态后,每12.5ns可得到一个32位字即4B,最大带宽 4/(12.5×10−9)=320×1064/(12.5\times10^{-9})=320\times10^6 B/s=320MB/s。单体仍要50ns才能再次启动同体操作,四体轮流工作使整体输出间隔缩短;不要误把每次字长也乘4又重复计算。

进入练习

第 44 题

计算机组成原理
12 分

某16位计算机中,带符号整数用补码表示,数据Cache和指令Cache分离。题44表给出了指令系统中部分指令格式,其中Rs和Rd表示寄存器,mem表示存储单元地址,(x)表示寄存器x或存储单元x的内容。

题44表 指令系统中部分指令格式

名称 指令的汇编格式 指令功能
加法指令 ADD Rs, Rd (Rs) + (Rd) -> Rd
算术/逻辑左移 SHL Rd 2*(Rd) -> Rd
算术右移 SHR Rd (Rd)/2 -> Rd
取数指令 LOAD Rd, mem (mem) -> Rd
存数指令 STORE Rs, mem (Rs) -> mem

该计算机采用 5 段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用“按序发射,按序完成”方式,没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。

  1. 若 int 型变量 x 的值为 -513,存放在寄存器 R1 中,则执行指令 “SHR R1” 后,R1 的内容是多少?(用十六进制表示。)

2)若某个时间段中,有连续的4条指令进入流水线,在其执行过程中没有发生任何阻塞,则执行这4条指令所需的时钟周期数为多少?

3)若高级语言程序中某赋值语句为 x=a+bx = a + b , xx 、 aa 和 bb 均为 int 型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流水线中的执行过程如题44图所示。

I_1 LOAD R1, [a]
I_2 LOAD R2, [b]
I_3 ADD R1, R2
I_4 STORE R2, [x]
时间单元
指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14
{\mathrm{I}}_{1} IF ID EX M WB
{\mathrm{I}}_{2} IF ID EX M WB
{\mathrm{I}}_{3} IF ID EX M WB
{\mathrm{I}}_{4} IF ID EX M WB

题44图 指令序列及其执行过程示意图

则这4条指令执行过程中, I3\mathbf{I}_3 的ID段和 I4\mathbf{I}_4 的IF段被阻塞的原因各是什么?

  1. 若高级语言程序中某赋值语句为 x=2∗x+ax = 2*x + a , xx 和 aa 均为 unsigned int 类型变量,它们的存储单元地址分别表示为 [x][x] 、 [a][a] ,则执行这条语句至少需要多少个时钟周期?要求模仿题 44 图画出这条语句对应的指令序列及其在流水线中的执行过程示意图。
第 44 题图 1
查看答案与解析收起答案与解析

(1)补码算术右移。 16位正数513=0201H,−513的补码为 10000H−0201H=FDFFH10000\mathrm H-0201\mathrm H=FDFF\mathrm H,二进制 11111101 11111111。算术右移复制最高符号位1,其余位右移一位,得到 11111110 11111111,即FEFFH,按补码为−257。负奇数右移的结果向负无穷取整,不能按向0截断写为−256;逻辑右移补0则是不同运算。

(2)无阻塞流水。 5段流水中第一条指令需5周期通过全部阶段;后续每周期进入一条,每增加一条使整体结束延后一周期。因此4条指令总时间 5+(4−1)=85+(4-1)=8 周期,不是4×5=20周期。

(3)题图阻塞原因。 I3的ADD在ID阶段读R1和R2,分别由I1、I2的LOAD写回。I1在周期5 WB,I2在周期6 WB;没有转发,且同周期不能读写同一寄存器,所以I3不能在周期6读R2,要等周期7才ID,形成先写后读的真实数据相关(RAW)。题设按序发射,前面的I3滞留在取指之后尚未进入ID时,后面的I4也不能越过它进入取指通路,于是I4的IF推迟到周期7。这是前面数据相关造成的后续流水阻塞,不是指令Cache与数据Cache争用。

(4)实现x=2*x+a及最少周期数。 至少需要两次LOAD取得x、a,一次SHL求2*x,一次ADD以及一次STORE。题设ADD Rs,Rd将结果写入第二操作数,所以以下把和放在R2,随后STORE R2:

text 复制代码
I1: LOAD  R1, [x]
I2: LOAD  R2, [a]
I3: SHL   R1
I4: ADD   R1, R2
I5: STORE R2, [x]

先把不依赖彼此的两条LOAD连续发射,可以让读a与等待读x的时段重叠。满足题设的流水图如下;空格表示未执行阶段或停顿,阶段在实际完成的周期标出。

指令\周期 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
I1 IF ID EX M WB
I2 IF ID EX M WB
I3 IF ID EX M WB
I4 IF ID EX M WB
I5 IF ID EX M WB

I1最早周期5写R1,I3最早周期6读R1,周期9写回移位结果;I4最早周期10读R1,周期13写回R2;I5最早周期14读R2,周期17通过最后一段。这条不可省的依赖链已经用尽各自最早时刻,因此总计最少17周期。STORE的WB不改通用寄存器,但按题图规定的5段执行模型仍计入完成周期。x、a为无符号数,左移和加法保留16位结果,实现相应的模 2162^{16} 运算。

进入练习

第 45 题

操作系统
7 分

某请求分页系统的局部页面置换策略如下: 系统从 0 时刻开始扫描, 每隔 5 个时间单位扫描一轮驻留集 (扫描时间忽略不计), 本轮没有被访问过的页框将被系统回收, 并放入到空闲页框链尾, 其中内容在下一次被分配之前不被清空。当发生缺页时, 如果该页曾被使用过且还在空闲页链表中, 则重新放回进程的驻留集中; 否则, 从空闲页框链表头部取出一个页框。

假设不考虑其他进程的影响和系统开销,初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为32,15,21,41。进程P依次访问的<虚拟页号,访问时刻>是:<1,1>,<3,2>,<0,4>,<0,6>,<1,11>,<0,13>,<2,14>。请回答下列问题。

1)访问 <0,4>< 0,4> 时,对应的页框号是什么?

2)访问 <1,11>< 1,11> 时,对应的页框号是什么?说明理由。

3)访问 <2,14>< 2,14> 时,对应的页框号是什么?说明理由。

4)该策略是否适合于时间局部性好的程序?说明理由。

查看答案与解析收起答案与解析

按时间模拟。 驻留集中的页面可直接命中;扫描时只把本轮未访问的页框移到空闲链尾,内容暂时保留。缺页若能在空闲链中找到原页,取回原页框;否则才分配链头并覆盖其旧内容。以下按页1、页3的顺序列出时刻10的回收,交换它们的回收次序也不影响所问结果。

时刻 操作 驻留映射(页→框) 空闲链(头→尾)
初始 无驻留页 空 32,15,21,41
1 访问页1,取链头 1→32 15,21,41
2 访问页3,取链头 1→32,3→15 21,41
4 访问页0,取链头 1→32,3→15,0→21 41
5 本轮三个页面均访问,保留并开始新轮 1→32,3→15,0→21 41
6 访问页0,命中 同上 41
10 本轮仅页0访问,回收页1、3 0→21 41,32,15
11 页1仍在空闲框32,恢复 0→21,1→32 41,15
13 页0命中 同上 41,15
14 新页2,分配链头41 0→21,1→32,2→41 15

(1) 访问<0,4>时,对应页框21,它是前三次首次调入的第三个链头。

(2) 访问<1,11>时,对应页框32。虽然页1在时刻10被回收,但32尚未分配给别的页,旧内容仍在,所以可直接从空闲链恢复,不必从链头41重新分配或重新读磁盘。

(3) 访问<2,14>时,对应页框41。页2此前从未使用,不满足“曾用且仍在空闲链”的恢复条件,必须取当前链头;41从开始起一直空闲,回收框32、15又只加在链尾,因此链头仍是41。

(4) 适合时间局部性好的程序。这样的程序常在短时间内重复访问最近用过的页:若未被回收,它就在驻留集命中;若刚被回收且尚未被重分配,又可直接恢复原框,省去磁盘读入。该策略通过保留回收页内容利用近期访问规律,并不承诺每次缺页都能免磁盘I/O;若原框已覆盖,仍要重新调入。

进入练习

第 46 题

操作系统
8 分

某文件系统空间的最大容量为 4TB(1T=240 B)4 \mathrm{TB} (1 \mathrm{T} = 2^{40} \mathrm{~B}) , 以磁盘块为基本分配单位, 磁盘块大小为 1KB1 \mathrm{KB} 。文件控制块 (FCB) 包含一个 512 B512 \mathrm{~B} 的索引表区。请回答下列问题。

  1. 假设索引表区仅采用直接索引结构, 索引表区存放文件占用的磁盘块号。索引表项中块号最少占多少字节? 可支持的单个文件最大长度是多少字节?

  2. 假设索引表区采用如下结构: 第 0~7 字节采用<起始块号, 块数>格式表示文件创建时预分配的连续存储空间, 其中起始块号占 6B, 块数占 2B; 剩余 504 字节采用直接索引结构,一个索引项占 6B, 则可支持的单个文件最大长度是多少字节? 为了使单个文件的长度达到最大, 请指出起始块号和块数分别所占字节数的合理值并说明理由。

查看答案与解析收起答案与解析

(1)仅采用直接索引。 文件系统容量为4TB,即 4×2404\times2^{40} B;每个磁盘块为1KB,即 2102^{10} B,所以总块数为

4×240210=232.\frac{4\times2^{40}}{2^{10}}=2^{32}.

给这些块编号需覆盖0到 232−12^{32}-1,块号最少占32位,也就是4B。512B索引区能放 512/4=128512/4=128 个块号,每个块号直接指向一个1KB数据块,所以最大文件长度为

128×1024=131072 B.128\times1024=131072\ \mathrm{B}.

块号的位数由整个文件系统需要编号的块总数决定;文件的直接索引项数则由FCB索引区的字节预算决定,不能混为同一个限制。

(2)连续预分配区加直接索引区。 前8B描述一段连续空间,后504B使用直接索引。每个直接索引项占6B,所以直接索引部分可指向 504/6=84504/6=84 个数据块。

本题采用的字段容量约定是:2B块数字段按能够表示65536个连续块计算。要实现1到65536的正块数范围,必须有相应计数编码,例如把0编码约定为65536块。这里明确采用该容量约定,连续区与84个直接索引块不重复,所以最大文件长度为

(216+84)×210=226+84×1024=67194880 B.(2^{16}+84)\times2^{10} =2^{26}+84\times1024 =67194880\ \mathrm{B}.

起始块号占6B可表示的地址范围虽很大,但连续区大小仍由块数字段限制;不能用起始地址位数替代块数上限。

合理重新分配前8B。 一个合理方案为“起始块号4B、块数4B”。全盘有 2322^{32} 个块,4B起始块号已经足以覆盖任意块位置,再多占用地址字节不会增加可用空间。把原来多出的2B转给块数后,4B块数字段在上述容量约定下能描述最多 2322^{32} 个连续块,能够达到4TB文件系统的空间上限。实际连续区还须从所选起始块起处于有效磁盘范围内,文件的总数据块也不能超过文件系统可用容量,因此不能将全部连续块和额外索引块相加后宣称文件超过4TB;系统元数据所占空间也会使实际可用容量更小。

普通无符号计数的边界。 若实现把2B字段严格解释成普通无符号整数,不定义上述特殊计数编码,它的最大值就是 216−1=655352^{16}-1=65535,相应最大文件长度为

(65535+84)×1024=67193856 B.(65535+84)\times1024=67193856\ \mathrm{B}.

“有65536种编码”与“普通整数最大值是65536”并不等价。两种数值相差一个1KB块,来自明确不同的计数编码约定;本题主答案使用前面已经写明的字段容量约定。

进入练习

第 47 题

计算机网络
9 分

主机 H 通过快速以太网连接 Internet, IP 地址为 192.168.0.8, 服务器 S 的 IP 地址为 211.68.71.80。H 与 S 使用 TCP 通信时, 在 H 上捕获的其中 5 个 IP 分组如题 47-a 表所示。

题47-a表

分组 1:

text 复制代码
45 00 00 30 01 9b 40 00 80 06 1d e8 c0 a8 00 08 d3 44 47 50
0b d9 13 88 84 6b 41 c5 00 00 00 00 70 02 43 80 5d b0 00 00

分组 2:

text 复制代码
45 00 00 30 00 00 40 00 31 06 6e 83 d3 44 47 50 c0 a8 00 08
13 88 0b d9 e0 59 9f ef 84 6b 41 c6 70 12 16 d0 37 e1 00 00

分组 3:

text 复制代码
45 00 00 28 01 9c 40 00 80 06 1d ef c0 a8 00 08 d3 44 47 50
0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 10 43 80 2b 32 00 00

分组 4:

text 复制代码
45 00 00 38 01 9d 40 00 80 06 1d de c0 a8 00 08 d3 44 47 50
0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 18 43 80 e6 55 00 00

分组 5:

text 复制代码
45 00 00 28 68 11 40 00 31 06 06 7a d3 44 47 50 c0 a8 00 08
13 88 0b d9 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 57 d2 00 00

请回答下列问题。

  1. 题 47-a 表中的 IP 分组中, 哪几个是由 H 发送的? 哪几个完成了 TCP 连接建立过程? 哪几个在通过快速以太网传输时进行了填充?

  2. 根据题 47-a 表中的 IP 分组, 分析 S 已经收到的应用层数据字节数是多少?

  3. 若题 47-a 表中的某个 IP 分组在 S 发出时的前 40 字节如题 47-b 表所示, 则该 IP 分组到达 H 时经过了多少个路由器?

题47-b表

text 复制代码
45 00 00 28 68 11 40 00 40 06 ec ad d3 44 47 50 ca 76 01 06
13 88 a1 08 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 b7 d6 00 00

注:IP分组头和TCP段头结构分别如题47-a图和题47-b图所示。

题 47-a 图 IPv4 首部、题 47-b 图 TCP 首部
查看答案与解析收起答案与解析

先定位首部字段。 分组均从IP首部开始,45H表示IPv4、首部长5×4=20B。IP源地址在偏移12~15B,目的地址在16~19B;TCP从第20B开始,首部中的第12字节高4位表示TCP首部的32位字数,紧接的标志字节用于识别SYN、ACK。捕获的字节不包含完整选项或载荷时,仍可从总长度和首部长度求它们的大小。

(1)发送方、握手和填充。 H的IP地址192.168.0.8对应 c0 a8 00 08,因此源IP为该值的分组1、3、4由H发送;分组2、5由S发向H。连接建立三次握手分别为:1的TCP标志02H,仅SYN=1;2的12H,SYN=1、ACK=1;3的10H,ACK=1且SYN=0。所以1、2、3共同完成建连。

以太网最小数据字段46B,承载的完整IP分组不足46B才填充;不是用TCP载荷长度判断。

分组 IP总长度 TCP首部长度 应用数据长度 以太网填充
1 0030H=48B 7×4=28B 0B 无
2 0030H=48B 7×4=28B 0B 无
3 0028H=40B 5×4=20B 0B 6B
4 0038H=56B 5×4=20B 16B 无
5 0028H=40B 5×4=20B 0B 6B

故需填充的是3、5。填充属于以太网,不计入IP总长度,也不属于TCP应用数据。

(2)S收到的应用数据。 H在分组1中的初始序号为846B41C5H,SYN占用一个序号,因此应用数据的起始序号为846B41C6H,这也与分组4的seq一致。S在分组5发来的累计确认号为846B41D6H,表示这一序号之前的数据已经连续收到,应用数据字节数为 846B41D6H−846B41C6H=10H=16846B41D6\mathrm H-846B41C6\mathrm H=10\mathrm H=16 B。分组4的总长减两层首部也得到56−20−20=16B,可互相验证。不能把SYN算作应用数据,多算成17B。

(3)路由器数量。 S发出时与H收到时,IP标识6811H、TCP序号E0599FF0H、确认号846B41D6H一致,可认定题47-b对应分组5。S发出时TTL字段40H=64,H收到时31H=49,每经过一个正常转发路由器TTL减1,所以经过 64−49=1564-49=15 个路由器。两处目的地址、目的端口不同,是中途地址/端口转换的结果:公网上的CA760106H到达H时成为C0A80008H,A108H端口也变为0BD9H;这些修改和相应校验和更新不改变TTL差的计算方法。

进入练习