// 408 真题题库数据 - 2009-2025 const QUESTIONS_DATA = [{"id": 1, "year": 2009, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-1-questions\n\n\n\n

为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。

\n
A.栈
\n
B.队列
\n
C.树
\n
D.图
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-1-analysis\n\n\n\n

缓冲区 的概念出现在操作系统的设备管理中,其特点是先进先出。缓冲区的作用是解决主机与打印机之间速度不匹配的问题,而不应改变打印数据的顺序。若用栈,先进入缓冲区的数据则要排队到最后才能打印,显然不符题意,故选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 2, "year": 2009, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-2-questions\n\n\n\n

设栈 S 和队列 Q 的初始状态均为空,元素 a, b, c, d, e, f, g 依次进入栈 S 。若每个元素出栈后立即进入队列 Q,且 7 个元素出队的顺序是 b, d, c, f, e, a, g,则栈 S 的容量至少是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-2-analysis\n\n\n\n

由于队列的特点是先进先出,即栈 S 的出栈顺序就是队 Q 的出队顺序。故本题只需注意栈的特点是先进后出。出入栈的详细过程见下表。

序号说明栈内栈外序号说明栈内栈外
1a 入栈A8e 入栈aebdc
2b 入栈Ab9f 入栈aefbdc
3b 出栈Ab10f 出栈aebdcf
4c 入栈Acb11e 出栈abdcfe
5d 入栈Acdb12a 出栈bdcfea
6d 出栈Acbd13g 入栈gbdcfea
7c 出栈Abdc14g 出栈bdcfeag

栈内的最大深度为 3,故栈 S 的容量至少是 3。

【另解】元素的出栈顺序是 b,d,c,f,e,a,g,可推出进栈出栈顺序为 Push(S,a), Push(S,b), Pop(S,b), Push(S,c), Push(S,d), Pop(S,d), Pop(S,c), Push(S,e), Push(S,f), Pop(S,f), Pop(S,e), Pop(S,a), Push(S,g), Pop(S,g)。假设初始所需容量为 0,每做一次 Push 进行一次“+1”操作,每做一次 Pop 进行一次“-1”操作,记录容量的最大值为 3,所以选 C。

\n\n\n\n\n", "difficulty": 1}, {"id": 3, "year": 2009, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-3-questions\n\n\n\n

给定二叉树如右图所示。设 N 代表二叉树的根,L 代表根结点的左子树,R 代表根结点的右子树。若遍历后的结点序列是 3,1,7,5,6,2,4,则其遍历方式是()。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
2
3
4
5
6
7
\n
A.LRN
\n
B.NRL
\n
C.RLN
\n
D.RNL
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-3-analysis\n\n\n\n

分析遍历后的结点序列,可以看出根结点是在中间访问,而右子树结点在左子树之前,即遍历的方式是 RNL。本题考查的遍历方法并不是二叉树的 3 种基本 遍历方式,对于考生而言,重要的是要掌握遍历的思想。
\n\n\n\n\n", "difficulty": 1}, {"id": 4, "year": 2009, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n2009-Question-4-questions\r\n\r\n\r\n\r\n

下列二叉排序树中,满足平衡二叉树定义的是( )。

\r\n
\r\n\r\n\r\n\r\n \r\n 408真题系统\r\n \r\n\r\n
D
C
B
A
\r\n
A.A
\r\n
B.B
\r\n
C.C
\r\n
D.D
\r\n\r\n\r\n\r\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-4-analysis\n\n\n\n

根据 AVL 的定义有,任意结点的左、右子树高度差的绝对值不超过 1。而其余 3 个 选项均可以找到不符合该条件的结点。在做题过程中,如果答案不太明显,可以把每个非叶结点的平衡因子都写出来再进行判断。
\n\n\n\n\n", "difficulty": 1}, {"id": 5, "year": 2009, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-5-questions\n\n\n\n

已知一棵完全二叉树的第 6 层(设根为第 1 层)有 8 个叶结点,则该完全二叉树的结点个数最多是()。

\n
A.39
\n
B.52
\n
C.111
\n
D.119
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-5-analysis\n\n\n\n

完全二叉树 比满二叉树只是在最下面一层的右边缺少了部分叶结点,而最后一层之上是个\n满二叉树,并且只有最后两层有叶结点。第 6 层有叶结点则完全二叉树的高度可能为 6 或 7,显然树高为 7 时结点更多。若第 6 层上有 8 个叶结点,则前六层为满二叉树,而第 7 层缺失了 8×2=16 个叶结点,故完全二叉树的结点个数最多为\n(27−1)−16=111\n个结点。
\n\n\n\n\n", "difficulty": 1}, {"id": 6, "year": 2009, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-6-questions\n\n\n\n

将森林转换为对应的二叉树,若在二叉树中,结点 u 是结点 v 的父结点的父结点,则在原来的森林中,u 和 v 可能具有的关系是( )。

\n

I. 父子关系

\n

II. 兄弟关系

\n

III. u 的父结点与 v 的父结点是兄弟关系

\n
A.只有 II
\n
B.I 和 II
\n
C.I 和 III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-6-analysis\n\n\n\n

森林与二叉树的 转换规则 为“左孩子右兄弟”。在最后生成的二叉树中,父子关系在对应森林关系中可能是兄弟关系或原本就是父子关系。

情形 I:若结点 V 是结点 u 的第二个孩子结点,在转换时,结点 V 就变成结点 u 第一个孩子的右孩子,符合要求。

情形 II:结点 u 和 V 是兄弟结点的关系,但二者之中还有一个兄弟结点 k, 则转换后,结点 V 就变为结点 k 的右孩子,而结点 k 则是结点 u 的右孩子,符合要求。

\n\n
u
v
u
v
u
v
u
v
II
I

情形 III: 若结点 u 的父结点与 v 的父结点是兄弟关系,则转换后,结点 u 和 v 分别在两者最左父结点的两棵子树中,不可能出现在同 一条路径中。

\n\n
III
1
2
3
u
v
5
7
1
3
u
5
5
5
5

【逆向法】由题意可知 u 是 v 的父结点的父结点,如下图所示有 4 种情况:

\n\n
u
v
u
v
u
v
u
v
(1)
(2)
(3)
(4)

根据树与二叉树的转换规则,将这 4 种情况转换成树种结点的关系。(1) 在原来的树中 u 是 v 的父结点的父结点; (2) 在树中 u 是 v 的父结点; (3) 在树中 u 是 v 的父结点的兄弟; (4) 在树中 u 与 v 是兄弟关系。由此可知 I 和 II 正确。

\n\n\n\n\n", "difficulty": 1}, {"id": 7, "year": 2009, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-7-questions\n\n\n\n

下列关于无向连通图特性的叙述中,正确的是()。

\n

I. 所有顶点的度之和为偶数

\n

II. 边数大于顶点个数减 1

\n

III. 至少有一个顶点的度为 1

\n
A.只有 I
\n
B.只有 II
\n
C.I 和 II
\n
D.I 和 III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-7-analysis\n\n\n\n

每条边都连接了两个结点,在计算顶点的度之和时每条边都被计算了两次(出度和入度),故所有顶点的度之和为边数的两倍,I 正确。n 个顶点、n-1 条边可以构成无向连通图,比如树,II 错误。顶点数为 N (N≥1) 的无向完全图中不存在度为 1 的顶点,III 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 8, "year": 2009, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-8-questions\n\n\n\n

下列叙述中,不符合 m 阶 B 树定义要求的是()。

\n
A.根节点最多有 m 棵子树
\n
B.所有叶结点都在同一层上
\n
C.各结点内关键字均升序或降序排列
\n
D.叶结点之间通过指针链接
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-8-analysis\n\n\n\n

选项 A、B 和 C 都是 B-树的特点,而选项 D 则是 B+ 树的特点。注意区别 B-树和 B+ 树各\n自的特点。
\n\n\n\n\n", "difficulty": 1}, {"id": 9, "year": 2009, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-9-questions\n\n\n\n

已知关键字序列 5,8,12,19,28,20,15,22 是小根堆(最小堆),插入关键字 3,调整后得到的小根堆是()。

\n
A.3,5,12,8,28,20,15,22,19
\n
B.3,5,12,19,20,15,22,8,28
\n
C.3,8,12,5,20,15,22,28,19
\n
D.3,12,5,8,28,20,15,22,19
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-9-analysis\n\n\n\n

根据关键字序列得到的 小根堆 的二叉树形式如下图所示。

\n\n
5
8
12
19
28
20
15
22
5
8
12
19
28
20
15
22
3
3
5
12
8
28
20
15
22
19
(1)
(2)
(3)

插入关键字 3 时,先将其放在小顶堆的末端,如图 (2) 所示。再将该关键字向上进行调整,得到的结果如图 (3) 所示。所以,调整后的小顶堆序列为 3, 5, 12, 8, 28, 20, 15, 22, 19。

\n\n\n\n\n", "difficulty": 1}, {"id": 10, "year": 2009, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-10-questions\n\n\n\n

若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是()。

\n
A.起泡排序
\n
B.插入排序
\n
C.选择排序
\n
D.二路归并排序
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-10-analysis\n\n\n\n

本题考查各种 内部排序 算法的特点。对于冒泡排序和选择排序,每一趟都能确定一个元素的最终位置,而题目中,前 2 个元素和后 2 个元素均不是最小或最大的 2 个元素并按序排列。选项 D 中的 2 路归并排序,第一趟排序结束都可以得到若干个有序子序列,而此时的序列中并没有两两元素有序排列。插入排序在每趟排序后能确定前面的若干元素是有序的,而此时第二趟排序后,序列的前三个元素是有序的,符合其特征。
\n\n\n\n\n", "difficulty": 1}, {"id": 11, "year": 2009, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-11-questions\n\n\n\n

冯•诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是( )。

\n
A.指令操作码的译码结果
\n
B.指令和数据的寻址方式
\n
C.指令周期的不同阶段
\n
D.指令和数据所在的存储单元
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-11-analysis\n\n\n\n

虽然在 冯诺依曼结构 中指令和数据都是以二进制形式存放在存储器中,但 CPU 可以根据指令周期的不同阶段来区分是指令还是数据,通常在取指阶段取出的是指令,在执行阶段取出的是数据。本题容易误选 A,需要清楚的是,CPU 只有在确定取出的是指令之后,才会将其操作码送去译码,因此,不可能依据译码的结果来区分指令和数据。
\n\n\n\n\n", "difficulty": 1}, {"id": 12, "year": 2009, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-12-questions\n\n\n\n

一个 C 语言程序在一台 32 位机器上运行。程序中定义了三个变量 x,y 和 z,其中 x 和 z 是 int 型,y 为 short 型。当 x=127,y=-9 时,执行赋值语句 z=x+y 后,x、y 和 z 的值分别是:

\n
A.x=0000007FH , y=FFF9H , z=00000076H
\n
B.x=0000007FH , y=FFF9H , z=FFFF0076H
\n
C.x=0000007FH , y=FFF7H , z=FFFF0076H
\n
D.x=0000007FH , y=FFF7H , z=00000076H
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-12-analysis\n\n\n\n

C 语言中的整型数据为 补码表示,int 为 32 位,short 为 16 位,故 x、y 转换成十六进制为 0000007FH、FFF7H。执行 z=x+y 时,由于 x 是 int 型,y 为 short 型,需将短字长数据转换成长字长数据,称之为“符号扩展”。由于 y 的符号位为 1,故在 y 的前面添加 16 个 1,即可将 y 上升为 it 型,其十六进制形式为 FFFFFFF7H。最后执行加法,即 O0OO007FH+FFFFFFF7H=00000076H,其中最高位的进位 1 自然丢弃。故选 D。

【排除法】对于 x 的值,4 个选项都一样,无须计算;z=x+y=127-9=118>0,前 4 个字节必然全 0,排除 BC;只需算出 y=-9 的值即可,其十六进制形式为 FFF7H,排除 A。

【提示】解题时,应先排除明显错误的选项,然后再推敲剩下的选项。

\n\n\n\n\n", "difficulty": 1}, {"id": 13, "year": 2009, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-13-questions\n\n\n\n

浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为 5 位和 7 位(均含 2 位符号位)。若有两个数 X=2⁷×29/32,Y=2⁵×5/8,则用浮点加法计算 X+Y 的最终结果是( )。

\n
A.00111 1100010
\n
B.00111 0100010
\n
C.01000 0010001
\n
D.发生溢出
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-13-analysis\n\n\n\n

本题考查 浮点数加减。X 的浮点数格式为 00,111;00,11101(分号前为阶码,分号后为尾数),Y 的浮点数格式为 00,101;00,10100。然后根据浮点数的加法步骤进行运算。

第一步:对阶。X、Y 阶码相减,即 00,111-00,101 = 00,111+11,0111 = 00,010,可知 X 的阶码比 Y 的阶码大 2(这一步可直接目测)。根据小阶向大阶看齐的原则,将 Y 的阶码加 2,尾数右移 2 位,将 Y 变为 00,111;00,00101。

第二步:尾数相加。即 00,11101+00,00101 = 01,00010,尾数相加结果符号位为 01,故需右规。

第三步:规格化。将尾数右移 1 位,阶码加 1,得 X+Y 为 01,000;00,10001。

第四步:判溢出。阶码符号位为 01,说明发生溢出。

本题容易误选选项 B、C, 这是因为选项 B、C 本身并没有计算错误,只是它们不是最终结果,选项 B 少了第 3 步和第 4 步,选项 C 少了第 4 步。

【偷懒法】本题也可以直接用数学知识对原数进行计算,然后将计算的结果转换成浮点数的格式。X+Y =\n29/32×27+5/8×25=29/32×27+5/32×27=(29/32+5/32)×27=34/32×27=17/32×28\n,阶码用补码表示,数值位 3 位,最大只能表示 7,即 X+Y 的结果的阶码 8 超出了该浮点数的表示范围,故溢出。

\n\n\n\n\n", "difficulty": 1}, {"id": 14, "year": 2009, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-14-questions\n\n\n\n

某计算机的 Cache 共有 16 块,采用 2 路组相联映射方式(即每组 2 块)。每个主存块大小为 32 字节,按字节编址。主存 129 号单元所在主存块应装入到的 Cache 组号是( )。

\n
A.0
\n
B.1
\n
C.4
\n
D.6
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-14-analysis\n\n\n\n

由于 Cache 共有 16 块,采用 2 路组相联,因此共分为 8 组,组号为 0,1,2,…,7。主存的\n某一字块按模 8 映射到 Cache 某组的任一字块中,即主存的第 0,8,l6,…字块可以映射到 Cache\n第 0 组的任一字块中。每个主存块大小为 32 字节,故 129 号单元位于第 4 块主存块(注意是从\n0 开始),因此将映射到 Cache 第 4 组的任一字块中。
\n\n\n\n\n", "difficulty": 1}, {"id": 15, "year": 2009, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-15-questions\n\n\n\n

某计算机主存容量为 64KB,其中 ROM 区为 4KB,其余为 RAM 区,按字节编址。现要用 2K×8 位的 ROM 芯片和 4K×4 位的 RAM 芯片来设计该存储器,则需要上述规格的 ROM 芯片数和 RAM 芯片数分别是()。

\n
A.1、15
\n
B.2、15
\n
C.1、30
\n
D.2、30
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-15-analysis\n\n\n\n

本题考查 主存容量的扩展。首先确定 ROM 的个数,ROM 区为 4KB, 选用 2K×8 位的 ROM 芯片,需要 4Kx8 / 2K×8 =2 片,采用字扩展方式:RAM 区为 60KB, 选用 4Kx4 位的 RAM 芯片,需要 60K×8 /4K×4 = 30 片,采用字和位同时扩展方式。
\n\n\n\n\n", "difficulty": 1}, {"id": 16, "year": 2009, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-16-questions\n\n\n\n

某机器字长 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为 06H,则该转移指令成功转移后的目标地址是()。

\n
A.2006H
\n
B.2007H
\n
C.2008H
\n
D.2009H
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-16-analysis\n\n\n\n

相对寻址 EA = (PC)+A,首先要求的是取指令后 PC 的值。转移指令由两个字节组成,每取一个字节 PC 值自动加 1,因此取指令后 PC 值为 2000H+2H = 2002H, 故 EA = (PC)+A = 2002H+06H = 2008H。

【易错点】本题易误选 A 或 B。选项 A 没有考虑 PC 值的自动更新,选项 B 虽然考虑了 PC 值要自动更新,但没有注意到该转移指令是一条两字节指令,PC 值仅仅“+1”而不是“+2”。

\n\n\n\n\n", "difficulty": 1}, {"id": 17, "year": 2009, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-17-questions\n\n\n\n

下列关于 RISC 的叙述中,错误的是()。

\n
A.RISC 普遍采用微程序控制器
\n
B.RISC 大多数指令在一个时钟周期内完成
\n
C.RISC 的内部通用寄存器数量相对 CISC 多
\n
D.RISC 的指令数、寻址方式和指令格式种类相对 CISC 少
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-17-analysis\n\n\n\n

相对于 CISC,RISC 的特点是指令条数少;指令长度固定,指令格式和寻址种类少:只有取数/存数指令访问存储器,其余指令的操作均在寄存器之间进行;CPU 中通用寄存器多;大部分指令在一个或者小于一个机器周期内完成;以硬布线逻辑为主,不用或者少用微程序控制。选项 B、C、D 都是 RISC 的特点,选项 A 是错误的,因为 RISC 的速度快,所以普遍采用硬布线控制器,而非微程序控制器。
\n\n\n\n\n", "difficulty": 2}, {"id": 18, "year": 2009, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-18-questions\n\n\n\n

某计算机的指令流水线由四个功能段组成,指令流经各功能段的时间(忽略各功能段之间的缓存时间)分别为 90 ns、80 ns、70 ns、和 60 ns,则该计算机的 CPU 时钟周期至少是()。

\n
A.90 ns
\n
B.80 ns
\n
C.70 ns
\n
D.60 ns
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-18-analysis\n\n\n\n

流水线的时钟周期应以最长的执行时间为准,否则用时长的流水段的功能将不能正确完成。
\n\n\n\n\n", "difficulty": 1}, {"id": 19, "year": 2009, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-19-questions\n\n\n\n

相对于微程序控制器,硬布线控制器的特点是()。

\n
A.指令执行速度慢,指令功能的修改和扩展容易
\n
B.指令执行速度慢,指令功能的修改和扩展难
\n
C.指令执行速度快,指令功能的修改和扩展容易
\n
D.指令执行速度快,指令功能的修改和扩展难
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-19-analysis\n\n\n\n

微程序控制器 采用了“存储程序”的原理,每条机器指令对应一个微程序,因此修改和扩充容易,灵活性好,但每条指令的执行都要访问控制存储器,所以速度慢。硬布线控制器 采用专门的逻辑电路实现,其速度主要取决于逻辑电路的延迟,因此速度快,但修改和扩展困难,灵活性差。
\n\n\n\n\n", "difficulty": 1}, {"id": 20, "year": 2009, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-20-questions\n\n\n\n

假设某系统总线在一个总线周期中并行传输 4 字节信息,一个总线周期占用 2 个时钟周期,总线时钟频率为 10MHz,则总线带宽是()。

\n
A.10MB/S
\n
B.20MB/S
\n
C.40MB/S
\n
D.80MB/S
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-20-analysis\n\n\n\n

总线带宽是指单位时间内总线上传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位 Bs。由题意可知,在 1 个总线周期(=2 个时钟周期)内传输了 4 字节信息,时钟周期=1/10MHz=0.1μs,故总线带宽为 4B/(2×0.1μs)=4B/(0.2×10⁻⁶s)=20MB/s。
\n\n\n\n\n", "difficulty": 1}, {"id": 21, "year": 2009, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-21-questions\n\n\n\n

假设某计算机的存储系统由 Cache 和主存组成,某程序执行过程中访存 1000 次,其中访问 Cache 缺失(未命中)50 次,则 Cache 的命中率是()。

\n
A.5%
\n
B.9.5%
\n
C.50%
\n
D.95%
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-21-analysis\n\n\n\n

命中率 = Cache 命中次数/总访问次数。需要注意的是看清题,题中说明的是缺失 50 次,而不是命中 50 次,仔细审题是做对题的第一步。
\n\n\n\n\n", "difficulty": 1}, {"id": 22, "year": 2009, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-22-questions\n\n\n\n

下列选项中,能引起外部中断的事件是()。 

\n
A.键盘输入
\n
B.除数为 0
\n
C.浮点运算下溢
\n
D.访存缺页
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-22-analysis\n\n\n\n

外部中断 指的是 CPU 执行指令以外的事件产生的中断,通常是指来自 CPU 与内存以外的中断。A 中键盘输入属于外部事件,每次键盘输入 CPU 都需要执行中断以读入输入数据,所以能引起外部中断。B 中除数为 0 属于异常,也就是内中断,发生在 CPU 内部。C 中浮点运算下溢将按机器零处理,不会产生中断。而 D 访存缺页属于 CPU 执行指令时产生的中断,也不属于外部中断。所以能产生外部中断的只能是输入设备键盘。
\n\n\n\n\n", "difficulty": 1}, {"id": 23, "year": 2009, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-23-questions\n\n\n\n

单处理机系统中,可并行的是()。

\n

Ⅰ. 进程与进程  Ⅱ. 处理机与设备  Ⅲ. 处理机与通道  Ⅳ. 设备与设备

\n
A.Ⅰ、Ⅱ、Ⅲ
\n
B.Ⅰ、Ⅱ、Ⅳ
\n
C.Ⅰ、Ⅲ、Ⅳ
\n
D.Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-23-analysis\n\n\n\n

在单处理机系统(不包含多核的情况)中,同一时刻只能有一个进程占用处理机,因此进程之间不能并行执行。通道是独立于 CPU 的控制输入/输出的设备,两者可以并行,显然,设备与设备之间也是可以并行的。
\n\n\n\n\n", "difficulty": 1}, {"id": 24, "year": 2009, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-24-questions\n\n\n\n

下列进程调度算法中,综合考虑进程等待时间和执行时间的是()。 

\n
A.时间片轮转调度算法
\n
B.短进程优先调度算法
\n
C.先来先服务调度算法
\n
D.高响应比优先调度算法
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-24-analysis\n\n\n\n

在 最高响应比优先算法 中,选出响应比最高的进程投入执行,响应比 R 定义如下:响应比 R = (等待时间+执行时间) / 执行时间。它综合考虑了每个进程的等待时间和执行时间,对于同时到达的长进程和短进程,短进程会优先执行,以提高系统吞吐量;而长进程的响应比可以随等待时间的增加而提高,不会产生进程无法调度的情况。
\n\n\n\n\n", "difficulty": 1}, {"id": 25, "year": 2009, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-25-questions\n\n\n\n

某计算机系统中有 8 台打印机,由 K 个进程竞争使用,每个进程最多需要 3 台打印机。该系统可能会发生死锁的 K 的最小值是()。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-25-analysis\n\n\n\n

这种题用到组合数学中鸽巢原理的思想。考虑最极端情况,因为每个进程最多需要 3 台打印机,如果每个进程已经占有了 2 台打印机,那么只要还有多的打印机,总能满足一个进程达到 3 台的条件,然后顺利执行,所以将 8 台打印机分给 K 个进程,每个进程有 2 台打印机,这\n个情况就是极端情况,K 为 4。
\n\n\n\n\n", "difficulty": 1}, {"id": 26, "year": 2009, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-26-questions\n\n\n\n

分区分配内存管理方式的主要保护措施是()。

\n
A.界地址保护
\n
B.程序代码保护
\n
C.数据保护
\n
D.栈保护
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-26-analysis\n\n\n\n

每个进程都拥有自己独立的 内存空间,若一个进程在运行时所产生的地址在其地址空间之外,则发生地址越界,因此需要进行界地址保护,即当程序要访问某个内存单元时,由硬件检查是否允许,如果允许则执行,否则产生地址越界中断。
\n\n\n\n\n", "difficulty": 1}, {"id": 27, "year": 2009, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-27-questions\n\n\n\n

一个分段存储管理系统中,地址长度为 32 位,其中段号占 8 位,则最大段长是()。

\n
A.28\n字节
\n
B.216\n字节
\n
C.224\n字节
\n
D.232\n字节
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-27-analysis\n\n\n\n

段式管理 的逻辑地址分为段号和位移量两部分,段内位移的最大值就是最大段长。地址长度为 32 位,段号占 8 位,则位移量占 32-8=24 位,故最大段长为\n224\nB。
\n\n\n\n\n", "difficulty": 1}, {"id": 28, "year": 2009, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-28-questions\n\n\n\n

下列文件物理结构中,适合随机访问且易于文件扩展的是()。

\n
A.连续结构
\n
B.索引结构
\n
C.链式结构且磁盘块定长
\n
D.链式结构且磁盘块变长
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-28-analysis\n\n\n\n

文件的物理结构包括连续、链式、索引三种,其中链式结构不能 实现随机访问,连续结构的文件不易于扩展。因此随机访问且易于扩展是索引结构的特性。
\n\n\n\n\n", "difficulty": 1}, {"id": 29, "year": 2009, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-29-questions\n\n\n\n

假设磁头当前位于第 105 道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35,45,12,68,110,180,170,195,采用 SCAN 调度(电梯调度)算法得到的磁道访问序列是()。

\n
A.110,170,180,195,68,45,35,12
\n
B.110,68,45,35,12,170,180,195
\n
C.110,170,180,195,12,35,45,68
\n
D.12,35,45,68,110,170,180,195
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-29-analysis\n\n\n\n

SCAN 算法类似电梯的工作原理。首先,当磁头从 105 道向序号增加的方向移动时,便会按照从小到大的顺序服务 所有大于 105 的磁道号 (110,170,180,195);往回移动时又会按照从大到小的顺序进行服务 (68, 45,35, 12)。
\n\n\n\n\n", "difficulty": 1}, {"id": 30, "year": 2009, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-30-questions\n\n\n\n

文件系统中,文件访问控制信息存储的合理位置是()。

\n
A.文件控制块
\n
B.文件分配表
\n
C.用户口令表
\n
D.系统注册表
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-30-analysis\n\n\n\n

为了实现“按名存取”,在文件系统中为每个文件设置用于描述和控制文件的数据结构,称之为文件控制块 (FCB )。在文件控制块中,通常包含以下三类信息,即基本信息、存取控制信息及使用信息。
\n\n\n\n\n", "difficulty": 1}, {"id": 31, "year": 2009, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-31-questions\n\n\n\n

设文件 F1 的当前引用计数值为 1,先建立 F1 的符号链接(软链接)文件 F2,再建立 F1 的硬链接文件 F3,然后删除 F1。此时,F2 和 F3 的引用计数值分别是()。

\n
A.0、1
\n
B.1、1
\n
C.1、2
\n
D.2、1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-31-analysis\n\n\n\n

符号链接 是一个单独的文件,创建时它的引用计数值为 1;建立 硬链接 时,源文件引用计数值加 1。删除文件时,删除操作 对于符号链接是不可见的,这并不影响文件系统,当以后再通过符号链接访问时,发现文件不存在,直接删除符号链接;但对于硬链接则不可以直接删除,引用计数值减 1, 若值不为 0, 则不能删除此文件,因为还有其他硬链接指向此文件。

当建立 F2 时,Fl 和 F2 的引用计数值都为 1。当再建立 F3 时,Fl 和 F3 的引用计数值就都变成了 2。当后来删除 Fl 时,F3 的引用计数值为 2-1 = 1, F2 的引用计数值 一直不变。

\n\n\n\n\n", "difficulty": 1}, {"id": 32, "year": 2009, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n2009-Question-32-questions\n\n\n\n

程序员利用系统调用打开 I/O 设备时,通常使用的设备标识是()。

\n
A.逻辑设备名
\n
B.物理设备名
\n
C.主设备号
\n
D.从设备号
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-32-analysis\n\n\n\n

设备管理具有设备独立性的特点,操作系统以系统调用方式来请求某类设备时,使用的是 逻辑设备名。而在程序实际执行时,将逻辑设备名 转换为对应的 物理设备名。
\n\n\n\n\n", "difficulty": 1}, {"id": 33, "year": 2009, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-33-questions\n\n\n\n

在 OSI 参考模型中,自下而上第一个提供端到端服务的层次是()。

\n
A.数据链路层
\n
B.传输层
\n
C.会话层
\n
D.应用层
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-33-analysis\n\n\n\n

传输层 提供应用进程间的逻辑通信(通过端口号),即端到端的通信。而数据链路层负责相邻结点之间的通信,这个结点包括了交换机和路由器等数据通信 设备,这些设备 不能称为端系统。网络层负责主机到主机的逻辑通信。因此选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 34, "year": 2009, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-34-questions\n\n\n\n

在无噪声情况下,若某低通通信链路的带宽为 3kHz,采用 4 个相位,每个相位具有 4 种振幅的 QAM 调制技术,则该通信链路的最大数据传输速率是()。

\n
A.12kbps
\n
B.24kbps
\n
C.48kbps
\n
D.96kbps
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-34-analysis\n\n\n\n

采用 4 个相位,每个相位有 4 种幅度的 QAM 调制方法,每个信号可以有 16 种变化,传输 4bit 的数据。根据 奈奎斯特定理,信息的最大传输速率为 2×3k×4=24kbps。
\n\n\n\n\n", "difficulty": 1}, {"id": 35, "year": 2009, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-35-questions\n\n\n\n

数据链路层采用后退 N 帧(GBN)协议,发送方已经发送了编号为 0~7 的帧。当计时器超时时,若发送方只收到 0、2、3 号帧的确认,则发送方需要重发的帧数是()。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-35-analysis\n\n\n\n

在 回退 N 帧 中,当接收方检测到某个帧出错后,则简单地丢弃该帧及其后所有的后续帧,发送方超时后需重传该数据帧及其后续的所有帧。这里应注意,连续 ARQ 协议中,接收方一般采用累积确认的方式,即接收方对按序到达的最后一个分组发送确认,因此本题中收到 3 的确认帧就表示编号为 0,1,2,3 的帧已接收,而此时发送方未收到 1 号帧的确认只能代表确认帧在返回的过程中丢失了,而不代表 1 号帧未到达接收方。因此需要重传的帧为编号是 4,5,6,\n7 的帧。
\n\n\n\n\n", "difficulty": 1}, {"id": 36, "year": 2009, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-36-questions\n\n\n\n

以太网交换机进行转发决策时使用的 PDU 地址是()。

\n
A.目的物理地址
\n
B.目的 IP 地址
\n
C.源物理地址
\n
D.源 IP 地址
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-36-analysis\n\n\n\n

交换机 实质上是一个多端口网桥,工作在数据链路层,数据链路层 使用物理地址进行转发,而转发到目的地通常是使用 目的地址。因此 POU 地址是目的物理地址。
\n\n\n\n\n", "difficulty": 1}, {"id": 37, "year": 2009, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-37-questions\n\n\n\n

在一个采用 CSMA/CD 协议的网络中,传输介质是一根完整的电缆,传输速率为 1Gbps,电缆中的信号传播速度是 200 000km/s。若最小数据帧长度减少 800 比特,则最远的两个站点之间的距离至少需要()。

\n
A.增加 160m
\n
B.增加 80m
\n
C.减少 160m
\n
D.减少 80m
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-37-analysis\n\n\n\n

本题考查 CSMA/CD 的限制条件。若最短帧长减少,而数据传输速率不变,则需要使冲突域的最大距离变短来实现碰撞窗口的减少。碰撞窗口是指网络中收发结点间的往返时延,因此假设需要减少的最小距离为 S, 则可以得到如下公式(注意单位的转换):

减少的往返时延=减少的发送时延,即\n2×[s/(2×108)]=800/(1×109)\n。即,由于帧长减少而缩短的发送时延,应等于由于距离减少而缩短的传播时延的 2 倍。

可得 s=80, 即最远的两个站点之间的距离最少需要减少 80m。

【注意】CSMA/CD 的碰撞窗口 = 2 倍传播时延,报文发送时间 » 碰撞窗口。

\n\n\n\n\n", "difficulty": 2}, {"id": 38, "year": 2009, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-38-questions\n\n\n\n

主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了两个连续的 TCP 段,分别包含 300 字节和 500 字节的有效载荷,第一个段的序列号为 200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是()。

\n
A.500
\n
B.700
\n
C.800
\n
D.1000
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-38-analysis\n\n\n\n

返回的确认序列号是接收端期待收到对方下一个报文段数据部分的第一个字节的序号,因此乙在正确接收到两个段后,返回给甲的确认序列号是 200+ 300 + 500 = 1000。
\n\n\n\n\n", "difficulty": 1}, {"id": 39, "year": 2009, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-39-questions\n\n\n\n

一个 TCP 连接总是以 1KB 的最大段长发送 TCP 段,发送方有足够多的数据要发送。当拥塞窗口为 16KB 时发生了超时,如果接下来的 4 个 RTT(往返时间)时间内的 TCP 段的传输都是成功的,那么当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时,拥塞窗口大小是()。

\n
A.7 KB
\n
B.8 KB
\n
C.9 KB
\n
D.16 KB
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-39-analysis\n\n\n\n

在发生超时后,慢开始门限 ssthresh 变为 16KB/2 = 8KB,拥塞窗口变为 1KB。在接下来的 3 个 RTT 内,执行 慢开始 算法,拥塞窗口大小依次为 2KB、4KB、8KB,由于慢开始门限 ssthresh 为 8KB,因此之后转而执行 拥塞避免 算法,即拥塞窗口开始“加法增大”。因此第 4 个 RTT 结束后,拥塞窗口的大小为 9KB。
\n\n\n\n\n", "difficulty": 1}, {"id": 40, "year": 2009, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n2009-Question-40-questions\n\n\n\n

FTP 客户和服务器间传递 FTP 命令时,使用的连接是()。

\n
A.建立在 TCP 之上的控制连接
\n
B.建立在 TCP 之上的数据连接
\n
C.建立在 UDP 之上的控制连接
\n
D.建立在 UDP 之上的数据连接
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-40-analysis\n\n\n\n

对于 FTP 文件传输,为了保证可靠性,选择 TCP 协议,排除 C、D。FTP 的控制信息是带外传送的,也即 FTP 使用了一个分离的控制连接来传送命令,故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 41, "year": 2009, "index": 41, "type": 3, "typeName": "算法题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-41-questions\n\n\n\n

带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点到目标顶点之间存在路径,现有一种解决该问题的方法:

\n

① 设最短路径初始时仅包含初始顶点,令当前顶点 u 为初始顶点;

\n

② 选择离 u 最近且尚未在最短路径中的一个顶点 v,加入到最短路径中,修改当前顶点 u=v;

\n

③ 重复步骤②,直到 u 是目标顶点时为止。

\n

请问上述方法能否求得最短路径?若该方法可行,请证明之;否则,请举例说明。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-41-analysis\n\n\n\n

该方法不一定能(或不能)求得最短路径。(4 分)

举例说明:(6 分)

图 (1) 中,设初始顶点为 1,目标顶点为 4,欲求从顶点 1 到顶点 4 之间的最短路径,显然这两点之间的最短路径长度为 2。利用给定方法求得的路径长度为 3,但这条路径并不是这两点之间的最短路径。

图 (2) 中,设初始顶点为 1,目标顶点为 3,欲求从顶点 1 到顶点 3 之间的最短路径。利用给定的方法,无法求出顶点 1 到顶点 3 的路径。

\n\n
2
3
1
4
2
1
3
(1)
(2)

【评分说明】①若考生回答“能求得最短路径”,无论给出何种证明,均不给分。②考生只要举出类似上述的一个反例说明“不能求得最短路径”或答案中体现了“局部最优不等于全局最优”的思想,均可给 6 分;若举例说明不完全正确,可酌情给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 42, "year": 2009, "index": 42, "type": 2, "typeName": "应用题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n2009-Question-42-questions\n\n\n\n

已知一个带有表头结点的单链表,结点结构为:| data | link |

\n

假设该链表只给出了头指针 list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第 k 个位置上的结点(k 为正整数)。若查找成功,算法输出该结点的 data 域的值,并返回 1;否则,只返回 0。要求:

\n

(1) 描述算法的基本设计思想;

\n

(2) 描述算法的详细实现步骤;

\n

(3) 根据设计思想和实现步骤,采用程序设计语言描述算法(使用 C、C++ 或 Java 语言实现),关键之处请给出简要注释。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-42-analysis\n\n\n\n

1)算法的基本设计思想:

问题的关键是设计一个尽可能高效的算法,通过链表的一趟遍历,找到倒数第 k 个结点的位置。算法的基本设计思想:定义两个指针变量 p 和 q,初始时均指向头结点的下一个结点(链表的第一个结点)。p 指针沿链表移动,当 p 指针移动到第 k 个结点时,q 指针开始与 p 指针同步移动;当 p 指针移动到最后一个结点时,q 指针所指示结点为倒数第 k 个结点。以上过程对链表仅进行一遍扫描。

2)算法的详细实现步骤:

  1. count=0,p 和 q 指向链表表头结点的下一个结点;
  2. 若 p 为空,转 5;
  3. 若 count 等于 k,则 q 指向下一个结点;否则,count=count+l;
  4. p 指向下一个结点,转 2:
  5. 若 count 等于 k,则查找成功,输出该结点的 data 域的值,返回 1;否则,说明 k 值超过了线性表的长度,查找失败,返回 0;
  6. 算法结束。

3)算法实现

int FindElement(Node *head, int k) {\n  Node *p1 = head;\n  Node *p2 = head;\n  for (int i = 0; i < k; i++) {\n    p1 = p1->link;\n    if (p1 == NULL) {\n      return 0;\n    }\n  }\n  // p1 != NULL\n  while (p1 != NULL) {\n    p1 = p1->link;\n    p2 = p2->link;\n  }\n  printf(\"%d\\n\", p2->data);\n  return 1;\n}\n

提示:算法程序题,如果能够写出数据结构类型定义,正确的算法思想都会至少给一半以上分数,如果能用伪代码写出自然更好,比较复杂的地方可以直接用文字表达。

【评分说明】① 若所给出的算法采用一遍扫描方式就能得到止确结果,可给满分 15 分:若采用两遍或多遍扫描才能得到正确结果的,最高给 10 分;若采用递归算法得到正确结果的,最高给 10 分;若实现算法的空间复杂度过高(使用了大小与 k 有关的辅助数组),但结果正确,最高给 10 分;若实现的算法的空间复杂度过高(使用了大小与 k 有关的辅助数组),但结果正确,最高给 10 分。

②若在算法基本思想描述和算法步骤描述中因文学表达没有非常清晰地反映出算法的思路,但在算法实现中能够清晰看出算法思想和步骤且正确,按照 () 的标准给分。

③若考生的答案中算法基本思想描述、算法步骤描述或算法实现中部分正确,可酌情给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 43, "year": 2009, "index": 43, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-43-questions\n\n\n\n

某计算机的 CPU 主频为 500MHz,CPI 为 5(即执行每条指令平均需 5 个时钟周期)。假定某外设的数据传输率为 0.5MB/s,采用中断方式与主机进行数据传送,以 32 位为传输单位,对应的中断服务程序包含 18 条指令,中断服务的其他开销相当于 2 条指令的执行时间。请回答下列问题,要求给出计算过程。

\n

(1) 在中断方式下,CPU 用于该外设 I/ O 的时间占整个 CPU 时间的百分比是多少?

\n

(2) 当该外设的数据传输率达到 5M B/s 时,改用 DMA 方式传送数据。假定每次 DMA 传送块大小为 5000B,且 DMA 预处理和后处理的总开销为 500 个时钟周期,则 CPU 用于该外设 I/ O 的时间占整个 CPU 时间的百分比是多少?(假设 DMA 与 CPU 之间没有访存冲突)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-43-analysis\n\n\n\n

1)按题意,外设每秒传送 0.5MB,中断时每次传送 4B。中断方式下,CPU 每次用于数据传送的时钟周期为 5×18+5×2 = 100。(2 分)

为达到外设 0.5MB/s 的数据传输率,外设每秒申请的中断次数为 0.5MB/4B = 125000。(1 分)

1s 内用于中断的开销为 100×125000 = 12500000 = 12.5M 个时钟周期。(1 分)

CPU 用于外设 I/O 的时间占整个 CPU 时间的百分比为 12.5M/500M = 2.5%。(1 分)

2)当外设数据传输率提高到 5MB/s 时,改用 DMA 方式传送,每次 DMA 传送 5000B,1s 内需产生的 DMA 次数为 5MB/5000B=1000。(1 分)

CPU 用于 DMA 处理的总开销为 1000×500 = 500000 = 0.5M 个时钟周期。(1 分)

CPU 用于外设 I/O 的时间占整个 CPU 时间的百分比为 0.5M/500M = 0.1%。(1 分)

【评分说明】如果考生只给出正确的计算结果,未给出计算过程,每个给 2 分。

\n\n\n\n\n", "difficulty": 1}, {"id": 44, "year": 2009, "index": 44, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n2009-Question-44-questions\n\n\n\n

某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如下图所示,图中所有控制信号为 1 时表示有效、为 0 时表示无效。例如控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从内总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法指令“ADD (R1),R0”的功能为 (R0)+((R1)) → (R1),即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。

\n
\n\n\n\n \n 408真题系统\n \n\n
R0
R0in
R1
R1in
R0out
R1out
A
Ain
ALU
AC
ACin
ADD
ACout
PC
PC + 1
PCout
PCin
IR
IRin
至指令译码部件
MAR
MDR
MARin
MDRoutE
MDRin
MDRinE
MDRout
AB
DB
CB
Addr
Data
MemW
MemR
存储器(M)
控制信号图例
Xout
三态门及其控制信号
Xin
三态门及其控制信号
\n

下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。

\n
时钟功能有效控制信号
C1MAR ← (PC)PCout, MARin
C2MDR ← M(MAR)
PC ← (PC) + 1
MemR, MDRinE, PC+1
C3IR ← (MDR)MDRout, IRin
C4指令译码无
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-44-analysis\n\n\n\n

题干已给出取值和译码阶段每个节拍的功能和有效控制信号,我们应以弄清楚取指阶段中数据通路的信息流动作为突破口,读懂每个节拍的功能和有效控制信号。然后应用到解题思路中,包括划分执行步骤、确定完成的功能、需要的控制信号。

先分析题干中提供的示例(本部分解题时不做要求):

取指令的功能是根据 PC 的内容所指主存地址,取出指令代码,经过 MDR,最终送至 R。这部分和后面的指令执行阶段的取操作数、存运算结果的方法是相通的。

C1: (PC)→MAR

在读写存储器前,必须先将地址(这里为 PC)送至 MAR。

C2: M(MAR)→MDR, (PC)+1→PC

读写的数据必须经过 DR,指令取出后 PC 自增 1。

C3: (MDR)→IR

然后将读到 MDR 中指令代码送至 IR 进行后续操作。

指令 “ADD(R1),R0” 的操作数一个在主存中,一个在寄存器中,运算结果在主存中。根据指令功能,要读出 R1 的内容所指的主存单元,必须先将 R1 的内容送至 MAR,即 (R1)→MAR。而读出的数据必须经过 MDR,即 M(MAR)→MDR。

因此,将 R1 的内容所指主存单元的数据读出到 MDR 的节拍安排如下:

C5: (R1)→MAR

C6: M(MAR)→MDR

ALU 一端是寄存器 A,MDR 或 R0 中必须有一个先写入 A 中,如 MDR。

C7: (MDR)→A

然后执行加法操作,并将结果送入寄存器 AC。

C8: (A)+(R0)→AC

之后将加法结果写回到 R1 的内容所指主存单元,注意 MAR 中的内容没有改变。

C9: (AC)→MDR

C10: (MDR)→M(MAR)

有效控制信号的安排并不难,只需看数据是流入还是流出,如流入寄存器 X 就是 Xin,流出寄存器 X 就是 Xout。还需注意其他特殊控制信号,如 PC+1、Add 等。

于是得到参考答案如下:

时钟功能有效控制信号
C5MAR ← (R1)R1out, MARin
C6MDR ← M(MAR)MemR, MDRinE
C7A ← (MDR)MDRout, Ain
C8AC ← (A) + (R0)R0out, Add, ACin
C9MDR ← (AC)ACout, MDRin
C10M(MAR) ← (MDR)MDRoutE, MemW

本题答案不唯一,如果在 C6 执行 M(MAR)→MDR 的同时,完成 (R0) → A(即选择将 (R0) 写入 A),并不会发生总线冲突,这种方案可节省 1 个节拍,见下表:

时钟功能有效控制信号
C5MAR ← (R1)R1out, MARin
C6MDR ← M(MAR), A ← (R0)MemR, MDRinE, R0out, Ain
C7AC ← (MDR) + (A)MDRout, Add, ACin
C8MDR ← (AC)ACout, MDRin
C9M(MAR) ← (MDR)MDRoutE, MemW
\n\n\n\n\n", "difficulty": 1}, {"id": 45, "year": 2009, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-45-questions\n\n\n\n

三个进程\nP1​\n、\nP2​\n、\nP3​\n互斥使用一个包含\nN(N>0)\n个单元的缓冲区。\nP1​\n每次用 produce() 生成一个正整数并用 put() 送入缓冲区某一空单元中;\nP2​\n每次用 getodd() 从该缓冲区中取出一个奇数并用 countodd() 统计奇数个数;\nP3​\n每次用 geteven() 从该缓冲区中取出一个偶数并用 counteven() 统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义信号量的含义。要求用伪代码描述。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-45-analysis\n\n\n\n

互斥资源:缓冲区只能互斥访问,因此设置互斥信号量 mutex。

同步问题:\nP1​\n、\nP2​\n因为奇数的放置与取用而同步,设同步信号量 odd;\nP1​\n、\nP3​\n因为偶数的放置与取用而同步,设置同步信号量 even;\nP1​\n、\nP2​\n、\nP3​\n因为共享缓冲区,设同步信号量 empty, 初值为 N。程序如下:

semaphore mutex=1;\nsemaphore odd=0, even=0;\nsemaphore empty=N;\n\nP1() {\n    while (true) {\n        x = produce();   // 生成一个数\n        P(empty);        // 判断缓冲区是否有空单元\n        P(mutex);        // 缓冲区是否被占用\n        put();\n        V(mutex);        // 释放缓冲区\n        if (x % 2 == 0)\n            V(even);     // 如果是偶数,向 P3 发出信号\n        else\n            V(odd);      // 如果是奇数,向 P2 发出信号\n    }\n}\n\nP2() {\n    while (true) {\n        P(odd);          // 收到 P1 发来的信号,已产生一个奇数\n        P(mutex);        // 缓冲区是否被占用\n        getodd();\n        V(mutex);        // 释放缓冲区\n        V(empty);        // 向 P1 发信号,多出一个空单元\n        countodd();\n    }\n}\n\nP3() {\n    while (true) {\n        P(even);         // 收到 P1 发来的信号,已产生一个偶数\n        P(mutex);        // 缓冲区是否被占用\n        geteven();\n        V(mutex);        // 释放缓冲区\n        V(empty);        // 向 P1 发信号,多出一个空单元\n        counteven();\n    }\n}\n
\n\n\n\n\n", "difficulty": 2}, {"id": 46, "year": 2009, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-46-questions\n\n\n\n

请求分页管理系统中,假设某进程的页表内容如下表所示:

\n
页号页框(Page Frame)号有效位(存在位)
0101H1
10
2254H1
\n

页面大小为 4KB,一次内存的访问时间是 100ns,一次快表(TLB)的访问时间是 10ns,处理一次缺页的平均时间 10⁸ ns(已含更新 TLB 和页表的时间),进程的驻留集大小固定为 2,采用最近最少使用置换算法 (LRU) 和局部淘汰策略。假设

\n

① TLB 初始为空;

\n

② 地址转换时先访问 TLB,若 TLB 未命中,再访问页表(忽略访问页表之后的 TLB 更新时间);

\n

③ 有效位为 0 表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。

\n

设有虚地址访问序列 2362H、1565H、25A5H,请问:

\n

(1) 依次访问上述三个虚地址,各需多少时间?给出计算过程。

\n

(2) 基于上述访问序列,虚地址 1565H 的物理地址是多少?请说明理由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-46-analysis\n\n\n\n

1)根据页式管理的工作原理,应先考虑页面大小,以便将页号和页内位移分解出来。页面大小为 4KB, 即 2¹²B,则得到页内位移占虚地址的低 12 位,页号占剩余高位。可得三个虚地址的页号 P 如下(十六进制的一位数字转换成 4 位二进制,因此,十六进制的低三位正好为页内位移,最高位为页号):

2362H:P=2,访问快表 10ns,因初始为空,访问页表 100ns 得到页框号,合成物理地址后访问主存 100ns,共计 10ns+100ns+100ns=210ns。

1565H:P=1,访问快表 10ns,落空,访问页表 100ns 落空,进行缺页中断处理 10⁸ns,访问快表 10ns,合成物理地址后访问主存 100ns,共计 10ns+100ns+10⁸ns+10ns+100ns=100000220ns.

25A5H:P=2,访问快表,因第一次访问已将该页号放入快表,因此花费 10ns 便可合成物理地址,访问主存 100ns,共计 10ns+100ns=110ns。

2)当访问虚地址 1565H 时,产生缺页中断,合法驻留集为 2,必须从页表中淘汰一个页面,根据题目的置换算法,应淘汰 0 号页面,因此 1565H 的对应页框号为 101H。由此可得 1565H 的物理地址为 101565H。

\n\n\n\n\n", "difficulty": 1}, {"id": 47, "year": 2009, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n2009-Question-47-questions\n\n\n\n

某网络拓扑如下图所示,路由器 R1 通过接口 E1、E2 分别连接局域网 1、局域网 2,通过接口 L0 连接路由器 R2,并通过路由器 R2 连接域名服务器与互联网。R1 的 L0 接口的 IP 地址是 202.118.2.1;R2 的 L0 接口的 IP 地址是 202.118.2.2,L1 接口的 IP 地址是 130.11.120.1,E0 接口的 IP 地址是 202.118.3.1;域名服务器的 IP 地址是 202.118.3.2。

\n
\n\n\n\n \n 408真题系统\n \n\n
互联网
局域网1
局域网2
R1
R2
202.118.2.2
202.118.2.1
L0
L0
E1
E2
202.118.3.1
E0
L1
130.11.120.1
202.118.3.2
域名服务器
\n

R1 和 R2 的路由表结构为:

\n
\n\n
目的网络 IP 地址
子网掩码
下一跳 IP 地址
接口
\n

(1) 将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,分别分配给局域网 1、局域网 2,每个局域网需分配的 IP 地址数不少于 120 个。请给出子网划分结果,说明理由或给出必要的计算过程。

\n

(2) 请给出 R1 的路由表,使其明确包括到局域网 1 的路由、局域网 2 的路由、域名服务器的主机路由和互联网的路由。

\n

(3) 请采用路由聚合技术,给出 R2 到局域网 1 和局域网 2 的路由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n2009-Question-47-analysis\n\n\n\n

(1) CIDR 中的子网号可以全 0 或全 1,但主机号不能全 0 或全 1。

因此若将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,且每个局域网需分配的 IP 地址个数不少于 120 个,子网号至少要占用一位。

由\n26−2<120<27−2\n可知,主机号至少要占用 7 位。

由于源 IP 地址空间的网络前缀为 24 位,因此主机号位数 + 子网号位数 = 8。

综上可得主机号位数为 7,子网号位数为 1。

因此子网的划分结果为子网 1:202.118.1.0/25,子网 2:202.118.1.128/25。

地址分配方案:子网 1 分配给局域网 1,子网 2 分配给局域网 2;或子网 1 分配给局域网 2,子网 2 分配给局域网 1。

(2) 由于局域网 1 和局域网 2 分别与路由器 R1 的 E1、E2 接口直接相连,因此在 R1 的路由表中,目的网络为局域网 1 的转发路径是直接通过接口 E1 转发的,目的网络为局域网 2 的转发路径是直接通过接口 E1 转发的。由于局域网 1、2 的网络前缀均为 25 位,因此它们的子网掩码均为 255.255.255.128。

R1 专门为域名服务器设定了一个特定的路由表项,因此该路由表项中的子网掩码应为 255.255.255.255(只有和全 1 的子网掩码相与才能完全保证和目的 P 地址一样,从而选择该特定路由)。对应的下一跳转发地址是 202.118.2.2,转发接口是 L0。

R1 到互联网的路由实质上相当于一个默认路由,默认路由一般写为 0/0,即目的地址为 0.0.0.0,子网掩码为 0.0.0.0。对应的下一跳转发地址是 202.118.2.2,转发接口是 L0。

综上可得到路由器 R1 的路由表如下。

若子网 1 分配给局域网 1,子网 2 分配给局域网 2,见下表。

目的网络 IP 地址子网掩码下一跳 IP 地址接口
202.118.1.0255.255.255.128E1
202.118.1.128255.255.255.128E2
202.118.3.2255.255.255.255202.118.2.2L0
0.0.0.00.0.0.0202.118.2.2L0

若子网 1 分配给局域网 2, 子网 2 分配给局域网 1, 见下表。

目的网络 IP 地址子网掩码下一跳 IP 地址接口
202.118.1.128255.255.255.128E1
202.118.1.0255.255.255.128E2
202.118.3.2255.255.255.255202.118.2.2L0
0.0.0.00.0.0.0202.118.2.2L0

(3) 局域网 1 和局域网 2 的地址可以聚合为 202.118.1.0/24,而对于路由器 R2 来说,通往局域网 1 和局域网 2 的转发路径都是从 L0 接口转发,因此采用路由聚合后,路由器 R2 到局域网 1 和局域网 2 的路由,见下表:

目的网络IP地址子网掩码下一跳IP地址接口
202.118.1.0255.255.255.0202.118.2.1L0
\n\n\n\n\n", "difficulty": 3}, {"id": 48, "year": 2010, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第1题-题目\n\n\n\n

若元素 a, b, c, d, e, f 依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是( )。

\n
A.d, c, e, b, f, a
\n
B.c, b, d, a, e, f
\n
C.b, c, a, e, f, d
\n
D.a, f, e, d, c, b
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第1题-解析\n\n\n\n

本题考查 入栈出栈序列。

但题意要求不允许连续三次退栈操作,故 D 不可能得到。

【另解】先进栈的元素后出栈,进栈顺序为 a,b,c,d,e,f,故连续出栈时的序列必然是按字母表逆序的,若出栈序列中出现了长度大于等于 3 的连续逆序子序列,侧为不符合要求的出栈序列。

\n\n\n\n\n", "difficulty": 1}, {"id": 49, "year": 2010, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第2题-题目\n\n\n\n

某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作,若元素 a, b, c, d, e 依次入此队列后再进行出队操作,则不可能得到的出队序列是( )。

\n
A.b, a, c, d, e
\n
B.d, b, a, c, e
\n
C.d, b, c, a, e
\n
D.e, c, b, a, d
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2010-第2题-解析\r\n\r\n\r\n\r\n

本题的队列实际上是一个输出受限的双端队列。A 操作:a 左入(或右入)、b 左入、c 右入、d 右入、e 右入。B 操作:a 左入(或右入)、b 左入、c 右入、d 左入、e 右入。D 操作:a 左入(或右入)、b 左入、c 左入、d 右入、e 左入。C 操作:a 左入(或右入)、b 右入、因 d 未出,此时只能进队,c 怎么进都不可能在 b 和 a 之间。

【另解】初始时队列为空,第 1 个元素 a 左入(或右入),而第 2 个元素 b 无论是左入还是右入都必与 a 相邻,而选项 C 中 a 与 b 不相邻,不合题意。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 50, "year": 2010, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2010-第3题-题目\r\n\r\n\r\n\r\n

下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是( )。

\r\n
\r\n\r\n\r\n\r\n \r\n 408真题系统\r\n \r\n\r\n
a
b
c
d
A
a
b
c
d
B
a
b
c
d
C
a
b
c
d
D
Null
Null
Null
Null
Null
\r\n\r\n
A.A
\r\n
B.B
\r\n
C.C
\r\n
D.D
\r\n\r\n\r\n\r\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第3题-解析\n\n\n\n

题中所给二叉树的后序序列为 d,b,c,a。结点 d 无前驱和左子树,左链域空,无右子树,右链域指向其后继结点 b;结点 b 无左子树,左链域指向其前驱结点 d;结点 c 无左子树,左链域指向其前驱结点 b,无右子树,右链域指向其后继结点 a。故选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 51, "year": 2010, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第4题-题目\n\n\n\n

在下图所示的平衡二叉树中,插入关键字 48 后得到一棵新平衡二叉树。在新平衡二叉树中,关键字 37 所在结点的左、右子结点中保存的关键字分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
24
13
53
37
90
\n
A.13, 48
\n
B.24, 48
\n
C.24, 53
\n
D.24, 90
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第4题-解析\n\n\n\n

插入 48 以后,该 AVL 根结点的平衡因子由 -1 变为 -2, 在最小不平衡子树根结点的右子树 (R) 的左子树 (L) 中插入新结点引起的不平衡属于 RL 型平衡旋转,需要做两次旋转操作(先右旋后左旋)。

\n\n
24
13
53
37
90
24
13
53
37
90
48
37
24
53
13
48
90
RL 旋转

调整后,关键字 37 所在结点的左、右子结点中保存的关键字分别是 24、53。

\n\n\n\n\n", "difficulty": 1}, {"id": 52, "year": 2010, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第5题-题目\n\n\n\n

在一棵度数为 4 的树 T 中,若有 20 个度为 4 的结点,10 个度为 3 的结点,1 个度为 2 的结点,10 个度为 1 的结点,则树 T 的叶结点个数是( )。

\n
A.41
\n
B.82
\n
C.113
\n
D.122
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第5题-解析\n\n\n\n

设树中度为 i(i=0,1,2,3,4)的结点数分别为\nNi​\n, 树中结点总数为 N,则树中各结点的度之和等于 N-1,即\nN=1+N1​+2N2​+3N3​+4N4​=N0​+N1​+N2​+N3​+N4​\n,根据题设中的数据,即可得到\nN0​=82\n,即树 T 的叶结点的个数是 82。
\n\n\n\n\n", "difficulty": 1}, {"id": 53, "year": 2010, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第6题-题目\n\n\n\n

对 n (n≥2) 个权值均不相同的字符构成哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是( )。

\n
A.该树一定是一棵完全二叉树
\n
B.树中一定没有度为 1 的结点
\n
C.树中两个权值最小的结点一定是兄弟结点
\n
D.树中任一非叶结点的权值一定不小于下一层任一结点的权值
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第6题-解析\n\n\n\n

哈夫曼树 为带权路径长度最小的二叉树,不一定是完全二叉树。哈夫曼树中没有度为 1 的结点,B 正确;构造哈夫曼树时,最先选取两个权值最小的结点作为左、右子树构造一棵新的二叉树,C 正确;哈夫曼树中任一非叶结点 P 的权值为其左、右子树根结点权值之和,其权值不小于其左、右子树根结点的权值,在与结点 P 的左、右子树根结点处于同一层的结点中,若存在权值大于结点 P 权值的结点 Q,则结点 Q 的兄弟结点中权值较小的一个应该与结点 P 作为左、右子树构造新的二叉树。综上可知,哈夫曼树中任一非叶结点的权值一定不小于下一层任一结点的权值。
\n\n\n\n\n", "difficulty": 1}, {"id": 54, "year": 2010, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第7题-题目\n\n\n\n

若无向图 G=(V,E) 中含有 7 个顶点,要保证图 G 在任何情况下都是连通的,则需要的边数最少是()。

\n
A.6
\n
B.15
\n
C.16
\n
D.21
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第7题-解析\n\n\n\n

要保证无向图 G 在任何情况下都是连通的,即任意变动图 G 中的边,G 始终保持连通,首先需要 G 的任意 6 个结点构成完全连通子图 G1,需 n(n-1)/2 = 6×(6-1)/2 = 15 条边,然后再添条边将第 7 个结点与 G1 连接起来,共需 16 条边。
\n\n\n\n\n", "difficulty": 2}, {"id": 55, "year": 2010, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第8题-题目\n\n\n\n

对下图进行拓扑排序,可以得到不同拓扑序列的个数是()。

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
c
d
e
\n
A.4
\n
B.3
\n
C.2
\n
D.1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第8题-解析\n\n\n\n

拓扑排序 的过程如下图所示:

\n\n
a
e
b
c
d
e
b
c
d
b
c
d
e
c
d
c
d
d
e
d
d
c
d
d
输出a
输出e
输出b
输出b
输出c
输出c
输出e
输出e
输出c

可以得到 3 个不同的拓扑序列,分别为 abced、abecd、aebcd。

\n\n\n\n\n", "difficulty": 1}, {"id": 56, "year": 2010, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第9题-题目\n\n\n\n

已知一个长度为 16 的顺序表 L,其元素按关键字有序排列。若采用折半查找法查找一个 L 中不存在的元素,则关键字的比较次数最多是( )。

\n
A.4
\n
B.5
\n
C.6
\n
D.7
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第9题-解析\n\n\n\n

折半查找 在查找成功时进行的关键字比较次数最多为\n⌊log2​n⌋+1\n,即判定树的高度;折半查找法在查找不成功时进行的关键字比较次数最多为\n⌊log2​n⌋+1\n。题中\nn=16\n,因此最多比较\n⌊log2​16⌋+1=5\n次。也可以画出草图求解。
\n\n\n\n\n", "difficulty": 1}, {"id": 57, "year": 2010, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第10题-题目\n\n\n\n

采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是()。

\n
A.递归次数与初始数据的排列次序无关。
\n
B.每次划分后,先处理较长的分区可以减少递归次数。
\n
C.每次划分后,先处理较短的分区可以减少递归次数。
\n
D.递归次数与每次划分后得到的分区的处理顺序无关。
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第10题-解析\n\n\n\n

快速排序 的递归次数与元素的初始排列有关。若每次划分后分区比较平衡,则递归次数少;若划分后分区不平衡,则递归次数多。但快速排序的递归次数与分区处理顺序无关,即先处理较长的分区或先处理较短的分区都不影响递归次数。

此外,可以形象地把快速排序的递归调用过程用一个二叉树描述,先处理较长或较短分区,可以想象为交换某一递归结点处的左右子树,这并 不会影响树中的分支数。

\n\n\n\n\n", "difficulty": 1}, {"id": 58, "year": 2010, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第11题-题目\n\n\n\n

对一组数据 (2,12,16,88,5,10) 进行排序,若前三趟排序结果如下:

\n

第一趟排序结果:2,12,16,5,10,88

\n

第二趟排序结果:2,12,5,10,16,88

\n

第三趟排序结果:2,5,10,12,16,88

\n

则采用的排序方法可能是()。

\n
A.起泡排序
\n
B.希尔排序
\n
C.归并排序
\n
D.基数排序
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第11题-解析\n\n\n\n

本题考查 内部排序 的特征,题中所给的三趟排序过程中,每一趟排序是从前往后依次比较,使最大值“沉底”,符合冒泡排序的特点。

看第一趟可知仅有 88 被移到最后。

提示:对于此类题,先看备选项的排序算法有什么特征,再看题目中的排序过程是否符合这一特征,从而得出答案。一般先从选项中的简单排序方法(插入排序、起泡排序、选择排序)开始判断,若简单排序方法不符合,再判断排序方法(希尔排序、快速排序、堆排序、归并排序)。

\n\n\n\n\n", "difficulty": 1}, {"id": 59, "year": 2010, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第12题-题目\n\n\n\n

下列选项中,能缩短程序执行时间的措施是()。

\n

I. 提高 CPU 时钟频率

\n

II.优化数据通路结构

\n

III. 对程序进行编译优化

\n
A.仅 I 和 II
\n
B.仅 I 和 III
\n
C.仅 II 和 III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第12题-解析\n\n\n\n

CPU 主频 越高,完成指令的一个执行步骤所用的时间就越短,执行指令的速度越快,I 正确。数据通路 的功能是实现 CPU 内部的运算器和寄存器以及寄存器之间的数据交换,优化数据通路结构,可以有效提高计算机系统的吞吐量,从而加快程序的执行,II 正确。计算机程序需要先转化成机器指令序列才能最终得到执行,通过对程序进行编译优化可以得到更优的指令序列,从而使得程序的执行时间也越短,III 正确。

【另解】定量分析:CPU 执行时间 = (程序指令条数×每条指令时钟周期数)/时钟频率。提高时钟频率显然可以缩短 CPU 执行时间;编译优化可能减少程序的指令数或优化指令结构;优化数据通路结构可能减少时钟周期,即提高时钟频率,故选 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 60, "year": 2010, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第13题-题目\n\n\n\n

假定有 4 个整数用 8 位补码分别表示 r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个 8 位寄存器中,则下列运算中会发生溢出的是()。

\n
A.r1 × r2
\n
B.r2 × r3
\n
C.r1 × r4
\n
D.r2 × r4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第13题-解析\n\n\n\n

本题的真正意图是考查 补码表示 的表示范围,而不是补码的乘法运算。若采用补码乘法规则计算出 4 个选项,是费力不讨好的做法,而且极容易出错。

8 位补码所能表示的整数范围为 -128~+127。将 4 个数全部转换为十进制:r1=-2,r2=-14,r3=-112,r4=-8,得 r2×r3=1568,远超出了表示范围,发生溢出。

\n\n\n\n\n", "difficulty": 1}, {"id": 61, "year": 2010, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第14题-题目\n\n\n\n

假定变量 i、f 和 d 的数据类型分别为 int,float 和 double(int 用补码表示,float 和 double 分别用 IEEE754 单精度和双精度浮点数格式表示),已 i=785,f=1.5678e3,d=1.5e100。若在 32 位机器中执行下列关系表达式,则结果为 “真” 的是()。

\n

I. i == (int)(float)i     II. f == (float)(int)f

\n

III. f == (float)(double)f    IV. (d+f)-d == f

\n
A.仅 I 和 II
\n
B.仅 I 和 III
\n
C.仅 II 和 III
\n
D.仅 III 和 IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第14题-解析\n\n\n\n

本题考查 不同长度的类型转换,题中三种数据类型的精度从低到高为 int → float → double。

变量说明:

对于 I. i == (int)(float)i

✅ 结果:真


对于 II. f == (float)(int)f

❌ 结果:假


对于 III. f == (float)(double)f

✅ 结果:真


对于 IV. (d + f) - d == f

❌ 结果:假

所以 ,答案选择 B。

\n\n\n\n\n", "difficulty": 1}, {"id": 62, "year": 2010, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第15题-题目\n\n\n\n

假定用若干个 2kx4 位的芯片组成一个 8kx8 位的存储器,则地址 0B1FH 所在芯片的最小地址是( )。

\n
A.0000H
\n
B.0600H
\n
C.0700H
\n
D.0800H
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第15题-解析\n\n\n\n

本题考查 主存容量的扩展,用 2Kx4 位的芯片组成一个 8Kx8 位存储器,共需 8 片 2Kx4 位的芯片,分为 4 组,每组由 2 片 2Kx4 位的芯片并联组成 2Kx8 位的芯片,各组芯片的地址分配如下:

地址 OBIFH 所在的芯片属于第二组,故其所在 芯片的最小地址为 0800H。

\n\n\n\n\n", "difficulty": 1}, {"id": 63, "year": 2010, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第16题-题目\n\n\n\n

下列有关 RAM 和 ROM 的叙述中,正确的是( )。

\n

I. RAM 是易失性存储器,ROM 是非易失性存储器

\n

II. RAM 和 ROM 都采用随机存取方式进行信息访问

\n

III. RAM 和 ROM 都可用作 Cache

\n

IV. RAM 和 ROM 都需要进行刷新

\n
A.仅 I 和 II
\n
B.仅 II 和 III
\n
C.仅 I,II 和 IV
\n
D.仅 II,III 和 IV
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第16题-解析\n\n\n\n

RAM(分为 DRAM 和 SRAM)断电后会失去信息,而 ROM 断电后不会丢失信息,它们都采用随机存取方式(注意,采用随机存取方式的存储器并不一定就是随机存储器)。Cache 一般采用高速的 SRAM 制成,而 ROM 只可读,不能用作 Cache,II 错误。DRAM 需要定期刷新,而 ROM 不需要刷新,故 IV 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 64, "year": 2010, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第17题-题目\n\n\n\n

下列命中组合情况中,一次访存过程中不可能发生的是( )。

\n
A.TLB 未命中,Cache 未命中,Page 未命中
\n
B.TLB 未命中,Cache 命中,Page 命中
\n
C.TLB 命中,Cache 未命中,Page 命中
\n
D.TLB 命中,Cache 命中,Page 未命中
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第17题-解析\n\n\n\n

Cache 中存放的是主存的一部分副本,TLB(快表)中存放的是 Page(页表)的一部分副本。在同时具有虚拟页式存储器(有 TLB)和 Cache 的系统中,CPU 发出访存命令,先查找对应的 Cache 块。

  1. 若 Cache 命中,则说明所需内容在 Cache 内,其所在页面必然已调入主存,因此 Page 必然命中,但 TLB 不一定命中。
  2. 若 Cache 不命中,并不能说明所需内容未调入主存,和 TLB、Page 命中与否没有联系。但若 TLB 命中,Page 也必然命中;而当 Page 命中,TLB 则未必命中,故 D 不可能发生。

【提示】本题看似既涉及虚拟存储器又涉及 Cache,实际上这里并不需要考虑 Cache 命中与否。因为一旦缺页,说明信息不在主存,那么 TLB 中就一定没有该页表项,所以不存在 TLB 命中、Page 缺失的情况,也根本谈不上访问 Cache 是否命中。

\n\n\n\n\n", "difficulty": 1}, {"id": 65, "year": 2010, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第18题-题目\n\n\n\n

下列寄存器中,汇编语言程序员可见的是( )。

\n
A.存储器地址寄存器 (MAR)
\n
B.程序计数器 (PC)
\n
C.存储器数据寄存器 (MDR)
\n
D.指令寄存器 (IR)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第18题-解析\n\n\n\n

读者首先必须明白“汇编程序员可见”的含义,即汇编语言程序员通过汇编程序可以对某个寄存器进行访问。汇编程序员可以通过指定待执行指令的地址来设置 PC 的值,如转移指令、子程序调用指令等。而 R、MAR、MDR 是 CPU 的内部工作寄存器,程序员无法直接获取和设置它们的值,也无法直接对它们进行其他操作,所以对程序员不可见。

【提示】①指令寄存器 R 中的内容总是根据 PC 所取出的指令代码。②在 CPU 的专用寄存器中,只有 PC 和 PSWR 是汇编程序员可见的。

\n\n\n\n\n", "difficulty": 1}, {"id": 66, "year": 2010, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第19题-题目\n\n\n\n

下列选项中,不会引起指令流水线阻塞的是( )。

\n
A.数据旁路(转发)
\n
B.数据相关
\n
C.条件转移
\n
D.资源冲突
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第19题-解析\n\n\n\n

采用流水线方式,相邻或相近的两条指令可能会因为存在某种关联,后一条指令不能按照原指定的时钟周期运行,从而使流水线断流。有三种 相关 可能引起指令流水线阻塞:①结构相关,又称资源相关;②数据相关;③控制相关,主要由转移指令引起。

数据 旁路转发,其主要思想是不必待某条指令的执行结果送回到寄存器,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方,这样可以使流水线不发生停顿。

\n\n\n\n\n", "difficulty": 1}, {"id": 67, "year": 2010, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第20题-题目\n\n\n\n

下列选项中的英文缩写均为总线标准的是( )。

\n
A.PCI、CRT、USB、EISA
\n
B.ISA、CPI、VESA、EISA
\n
C.ISA、SCSI、RAM、MIPS
\n
D.ISA、EISA、PCI、PCI-Express
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第20题-解析\n\n\n\n

常见总线标准 有:ISA、EISA、VESA、PCI、PCI-Express、AGP、USB、RS-232C 等。A 中的 CRT 是纯平显示器;B 中的 CPI 是每条指令的时钟周期数;C 中的 RAM 是半导体随机存储器、MIPS 是每秒执行多少百万条指令数。
\n\n\n\n\n", "difficulty": 1}, {"id": 68, "year": 2010, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第21题-题目\n\n\n\n

单级中断系统中,中断服务程序内的执行顺序是( )。

\n

I 保护现场    II 开中断

\n

III 关中断    IV 保存断点

\n

V 中断事件处理    VI 恢复现场    VII 中断返回

\n
A.I→V→VI→II→VII
\n
B.III→I→V→VII
\n
C.III→IV→V→VI→VII
\n
D.IV→I→V→VI→VI
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第21题-解析\n\n\n\n

在 单级中断系统 中,不允许中断嵌套。中断处理过程为:①关中断;②保存断点;③识别中断源;④保存现场;⑤中断事件处理;⑥恢复现场;⑦开中断;⑧中断返回。其中,①③由硬件完成,④⑧由中断服务程序完成,故选 A。

【排除法】选项 B、C、D 的第一个任务(保存断点或关中断)都是由中断隐指令完成的,即由硬件直接执行,与中断服务程序无关。

\n\n\n\n\n", "difficulty": 1}, {"id": 69, "year": 2010, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第22题-题目\n\n\n\n

假定一台计算机的显示存储器用 DRAM 芯片实现,若要求显示分辨率为 1600*1200,颜色深度为 24 位,帧频为 85HZ,显存总带宽的 50% 用来刷新屏幕,则需要的显存总带宽至少约为( )。

\n
A.245Mbps
\n
B.979Mbps
\n
C.1958Mbps
\n
D.7834Mbps
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第22题-解析\n\n\n\n

刷新所需带宽 = 分辨率×色深×帧频 = 1600×1200×24bit×85Hz = 3916.8Mbps,显存总带宽的 50% 用来刷屏,于是需要的显存总带宽为 3916.8Mbps/0.5 = 7833.6Mbps ≈ 7834Mbps。
\n\n\n\n\n", "difficulty": 1}, {"id": 70, "year": 2010, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第23题-题目\n\n\n\n

下列选项中,操作系统提供给应用程序的接口是(  )。

\n
A.系统调用
\n
B.中断
\n
C.库函数
\n
D.原语
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第23题-解析\n\n\n\n

操作系统提供的接口主要有两类:命令接口和系统调用。系统调用是能完成特定功能的子程序,当应用程序请求操作系统提供某种服务时,便调用具有相应功能的系统调用。库函数则是高级语言中提供的与系统调用对应的函数(也有些库函数与系统调用无关),目的是隐藏访管指令的细节,使系统调用更为方便、抽象。但要注意,库函数属于用户程序而非系统调用,是系统调用的上层。
\n\n\n\n\n", "difficulty": 1}, {"id": 71, "year": 2010, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第24题-题目\n\n\n\n

下列选项中,导致创建新进程的操作是( )。

\n

I.用户登录成功    II.设备分配    III.启动程序执行

\n
A.仅 I 和 II
\n
B.仅 II 和 III
\n
C.仅 I 和 III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第24题-解析\n\n\n\n

引起进程创建的事件有:用户登录、作业调度、提供服务、应用请求等。I. 用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等。所有的用户进程会在该进程下创建和管理。II. 设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程。III. 启动程序执行是典型的引起创建进程的事件。
\n\n\n\n\n", "difficulty": 2}, {"id": 72, "year": 2010, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第25题-题目\n\n\n\n

设与某资源关联的信号量初值为 3,当前值为 1。若 M 表示该资源的可用个数,N 表示等待该资源的进程数,则 M、N 分别是( )。

\n
A.0、1
\n
B.1、0
\n
C.1、2
\n
D.2、0
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第25题-解析\n\n\n\n

信号量 表示相关资源的当前可用数量。当信号量 K>0 时,表示还有 K 个相关资源可用,所以该资源的可用个数是 1。而当信号量 K<0 时,表示有 |K| 个进程在等待该资源。由于资源有剩余,可见没有其他进程等待使用该资源,故进程数为 0。
\n\n\n\n\n", "difficulty": 1}, {"id": 73, "year": 2010, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第26题-题目\n\n\n\n

下列选项中,降低进程优先级的合理时机是(  )。

\n
A.进程时间片用完
\n
B.进程刚完成 I/O 操作,进入就绪队列
\n
C.进程长期处于就绪队列
\n
D.进程从就绪状态转为运行状态
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第26题-解析\n\n\n\n

进程时间片用完,可降低其优先级以让别的进程被调度进入执行状态。B 选项中进程刚完成 I/O,进入就绪队列等待被处理机调度,为了让其尽快处理 I/O 结果,故应提高优先权。C 选项中进程长期处于就绪队列,为不至于产生饥饿现象,也应适当提高优先级。D 选项中进程的优先级不应该在此时降低,而应在时间片用完后再降低。
\n\n\n\n\n", "difficulty": 1}, {"id": 74, "year": 2010, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第27题-题目\n\n\n\n

进程\nP0​\n和\nP1​\n的共享变量定义及其初值为

\n
boolean flag[2];\nint turn = 0;\nflag[0] = FALSE;\nflag[1] = FALSE;\n
\n

若进程\nP0​\n和\nP1​\n访问临界资源的类 C 伪代码实现如下:

\n

则并发执行进程\nP0​\n和\nP1​\n时产生的情形是( )。

\n
A.不能保证进程互斥进入临界区,会出现“饥饿”现象
\n
B.不能保证进程互斥进入临界区,不会出现“饥饿”现象
\n
C.能保证进程互斥进入临界区,会出现“饥饿”现象
\n
D.能保证进程互斥进入临界区,不会出现“饥饿”现象
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第27题-解析\n\n\n\n

这是 Peterson 算法 的实际实现,保证进入临界区的进程合理安全。该算法为了防止两个进程为进入临界区而无限期等待,设置变量 u,表示不允许进入临界区的编号,每个进程在先设置自己标志后再设置 u 标志,不允许另一个进程进入,这时,再同时检测另一个进程状态标志和不允许进入表示,这样可以保证当两个进程同时要求进入临界区时只允许一个进程进入临界区。保存的是较晚的一次赋值,因此较晚的进程等待,较早的进程进入。先到先入,后到等待,从而完成临界区访问的要求。

其实这里可以想象为两个人进门,每个人进门前都会和对方客套一句“你先走”。如果进门时没别人,就当和空气说句废话,然后大步登门入室;如果两人同时进门,就互相请先,但各自只客套一次,所以先客套的人请完对方,就等着对方请自己,然后光明正大地进门。

\n\n\n\n\n", "difficulty": 1}, {"id": 75, "year": 2010, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第28题-题目\n\n\n\n

某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用最佳适配 (Best Fit) 算法,分配和释放的顺序为:分配 15MB、分配 30MB、释放 15MB、分配 8MB、分配 6MB,此时主存中最大空闲分区的大小是( )。

\n
A.7MB
\n
B.9MB
\n
C.10MB
\n
D.15MB
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第28题-解析\n\n\n\n

最佳适应 算法是指每次为作业分配内存空间时,总是找到能满足空间大小需要的最小的空闲分区给作业,可以产生最小的内存空闲分区,如下图所示。

\n\n
55MB
15MB
40MB
15MB
30MB
10MB
15MB
30MB
10MB
15MB
30MB
10MB
2MB
6MB
30MB
10MB
2MB
9MB
初始
分配
15MB
分配
30MB
释放
15MB
分配
8MB
分配
6MB
\n\n\n\n\n", "difficulty": 1}, {"id": 76, "year": 2010, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第29题-题目\n\n\n\n

某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为\n210\nB,页表项大小为 2B,逻辑地址结构为 | 页目录号 | 页号 |页内偏移量 |。逻辑地址空间大小为\n216\n页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是()。

\n
A.64
\n
B.128
\n
C.256
\n
D.512
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第29题-解析\n\n\n\n

页大小为\n210\nB,页表项大小为 2B,故一页可以存放\n29\n个页表项,逻辑地址空间大小为\n216\n页,即共需\n216\n个页表项,则需要\n216/29=27=128\n个页面保存页表项,即页目录表中包含表项的个数至少是\n128\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 77, "year": 2010, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第30题-题目\n\n\n\n

设文件索引结点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引,每个地址项大小为 4B,若磁盘索引块和磁盘数据块大小均为 256B,则可表示的单个文件最大长度是()。

\n
A.33KB
\n
B.519KB
\n
C.1057KB
\n
D.1651KB
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第30题-解析\n\n\n\n

每个磁盘索引块和磁盘数据块大小均为 256B,每个磁盘索引块有 256/4=64 个地址项。因\n此,4 个直接地址索引指向的数据块大小为 4×256B;2 个一级间接索引包含的直接地址索引数\n为 2×(256/4),即其指向的数据块大小为 2×(256/4)×256B。1 个二级间接索引所包含的直接地址\n索引数为 (256/4)×(256/4),即其所指向的数据块大小为 (256/4)×(256/4)×256B。即 7 个地址项所\n指向的数据块总大小为 4×256+2×(256/4)×256+(256/4)×(256/4)×256=1082368B=1057KB。
\n\n\n\n\n", "difficulty": 1}, {"id": 78, "year": 2010, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第31题-题目\n\n\n\n

设置当前工作目录的的主要目的是( )。

\n
A.节省外存空间
\n
B.节省内存空间
\n
C.加快文件的检索速度
\n
D.加快文件的读/写速度
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第31题-解析\n\n\n\n

当一个文件系统含有多级目录时,每访问一个文件,都要使用从树根开始到树叶为止、包括各中间结点名的全路径名。当前目录又称工作目录,进程对各个文件的访问都相对于当前目录进行,而不需要从根目录一层一层的检索,加快了文件的检索速度。选项 A 和 B 都与相对目录无关;选项 D,文件的读/写速度取决于磁盘的性能。
\n\n\n\n\n", "difficulty": 1}, {"id": 79, "year": 2010, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第32题-题目\n\n\n\n

本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是( )。

\n
A.命令解释程序
\n
B.中断处理程序
\n
C.系统调用服务程序
\n
D.用户登录程序
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第32题-解析\n\n\n\n

键盘是典型的通过 中断 I/O 方式 工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息。
\n\n\n\n\n", "difficulty": 1}, {"id": 80, "year": 2010, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第33题-题目\n\n\n\n

下列选项中,不属于网络体系结构所描述的内容是( )。

\n
A.网络的层次
\n
B.每一层使用的协议
\n
C.协议的内部实现细节
\n
D.每一层必须完成的功能
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第33题-解析\n\n\n\n

计算机网络的各层及其协议的集合称为体系结构,分层就涉及对各层功能的划分,因此 A、B、D 正确。体系结构是抽象的,它不包括各层协议的具体实现细节。《计算机网络》中在讲解网络层次时,仅有讲各层的协议和功能,而内部实现细节没有提及。内部实现细节是由具体设备厂家来确定的。
\n\n\n\n\n", "difficulty": 1}, {"id": 81, "year": 2010, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第34题-题目\n\n\n\n

在下图所示的采用 “存储-转发” 方式的分组交换网络中,所有链路的数据传输速率为 100 Mbps,分组大小为 1000 B,其中分组头大小为 20 B。若主机 H1 向主机 H2 发送一个大小为 980 000 B 的文件,则在不考虑分组拆装时间和传播延迟的情况下,从 H1 发送开始到 H2 接收完为止,需要的时间至少是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
H1
H2
\n
A.80 ms
\n
B.80.08 ms
\n
C.80.16 ms
\n
D.80.24 ms
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第34题-解析\n\n\n\n

本题考查交换机 存储转发 的交换方式。分组大小为 1000B,其中分组头大小为 20B,则分组携带的数据大小为 980B,文件长度为 980000B,需拆分为 1000 个分组,加上头部后,每个分组大小为 1000B,总共需要传送的数据量大小为 1MB。由于所有链路的数据传输速度相同,因此文件传输经过最短路径时所需时间最\n少,最短路径经过 2 个分组交换机。

当\nt=1M×8/(100Mbps)=80ms\n时,H1 发送完最后一个比特。

当 H1 发送完最后一个分组时,该分组需要经过 2 个分组交换机的转发,在 2 次转发完成后,所有分组均到达 H2。每次转发的时间为\nt0​=1K×8/(100Mbps)=0.08ms\n。

所以,在不考虑分组拆装时间和传播延迟的情况下,当\nt=80ms+2t0​=80.16ms\n时,H2 接收完文件,即所需的时间至少为 80.16ms。

\n\n\n\n\n", "difficulty": 1}, {"id": 82, "year": 2010, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第35题-题目\n\n\n\n

某自治系统采用 RIP 协议,若该自治系统内的路由器 R1 收到其邻居路由器 R2 的距离矢量中包含信息<net1,16>,则可能得出的结论是 ( )。

\n
A.R2 可以经过 R1 到达 net1,跳数为 17
\n
B.R2 可以到达 net1,跳数为 16
\n
C.R1 可以经过 R2 到达 net1,跳数为 17
\n
D.R1 不能经过 R2 到达 net1
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第35题-解析\n\n\n\n

R1 在收到信息并更新路由表后,若需要经过 R2 到达 net1,则其跳数为 17,由于距离为 16 表示不可达,因此 R1 不能经过 R2 到达 net1,R2 也不可能到达 net1。B、C 错误,D 正确。而题目中并未给出 R1 向 R2 发送的信息,因此 A 也不正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 83, "year": 2010, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第36题-题目\n\n\n\n

若路由器 R 因为拥塞丢弃 IP 分组,则此时 R 可向发出该 IP 分组的源主机发送的 ICMP 报文类型是( )。

\n
A.路由重定向
\n
B.目的不可达
\n
C.源点抑制
\n
D.超时
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第36题-解析\n\n\n\n

ICMP 差错报文 报文有 5 种:终点不可达、源点抑制、时间超过、参数问题、改变路由(重定向),其中源点抑制是当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
\n\n\n\n\n", "difficulty": 1}, {"id": 84, "year": 2010, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第37题-题目\n\n\n\n

某网络的 IP 地址空间为 192.168.5.0/24,采用定长子网划分,子网掩码为 255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是( )。

\n
A.32, 8
\n
B.32, 6
\n
C.8, 32
\n
D.8, 30
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第37题-解析\n\n\n\n

由于该网络的 IP 地址为 192.168.5.0/24,网络号为前 24 位,后 8 位为子网号 + 主机号。子网掩码 为 255.255.255.248,第 4 个字节 248 转换成二进制为 11111000,因此后 8 位中,前 5 位用于子网号,在 CIDR 中可以表示\n25=32\n个子网;后 3 位用于主机号,除去全 0 和全 1 的情况,可以表示\n23−2=6\n个主机地址。
\n\n\n\n\n", "difficulty": 2}, {"id": 85, "year": 2010, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第38题-题目\n\n\n\n

下列网络设备中,能够抑制广播风暴的是( )。

\n

I. 中继器 II. 集线器 III. 网桥 IV. 路由器

\n
A.仅 I 和 II
\n
B.仅 III
\n
C.仅 III 和 IV
\n
D.仅 IV
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第38题-解析\n\n\n\n

参考 网络设备对比,中继器和集线器工作在物理层,既不隔离冲突域也不隔离广播域。为了解决冲突域的问题,人们利用网桥和交换机来分隔互联网的各个网段中的通信量,建立多个分离的冲突域,但当网桥和交换机接收到一个未知转发信息的数据帧时,为了保证该帧能被目的结点正确接收,将该帧从所有的端口广播出去,可以看出网桥和交换机的冲突域等于端口个数,广播域为 1。路由器工作在网络层,既隔离冲突域,也隔离广播域。

【提示】广播风暴产生于网络层,因此只有网络层设备才能抑制。链路层设备和物理层设备对网络层的数据包是透明传输,对是否为广播报文是不可知的。

\n\n\n\n\n", "difficulty": 1}, {"id": 86, "year": 2010, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第39题-题目\n\n\n\n

主机甲和主机乙之间已建立了一个 TCP 连接,TCP 最大段长度为 1000 字节。若主机甲的当前拥塞窗口为 4000 字节,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为 2000 字节,则此时主机甲还可以向主机乙发送的最大字节数是( )。

\n
A.1000
\n
B.2000
\n
C.3000
\n
D.4000
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第39题-解析\n\n\n\n

发送窗口大小 的上限值取接收方窗口和拥塞窗口这两个值中较小的一个,于是此时发送方的发送窗口为 min{4000,2000}=2000B。由于发送方还没有收到第二个最大段的确认,所以此时甲还可以向乙发送的最大字节数为 2000-1000=1000B。
\n\n\n\n\n", "difficulty": 1}, {"id": 87, "year": 2010, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第40题-题目\n\n\n\n

如果本地域名服务器无缓存,当采用递归方法解析另一网络某主机域名时,用户主机、本地域名服务器发送的域名请求消息数分别为( )。

\n
A.一条、一条
\n
B.一条、多条
\n
C.多条、一条
\n
D.多条、多条
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第40题-解析\n\n\n\n

当采用 递归查询 时,如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。因此,这种方法用户主机和本地域名服务器发送的域名请求条数均为 1 条。因此选 A。
\n\n\n\n\n", "difficulty": 2}, {"id": 88, "year": 2010, "index": 41, "type": 3, "typeName": "算法题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2010-第41题-题目\n\n\n\n

将关键字序列 ⟨7,8,30,11,18,9,14⟩ 散列存储到散列表中。散列表的存储空间是一个下标从 0 开始的一维数组,散列函数为 H(key)=(key×3)mod7 ,处理冲突采用线性探测再散列法,要求装填(载)因子为 0.7 。

\n

(1) 请画出所构造的散列表。

\n

(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第41题-解析\n\n\n\n

1)由装载因子为 0.7, 数据总数为 7, 得一维数组大小为 7/0.7= 10, 数组下标为 0~9。所构造的散列函数值见下表。

key78301118914
H(key)0365560

采用线性探测再散列法处理冲突,所构造的散列表见下表。

地址0123456789
关键词71481130189

2)查找成功时,是根据每个元素查找次数来计算平均长度的,在等概率的情况下,各关键字的查找次数见下表。

key78301118914
次数1111332

ASL成功​\n= 查找次数/元素个数 = (1 + 2 + 1 + 1 + 1 + 3 + 3)/7= 12/7。

这里要特别防止惯性思维。查找失败时,是根据查找失败位置计算平均次数,根据散列函数 mod7,初始只可能在 06 的位置。等概率情况下,查找 06 位置查找失败的查找次数见下表。

H(key)0123456
次数3212154

ASL不成功​\n= 查找次数/散列后地址个数 = (3 + 2 + 1 + 2 + 1 + 5 + 4)/7= 18/7。

\n\n\n\n\n", "difficulty": 1}, {"id": 89, "year": 2010, "index": 42, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2010-第42题-题目\n\n\n\n

设将\nn\n(\nn>1\n) 个整数存放到一维数组 R 中。试设计一个在时间和空间两方面都尽可能高效的算法。将 R 中保存的序列循环左移\np(0<p<N\n) 个位置,即将 R 中的数据由 \n<x0​,x1​,⋯,xn−1​>\n 变换为 \n<xp​,xp+1​,⋯,xn−1​,x0​,x1​,⋯,xp−1​>\n 。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第42题-解析\n\n\n\n

1)算法的基本设计思想

可以将这个问题视为把数组\nab\n转换成数组\nba\n(\na\n代表数组的前\np\n个元素,\nb\n代表数组中余下的\nn−p\n个元素),先将\na\n逆置得到\na−1b\n, 再将\nb\n逆置得到\na−1b−1\n,最后将整个\na−1b−1\n逆置得到\n(a−1b−1)−1=ba\n。设 Reverse 函数执行将数组元素逆置的操作,对 abcdefgh 向左循环移动 3(p=3) 个位置的过程如下:

Reverse(0,p-1) 得到 cbadefgh:

Reverse(p,n-l) 得到 cbahgfed;

Reverse(0,n-l) 得到 defghabc,

注:Reverse 中,两个参数分别表示数组中待转换元素的始末位置。

2)使用 C 语言描述算法如下:

void reverse(int a[], int from, int to) {\n  int i = from;\n  int j = to;\n  while (i < j) {\n    int tmp = a[i];\n    a[i] = a[j];\n    a[j] = tmp;\n    i++;\n    j--;\n  }\n}\n\nvoid loopMove(int a[], int n, int p) {\n  if (p < 0) {\n    return;\n  }\n  p = p % n;\n  reverse(a, 0, p-1);\n  reverse(a, p, n-1);\n  reverse(a, 0, n-1);\n}\n

3)上述算法中 3 个 Reverse 函数的时间复杂度分别为\nO(p/2)\n、\nO((n−p)/2)\n和\nO(n/2)\n,故所设计的算法的时间复杂度为\nO(n)\n,空间复杂度为\nO(1)\n。

【另解】借助辅助数组来实现。

算法思想:创建大小为\np\n的辅助数组\nS\n,将\nR\n中前\np\n个整数依次暂存在\nS\n中,同时将\nR\n中后\np\n个整数左移,然后将\nS\n中暂存的\np\n个数依次放回到\nR\n中的后续单元。

时间复杂度为\nO(n)\n, 空间复杂度为\nO(p)\n。

\n\n\n\n\n", "difficulty": 2}, {"id": 90, "year": 2010, "index": 43, "type": 2, "typeName": "应用题", "score": 11, "subject": "computer-network", "question": "\n\n\n\n\n\n2010-第43题-题目\n\n\n\n

某计算机字长为 16 位,主存地址空间大小为 128KB,按字编址。采用单字长指令格式,指令各字段定义如下:

\n
\n\n\n\n \n 408真题系统\n \n\n
OP
Ms
Rs
Md
Rd
15
12
11
6
5
0
源操作数
目的操作数
\n

转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义如下:

\n
Ms/Md寻址方式助记符含义
000B寄存器直接Rn操作数 = (Rn)
001B寄存器间接(Rn)操作数 = ((Rn))
010B寄存器间接、自增(Rn)+操作数 = ((Rn)), (Rn) + 1 → Rn
011B相对D(Rn)转移目标地址 = (PC) + (Rn)
\n

请回答下列问题:

\n

(1) 该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需要多少位?

\n

(2) 转移指令的目标地址范围是多少?

\n

(3) 若操作码 0010B 表示加法操作(助记符为 add),寄存器 R4 和 R5 的编号分别为 100B 和 101B,R4 的内容为 1234H,R5 的内容为 5678H,地址 1234H 中的内容为 5678H,地址 5678H 中的内容为 1234H,则汇编语言为“add (R4), (R5)+”(逗号前为源操作数,逗号后为目的操作数)对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第43题-解析\n\n\n\n

1)操作码占 4 位,则该指令系统最多可有\n24=16\n条指令。操作数占 6 位,其中寻址方式占 3 位、寄存器编号占 3 位,因此该机最多有\n23=8\n个通用寄存器。主存地址空间大小为 128KB,按字编址,字长为 16 位,共有 128KB/2B =\n216\n个存储单元,因此 MAR 至少为 16 位;因为字长为 16 位,故 MDR 至少为 16 位。

2)寄存器字长为 16 位,PC 和 Rn 可表示的地址范围均为\n0∼216−1\n,而主存地址空间为\n216\n,故转移指令的目标地址范围为 0000H~FFFFH(\n0∼216−1\n)。

3)汇编语句“add(R4),(R5)+”,对应的机器码为

字段OPMsRsMdRd
内容0010001100010101
说明add寄存器间接R4寄存器间接,自增R5

将对应的机器码写成十六进制形式为 0010 0011 0001 0101B = 2315H。

该指令的功能是将 R4 的内容所指存储单元的数据与 R5 的内容所指存储单元的数据相加,并将结果送入 R5 的内容所指存储单元中。(R4)=1234H,(1234H)=5678H,(R5)=5678H,(5678H)=1234H;执行加法操作 5678H+1234H=68ACH,之后 R5 自增。

该指令执行后,R5 和存储单元 5678H 的内容会改变,R5 的内容从 5678H 变为 5679H,存储单元 5678H 中的内容变为该指令的计算结果 68ACH。

【注意】第 3 问中两个操作数的存储地址和数值有点令人晕头,请读者务必保持清醒。

\n\n\n\n\n", "difficulty": 2}, {"id": 91, "year": 2010, "index": 44, "type": 2, "typeName": "应用题", "score": 12, "subject": "computer-network", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2010-第44题-题目\r\n\r\n\r\n\r\n

某计算机的主存地址空间大小为 256MB,按字节编址。指令 Cache 和数据 Cache 分离,均有 8 个 Cache 行,每个 Cache 行大小为 64B,数据 Cache 采用直接映射方式。现有两个功能相同的程序 A 和 B,其伪代码如下所示:

\r\n
\r\n// 程序 A\r\nint a[256][256];\r\n.....\r\nint sum_array1()\r\n{\r\n  int i, j, sum=0;\r\n  for (i=0; i<256; i++)\r\n    for (j=0; j<256; j++)\r\n      sum += a[i][j];\r\n  return sum;\r\n}\r\n
\r\n// 程序 B\r\nint a[256][256];\r\n.....\r\nint sum_array2()\r\n{\r\n  int i, j, sum=0;\r\n  for (j=0; j<256; j++)\r\n    for (i=0; i<256; i++)\r\n      sum += a[i][j];\r\n  return sum;\r\n}\r\n
\r\n

假定 int 类型数据用 32 位补码表示,程序编译时 i,j,sum 均分配在寄存器中,数组 a 按行优先方式存放,其首地址为 320(十进制数)。请回答下列问题,要求说明理由或给出计算过程。

\r\n

(1) 若不考虑用于 cache 一致性维护和替换算法的控制位,则数据 Cache 的总容量为多少?

\r\n

(2) 数组元素 a[0][31] 和 a[1][1] 各自所在的主存块对应的 Cache 行号分别是多少(Cache 行号从 0 开始)?

\r\n

(3) 程序 A 和 B 的数据访问命中率各是多少?哪个程序的执行时间更短?

\r\n\r\n\r\n\r\n\r\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第44题-解析\n\n\n\n

1)每个 Cache 行对应一个标记项,如下所示:

| 有效位 | 脏位 | 替换控制位 | 标记位 |

不考虑用于 Cache 一致性维护和替换算法的控制位。地址总长度为 28 位(\n228=256\nM),块内地址 6 位(\n26=64\n),Cache 块号 3 位(\n23=8\n),故 Tag 的位数为 28-6-3=19 位,还需使用一个有效位,故题中数据 Cache 行的结构如下图所示。

\n\n
1 bit
19 bits
64B = 512 bits
有效位
tag 标记
每行存储的数据

数据 Cache 共有 8 行,因此数据 Cache 的 总容量为\n8×(64+20/8)\nB= 532B。

2)数组 a 在主存的存放位置及其 与 Cache 之间的映射关系如下图所示。

\n\n
行号
0
5
6
7
a[0][0]
· · ·
a[0][15]
· · ·
a[0][16]
· · ·
a[0][31]
a[0][255]
· · ·
a[1][0]
· · ·
a[1][15]
· · ·
· · ·
a[1][255]
· · ·
a[255][255]
Cache
主存
块号
320
5
6
21

数组按行优先方式存放,首地址为 320,数组元素占 4 字节。a[0][31] 所在的主存块对应的 Cache 行号为\n(320+31×4)/64=6\n;a[1][1] 所在的主存块对应的 Cache 行号为\n(320+256×4+1×4)/64%8=5\n。

3)数组 a 的大小为\n256×256×4B=218\nB, 占用\n218/64=212\n个主存块,按行优先存放,程序\nA\n逐行访问数组,共需访问的次数为\n216\n次,未命中次数为\n212\n次(即每个字块的第一个数未命中),因此程序\nA\n的命中率为\n(216−212)/216×100%=93.75%\n。

【另解】数组 a 按行存放,程序 A 按行存取。每个字块中存放 16 个 int 型数据,除访问的第一个不命中,随后的 15 个全都命中,访问全部字块都符合这一规律,且数组大小为字块大小的整数倍,故程序 A 的命中率为 15/16=93.75%。

程序 B 逐列访问数组 a,Cache 总容量为 64Bx8=512B,数组 a 一行的大小为 1KB,正好是 Cache 容量的 2 倍,可知不同行的同一列数组元素使用的是同一个 Cache 单元,故逐列访问每个数据时,都会将之前的字块置换出,也即每次访问都不会命中,命中率为 0。由于从 Cache 读数据比从主存读数据快很多,所以程序 A 的执行比程序 B 快得多。

注意:本题考查 Cache 容量计算,直接映射方式的地址计算,以及命中率计算(注意:行优先遍历与列优先遍历命中率差别很大)。

\n\n\n\n\n", "difficulty": 1}, {"id": 92, "year": 2010, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "computer-organization", "question": "\n\n\n\n\n\n2010-第45题-题目\n\n\n\n

假设计算机系统采用 CSCAN(循环扫描)磁盘调度策略,使用 2KB 的内存空间记录 16384 个磁盘块的空闲状态。

\n
\n\n\n\n \n 408真题系统\n \n\n
磁头的运动方向
100 号磁道
0 号磁道
随机分布的某扇区
\n

(1) 请说明在上述条件如何进行磁盘块空闲状态的管理。

\n

(2) 设某单面磁盘的旋转速度为 6000rpm,每个磁道有 100 个扇区,相邻磁道间的平均移动的时间为 1ms。若在某时刻,磁头位于 100 号磁道处,并沿着磁道号增大的方向移动(见下图),磁道号的请求队列为 50, 90, 30, 120,对请求队列中的每个磁道需读取 1 个随机分布的扇区,则读完这个扇区点共需要多少时间?需要给出计算过程。

\n

(3) 如果将磁盘替换为随机访问的 Flash 半导体存储器(如 U 盘、SSD 等),是否有比 CSCAN 更高效的磁盘调度策略?若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第45题-解析\n\n\n\n

1)用 位图 表示磁盘的空闲状态。每位表示一个磁盘块的空闲状态,共需要 16384/32 = 512字 = 512×4字节 = 2KB,正好可放在系统提供的内存中。

2)采用 C-SCAN 调度算法,访问磁道的顺序和移动的磁道数见下表。

被访问的下一个磁道号移动距离(磁道数)
12020
3090
5020
9040

移动的磁道数为 20+90+20+40 = 170,故总的移动磁道时间为 170ms。

由于转速为 6000rpm,则平均旋转延迟为 5ms,总的旋转延迟时间 = 20ms。

由于转速为 6000rpm,则读取一个磁道上一个扇区的平均读取时间为 0.1ms,总的读取扇区的时间为 0.4ms。

综上,读取上述磁道上 所有扇区所花的总时间为 190.4ms。

3)采用 FCFS 调度策略更高效。因为 Flash 半导体存储器的物理结构不需要考虑寻道时间和旋转延迟,可直接按 I/O 请求的先后顺序服务。

\n\n\n\n\n", "difficulty": 2}, {"id": 93, "year": 2010, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2010-第46题-题目\n\n\n\n

设某计算机的逻辑地址空间和物理地址空间均为 64KB,按字节编址。若某进程最多需要 6 页(Page)数据存储空间,页的大小为 1KB,操作系统采用固定分配局部置换策略为此进程分配 4 个页框(Page Frame)。在时刻 260 前该进程访问情况见下表(访问位即使用位)。

\n
页号页框号装入时刻访问位
071301
142301
222001
392601
\n

当该进程执行到时刻 260 时,要访问逻辑地址为 17CAH 的数据。请回答下列问题:

\n

(1) 该逻辑地址对应的页号是多少?

\n

(2) 若采用先进先出 (FIFO) 置换算法,该逻辑地址对应的物理地址?要求给出计算过程。

\n

(3) 采用时钟 (CLOCK) 置换算法,该逻辑地址对应的物理地址是多少?要求给出计算过程(设搜索下一页的指针按顺时针方向移动,且指向当前 2 号页框,示意图如下图)。

\n
\n\n\n\n \n 408真题系统\n \n\n
2号页
3号页
0号页
1号页
2号页框
4号页框
7号页框
9号页框
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第46题-解析\n\n\n\n

1) 由于该计算机的逻辑地址空间和物理地址空间均为\n64KB=216\nB,按字节编址,且页的大小为\n1KB=210\nB,故逻辑地址和物理地址的地址格式均为

| 页框号(6 位) | 页内偏移(10 位) |

17CAH = 0001 0111 1100 1010B,可知该逻辑地址的页号为 000101B = 5。

2) 根据 FIFO 算法,需要替换装入时间最早的页,故需要置换装入时间最早的 0 号页,即将 5 号页装入 7 号页框中,所以物理地址为 0001 1111 1100 1010B = 1FCAH。

3) 根据 Clock 算法,如果当前指针所指页框的使用位为 0,则替换该页;否则将使用位清零,并将指针指向下一个页框,继续查找。根据题设和示意图,将从 2 号页框开始,前 4 次查找页框号的顺序为 2→4→7→9,并将对应页框的使用位清零。在第 5 次查找中,指针指向 2 号页框,因 2 号页框的使用位为 0,故淘汰 2 号页框对应的 2 号页,把 5 号页装入 2 号页框中,并将对应使用位设置为 1,所以对应的物理地址为 0000 1011 1100 1010B = 0BCAH。

\n\n\n\n\n", "difficulty": 1}, {"id": 94, "year": 2010, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "operating-system", "question": "\n\n\n\n\n\n2010-第47题-题目\n\n\n\n

某局域网采用 CSMA/CD 协议实现介质访问控制,数据传输速率为 10 Mbps,主机甲和主机乙之间的距离为 2 km,信号传播速度是 200 000 km/s。请回答下列问题,要求说明理由或写出计算过程。

\n

(1) 若主机甲和主机乙发送数据时发生冲突,则从开始发送数据时刻起,到两台主机均检测到冲突时刻止,最短需经过多长时间?最长需经过多长时间(假设主机甲和主机乙发送数据过程中,其他主机不发送数据)?

\n

(2) 若网络不存在任何冲突与差错,主机甲总是以标准的最长以太网数据帧(1518 字节)向主机乙发送数据,主机乙每成功收到一个数据帧后立即向主机甲发送一个 64 字节的确认帧,主机甲收到确认帧后方可发送下一个数据帧。此时主机甲的有效数据传输速率是多少(不考虑以太网的前导码)?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2010-第47题-解析\n\n\n\n

1)显然当甲和乙同时向对方发送数据时,信号在信道中发生冲突后,冲突信号继续向两个方向传播。这种情况下两台主机均检测到冲突需要经过的时间最短:

T(a)​=1km/200000km/s×2=0.01ms=单程传播时延t0​

设甲先发送数据,当数据即将到达乙时,乙也开始发送数据,此时乙将立刻检测到冲突,而甲要检测到冲突还需等待冲突信号从乙传播到甲。两台主机均检测到冲突的时间最长:

T(b)​=2km/200000km/s×2=0.02ms=双程传播时延2t0​

\n\n
甲
甲
乙
乙
甲
乙
甲
甲
乙
乙
甲
乙
(a) 时间最短的情况
(b) 时间最长的情况

2)甲发送一个数据帧的时间,即发送时延\nt1​=1518×8bit/(10Mbps)=1.2144ms\n;乙每成功收到一个数据帧后,向甲发送一个确认帧,确认帧的发送时延\nt2​=64×8bit/10Mbps=0.0512ms\n;主机甲收到确认帧后,即发送下一数据帧,故主机甲的发送周期\nT\n= 数据帧发送时延\nt1​\n+ 确认帧发送时延\nt2​\n+ 双程传播时延 =\nt1​+t2​+2t0​\n= 1.2856ms。于是主机甲的有效数据传输率为\n1500×8/T=12000bit/1.2856ms≈9.33Mbps\n(以太网帧的数据部分为 1500B)。

\n\n\n\n\n", "difficulty": 1}, {"id": 95, "year": 2011, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第1题-题目\n\n\n\n

设 n 是描述问题规模的非负整数,下面程序片段的时间复杂度是( )。

\n
x = 2;\nwhile (x < n / 2)\n    x = 2 * x;\n
\n
A.O(logn)
\n
B.O(n)
\n
C.O(nlog2​n)
\n
D.O(n2)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第1题-解析\n\n\n\n

在程序中,执行频率最高的语句为 x = x * 2,设该语句总共执行了 T(n) 次,则\n2T(n)+1≤n/2\n,故\nT(n)=log2​(n/2)−1=log2​n−2\n,得\nT(n)=O(log2​n)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 96, "year": 2011, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第2题-题目\n\n\n\n

元素 a,b,c,d,e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,知道所有元素都出栈,则在所有可能的出现序列中,以元素 d 开头的序列个数是( )。

\n
A.3
\n
B.4
\n
C.5
\n
D.6
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第2题-解析\n\n\n\n

本题考察 入栈出栈序列,d 为第 1 个出栈元素,则 d 之前的元素必定是进栈后在栈中停留。因而出栈顺序必为 d_c_b_a_,e 的顺序不定,在任一 “_” 上都有可能,一共有 4 种可能。
\n\n\n\n\n", "difficulty": 1}, {"id": 97, "year": 2011, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第3题-题目\n\n\n\n

已知循环队列存储在一维数组 A[0..n-1]中,且队列非空时 front 和 rear 分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在 A[0]处,则初始时 front 和 rear 的值分别是( )。

\n
A.0,0
\n
B.0,n-1
\n
C.n-1,0
\n
D.n-1,n-1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第3题-解析\n\n\n\n

根据题意,第一个元素进入队列后存储在 A[0] 处,此时 front 和 rear 值都为 0。入队时由于要执行 (rear+1) % n 操作,所以如果入队后指针指向 0, 则 rear 初值为 n-1,而由于第一个元素在 A[0] 中,插入操作只改变 rear 指针,所以 front 为 0 不变。
\n\n\n\n\n", "difficulty": 1}, {"id": 98, "year": 2011, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第4题-题目\n\n\n\n

若一棵完全二叉树有 768 个结点,则该二叉树中叶结点的个数是()

\n
A.257
\n
B.258
\n
C.384
\n
D.385
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第4题-解析\n\n\n\n

根据 完全二叉树 的性质,最后一个分支结点的序号为\n⌊n/2⌋=⌊768/2⌋=384\n, 故叶子结点的个数为 768 - 384 = 384。
\n\n\n\n\n", "difficulty": 1}, {"id": 99, "year": 2011, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第5题-题目\n\n\n\n

若一棵二叉树的前序遍历序列和后序遍历序列分别为 1,2,3,4 和 4,3,2,1,则该二叉树的中序遍历序列不会是()

\n
A.1,2,3,4
\n
B.2,3,4,1
\n
C.3,2,4,1
\n
D.4,3,2,1
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第5题-解析\n\n\n\n

前序序列为根左右,后序序列为左右根,由于前序序列和后序序列刚好相反,故不可能存在一个结点同时存在左右孩子,即二叉树的高度为 4。1 为根结点,由于根结点只能有左孩子(或右孩子),因此,在中序序列中,1 或在序列首或在序列尾,ABCD 皆满足要求。仅考虑以 1 的孩子结点 2 为根结点的子树,它也只能有左孩子(或右孩子),因此,在中序序列中,2 或在序列首或序列尾,ABD 皆满足要求,答案选择 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 100, "year": 2011, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第6题-题目\n\n\n\n

已知一棵有 2011 个结点的树,其叶结点个数为 116,该树对应的二叉树中无右孩子的结点个数是( )。

\n
A.115
\n
B.116
\n
C.1895
\n
D.1896
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第6题-解析\n\n\n\n

树转化为二叉树 时,树中每一个分支结点的所有子结点中的最右子结点无右孩子,根结点转换后也没有右孩子,因此,对应的二叉树中无右孩子的结点个数=分支结点数+1 = 2011-116+1 = 1896。通常本题应采用特殊法解,设题意中的树是如右图所示的结构,则对应的二叉树中仅有前 115 个叶结点有右孩子,故无右孩子的结点个数 = 2011-115 = 1896。
\n\n\n\n\n", "difficulty": 1}, {"id": 101, "year": 2011, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第7题-题目\n\n\n\n

对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是( )。

\n
A.95,22,91,24,94,71
\n
B.92,20,91,34,88,35
\n
C.21,89,77,29,36,38
\n
D.12,25,71,68,33,34
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第7题-解析\n\n\n\n

在 二叉排序树 中,左子树结点值小于根结点,右子树结点值大于根结点。在选项 A 中,当查找到 91 后再向 24 查找,说明这一条路径(左子树)之后查找的数都要比 91 小,而后面却查找到了 94(解题过程中,建议配合画图),因此错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 102, "year": 2011, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第8题-题目\n\n\n\n

下列关于图的叙述中,正确的是( )。

\n

I. 回路是简单路径

\n

II. 存储稀疏图,用邻接矩阵比邻接表更省空间

\n

III. 若有向图中存在拓扑序列,则该图不存在回路

\n
A.仅 II
\n
B.仅 Ⅰ、II
\n
C.仅 III
\n
D.仅 Ⅰ、III
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第8题-解析\n\n\n\n

第一个顶点和最后一个顶点相同的路径称为回路;序列中顶点不重复出现的路径称为 简单路径;回路显然不是简单路径,故 I 错误;稀疏图是边比较少的情况,此时用邻接矩阵的空间复杂度为\nO(n2)\n,必将浪费大量的空间,而邻接表的空间复杂度为\nO(n+e)\n,应该选用邻接表,故 II 错误。存在回路的有向图不存在拓扑序列,若 拓扑排序 输出结束后所余下的顶点都有前驱,则说明只得到了部分顶点的拓扑有序序列,图中存在回路,故 III 正确。
\n\n\n\n\n", "difficulty": 2}, {"id": 103, "year": 2011, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第9题-题目\n\n\n\n

为提高哈希(Hash)表的查找效率,可以采取的正确措施是( )。

\n

I. 增大装填因子

\n

II. 设计冲突少的哈希函数

\n

III. 处理冲突时避免产生堆积现象

\n
A.仅 I
\n
B.仅 II
\n
C.仅 I、II
\n
D.仅 II、III
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第9题-解析\n\n\n\n

哈希表 的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(表中记录数与表长之比)的大小成正比,即装填得越满越容易发生冲突,I 错误。II 显然正确。采用合适的处理冲突的方式避免产生聚集现象,也将提高查找效率,例如用拉链法解决冲突时就不存在聚集现象,用线性探测法解决冲突时易引起聚集现象,III 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 104, "year": 2011, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第10题-题目\n\n\n\n

为实现快速排序算法,待排序序列宜采用的存储方式是()

\n
A.顺序存储
\n
B.散列存储
\n
C.链式存储
\n
D.索引存储
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第10题-解析\n\n\n\n

对绝大部分 内部排序 而言,只适用于顺序存储结构。快速排序在排序的过程中,既要从后向前查找,也要从前向后查找,因此宜采用顺序存储。
\n\n\n\n\n", "difficulty": 1}, {"id": 105, "year": 2011, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第11题-题目\n\n\n\n

已知序列 25,13,10,12,9 是大根堆,在序列尾部插入新元素 18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是()

\n
A.1
\n
B.2
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第11题-解析\n\n\n\n

插入 18 后,首先将 18 与 10 比较,交换位置,再将 18 与 25 比较,不交换位置。共比较了 2\n次,调整的过程如下图所示。

\n\n
25
13
10
12
9
25
13
10
12
9
18
25
13
10
12
9
18
25
13
18
12
9
10
插入结点 18
插入结点 10
插入结点 25
\n\n\n\n\n", "difficulty": 1}, {"id": 106, "year": 2011, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第12题-题目\n\n\n\n

下列选项中,描述浮点数操作速度指标的是( )。

\n
A.MIPS
\n
B.CPI
\n
C.IPC
\n
D.MFLOPS
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第12题-解析\n\n\n\n

MIPS 是每秒执行多少百万条指令,适用千衡量标量机的性能。CPI 是平均每条指令的时钟周期数。IPC 是 CPI 的倒数,即每个时钟周期执行的指令数。MFLOPS 是每秒执行多少百万条浮点数运算,用来描述浮点数运算速度,适用于衡量向量机的性能。
\n\n\n\n\n", "difficulty": 1}, {"id": 107, "year": 2011, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第13题-题目\n\n\n\n

float 型数据通常用 IEEE754 单精度浮点数格式表示。若编译器将 float 型变量 x 分配在一个 32 位浮点寄存器 FR1 中,且 x=-8.25,则 FR1 的内容是( )。

\n
A.C1040000H
\n
B.C2420000H
\n
C.C1840000H
\n
D.C1C20000H
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第13题-解析\n\n\n\n

本题题意即考查 IEEE 754 单精度浮点数 的表示。先将 x 转换成二进制为\n−1000.01=−1.00001×23\n,其次计算阶码 E,根据 IEEE 754 单精度浮点数格式,有 E-127=3,故 E=130,转换成二进制为 1000 0010。最后,根据 IEEE 754 标准,最高位的 “1” 是被隐藏的。

IEEE 754 单精度浮点数格式:数符(1 位)+阶码(8 位)+尾数(23 位)。

故,FR1 内容为 1; 1000 0010; 0000 10000 0000 0000 0000 000。

即,1100 0001 0000 0100 0000 0000 0000 0000= C104000H。

本题易误选 D, 未考虑 IEEE 754 标准隐含最高位 1 的情况,偏置值是 128。

\n\n\n\n\n", "difficulty": 2}, {"id": 108, "year": 2011, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第14题-题目\n\n\n\n

下列各类存储器中,不采用随机存取方式的是( )。

\n
A.EPROM
\n
B.CDROM
\n
C.DRAM
\n
D.SRAM
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第14题-解析\n\n\n\n

随机存取方式是指 CPU 可以对存储器的任一存储单元中的内容随机存取,而且存取时间与存储单元的物理位置无关。选项 A、C、D 均采用随机存取方式,CDROM 即光盘,采用串行存取方式。
\n\n\n\n\n", "difficulty": 1}, {"id": 109, "year": 2011, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第15题-题目\n\n\n\n

某计算机存储器按字节编址,主存地址空间大小为 64MB,现用 4M×8 位的 RAM 芯片组成 32MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是( )。

\n
A.22 位
\n
B.23 位
\n
C.25 位
\n
D.26 位
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第15题-解析\n\n\n\n

主存按字节编址,地址空间大小为 64MB,MAR 的寻址范围为 64M =\n226\n,故为 26 位。实际的主存容量 32MB 不能代表 MAR 的位数,考虑到存储器扩展的需要,MAR 应保证访问到整个主存地址空间,反过来,MAR 的位数决定了主存地址空间的大小。
\n\n\n\n\n", "difficulty": 1}, {"id": 110, "year": 2011, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第16题-题目\n\n\n\n

偏移寻址将某个寄存器内容与一个形式地址相加而生成有效地址。下列寻址方式中,不属于偏移寻址方式的是( )。

\n
A.间接寻址
\n
B.基址寻址
\n
C.相对寻址
\n
D.变址寻址
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第16题-解析\n\n\n\n

间接寻址 不需要寄存器,EA = (A)。基址寻址 EA = A + 基址寄存器 BR 内容;相对寻址 EA= A + 程序计数器 PC 内容;变址寻址 EA = A + 变址寄存器 IX 内容。后三者都是将某个寄存器内容与一个形式地址相加而形成有效地址,故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 111, "year": 2011, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第17题-题目\n\n\n\n

某机器有一个标志寄存器,其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF,条件转移指令 bgt(无符号整数比较大于时转移)的转移条件是 (  )

\n
A.CF+OF=1
\n
B.SF+ZF=1
\n
C.CF+ZF​=1
\n
D.CF+SF​=1
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第17题-解析\n\n\n\n

本题考察 标志寄存器,假设两个无符号整数 A 和 B,bgt 指令会将 A 和 B 进行比较,也就是将 A 和 B 相减。如果 A > B,则 A-B 肯定无进位/借位,也不为 0(为 0 时表示两数相同),故而 CF 和 ZF 均为 0,选 C。其余选项中用到了符号标志 SF 和溢出标志 OF, 显然应当排除。
\n\n\n\n\n", "difficulty": 1}, {"id": 112, "year": 2011, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第18题-题目\n\n\n\n

下列给出的指令系统特点中,有利于实现指令流水线的是( )。

\n

Ⅰ. 指令格式规整且长度一致

\n

Ⅱ. 指令和数据按边界对齐存放

\n

Ⅲ. 只有 Load/Store 指令才能对操作数进行存储访问

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅲ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第18题-解析\n\n\n\n

指令定长、对齐和仅 Load/Store 指令访存,这 3 个都是 RISC 的特征,指令格式规整且长度一 致能大大简化指令译码的复杂度,有利于 实现流水线。指令和数据按边界对齐存放能保证在一个存取周期内取到需要的数据和指令,不用多余的延迟等待,也有利于实现流水线。只有 Load/Store 指令才能对操作数进行存储访问使取指令、取操作数操作简化且时间长度固定,能够有效地简化流水线的复杂度。
\n\n\n\n\n", "difficulty": 1}, {"id": 113, "year": 2011, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第19题-题目\n\n\n\n

假定不采用 Cache 和指令预取技术,且机器处于“开中断”状态,则在下列有关指令执行的叙述中,错误的是( )。

\n
A.每个指令周期中 CPU 都至少访问内存一次
\n
B.每个指令周期一定大于或等于一个 CPU 时钟周期
\n
C.空操作指令的指令周期中任何寄存器的内容都不会被改变
\n
D.当前程序在每条指令执行结束时都可能被外部中断打断
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第19题-解析\n\n\n\n

由于不采用指令预取技术,每个 指令周期 都需要取指令,而不采用 Cache 技术,则每次取指令都至少要访问内存一次(当指令字长与存储字长相等且按边界对齐时),A 正确。时钟周期是 CPU 的最小时间单位,每个指令周期一定大于或等于 一个 CPU 时钟周期,B 正确。即使是空操作指令,在取指操作后,PC 也会自动加 1,C 错误。由于机器处于“开中断”状态,在 每条指令执行结束时都可能被外部中断而 打断。
\n\n\n\n\n", "difficulty": 1}, {"id": 114, "year": 2011, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第20题-题目\n\n\n\n

在系统总线的数据线上,不可能传输的是( )。

\n
A.指令
\n
B.操作数
\n
C.握手(应答)信号
\n
D.中断类型号
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第20题-解析\n\n\n\n

在取指令时,指令便是在数据线上传输的。操作数显然在数据线上传输。中断类型号用以指出 中断向量表 的地址,CPU 响应中断请求后,将中断应答信号(INTR)发回到数据总线上,CPU 从数据总线上读取中断类型号后,查找中断向量表,找到相应的中断处理程序入口。而握手(应答)信号属于通信联络控制信号,应在通信总线上传输。
\n\n\n\n\n", "difficulty": 1}, {"id": 115, "year": 2011, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第21题-题目\n\n\n\n

某计算机有五级中断\nL4​∼L0​\n,中断屏蔽字为 \nM4​M3​M2​M1​M0​\n, \nMi​=1\n(\n0≤i≤4\n)表示对 \nLi​\n 级中断进行屏蔽。若中断响应优先级从高到低的顺序是 \nL0​→L1​→L2​→L3​→L4​\n,且要求中断处理优先级从高到低的顺序是 \nL4​→L0​→L2​→L1​→L3​\n,则 \nL1​\n 的中断处理程序中设置的中断屏蔽字是( )。

\n
A.11110
\n
B.01101
\n
C.00011
\n
D.01010
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第21题-解析\n\n\n\n

高优先级置 0 表示可被中断,比该中断优先级低(或相等)的置 l 表示不可被中断,\nL1​\n只能屏蔽\nL3​\n和其自身,故\nM3​\n和\nM1​\n置 1,中断屏蔽字\nM4​M3​M2​M1​M0​=01010\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 116, "year": 2011, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第22题-题目\n\n\n\n

某计算机处理器主频为 50MHz,采用定时查询方式控制设备 A 的 I/O,查询程序运行一次所用的时钟周期数至少为 500。在设备 A 工作期间,为数据不丢失,每秒需对其查询至少 200 次,则 CPU 用于设备 A 的 I/O 的时间占整个 CPU 时间的百分比至少是( )。

\n
A.0.02%
\n
B.0.05%
\n
C.0.20%
\n
D.0.50%
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第22题-解析\n\n\n\n

本题考察 程序查询 I/O 方式,每秒至少查询 200 次,每次查询至少 500 个 时钟周期,总的时钟周期数为 200 × 500 =100000,因此 CPU 用于设备 A 的 I/O 的时间占 CPU 时间比为 100000/50M =0.20%。
\n\n\n\n\n", "difficulty": 1}, {"id": 117, "year": 2011, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第23题-题目\n\n\n\n

下列选项中,满足短任务优先且不会发生饥饿现象的调度算法是( )。

\n
A.先来先服务
\n
B.高响应比优先
\n
C.时间片轮转
\n
D.非抢占式短任务优先
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第23题-解析\n\n\n\n

最高响应比优先 是一种综合考虑任务长度和等待时间的调度算法,响应比=(等待时间+执行时间)/执行时间。高响应比优先算法在等待时间相同的情况下,作业执行时间越短则响应比越高,满足短任务优先。随着长任务的等待时间增加,响应比也会变大,执行机会也就增大,所以不会发生饥饿现象。先来先服务和时间片轮转不符合短任务优先,非抢占式短任务优先会产生饥饿现象。
\n\n\n\n\n", "difficulty": 1}, {"id": 118, "year": 2011, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第24题-题目\n\n\n\n

下列选项中,在用户态执行的是( )。

\n
A.命令解释程序
\n
B.缺页处理程序
\n
C.进程调度程序
\n
D.时钟中断处理程序
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第24题-解析\n\n\n\n

缺页处理和时钟中断都属于中断,在 内核态 执行;进程调度是操作系统内核进程,无须用户干预,在核心态执行;命令解释程序属于命令接口,是四个选项中唯一能面对用户的,它在 用户态 执行。
\n\n\n\n\n", "difficulty": 1}, {"id": 119, "year": 2011, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第25题-题目\n\n\n\n

在支持多线程的系统中,进程 P 创建的若干线程不能共享的是( )。

\n
A.进程 P 的代码段
\n
B.进程 P 中打开的文件
\n
C.进程 P 的全局变量
\n
D.进程 P 中某线程的栈指针
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第25题-解析\n\n\n\n

进程是资源分配的基本单位,线程 是处理机调度的基本单位。因此,进程的代码段、进程打开的文件、进程的全局变量等都是进程的资源,唯有进程中某线程的栈指针是属于线程的,属于进程的资源可以共享,属于线程的栈是独享的,对其他线程透明。
\n\n\n\n\n", "difficulty": 1}, {"id": 120, "year": 2011, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第26题-题目\n\n\n\n

用户程序发出磁盘 I/O 请求后,系统的正确处理流程是( )。

\n
A.用户程序→系统调用处理程序→中断处理程序→设备驱动程序
\n
B.用户程序→系统调用处理程序→设备驱动程序→中断处理程序
\n
C.用户程序→设备驱动程序→系统调用处理程序→中断处理程序
\n
D.用户程序→设备驱动程序→中断处理程序→系统调用处理程序
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第26题-解析\n\n\n\n

I/O 软件 一般从上到下分为四个层次:用户层、与设备无关的软件层、设备驱动程序以及中断处理程序。与设备无关的软件层也就是系统调用的处理程序。

当用户使用设备时,首先在用户程序中发起一次系统调用,操作系统的内核接到该调用请求后请求调用处理程序进行处理,再转到相应的设备驱动程序,当设备准备好或所需数据到达后设备硬件发出中断,将数据按上述调用顺序逆向回传到用户程序中。

\n\n\n\n\n", "difficulty": 1}, {"id": 121, "year": 2011, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第27题-题目\n\n\n\n

某时刻进程的资源使用情况如下表所示。

\n

此时的安全序列是( )。

\n
A.P1​,P2​,P3​,P4​
\n
B.P1​,P4​,P3​,P2​
\n
C.P1​,P3​,P2​,P4​
\n
D.不存在
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第27题-解析\n\n\n\n

题应采用排除法,逐个代入分析。当剩余资源分配给\nP1​\n,待\nP1​\n执行完后,可用资源数为 (2,2,1),此时仅能满足\nP4​\n的需求,排除 A、B;接着分配给\nP4​\n,待\nP4​\n执行完后,可用资源数为 (2,2,2),此时已无法满足任何进程的需求,排除 C。此外,本题还可以使用 银行家算法 求解(对于选择题来说,显得过于复杂)。
\n\n\n\n\n", "difficulty": 1}, {"id": 122, "year": 2011, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第28题-题目\n\n\n\n

在缺页处理过程中,操作系统执行的操作可能是()。

\n

I、修改页表

\n

II、磁盘 I/O

\n

III、分配页框

\n
A.仅 I、II
\n
B.仅 II
\n
C.仅 III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第28题-解析\n\n\n\n

缺页中断 产生后,需要在内存中找到空闲页框并分配给需要访问的页(可能涉及页面置换),之后缺页中断处理程序调用设备驱动程序做磁盘/O,将位于外存上的页面调入内存,调入后需要修改页表,将页表中代表该页是否在内存的标志位(或有效位)置为 1,并将物理页框号填入相应位置,若必要还需修改其他相关表项等。
\n\n\n\n\n", "difficulty": 1}, {"id": 123, "year": 2011, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第29题-题目\n\n\n\n

当系统发生抖动 (thrashing) 时,可以采取的有效措施是( )。

\n

I. 撤销部分进程

\n

II. 增加磁盘交换区的容量

\n

III. 提高用户进程的优先级

\n
A.仅 I
\n
B.仅 II
\n
C.仅 III
\n
D.仅 I、II
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第29题-解析\n\n\n\n

在具有对换功能的操作系统中,通常把外存分为文件区和对换区。前者用于存放文件,后者用于存放从内存换出的进程。抖动 现象是指刚刚被换出的页很快又要被访问,为此又要换出其他页,而该页又很快被访问,如此频繁地置换页面,以致大部分时间都花在页面置换上,引起系统\n性能下降。撤销部分进程可以减少所要用到的页面数,防止抖动。对换区大小和进程优先级都与抖动无关。
\n\n\n\n\n", "difficulty": 1}, {"id": 124, "year": 2011, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第30题-题目\n\n\n\n

在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是()。

\n
A.编辑
\n
B.编译
\n
C.链接
\n
D.装载
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第30题-解析\n\n\n\n

编译后的模块需要经过链接才能装载,而链接后形成的地址才是整个程序的完整逻辑地址空间。以 C 语言为例:C 语言经过预处理 (cpp)→编译 (ccl)→汇编 (as)→链接 (ld) 产生可执行文件。其中链接的前一步,产生了可重定位的二进制的目标文件。C 语言采用源文件独立编译的方法,如程序 main.c,file1.c,file2.c,file1.h,file2.h,在链接的前一步生成了 main.o,file1.o,file2.o,这些目标模块采用的逻辑地址都从 0 开始,但只是相对于该模块的逻辑地址。链接器将这三个文件,libc 和其他的库文件链接成一个可执行文件。链接阶段主要完成了重定位,形成整个程序的完整逻辑地址空间。

例如,file1.o 的逻辑地址为 01023,main.o 的逻辑地址为 01023,假设链接时将 file1.o 链接在 main.o 之后,则重定位之后 file1.o 对应的逻辑地址就应为 1024~2047。

\n\n\n\n\n", "difficulty": 2}, {"id": 125, "year": 2011, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第31题-题目\n\n\n\n

某文件占 10 个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为 100μs,将缓冲区的数据传送到用户区的时间是 50μs,CPU 对一块数据进行分析的时间为 50μs。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是( )。

\n
A.1500μs、1000μs
\n
B.1550μs、1100μs
\n
C.1550μs、1550μs
\n
D.2000μs、2000μs
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第31题-解析\n\n\n\n

在 单缓冲区 中,当上一个磁盘块从缓冲区读入用户区完成时,下一磁盘块才能开始读入,也就是当最后一块磁盘块读入用户区完毕时所用时间为 150×10=1500μs,加上处理最后一个磁盘块的时间 50μs,得 1550μs。在 双缓冲 中,不存在等待磁盘块从缓冲区读入用户区的问题,10 个磁盘块可以连续从外存读入主存缓冲区,加上将最后一个磁盘块从缓冲区送到用户区的传输时间 50μs 以及处理时间 50μs,也就是 100×10+50+50=1100μs。
\n\n\n\n\n", "difficulty": 1}, {"id": 126, "year": 2011, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2011-第32题-题目\n\n\n\n

有两个并发执行的进程 P1 和 P2,共享初值为 1 的变量 x。P1 对 x 加 1,P2 对 x 减 1。加 1 和减 1 操作的指令序列分别如下所示。

\n

两个操作完成后,x 的值( )。

\n
A.可能为 -1 或 3
\n
B.只能为 1
\n
C.可能为 0、1 或 2
\n
D.可能为 -1、0、1 或 2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第32题-解析\n\n\n\n

将\nP1​\n中 3 条语句依次编号为 1,2,3;\nP2​\n中 3 条语句依次编号为 4,5,6。依次执行 1,2,3,4,5,6 得结果 1,依次执行 1,2,4,5,6,3 得结果 2,执行 4,5,1,2,3,6 得结果 0。因此结果 -1 不可能得出。
\n\n\n\n\n", "difficulty": 1}, {"id": 127, "year": 2011, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第33题-题目\n\n\n\n

TCP/IP 参考模型的网络层提供的是( )。

\n
A.无连接不可靠的数据报服务
\n
B.无连接可靠的数据报服务
\n
C.有连接不可靠的虚电路服务
\n
D.有连接可靠的虚电路服务
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第33题-解析\n\n\n\n

TCP/IP 的网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。考查 IP\n首部,如果是面向连接的,那么应有用于建立连接的字段,但是没有;如果提供可靠的服务,那\n么至少应有序号和校验 和两个字段,但是 IP 分组头中也没有(IP 首部中只是首部校验和)。通常\n有连 接、可靠 的应用是由运输层的 TCP 实现的。
\n\n\n\n\n", "difficulty": 1}, {"id": 128, "year": 2011, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第34题-题目\n\n\n\n

若某通信链路的数据传输速率为 2400 bps,采用 4 相位调制,则该链路的波特率是( )。

\n
A.600 波特
\n
B.1200 波特
\n
C.4800 波特
\n
D.9600 波特
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第34题-解析\n\n\n\n

波特率 B 与数据传输率 C 的关系:\nC=Blog2​N\n,\nN\n为一个码元所取的离散值个数。采用\n4\n种相位,也即可以表示\n4\n种变化,故一个码元可携带\nlog2​4=2\nbit 信息,则该链路的波特率 = 比特率/2 = 1200 波特。
\n\n\n\n\n", "difficulty": 1}, {"id": 129, "year": 2011, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第35题-题目\n\n\n\n

数据链路层采用选择重传协议 (SR) 传输数据,发送方已发送了 0~3 号数据帧,现已收到 1 号帧的确认,而 0、2 号帧依次超时,则此时需要重传的帧数是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第35题-解析\n\n\n\n

在 选择性重传 中,接收方逐个确认正确接收的分组,不管接收到的分组是否有序,只要正确接收就发送选择 ACK 分组进行确认。因此选择重传协议中的 ACK 分组不再具有累积确认的作用,要特别注意其与 GBN 协议的区别。本题中只收到 1 号帧的确认,0、2 号帧超时,由于对于1 号帧的确认不具累积确认的作用,因此发送方认为接收方没有收到 0、2 号帧,于是重传这两帧。因为 3 号帧计时器并无超时,所以暂时不用重传 3 号帧。
\n\n\n\n\n", "difficulty": 1}, {"id": 130, "year": 2011, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第36题-题目\n\n\n\n

下列选项中,对正确接收到的数据帧进行确认的 MAC 协议是( )。

\n
A.CSMA
\n
B.CDMA
\n
C.CSMA/CD
\n
D.CSMA/CA
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第36题-解析\n\n\n\n

CSMA/CA 协议 是无线局域网标准 802.11 中的协议,它在 CSMA 的基础上增加了冲突避免的功能。ACK 帧是 CSMA/CA 避免冲突的机制之一,也就是说,只有当发送方收到接收方发回的 ACK 帧后才确认发出的数据帧已正确到达目的地。
\n\n\n\n\n", "difficulty": 1}, {"id": 131, "year": 2011, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第37题-题目\n\n\n\n

某网络拓扑如下图所示,路由器 R1 只有到达子网 192.168.1.0/24 的路由。为使 R1 可以将 IP 分组正确地路由到图中所有子网,则在 R1 中需要增加的一条路由(目的网络,子网掩码,下一跳)是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
192.168.1.0/24
192.168.2.0/25
192.168.2.128/25
R1
192.168.1.1
192.168.1.2
R2
192.168.2.1
192.168.2.130
\n
A.192.168.2.0,255.255.255.128,192.168.1.1
\n
B.192.168.2.0,255.255.255.0,192.168.1.1
\n
C.192.168.2.0,255.255.255.128,192.168.1.2
\n
D.192.168.2.0,255.255.255.0,192.168.1.2
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第37题-解析\n\n\n\n

要使 R1 能够正确将分组路由到所有子网,则 R1 中需要有到 192.168.2.0/25 和 192.168.2.128/25 的路由,分别转换成二进制如下:

192.168.2.0: 11000000 10101000 00000010 00000000

192.168.2.128: 11000000 10101000 00000010 10000000

前 24 位都是相同的,于是可以 聚合 成超网 192.168.2.0/24, 子网掩码为前 24 位,即 255.255.255.0。下 一跳是与 R1 直接相连的 R2 的地址,因此是 192.168.1.2。

\n\n\n\n\n", "difficulty": 1}, {"id": 132, "year": 2011, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第38题-题目\n\n\n\n

在子网 192.168.4.0/30 中,能接收目的地址为 192.168.4.3 的 IP 分组的最大主机数是( )。

\n
A.0
\n
B.1
\n
C.2
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第38题-解析\n\n\n\n

首先分析 192.168.4.0/30 这个网络,主机号只占 2 位,地址范围为 192.168.4.0-192.168.4.3,主机号全 1 时,即 192.168.4.3 是广播地址,主机号全 0 表示本网络本身,不作为主机地址使用,因此可容纳 4-2=2 个 主机。
\n\n\n\n\n", "difficulty": 1}, {"id": 133, "year": 2011, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第39题-题目\n\n\n\n

主机甲向主机乙发送一个 (SYN=1, seq=11220) 的 TCP 段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是

\n
A.(SYN=0, ACK=0, seq=11221, ack=11221)
\n
B.(SYN=1, ACK=1, seq=11220, ack=11220)
\n
C.(SYN=1, ACK=1, seq=11221, ack=11221)
\n
D.(SYN=0, ACK=0, seq=11220, ack=11220)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第39题-解析\n\n\n\n

本题考查三次握手,在确认报文段中,同步位 SYN 和确认位 ACK 必须都是 1;返回的确认号 seq 是甲发送的初始序号 seq=11220 加 1,即 ack= 11221;同时乙也要选择并消耗一个初始序号 seq,seq 值由乙的TCP 进程任意给出,它与确认号、请求报文段的序号没有任何关系。
\n\n\n\n\n", "difficulty": 1}, {"id": 134, "year": 2011, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2011-第40题-题目\n\n\n\n

主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300 字节、400 字节和 500 字节的有效载荷,第 3 个段的序号为 900。若主机乙仅正确接收到第 1 和第 3 个段,则主机乙发送给主机甲的确认序号是

\n
A.300
\n
B.500
\n
C.1200
\n
D.1400
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第40题-解析\n\n\n\n

TCP 首部的序号字段是指本报文段数据部分的第一个字节的序号,而确认号是期待收到对方下一个报文段的第一个字节的序号。第三个段的序号为 900,则第二个段的序号为 900-400=500,现在主机乙期待收到第二个段,故发给甲的确认号是 500。
\n\n\n\n\n", "difficulty": 1}, {"id": 135, "year": 2011, "index": 41, "type": 3, "typeName": "算法题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第41题-题目\n\n\n\n

已知有 6 个顶点(顶点编号为 0~5)的有向带权图 G ,其邻接矩阵 A 为上三角矩阵,按行为主序(行优先)保存在如下的一维数组中。

\n
\n\n\n\n \n 408真题系统\n \n\n
4
6
∞
∞
∞
5
∞
∞
∞
4
3
∞
∞
3
3
\n

要求:

\n

(1) 写出图 G 的邻接矩阵 A 。

\n

(2) 画出有向带权图 G 。

\n

(3) 求图 G 的关键路径,并计算该关键路径的长度。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第41题-解析\n\n\n\n

1)上三角矩阵 A[6][6] 中,第 1 行至第 5 行主对角线上方的元素个数分别为 5, 4, 3, 2, 1,\n由此可以画出压缩存储数组中的元素所属行的情况,如下图所示。

\n\n
4
6
∞
∞
∞
5
∞
∞
∞
4
3
∞
∞
3
3
第1行
第2行
第4行
第3行
第5行

用“平移”的思想,将前 5 个、后 4 个、后 3 个、后 2 个、后 1 个元素,分别移动到矩阵对\n角线 (“0”) 右边的行上。图 G 的邻接矩阵 A 如下所示。

A=​0∞∞∞∞∞​40∞∞∞∞​650∞∞∞​∞∞40∞∞​∞∞3∞0∞​∞∞∞330​​

2)据上面的邻接矩阵,画出有向带权图 G, 如下图所示。

\n\n
0
1
2
3
4
5
4
6
5
4
3
3
3

(3) 按照算法,先计算各个事件的最早发生时间,计算过程如下:

ve(0)=0\n;

ve(1)=ve(0)+a0→1​=4\n;

ve(2)=max(ve(0)+a0→1​,ve(1)+a1→2​)=max(6,4+5)=9\n;

ve(3)=ve(2)+a2→3​=9+4=13\n;

ve(4)=ve(2)+a2→4​=9+3=12\n;

ve(5)=max(ve(3)+a3→5​,ve(4)+a4→5​)=max(16,15)=16\n;

接下来求各个时间的最迟发生时间,计算过程如下:

vl(5)=ve(5)=16\n;

vl(4)=vl(5)−a4→5​=16−3=13\n;

vl(3)=vl(5)−a3→5​=16−3=13\n;

vl(2)=min(vl(3)−a2→3​,vl(4)−a2→4​)=min(9,10)=9\n;

vl(1)=vl(2)−a1→2​=4\n;

vl(0)=min(vl(2)−a0→2​,vl(1)−a0→1​)=min(3,0)=0\n;

即 ve() 和 vl() 数组如下表所示。

i012345
ve(i)049131216
vl(i)049131316

接下来计算所有活动的最早和最迟发生时间 e() 和 l():

e(a0→1​)=e(a0→2​)=ve(0)=0\n;

e(a1→2​)=ve(1)=4\n;

e(a2→3​)=e(a2→4​)=ve(2)=9\n;

e(a3→5​)=ve(3)=13\n;

e(a4→5​)=ve(4)=12\n;

l(a4→5​)=vl(5)−a4→5​=16−3=13\n;

l(a3→5​)=vl(5)−a3→5​=16−3=13\n;

l(a2→4​)=vl(4)−a2→4​=13−3=10\n;

l(a2→3​)=vl(3)−a2→3​=13−4=9\n;

l(a1→2​)=vl(2)−a1→2​=9−5=4\n;

l(a0→2​)=vl(2)−a0→2​=9−6=3\n;

l(a0→1​)=vl(1)−a0→1​=4−4=0\n;

e() 和 l() 数组与它们的差值如下表所示。

a0→1​a0→2​a1→2​a2→3​a2→4​a3→5​a4→5​
e()004991312
l()0349101313
l-e0300101

满足 l() - e() = 0 的路径就是关键路径,所以关键路径为\na0→1​\n、\na1→2​\n、\na2→3​\n、\na3→5​\n,如下图所示(粗线表示),长度为\n4+5+4+3=16\n。

\n\n
0
1
2
3
4
5
4
6
5
4
3
3
3
\n\n\n\n\n", "difficulty": 1}, {"id": 136, "year": 2011, "index": 42, "type": 2, "typeName": "应用题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n\n2011-第42题-题目\n\n\n\n

一个长度为 L(L ≥ 1) 的升序序列 S ,处在第 \n⌈L/2⌉\n 个位置的数称为 S 的中位数。例如,若序列 S1 = (11,13,15,17,19),则 S1 的中位数是 15 。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列 S2 = (2,4,6,8,20),则 S1 和 S2 的中位数是 11 。现有两个等长的升序序列 A 和 B ,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列 A 和 B 的中位数。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第42题-解析\n\n\n\n

(1) 求两个序列 A 和 B 的中位数最简单的办法就是将两个升序序列进行归并排序,然后求其中位数。这种解法虽可求解,但在时间和空间两方面都不大符合高效的要求,但也能获得部分分值。

根据题目分析,分别求两个升序序列 A 和 B 的中位数,设为 a 和 b。

① 若\na=b\n,则\na\n或\nb\n即为所求的中位数。

原因:容易验证,如果将两个序列归并排序,则最终序列中,排在子序列 b 前边的元素为先前两个序列中排在 a 和 b 前边的元素;排在子序列 ab 后边的元素为先前两个序列中排在 a 和 b后边的元素。所以子序列 ab 一定位于最终序列的中间,又因为 a=b,显然 a 就是中位数。

②否则(假设\na<b\n),中位数只能出现 (a,b) 范围内。

原因:同样可以用归并排序后的序列来验证,归并排序后必然有形如\n⋯a⋯b⋯\n的序列出现,中位数必出现在 (a,b) 之间。因此可以做如下处理:舍弃 a 所在序列 A 的较小一半,同时舍弃 b 所在序列 B 的较大一半。在保留两个升序序列中求出新的中位数 a 和 b,重复上述过程,直到两个序列中只含一个元素时为止,则较小者即为所求的中位数。每次总的元素个数变为原来的一半。

算法的基本设计思想如下。

分别求出序列 A 和 B 的中位数,设为 a 和 b,求序列 A 和 B 的中位数过程如下:

① 若\na=b\n,则 a 或 b 即为所求中位数,算法结束。

② 若\na<b\n,则舍弃序列 A 中较小的一半,同时舍弃序列 B 中较大的一半,要求舍弃的长度\n相等。

③ 若\na>b\n,则舍弃序列 A 中较大的一半,同时舍弃序列 B 中较小的一半,要求舍弃的长度\n相等。

在保留的两个升序序列中,重复过程①、②、③,直到两个序列中只含一个元素时为止,较小者即为所求的中位数。

2)算法实现

int M_Search(int A[], int B[], int n) {\n    int s1 = 0, d1 = n - 1, m1, s2 = 1, d2 = n - 1, m2;\n    // 分别表示序列 A 和 B 的首位、末位和中位数\n    while (s1 != d1 || s2 != d2) {\n        m1 = (s1 + d1) / 2;\n        m2 = (s2 + d2) / 2;\n        if (A[m1] == B[m2])\n            return A[m1];     // 满足条件 1\n        if (A[m1] < B[m2]) {  // 满足条件 2\n            if ((s1 + d1) % 2 == 0) {\n                // 若元素个数为奇数\n                s1 = m1;       // 舍弃 A 中间点以后的部分,且保留中间点\n                d2 = m2;       // 舍弃 B 中间点以前的部分,且保留中间点\n            } else {\n                // 元素个数为偶数\n                s1 = m1 + 1;   // 舍弃 A 中间点及中间点以后的部分\n                d2 = m2;       // 舍弃 B 中间点以前部分,且保留中间点\n            }\n        } else {  // 满足条件 3\n            if ((s1 + d1) % 2 == 0) {\n                // 若元素个数为奇数\n                d1 = m1;       // 舍弃 A 中间点以前的部分,且保留中间点\n                s2 = m2;       // 舍弃 B 中间点以后的部分,且保留中间点\n            } else {\n                // 元素个数为偶数\n                d1 = m1 + 1;   // 舍弃 A 中间点及中间点以前部分\n                s2 = m2;       // 舍弃 B 中间点以后的部分,且保留中间点\n            }\n        }\n    }\n    return A[s1] < B[s2] ? A[s1] : B[s2];\n}\n

3)时间复杂度 O(n),空间复杂度 O(1)。

\n\n\n\n\n", "difficulty": 1}, {"id": 137, "year": 2011, "index": 43, "type": 2, "typeName": "应用题", "score": 11, "subject": "computer-network", "question": "\n\n\n\n\n\n2011-第43题-题目\n\n\n\n

假定在一个 8 位字长的计算机中运行如下 C 程序段:

\n
unsigned int x=134;\nunsigned int y=246;\nint m=x;\nint n=y;\nunsigned int z1=x-y;\nunsigned int z2=x+y;\nint k1=m-n;\nint k2=m+n;\n
\n

若编译器编译时将 8 个 8 位寄存器 R1~R8 分别分配给变量 x、y、m、n、z1、z2、k1 和 k2。请回答下列问题。(提示:带符号整数用补码表示)

\n

(1) 执行上述程序段后,寄存器 R1、R5 和 R6 的内容分别是什么(用十六进制表示)?

\n

(2) 执行上述程序段后,变量 m 和 k1 的值分别是多少(用十进制表示)?

\n

(3) 上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。

\n

(4) 计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第43题-解析\n\n\n\n

1)134 = 128 + 6 = 1000 0110B,所以 x 的机器数为 1000 0110B,故 R1 的内容为 86H。

246 = 255 - 9 = 1111 0110B,所以 y 的机器数为 1111 0110B。

x-y: 1000 0110 + 0000 1010 = (0)1001 0000,括弧中为加法器的进位,故 R5 的内容为 90H。

x+y: 1000 0110 + 1111 0110 = (1)0111 1100,括弧中为加法器的进位,故 R6 的内容为 7CH。

2)m 的机器数与 x 的机器数相同,皆为 86H=1000 0110B,解释为带符号整数 m(用补码\n表示)时,其值为 -1111010B = -122。

m-n 的机器数与 x-y 的机器数相同,皆为 90H=1001 0000B,解释为带符号整数 k1(用\n补码表示)时,其值为 -1110000B = -112。

3)能。n 位加法器实现的是模\n2n\n无符号整数加法运算。

对于无符号整数 a 和 b,a + b 可以直接用加法器实现,而 a - b 可以通过 a 加上 b 的补数来实现,即 a - b 等价于 a 加上 -b 的补码,结果对 2 的 n 次方取模。因此,n 位无符号整数的加法和减法运算都可以通过 n 位加法器实现。

由于带符号整数使用补码表示,其加减法遵循的公式是:a + b 的补码等于 a 的补码加上 b 的补码,结果对 2 的 n 次方取模;同样,a - b 的补码等于 a 的补码加上 -b 的补码,结果也对 2 的 n 次方取模。因此,n 位带符号整数的加减运算也都可以通过 n 位加法器完成。

4)带符号整数加/减运算的溢出判断规则为:若加法器的两个输入端(加法)的符号相同,且不同于输出端(和)的符号,则结果溢出,或加法器完成加法操作时,若次高位的进位和最高位的进位不同,则结果溢出。

最后一条语句执行时会发生溢出。因为 10000110+11110110=(1)01111100,括弧中为加法器的进位,根据上述溢出判断规则,可知结果溢出。或因为 2 个带符号整数均为负数,它们相加之后,结果小于 8 位二进制所能表示的最小负数。

\n\n\n\n\n", "difficulty": 1}, {"id": 138, "year": 2011, "index": 44, "type": 2, "typeName": "应用题", "score": 12, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第44题-题目\n\n\n\n

某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物理)地址空间大小为 1MB,页面大小为 4KB:Cache 采用直接映射方式,共 8 行:主存与 Cache 之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容分别如题 44-a 图、题 44-b 图所示,图中页框号及标记字段的内容为十六进制形式。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
06
· · ·
0
1
04
· · ·
1
1
15
· · ·
2
1
02
· · ·
3
0
—
· · ·
4
1
2B
· · ·
5
0
—
· · ·
6
1
32
· · ·
7
虚页号
有效位
页框号
· · ·
44-a 图  页表的部分内容
1
020
· · ·
0
0
—
· · ·
1
1
01D
· · ·
2
1
105
· · ·
3
1
064
· · ·
4
1
01D
· · ·
5
0
—
· · ·
6
1
27A
· · ·
7
行号
有效位
标记
· · ·
44-b 图  cache 的部分内容
\n

请回答下列问题∶

\n

(1) 虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?

\n

(2) 使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。

\n

(3) 虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。

\n

(4) 假定为该机配置一个 4 路组相连的 TLB,该 TLB 共可存放 8 个页表项,若其当前内容(十六进制)如题 44-c 图所示,则此时虚拟地址 024BACH 所在的页面是否在主存中?要求说明理由。

\n
\n\n
0
0
—
—
—
—
1
1
001
012
15
1F
1
1
013
008
2D
7E
0
0
—
—
—
—
有效位
标记
页框号
有效位
标记
页框号
组号
0
1
44-c 图  TLB 的部分内容
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第44题-解析\n\n\n\n

1)存储器按字节编址,虚拟地址空间大小为 16B=24B,故虚拟地址为 24 位;页面大小为\n4KB=212B\n,故高 12 位为虚页号。主存地址空间大小为\n1MB=22B\n,故物理地址为 20 位;由于页内地址为 12 位,故高 8 位为页框号。

2)由于 Cache 采用直接映射方式,所以物理地址各字段的划分如下。

| Tag 标记 | Cache 行号 | 块内偏移 |

块大小为 32B,所以块内偏移为 5 位;Cache 共 8 行,故 Cache 行号为 3 位,标记字段为 20-5-3=12 位。

3)虚拟地址 001C60H 的前 12 位为虚页号,即 001H,查看 001H 处的页表项,其对应的效位为 1,故虚拟地址 001C60H 所在的页面在主存中。页表 001H 处的页框号为 04H,与页内偏移(虚拟地址后 12 位)拼接成物理地址为 04C60H.物理地址 04C60H=00000100110001100000B,主存块只能映射到 Cache 的第 3 行(即第 011B 行),由于该行的有效位=1,标记(值为 105H) ≠ 04CH(物理地址高 12 位),故不命中。

4)由于 TLB 采用四路组相联,故 TLB 被分为 8/4=2 个组,因此虚页号中高 11 位为 TLB 标记、最低 1 位为 TLB 组号。虚拟地址 024BACH=000000100100101110101100B,虚页号为 000000100100B,TLB 标记为 00000010010B(即 012H),TLB 组号为 0B,因此,该虚拟地址所对应物理页面只可能映射到 TLB 的第 0 组。组 0 中存在有效位=1、标记=012H 的项,因此访问 TLB 命中,即虚拟地址 024BACH 所在的页面在主存中。

\n\n\n\n\n", "difficulty": 1}, {"id": 139, "year": 2011, "index": 45, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第45题-题目\n\n\n\n

某银行提供 1 个服务窗口和 10 个顾客等待座位。顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:

\n

请添加必要的信号量和 P、V(或 wait()、signal())操作实现上述过程的互斥和同步。要求写出完整的过程,说明信号量的含义并赋初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第45题-解析\n\n\n\n

1)互斥资源:取号机(一次只一位顾客领号),因此设一个互斥信号量 mutex。

2)同步问题:顾客需要获得空座位等待叫号,当营业员空闲时,将选取一位顾客并为其服务。空座位的有、无影响等待顾客数量,顾客的有、无决定了营业员是否能开始服务,故分别设置信号量 empty 和 full 来实现这一同步关系。另外,顾客获得空座位后,需要等待叫号和被服务。这样,顾客与营业员就服务何时开始又构成了一个同步关系,定义信号量 service 来完成这一同步过程。

semaphore empty   = 10;       // 空座位的数量\nsemaphore mutex   = 1;        // 互斥使用取号机\nsemaphore full    = 0;        // 已占座位的数量\nsemaphore service = 0;        // 等待叫号\n\nprocess 顾客 i {\n    P(empty);                 // 等空位\n    P(mutex);                 // 申请使用取号机\n    从取号机上取号;\n    V(mutex);                 // 取号完毕\n    V(fu11);                  // 通知营业员有新顾客\n    P(service);               // 等待营业员叫号\n    接受服务;\n}\n\nprocess 营业员 {\n    while(True) (\n        P(fu11);              // 没有顾客则休息\n        叫号;\n        V(empty);             // 离开座位\n        V(service);           // 叫号\n        为顾客服务;\n    }\n}\n
\n\n\n\n\n", "difficulty": 1}, {"id": 140, "year": 2011, "index": 46, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第46题-题目\n\n\n\n

某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题∶

\n

(1) 在连续、链式、索引二种文件的数据块组织方式中。哪种更合适?要求说明理由。为定位文件数据块,需要在 FCB 中设计哪些相关描述字段?

\n

(2) 为快速找到文件,对于 FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第46题-解析\n\n\n\n

1)在磁盘中连续存放(采取连续结构),磁盘寻道时间更短,文件随机访问效率更高;在 FCB 中加入的字段为:<起始块号,块数> 或者 <起始块号,结束块号>。

2)将所有的 FCB 集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问 FCB 对应的块,可减少磁头移动和磁盘 I/O 访问次数。

\n\n\n\n\n", "difficulty": 1}, {"id": 141, "year": 2011, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2011-第47题-题目\n\n\n\n

某主机的 MAC 地址为 00-15-C5-C1-5E-28,IP 地址为 10.2.128.100(私有地址)。题 47-a 图是网络拓扑,题 47-b 图是该主机进行 Web 请求的 1 个以太网数据帧前 80 个字节的十六进制及 ASCII 码内容。

\n
\n\n\n\n \n 408真题系统\n \n\n
确认号
头部长度
服务类型
总长度
标识
标志
片偏移
生存时间(TTL)
协议
头部校验和
源 IP 地址
目的 IP 地址
47-d 图  IP 分组头结构
0
8
16
24
32
位
目的 MAC 地址
源 MAC 地址
类型
数  据
CRC
6B
6B
2B
46~1500B
4B
47-c 图  以太网帧结构
00
21
27
21
51
ee
00
15
c5
c1
5e
28
08
00
45
00
01
ef
11
3b
40
00
80
06
ba
9d
0a
02
80
64
40
aa
62
20
04
ff
00
50
e0
e2
00
fa
7b
f9
f8
05
50
18
fa
f0
1a
c4
00
00
47
45
54
20
2f
72
66
63
2e
68
74
6d
6c
20
48
54
54
50
2f
31
2e
31
0d
0a
41
63
0000
0010
0020
0030
0040
.!!Q.. ..^(..E.
...:@... .....d@.
b ...P.. ..{...P.
......GET /rfc.h
tmI HTTP /1.1..Ac
47-b 图  以太网数据帧(前 80B)
Internet
10.2.128.100
10.2.128.1
101.12.123.15
MTU = 1500B
47-a 图 网络拓扑
\n

请参考图中的数据回答以下问题。

\n

(1) Web 服务器的 IP 地址是什么?该主机的默认网关的 MAC 地址是什么?

\n

(2) 该主机在构造题 47-b 图的数据帧时,使用什么协议确定目的 MAC 地址?封装该协议请求报文的以太网帧的目的 MAC 地址是什么?

\n

(3) 假设 HTTP/1.1 协议以持续的非流水线方式工作,一次请求 - 响应时间为 RTT,rfc.html 页面引用了 5 个 JPEG 小图像,则从发出题 47-b 图中的 Web 请求开始到浏览器收到全部内容为止,需要多少个 RTT?

\n

(4) 该帧所封装的 IP 分组经过路由器 R 转发时,需修改 IP 分组头中的哪些字段?

\n

注意:以太网数据帧结构和 IP 分组头结构分别如题 47-c 图、题 47-d 图所示。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2011-第47题-解析\n\n\n\n

1)以太网帧的数据部分是 IP 数据报,只要数出相应字段所在的字节即可。由图可知以太网帧头部有 6+6+2=14 字节,IP 数据报首部的目的 IP 地址字段前有 4×4=16 字节,从帧的第 1 字节开始数 14+16=30 字节,得目的 IP 地址 40.aa.62.20(十六进制),转换成十进制为 64.170.98.32。可知以太网帧的前 6 字节 00-21-27-21-51-ee 是的 MAC 地址,即为主机的默认网关 10.2.128.1 端口的 MAC 地址。

2)ARP 协议 于解决 IP 地址到 MAC 地址的映射问题。主机的 ARP 进程在本以太网以广播的形式发送 ARP 请求分组,在以太网上广播时,以太网帧的目的地址为全 1,即 FF-FF-FF-FF-FF-FF。

3)HTTP/1.1 协议以持续的 非流水线 方式工作时,服务器在发送响应后仍然在一段时间内保持这段连接,客户机在收到前一个请求的响应后才能发出下一个请求。第一个 RTT 用于请求 Web 页面,客户机收到第一个请求的响应后(还有五个请求未发送),每访问一次对象就用去一个 RTT。故共需 1+5=6 个 RTT 后浏览器收到全部内容。

4)源 IP 地址 0a.02.80.64 改为 65.0c.7b.0f;生存时间(TTL)减 1;校验和字段重新计算。私有地址和 Internet 的主机通信时,须由 NAT 路由器进行网络地址转换,把 IP 数据报的源 IP 地址(本题为私有地址 10.2.128.100)转换为 NAT 路由器的一个全球 IP 地址(本题为 101.12.123.15)因此,源 IP 地址字段 0a 02 80 64 变为 65 0c 7b 0f。IP 数据报每经过一个路由器,生存时间 TTL 值就减 1,并重新计算首部校验和。若 IP 分组的长度超过输出链路的 MTU,则总长度字段、标志字段、片偏移字段也要发生变化。

注意:题 47-b 图中每行前 4bit 是数据帧的字节计数,不属于以太网数据帧的内容。

【评分说明】若考生解答时将所有 IP 头中的字段进行罗列,不给分,其他情况的情给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 142, "year": 2012, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第1题-题目\n\n\n\n

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

\n
int fact(int n) {\n    if (n <= 1) return 1;\n    return n * fact(n - 1);\n}\n
\n
A.O(log2​n))
\n
B.O(n)
\n
C.O(nlog2​n))
\n
D.O(n2)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第1题-解析\n\n\n\n

本算法是一个递归运算,即算法中出现了调用自身的情形。递归的边界条件是\n≤1\n,每调用一次 fact(),传入该层 fact() 的参数值减 1。采用递归式来表示时间复杂度有

Tn​={O(1),n≤1 T(n−1)+1,n>1​

则\nT(n)=T(n−1)+1=T(n−2)+2=⋯=T(1)+n−1=O(n)\n,故时间复杂度为\nO(n)\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 143, "year": 2012, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第2题-题目\n\n\n\n

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

\n
A.5
\n
B.7
\n
C.8
\n
D.11
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第2题-解析\n\n\n\n

表达式求值是栈的典型应用。中缀表达式不仅依赖千运算符的优先级,而且要处理括号。后缀表达式的运算符在表达式的后面且没有括号,其形式已经包含了运算符的优先级。所以从 中序转后序 需要用运算符进行处理,使其包含运算符优先级的信息,从而转换为后缀表达式的形式。
\n\n\n\n\n", "difficulty": 1}, {"id": 144, "year": 2012, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第3题-题目\n\n\n\n

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

\n
A.只有 e
\n
B.有 e、b
\n
C.有 e、c
\n
D.无法确定
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第3题-解析\n\n\n\n

本题考察 双序列组合重建二叉树,前序序列和后序序列不能唯一确定一棵二叉树,但可以确定二叉树中结点的祖先关系:当两个结点的前序序列为 XY 与后序序列为 YX 时,则 X 为 Y 的祖先。考虑前序序列 a,e,b,d,c、后序序列 b,c,d,e,a 且,可知 a 为根结点,e 为 a 的孩子结点。此外,a 的孩子结点的前序序列 e,b,d,c、后序序列 b,c,d,e,可知 e 是 bcd 的祖先,故根结点的孩子结点只有 e。故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 145, "year": 2012, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第4题-题目\n\n\n\n

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

\n
A.10
\n
B.20
\n
C.32
\n
D.33
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2012-第4题-解析\r\n\r\n\r\n\r\n

所有非叶结点的平衡因子均为 1,即平衡二叉树满足平衡的最少结点情况,如下图所示。

\"\"

对于高度为 N、左右子树的高度分别为 N-1 和 N-2、所有非叶结点的平衡因子均为 1 的平衡二叉树,总结点数的公式为:\r\nCN​=CN−1​+CN−2​+1\r\n,\r\nC1​=1\r\n,\r\nC2​=2\r\n,\r\nC3​=2+1+1=4\r\n,可推出\r\nC6​=20\r\n。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 146, "year": 2012, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第5题-题目\n\n\n\n

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

\n
A.O(n)
\n
B.O(e)
\n
C.O(n+e)
\n
D.O(n×e)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第5题-解析\n\n\n\n

广度优先遍历 需要借助队列实现。邻接表的结构包括:顶点表;边表(有向图为出边表)。当采用邻接表存储方式时,在对图进行广度优先遍历时每个顶点均需入队一次(顶点表遍历),故时间复杂度为\nO(n)\n,在搜索所有顶点的邻接点的过程中,每条边至少访问一次(出边表遍历),故时间复杂度为\nO(e)\n,算法总的时间复杂度为\nO(n+e)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 147, "year": 2012, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第6题-题目\n\n\n\n

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

\n
A.存在,且唯一
\n
B.存在,且不唯一
\n
C.存在,可能不唯一
\n
D.无法确定是否存在
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第6题-解析\n\n\n\n

对角线以下元素均为零,表明只有顶点\ni\n到顶点\nj\n(\ni<j\n) 可能有边,而顶点\nj\n到顶点\ni\n一定没有边,即有向图是一个无环图,因此一定存在拓扑序列。对于拓扑序列是否唯一,试举一例:设有向图的邻接矩阵

​0 0 0​100​100​​

则存在两个拓扑序列,因此该图存在可能不唯一的拓扑序列。

结论:对于任一有向图,如果它的邻接矩阵中对角线以下(或以上)的元素均为零,则存在拓扑序列(可能不唯一)。反正,若图存在拓扑序列,却不一定能满足邻接矩阵中主对角线以下的元素均为零,但是可以通过适当地调整结点编号,使其邻接矩阵满足前述性质。

\n\n\n\n\n", "difficulty": 2}, {"id": 148, "year": 2012, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第7题-题目\n\n\n\n

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

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
c
d
e
f
2
1
5
3
3
4
1
1
1
4
\n
A.d, e, f
\n
B.e, d, f
\n
C.f, d, e
\n
D.f, e, d
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第7题-解析\n\n\n\n

从 a 到各顶点的最短路径的求解过程:

顶点第 1 趟第 2 趟第 3 趟第 4 趟第 5 趟
b(a,b)2
c(a,c)5(a,b,c)3
d∞(a,b,d)5(a,b,d)5(a,b,d)5
e∞∞(a,b,c,f)4
f∞∞(a,b,c,e)7(a,b,c,e)7(a,b,d,e)6
集合 S{a,b}{a,b,c}{a,b,c,f}{a,b,c,f,d}{a,b,c,f,d,e}

后续目标顶点依次为 f, d, e。

【排除法】对于 A,若下一个顶点为 d,路径 a,b,d 的长度5,而 a,b,c,f 的长度仅为4,显然错误。同理可以排除B。将 f 加入集合 S 后,采用上述的方法也可以排除 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 149, "year": 2012, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第8题-题目\n\n\n\n

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

\n

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

\n

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

\n

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

\n

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

\n
A.仅Ⅰ
\n
B.仅Ⅱ
\n
C.仅Ⅰ、Ⅲ
\n
D.仅Ⅱ、Ⅳ
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第8题-解析\n\n\n\n

对于 I,最小生成树 的树形可能不唯一(这是因为可能存在权值相同的边),但是代价一定是唯一的,I 正确。对于Ⅱ,如果权值最小的边有多条并且构成环状,则总有权值最小的边将不出现在某棵最小生成树中,Ⅱ错误。对于Ⅲ,设 N 个结点构成环,N-1 条边权值相等,则从不同的顶点开始普里姆算法会得到 N-1 中不同的最小生成树,Ⅱ 错误。对于 V,当最小生成树唯一时(各边的权值不同),Prim 算法和 Kruskal 算法得到的最小生成树相同,IV 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 150, "year": 2012, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第9题-题目\n\n\n\n

已知一棵 3 阶 B 树,如下图所示。删除关键字 78 得到一棵新 B 树,其最右叶结点中的关键字是()。

\n
\n\n\n\n \n 408真题系统\n \n\n
45
17   35
55   65
21
37
10
60   62
47
78
\n
A.60
\n
B.60, 62
\n
C.62, 65
\n
D.65
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第9题-解析\n\n\n\n

本题考察 B 树的 删除 操作。对于上图所示的 3 阶 B 树,被删关键字 78 所在结点在删除前的关键字个数 = 1 = ⌈3/2⌉-1,且其左兄弟结点的关键字个数 = 2 ≥ ⌈3/2⌉,属于“兄弟够借”的情况,则需把该结点的左兄弟结点中最大的关键字上移到双亲结点中,同时把双亲结点中大于上移关键字的关键字下移到要删除关键字的结点中,这样就达到了新的平衡,如下图所示。

\n\n
45
10
21
37
17
35
55
65
60
62
47
78
45
10
21
37
17
35
55
62
60
47
65
\n\n\n\n\n", "difficulty": 1}, {"id": 151, "year": 2012, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第10题-题目\n\n\n\n

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

\n

Ⅰ.简单选择排序

\n

Ⅱ.希尔排序

\n

Ⅲ.快速排序

\n

Ⅳ.堆排序

\n

Ⅴ.二路归并排序

\n
A.仅Ⅰ、Ⅲ、Ⅳ
\n
B.仅Ⅰ、Ⅲ、Ⅴ
\n
C.仅Ⅱ、Ⅲ、Ⅳ
\n
D.仅Ⅲ、Ⅳ、Ⅴ
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第10题-解析\n\n\n\n

本题考察不同 内部排序 算法的细节:

I、III、IV 正确,本题选择 A。

\n\n\n\n\n", "difficulty": 1}, {"id": 152, "year": 2012, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第11题-题目\n\n\n\n

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

\n
A.排序的总趟数
\n
B.元素的移动次数
\n
C.使用辅助空间的数量
\n
D.元素之间的比较次数
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第11题-解析\n\n\n\n

本题考察 插入排序,折半插入排序与直接插入排序是将待插入元素插入前面的有序子表,区别是:确定当前记录在前面有序子表中的位置时,直接插入排序是采用顺序查找法,而折半插入排序是采用折半查找法。排序的总趟数取决于元素个数\nn\n,两者都是\nn−1\n趟。元素的移动次数都取决于初试序列,两者相同。使用辅助空间的数量也都是 O(1)。折半插入排序的比较次数与序列初态无关,为\nO(nlog2​n)\n:直接插入排序的比较次数与序列初态有关,为\nO(n)∼O(n2)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 153, "year": 2012, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第12题-题目\n\n\n\n

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

\n
A.55s
\n
B.60s
\n
C.65s
\n
D.70s
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第12题-解析\n\n\n\n

程序 A 的运行时间为 100s,除去 CPU 时间 90s,剩余 10s 为 I/O 时间。CPU 提速后运行基准程序 A 所耗费的时间是 T = 90/1.5 + 10 = 70s。

【误区】CPU速度提高50%,则CPU时间减少一半,而误选A。

\n\n\n\n\n", "difficulty": 1}, {"id": 154, "year": 2012, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第13题-题目\n\n\n\n

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

\n
unsigned short x=65530;\nunsigned int y=x;\n
\n

得到 y 的机器数为( )。

\n
A.0000 7FFAH
\n
B.0000 FFFAH
\n
C.FFFF 7FFAH
\n
D.FFFF FFFAH
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第13题-解析\n\n\n\n

将一个 16 位 unsigned short 转换成 32 位形式的 unsigned int,因为都是无符号数,新表示形式的高位用 0 填充。16 位无符号整数所能表示的最大值为 65 5 35,其十六进制表示为 FFFFH,故 x 的十六进制表示为 FFFFH - 5H = FFFAH,所以 y 的十六进制表示为 0000 FFFAH。
\n\n\n\n\n", "difficulty": 1}, {"id": 155, "year": 2012, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第14题-题目\n\n\n\n

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

\n
A.2126−2103
\n
B.2127−2104
\n
C.2127−2103
\n
D.2128−2104
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第14题-解析\n\n\n\n

IEEE754 单精度浮点数 是尾数用采取隐藏位策略的原码表示,且阶码用移码(偏置值为\n127\n)表示的浮点数。规格化的短浮点数的真值为:\n(−1)S×1.m×2E−127\n,\nS\n为符号位,阶码\nE\n的取值为\n1∼254\n(8 位表示),尾数\nm\n为\n23\n位,共\n32\n位;故 float 类型能表示的最大整数是\n1.111⋯1×2254−127=2127×(2−2−23)=2128−2104\n,故选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 156, "year": 2012, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第15题-题目\n\n\n\n

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

\n
struct {\n    int a;\n    char b;\n    short c;\n} record;\n\nrecord.a=273;\n
\n

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

\n
A.0x00、0xC00D
\n
B.0x00、0xC00E
\n
C.0x11、0xC00D
\n
D.0x11、0xC00E
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第15题-解析\n\n\n\n

尽管 record 大小为 7 个字节(成员 a 有 4 个字节,成员 b 有 1 个字节,成员 c 有 2 个字节),\n由于数据按边界对齐方式存储,故 record 共占用 8 个字节。record.a 的十六进制\n表示为 0x00000111,由于采用小端方式存放数据,故地址 0xC008 中内容应为低字节 0x11;\nrecord.b 只占 1 个字节,后面的一个字节留空;record.c 占 2 个字节,故其地址为 0xC00E。各字\n节的存储分配如下图所示。

地址0xC0080xC0090xC00A0xC00B
内容record.a.(0x11)record.a.(0x01)record.a.(0x00)record.a.(0x00)
地址0xC00C0xC00D0xC00E0xC00F
内容record.b-record.crecord.c
\n\n\n\n\n", "difficulty": 2}, {"id": 157, "year": 2012, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第16题-题目\n\n\n\n

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

\n
A.信息可读可写,并且读、写速度一样快
\n
B.存储元由 MOS 管组成,是一种半导体存储器
\n
C.掉电后信息不丢失,是一种非易失性存储器
\n
D.采用随机访问方式,可替代计算机外部存储器
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第16题-解析\n\n\n\n

闪存 是 EEPROM 的进一步发展,可读可写,用 MOS 管的浮栅上有无电荷来存储信息。闪存依然是 ROM 的一种,写入时必须先擦除原有数据,故写的速度比读的速度要慢不少(硬件常识)。闪存是一种非易失性存储器,它采用随机访问方式。现在常见的 SSD 固态硬盘,即由Flash 芯片组成。
\n\n\n\n\n", "difficulty": 1}, {"id": 158, "year": 2012, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第17题-题目\n\n\n\n

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

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第17题-解析\n\n\n\n

地址映射采用 2 路组相联,则主存地址为 01、45、89 可映射到第 0 组 Cache 中,主存地址为 23、6~7 可映射到第 1 组 Cache 中。Cache 置换过程如下表所示。

走向0482068648
第0组块0044880084
块10488008*848*
第1组块222222
块322666*66

注:“_” 表示当前访问块,“*” 表示本次访问命中。

注意:在不同的《计算机组成原理》教材中,关于组相联映射的介绍并不相同。通常采用唐朔飞教材中的方式,但本题中采用的是蒋本珊教材中的方式。可以推断两次命题的老师应该不是同一位老师,这也给考生答题带来了困扰。

\n\n\n\n\n", "difficulty": 2}, {"id": 159, "year": 2012, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第18题-题目\n\n\n\n

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

\n
A.5 位
\n
B.6 位
\n
C.15 位
\n
D.33 位
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第18题-解析\n\n\n\n

字段直接编码方式 将微命令字段分成若干个小字段,互斥性微命令组合在同一字段中,相容性微命令分在不同字段中,每个字段还要留出一个状态,表示本字段不发出任何微命令。5 个互斥类分别包含 7、3、12、5 和 6 个微命令,需要 3、2、4、3 和 3 位,共 15 位。
\n\n\n\n\n", "difficulty": 1}, {"id": 160, "year": 2012, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第19题-题目\n\n\n\n

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

\n
A.20ns
\n
B.40ns
\n
C.50ns
\n
D.80ns
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第19题-解析\n\n\n\n

总线频率为 100 MHz,则时钟周期为 10ns。总线位宽与存储字长都是 32 位,故每一个时钟周期可传送一个 32 位存储字。猝发式发送 可以连续传送地址连续的数据,故总的传送时间为:传送地址 10ns,传送 128 位数据 40ns,共需 50ns。
\n\n\n\n\n", "difficulty": 2}, {"id": 161, "year": 2012, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第20题-题目\n\n\n\n

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

\n
A.可实现外设的即插即用和热插拔
\n
B.可通过级联方式连接多台外设
\n
C.是一种通信总线,可连接不同外设
\n
D.同时可传输 2 位数据,数据传输率高
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第20题-解析\n\n\n\n

USB(通用串行总线)的特点有:① 即插即用;② 热插拔;③ 有很强的连接能力,采用菊花链形式将众多外设连接起来;④ 有很好的可扩充性,一个 USB 控制器可扩充高达 127 个外部USB 设备;⑤ 高速传输,速度可达 480Mbps。所以 A、B、C 选项都符合 USB 总线的特点。对于 D, USB 是串行总线,不能同时传输 2 位数据。
\n\n\n\n\n", "difficulty": 1}, {"id": 162, "year": 2012, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第21题-题目\n\n\n\n

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

\n

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

\n

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

\n

Ⅲ. 中断类型号

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅲ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第21题-解析\n\n\n\n

根据 总线组成,I/O 接口与 CPU 之间的 I/O 总线有数据线、控制线和地址线。控制线和地址线都是单向传输的,从 CPU 传送给 I/O 接口,而 I/O 接口中的命令字、状态字以及中断类型号均是由 I/O 接口发往 CPU 的,故只能通过 I/O 总线的数据线传输。
\n\n\n\n\n", "difficulty": 1}, {"id": 163, "year": 2012, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第22题-题目\n\n\n\n

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

\n

Ⅰ. 关中断

\n

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

\n

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

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅲ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第22题-解析\n\n\n\n

在响应 外部中断的过程 中,中断隐指令完成的操作包括:①关中断;②保护断点;③引出中断服务程序(形成中断服务程序入口地址并送 PC),所以只有 I、III 正确。Ⅱ 中的保存通用寄存器的内容是在进入中断服务程序后首先进行的操作。
\n\n\n\n\n", "difficulty": 2}, {"id": 164, "year": 2012, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第23题-题目\n\n\n\n

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

\n
A.系统调用
\n
B.外部中断
\n
C.进程切换
\n
D.缺页
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第23题-解析\n\n\n\n

本题关键是对 “在用户态 发生”(与上题的 “执行” 区分)的理解。

对于 A,系统调用是操作系统提供给用户程序的接口,系统调用发生在用户态,被调用程序在核心态下执行。

对于 B,外部中断是用户态到核心态的 “门”,也发生在用户态,在核心态完成中断过程。

对于 C,进程切换属于系统调用执行过程中的事件,只能发生在核心态。

对于 D,缺页产生后,在用户态发生缺页中断,然后进入核心态执行缺页中断服务程序。

\n\n\n\n\n", "difficulty": 1}, {"id": 165, "year": 2012, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第24题-题目\n\n\n\n

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

\n
A.程序计数器
\n
B.程序状态字寄存器
\n
C.通用数据寄存器
\n
D.通用地址寄存器
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第24题-解析\n\n\n\n

子程序调用只需保存程序断点,即该指令的下一条指令的地址;中断调用子程序不仅要保护断点(PC 的内容),而且要保护程序状态字寄存器的内容 PSW。在中断处理中,最重要的两个寄存器是 PC 和 PSWR。
\n\n\n\n\n", "difficulty": 1}, {"id": 166, "year": 2012, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第25题-题目\n\n\n\n

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

\n
A.虚拟存储只能基于连续分配技术
\n
B.虚拟存储只能基于非连续分配技术
\n
C.虚拟存储容量只受外存容量的限制
\n
D.虚拟存储容量只受内存容量的限制
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第25题-解析\n\n\n\n

在程序装入时,可以只将程序的一部分装入内存,而将其余部分留在外存,就可以自动程序执行。采用连续分配方式时,会使相当一部分内存空间都处于暂时或 “永久” 的空闲状态,造成内存资源的严重浪费,也无法从逻辑上扩大内存容量,因此虚拟内存的实现只能建立在离散分配的内存管理的基础上。有以下三种实现方式:①请求分页存储管理;②请求分段存储管理;③请求段页式存储管理。虚拟存储器容量既不受外存容量限制,也不受内存容量限制,而是由 CPU 的寻址范围决定的。
\n\n\n\n\n", "difficulty": 1}, {"id": 167, "year": 2012, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第26题-题目\n\n\n\n

用户程序发出磁盘 I/O 请求后,系统的正确处理流程是操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。

\n
A.用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序
\n
B.用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序
\n
C.用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序
\n
D.用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第26题-解析\n\n\n\n

设备管理软件一般分为 以下层次:用户层、与设备无关的系统调用处理层、设备驱动程序以及中断处理程序。
\n\n\n\n\n", "difficulty": 1}, {"id": 168, "year": 2012, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2012-第27题-题目\r\n\r\n\r\n\r\n

假设 5 个进程\r\nP0​\r\n、\r\nP1​\r\n、\r\nP2​\r\n、\r\nP3​\r\n、\r\nP4​\r\n共享三类资源\r\nR1​\r\n、\r\nR2​\r\n、\r\nR3​\r\n,这些资源总数分别为 18、6、22。T0 时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。

\r\n
\"\"
\r\n
A.P0​,P2​,P4​,P1​,P3​
\r\n
B.P1​,P0​,P3​,P4​,P2​
\r\n
C.P2​,P1​,P0​,P3​,P4​
\r\n
D.P3​,P4​,P2​,P1​,P0​
\r\n\r\n\r\n\r\n\r\n", "answer": "D", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2012-第27题-解析\r\n\r\n\r\n\r\n

首先求得各进程的需求矩阵 Need 与可利用资源矢量 Available:

\"\"

比较 Need 和 Available 可以发现,初始时进程\r\nP1​\r\n与\r\nP3​\r\n可满足需求,排除 A、C。尝试给\r\nP1​\r\n分配资源,则\r\nP1​\r\n完成后 Available 将变为 (6,3,6),无法满足\r\nP0​\r\n的需求,排除 B。尝试给\r\nP3​\r\n分配资源,则\r\nP3​\r\n完成后 Available 将变为 (4,3,7),该向量能满足其他所有进程的需求。所以,以\r\nP3​\r\n开头的所有序列都是 安全序列。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 169, "year": 2012, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第28题-题目\n\n\n\n

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

\n

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

\n

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

\n

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

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅲ
\n
D.Ⅰ、Ⅱ和Ⅲ
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第28题-解析\n\n\n\n

对于 I,当所读文件的数据不在内存时,产生中断(缺页中断),原进程进入阻塞状态,直到所需数据从外存调入内存后,才将该进程唤醒。对于 II,read 系统调用通过陷入将 CPU 从用户态切换到核心态,从而获取操作系统提供的服务。对于Ⅲ,要读一个文件首先要用 open 系统调用打开该文件。open 中的参数包含文件的路径名与文件名,而 read 只需要使用 open 返回的文件描述符,并不使用文件名作为参数。read 要求用户提供三个输入参数:①文件描述符 fd;②buf 缓冲区首址;③传送的字节数 n。read 的功能是试图从 fd 所指示的文件中读入 n 个字节的数据,并将它们送至由指针 buf 所指示的缓冲区中。
\n\n\n\n\n", "difficulty": 1}, {"id": 170, "year": 2012, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第29题-题目\n\n\n\n

一个多道批处理系统中仅有\nP1​\n和\nP2​\n两个作业,\nP2​\n比\nP1​\n晚 5ms 到达,它们的计算和 I/O 操作顺序如下:

\n

P1​\n:计算 60ms,I/O 80ms,计算 20ms

\n

P2​\n:计算 120ms,I/O 40ms,计算 40ms

\n

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

\n
A.240ms
\n
B.260ms
\n
C.340ms
\n
D.360ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2012-第29题-解析\r\n\r\n\r\n\r\n

由于\r\nP2​\r\n比\r\nP1​\r\n晚 5ms 到达,\r\nP1​\r\n先占用 CPU, 作业运行的甘特图如下所示。

\"\"
\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 171, "year": 2012, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第30题-题目\n\n\n\n

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

\n
A.在进程结束时能进行处理机调度
\n
B.创建新进程后能进行处理机调度
\n
C.在进程处于临界区时不能进行处理机调度
\n
D.在系统调用完成并返回用户态时能进行处理机调度
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第30题-解析\n\n\n\n

选项 A、B、D 显然是可以进行 处理机调度 的情况。对于 C,当进程处于临界区时,说明进程正在占用处理机,只要不破坏临界资源的使用规侧,是不会影响处理机调度的。比如,通常访问的临界资源可能是慢速的外设(如打印机),如果在进程访问打印机时,不能进行处理机调度,那么系统的性能将是非常差的。
\n\n\n\n\n", "difficulty": 1}, {"id": 172, "year": 2012, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第31题-题目\n\n\n\n

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

\n
A.不管系统是否支持线程,进程都是资源分配的基本单位
\n
B.线程是资源分配的基本单位,进程是调度的基本单位
\n
C.系统级线程和用户级线程的切换都需要内核的支持
\n
D.同一进程中的各个线程拥有各自不同的地址空间
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第31题-解析\n\n\n\n

在引入 线程 后,进程依然还是资源分配的基本单位,线程是调度的基本单位,同一进程中的各个线程共享进程的地址空间。在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预,内核意识不到线程的存在。
\n\n\n\n\n", "difficulty": 1}, {"id": 173, "year": 2012, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2012-第32题-题目\n\n\n\n

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

\n
A.重排 I/O 请求次序
\n
B.在一个磁盘上设置多个分区
\n
C.预读和滞后写
\n
D.优化文件物理块的分布
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第32题-解析\n\n\n\n

对于 A,重排 I/O 请求次序也就是进行 I/O 调度,从而使进程之间公平地共享磁盘访问,减少 I/O 完成所需要的平均等待时间。对于 C,缓冲区结合预读和滞后写技术对于具有重复性及阵发性的 I/O 进程改善磁盘 I/O 性能很有帮助。对于 D,优化文件物理块的分布可以减少寻找时间与延迟时间,从而提高磁盘性能。在一个磁盘上设置多个分区与改善设备/O 性能并无多大联系,相反还会带来处理的复杂和降低利用率。
\n\n\n\n\n", "difficulty": 1}, {"id": 174, "year": 2012, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第33题-题目\n\n\n\n

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

\n
A.PPP
\n
B.IP
\n
C.UDP
\n
D.TCP
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第33题-解析\n\n\n\n

ICMP 报文作为数据字段封装在 IP 分组中,因此,IP 协议直接为 ICMP 提供服务。UDP 和 TCP 都是传输层协议,为应用层提供服务。PPP 协议是链路层协议,为网络层提供服务。
\n\n\n\n\n", "difficulty": 1}, {"id": 175, "year": 2012, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第34题-题目\n\n\n\n

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

\n
A.机械特性
\n
B.功能特性
\n
C.过程特性
\n
D.电气特性
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第34题-解析\n\n\n\n

此题考查 物理层接口特性,过程特性定义各条物理线路的工作过程和时序关系。
\n\n\n\n\n", "difficulty": 1}, {"id": 176, "year": 2012, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第35题-题目\n\n\n\n

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

\n
A.无连接不可靠服务
\n
B.无连接可靠服务
\n
C.有连接不可靠服务
\n
D.有连接可靠服务
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第35题-解析\n\n\n\n

考虑到局域网信道质量好,以太网采取了两项重要的措施以使通信更简便:① 采用无连接的工作方式;② 不对发送的数据帧进行编号,也不要求对方发回确认。因此,以太网提供的服务是不可靠的服务,即尽最大努力的交付。差错的纠正由高层完成。
\n\n\n\n\n", "difficulty": 1}, {"id": 177, "year": 2012, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第36题-题目\n\n\n\n

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

\n
A.5
\n
B.4
\n
C.3
\n
D.2
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第36题-解析\n\n\n\n

本题考察 回退 N 帧 的极限,即求从发送一个帧到接收到这个帧的确认为止的时间内最多可以发送多少数据帧。要尽可能多发帧,应以短的数据帧计算,首先计算出发送一帧的时间:\n128×8/(16×103)=64\nms;发送一帧到收到确认为止的总时间:\n64+270×2+64=668\nms;这段时间总共可以发送\n668/64=10.4\n(帧),发送这么多帧至少需要用\n4\n位比特进行编号。
\n\n\n\n\n", "difficulty": 2}, {"id": 178, "year": 2012, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第37题-题目\n\n\n\n

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

\n

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

\n

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

\n

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

\n

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

\n
A.仅 III、IV
\n
B.仅 I、II、III
\n
C.仅 I、II、IV
\n
D.I、II、III、IV
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第37题-解析\n\n\n\n

I 和 V 显然是 IP 路由器的 功能。对于Ⅱ,当路由器监测到拥塞时,可合理丢弃 IP 分组,并向发出该 IP 分组的源主机发送一个源点抑制的 ICMP 报文。对于 III,路由器对收到的 IP 分组首部进行差错检验,丢弃有差错首部的报文,但不保证 IP 分组不丢失。对于 IV,这表述的也就是路由器的路由功能。
\n\n\n\n\n", "difficulty": 1}, {"id": 179, "year": 2012, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第38题-题目\n\n\n\n

ARP 协议的功能是( )。

\n
A.根据 IP 地址查询 MAC 地址
\n
B.根据 MAC 地址查询 IP 地址
\n
C.根据域名查询 IP 地址
\n
D.根据 IP 地址查询域名
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第38题-解析\n\n\n\n

在实际网络的数据链路层上传送数据时,最终必须使用硬件地址,ARP 协议 是将网络层的 IP 地址解析为数据链路层的 MAC 地址。
\n\n\n\n\n", "difficulty": 1}, {"id": 180, "year": 2012, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第39题-题目\n\n\n\n

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

\n
A.180.80.76.0
\n
B.180.80.76.255
\n
C.180.80.77.255
\n
D.180.80.79.255
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第39题-解析\n\n\n\n

子网掩码的第 3 个字节为 11111100,可知前 22 位为子网号、后 10 位为主机号。IP 地址的第 3 个字节为 01001101(下画线为子网号的一部分),将主机号(即后 10 位)全置为 1,可以得到广播地址为 180.80.79.255。
\n\n\n\n\n", "difficulty": 1}, {"id": 181, "year": 2012, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2012-第40题-题目\n\n\n\n

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

\n
\n\n\n\n \n 408真题系统\n \n\n
用户1
用户2
用户1
的邮件服务器
用户2
的邮件服务器
①
②
③
\n
A.SMTP、SMTP、SMTP
\n
B.POP3、SMTP、POP3
\n
C.POP3、SMTP、SMTP
\n
D.SMTP、SMTP、POP3
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第40题-解析\n\n\n\n

SMTP 采用 “推” 的通信方式,在用户代理向邮件服务器及邮件服务器之间发送邮件时,SMTP 客户主动将邮件“推”送到 SMTP 服务器。而 POP3 采用 “拉” 的通信方式,当用户读取邮件时,用户代理向邮件服务器发出请求,“拉”取用户邮箱中的邮件。
\n\n\n\n\n", "difficulty": 1}, {"id": 182, "year": 2012, "index": 41, "type": 3, "typeName": "算法题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2012-第41题-题目\n\n\n\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第41题-解析\n\n\n\n

1)对于长度分别为 m, n 的两个有序表的合并,最坏情况下是一直比较到两个表尾元素,比较次数为 m +n-1 次。故最坏情况的比较次数依赖于表长,为了缩短总的比较次数,根据哈夫曼树(最佳归并树)思想的启发,可采用如图所示的合并顺序。

\n\n
395
195
200
85
110
45
40
10
35
50
60

根据上图中的 哈夫曼树,6 个序列的合并过程为:

第 1 次合并:表 A 与表 B 合并,生成含有 45 个元素的表 AB ;

第 2 次合并:表 AB 与表 C 合并,生成含有 85 个元素的表 ABC;

第 3 次合并:表 D 与表 E 合并,生成含有 110 个元素表 DE;

第 4 次合并:表 ABC 与表 DE 合并,生成含有 195 个元素的表 ABCDE;

第 5 次合并:表 ABCDE 与表 F 合并,生成含有 395 个元素的最终表。

由上述分析可知,最坏清况下的比较次数为:第 1 次合并,最多比较次数 = 10+35-1 = 44;第 2 次合并,最多比较次数 = 45+40-1 = 84;第 3 次合并,最多比较次数 = 50+60-1 = 109;第 4 次合并,最多比较次数 = 85+110-1 = 194;第 5 次合并,最多比较次数 = 195+200-1 = 394。

故比较的总次数最多为:44+84+109+194+394 = 825。

2)各表的合并策略是:在对多个有序表进行两两合并时,若表长不同,则最坏情况下总的比较次数依赖于表的合并次序。可以借用哈夫曼树的构造思想,依次选择最短的两个表进行合并,可以获得最坏情况下最佳的合并效率。

【评分说明】①对于用类似哈夫曼树(或最佳归并树)思想进行合并,过程描述正确,给 5 分。按其他策略进行合并,过程描述正确,给 3 分。

②正确算出与合并过程一致的总比较次数,给 2 分。若计算过程正确,但结果错误,可给 1 分。

③考生只要说明采用的是类似哈夫曼树(或最佳归并树)的构造方法作为合并策略,即可给 3 分。如果采用其他策略,只要能够完成合并,给 2 分。

\n\n\n\n\n", "difficulty": 1}, {"id": 183, "year": 2012, "index": 42, "type": 2, "typeName": "应用题", "score": 5, "subject": "computer-network", "question": "\n\n\n\n\n\n2012-第42题-题目\n\n\n\n

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

\n
\n\n\n\n \n 408真题系统\n \n\n
l
o
a
d
b
e
i
n
g
^
str1
str2
p
\n

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

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第42题-解析\n\n\n\n

顺序遍历两个链表到尾结点时,并不能保证两个链表同时到达尾结点。这是因为两个链表的长度不同。假设一个链表比另 一个链表长 k 个结点,我们先在长链表上遍历 k 个结点,之后同步遍历两个链表,这样就能够保证它们同时到达最后一个结点。由于两个链表从第一个公共结点到链表的尾结点都是重合的,所以它们肯定同时到达第 一个公共结点。

\n\n
l
o
a
d
b
e
i
n
g
^
str1
str2
i
n
g
^
尾
部
对
齐
p
q

算法的基本设计思想:

①分别求出 strl 和 str2 所指的两个链表的长度 m 和 n。

②将两个链表以表尾对齐:令指针 p、q 分别指向 strl 和 str2 的头结点,若\nm≥n\n,则使 p 指向链表中的第 m-n+1 个结点;若\nm<n\n,则使 q 指向链表中的第 n-m+1 个结点,即使指针 p 和 q 所指的结点到表尾的长度相等。

③反复将指针 p 和 q 同步向后移动,并判断它们是否指向同一结点。若 p 和 q 指向同一结点,则该点即为所求的共同后缀的起始位置。

2)算法的 C 语言代码描述:

struct Node {\n  int data;\n  Node *next;\n};\n\nint getLength(Node *h) {\n  int length = 0;\n  Node *p = h->next;\n  while (p) {\n    length++;\n    p = p->next;\n  }\n  return length;\n}\n\nNode *findCommonSuffix(Node *h1, Node *h2) {\n  Node *p1 = h1;\n  Node *p2 = h2;\n  int m = getLength(h1);\n  int n = getLength(h2);\n  if (m > n) {\n    for (int i = 0; i < m-n; i++) {\n      p1 = p1->next;\n    }\n  } else {\n    for (int i = 0; i < n-m; i++) {\n      p2 = p2->next;\n    }\n  }\n  while (p1 != p2) {\n    p1 = p1->next;\n    p2 = p2->next;\n  }\n  return p1;\n}\n

【评分说明】 ① 若考生所给算法实现正确,且时间复杂度为 O(m+n),可给 12分;若算法正确,但时间复杂度超过 O(m+n),则最高可给 9 分。

② 若在算法的基本设计思想描述中因文字表达没有非常清晰反映出算法思路,但在算法实现中能够清晰看出算法思想且正确的,可参照①的标准给分。

③ 若算法的基本设计思想描述或算法实现中部分正确,可参照①中各种情况的相应给分标准酌情给分。

③ 时间复杂度为 O(len1+len2) 或 O(max(len1,len2)), 其中 len1、len2 分别为两个链表的长度。

\n\n\n\n\n", "difficulty": 2}, {"id": 184, "year": 2012, "index": 43, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第43题-题目\n\n\n\n

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

\n

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

\n

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

\n

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

\n

(4) 为了提高性能,主存采用四体低位交叉存储模式,工作时每 1/4 个存储周期启动一个体。若每个体的存储周期为 50ns,则该主存能提供的最大带宽是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第43题-解析\n\n\n\n

本题综合涉及多个考点:计算机的性能指标、存储器的性能指标、DMA 的性能分析,DMA 方式的特点,多体交叉存储器的性能分析。

1)平均每秒 CPU 执行的指令数为:80M/4 = 20M,故 MIPS 数为 20;(1 分)平均每条指令访存 1.5 次,故平均每秒 Cache 缺失的次数 = 20M×1.5×(1-99%) = 300k;(1 分)当 Cache 缺失时,CPU 访问主存,主存与 Cache 之间以块为传送单位,此时,主存带宽为16B×300k/s = 4.8MB/s。在不考虑 DMA 传送的情况下,主存带宽至少达到 4.8MB/s 才能满足 CPU 的访存要求。(2 分)

2)题中假定在 Cache 缺失的情况下访问主存,平均每秒产生缺页中断 300000×0.0005% = 1.5 次。因为存储器总线宽度为 32 位,所以每传送 32 位数据,磁盘控制器发出一次 DMA 请求,故平均每秒磁盘 DMA 请求的次数至少为 1.5×4KB/4B = 1.5K = 1536。(2 分)

3)CPU 和 DMA 控制器同时要求使用存储器总线时,DMA 请求优先级更高;(1 分)因为 DMA 请求得不到及时响应,I/O 传输数据可能会丢失。(1 分)

4)四体交叉存储模式 能提供的最大带宽为 4×4B/50ns=320MB/s。(2 分)

\n\n\n\n\n", "difficulty": 1}, {"id": 185, "year": 2012, "index": 44, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2012-第44题-题目\n\n\n\n

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

\n

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

\n

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

\n

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

\n

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

\n

则这 4 条指令执行过程中,\nI3​\n的 ID 段和\nI4​\n的 IF 段被阻塞的原因各是什么?

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2012-第44题-解析\r\n\r\n\r\n\r\n

1)x 的机器码为\r\n[x]补​\r\n= 1111 1101 1111 1111B,即指令执行前 (R1)=FDFFH,右移 1 位后为 1111 1110 1111 1111B,即指令执行后 (R1) = FEFFH。(2 分)

2)每个时钟周期只能有一条指令进入流水线,从第 5 个时钟周期开始,每个时钟周期都会有一条指令执行完毕,故至少需要 4+(5-1)=8 个时钟周期。(2 分)

3)\r\nI3​\r\n的 ID 段被阻塞的原因:因为\r\nI3​\r\n与\r\nI1​\r\n和\r\nI2​\r\n都存在 数据冒险,需等到\r\nI1​\r\n和\r\nI2​\r\n将结果写回寄存器后,\r\nI3​\r\n才能读寄存器内容,所以\r\nI3​\r\n的 ID 段被阻塞(1 分)。\r\nI4​\r\n的 IF 段被阻塞的原因:因为\r\nI4​\r\n的前一条指令\r\nI3​\r\n在 ID 段被阻塞,所以\r\nI4​\r\n的 IF 段被阻塞(1 分)。

注意:要求“按序发射,按序完成”,故 2) 中下一条指令的 IF 必须和上一条指令的 ID 并行,以免因上一条指令发生冲突而导致下一条指令先执行完。

4)因 2*x 操作有左移和加法两种实现,故 x=x*2+a 对应的指令序列为:

I1    LOAD  R1, [x]\r\nI2    LOAD  R2, [a]\r\nI3    SHL   R1       // 或者 ADD R1, R1\r\nI4    ADD   R1, R2\r\nI5    STORE R2, [x]\r\n

这 5 条指令在流水线中的执行过程如下表所示:

\"\"

故 x=x*2+a 语句最少需要 17 个时钟周期。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 186, "year": 2012, "index": 45, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第45题-题目\n\n\n\n

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

\n

假设不考虑其他进程的影响和系统开销,初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为 32、15、21、41。进程 P 依次访问的 <虚拟页号,访问时刻> 是:

\n

<1, 1>、<3, 2>、<0, 4>、<0, 6>、<1, 11>、<0, 13>、<2, 14>。请回答下列问题。

\n

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

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第45题-解析\n\n\n\n

1)页框号为 21。理由:因为起始 驻留集 为空,因此 0 页对应的页框为空闲链表中的第三个空闲页框 21,其对应的页框号为 21。

2)页框号为 32。理由:因 11>10 故发生第三轮扫描,页号为 1 的页框在第二轮已处于空闲页框链表中,此刻该页又被重新访问,因此应被重新放回驻留集中,其页框号为 32。

3)页框号为 41。理由:因为第 2 页从来没有被访问过,它不在驻留集中,因此从空闲页框链表中取出链表头的页框 41,页框号为 41。

4)合适。理由:如果程序的时间局部性越好,那么从空闲页框链表中重新取回的机会越大,该策略的优势越明显。

\n\n\n\n\n", "difficulty": 1}, {"id": 187, "year": 2012, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第46题-题目\n\n\n\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第46题-解析\n\n\n\n

1)文件系统中所能容纳的磁盘块总数为 4TB/1KB=2³²。要完全表示所有磁盘块,索引项中的块号最少要占 32/8=4B。而索引表区仅采用直接索引结构,故 512B 的索引表区能容纳512B/4B=128 个索引项。每个索引项对应一个磁盘块,所以该系统可支持的单个文件最大长度是 128×1KB=128KB.

2)这里的考查的分配方式不同于我们所熟悉的三种经典分配方式,但是题目中给出了详细的解释,这个小问采用 混合索引 的方式。所求的单个文件最大长度一共包含两部分:预分配的连续空间和直接索引区。

连续区块数占 2B,共可以表示 2¹⁶ 个磁盘块,即 2²⁶B。直接索引区共 504B/6B=84 个索引项。所以该系统可支持的单个文件最大长度是 2²⁶B+84KB。

为了使单个文件的长度达到最大,应使连续区的块数字段表示的空间大小尽可能接近系统最大容量 4TB。分别设起始块号和块数分别占 4B,这样起始块号可以寻址的范围是 2³² 个磁盘块,共 4TB,即整个系统空间。同样,块数字段可以表示最多 2³² 个磁盘块,共 4TB。

\n\n\n\n\n", "difficulty": 1}, {"id": 188, "year": 2012, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2012-第47题-题目\n\n\n\n

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

\n

请回答下列问题。

\n

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

\n

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

\n

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

\n
\n\n\n\n \n 408真题系统\n \n\n
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 s9 9f f0 84 6b 41 d6 50 10 16 d0 b7 d6 00 00
来自 S 的分组
47-b 表
  注意:IP 分组头 和 TCP 段头结构分别如 47-a 图和 47-b 图所示
确认号
头部长度
服务类型
总长度
标识
标志
片偏移
生存时间(TTL)
协议
头部校验和
源 IP 地址
目的 IP 地址
47-a 图  IP 分组头结构
0
8
16
24
32
位
源端口
确认号
序号
确认号
保留
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
保留
目的端口
校验和
紧急指针
选项(长度可变)
填充
47-b 图 TCP 段头结构
0
8
16
24
32
TCP
首部
20B的
固定
首部
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2012-第47题-解析\n\n\n\n

1)由题 47-a 表看出,源 IP 地址为 IP 分组头的第 13~16 字节。表中 1、3、4 号分组的源 P 地址均为 192.168.0.8(c0a80 008H),所以 1、3、4 号分组是由 H 发送的。

题 47-a 表中,1 号分组封装的 TCP 段的 SYN=1,ACK=0,seq=846b 41c5H;2 号分组封装的 TCP 段的 SYN=1,ACK=1,seq=e059 9fefH,ack=846b 41c6H;3 号分组装的 TCP 段的 ACK=1,seq=846b 41c6H,ack=e059 9ff0H,所以 1、2、3 号分组完成了 TCP 连接的建立过程。

由于快速以太网数据帧有效载荷的最小长度为 46 字节,表中 3、5 号分组的总长度为 40(28H)字节,小于 46 字节,其余分组总长度均大于 46 字节。所以 3、5 号分组通过 以太网快速填充。

2)由 3 号分组封装的 TCP 段可知,发送应用层数据初始序号为 seq=846b 41c6H,由 5 号分组封装的 TCP 段可知,ack 为 seq=846b 41d6H,所以 S 己经收到的应用层数据的字节数为 846b 41d6H - 846b 41c6H = 10H = 16,所以 S 已经接收到了 16 个字节的应用层数据。

3)首先需要确定表 47-a 中的哪一个 IP 分组与表 47-b 中的 IP 分组相对应,这就要根据 IP 分组中的标识字段(第 5-6 个字节),观察可以判断表 47-a 编号为 5 的分组是与表 47-b 的分组相对应的,因为它们的标识字段都是 68H。若要判断 IP 分组经过多少个路由器就要观察 TTL 字段(第 9 个字节),发送前来自 S 的分组的 TTL 为 40H,H 接收到的分组的 TTL 为 31H,所以经过路由器的个数为 40H - 31H = 15。

\n\n\n\n\n", "difficulty": 0}, {"id": 189, "year": 2013, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第1题-题目\n\n\n\n

已知两个长度分别为 m 和 n 的升序链表,若将它们合并为一个长度为 m+n 的降序链表,则最坏情况下的时间复杂度是()。

\n
A.O(n)
\n
B.O(m×n)
\n
C.O(min(m,n))
\n
D.O(max(m,n))
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第1题-解析\n\n\n\n

两个升序链表合并,两两比较表中元素,每比较一次确定一个元素的链接位置(取较小元素,头插法)。当一个链表比较结束后,将另一个链表的剩余元素插入即可。最坏的情况是两个链表中的元素依次进行比较,直到两个链表都到表尾,即每个元素都经过比较,时间复杂度为\nO(m+n)=O(max(m,n))\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 190, "year": 2013, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第2题-题目\n\n\n\n

一个栈的入栈序列为\n1,2,3,⋯,n\n,其出栈序列是\np1​,p2​,p3​,⋯,pn​\n,若\np2​=3\n,则\np3​\n可能取值的个数是()。

\n
A.n−3
\n
B.n−2
\n
C.n−1
\n
D.无法确定
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第2题-解析\n\n\n\n

本题考察 入栈出栈序列。显然,\n3\n之后的\n4,5,⋯,n\n都是\np3​\n可取的数(一直进栈直到该数入栈后马上出栈)。接下来分析 1 和 2:\np1​\n只能是\n3\n之前入栈的数(可能是 1 或 2),当\np1​=1\n时,\np3​\n可取\n2\n;当\np1​=2\n时,\np3​\n可取\n1\n,故\np3​\n可能取除\n3\n之外的所有数,个数为\nn−1\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 191, "year": 2013, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第3题-题目\n\n\n\n

若将关键字 1,2,3,4,5,6,7 依次插入到初始为空的平衡二叉树 T 中,则 T 中平衡因子为 0 的分支结点的个数是( )。

\n
A.0
\n
B.1
\n
C.2
\n
D.3
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第3题-解析\n\n\n\n

利用 7 个关键字构建平衡二叉树 T,平衡因子为 0 的分支结点个数为 3,构建的平衡二叉树如下图所示。构造及调整的过程如下:

\n\n
1
1
2
1
2
3
2
3
4
1
5
2
4
5
1
6
3
4
5
6
2
7
3
1
4
6
7
2
3
1
5
RR
RR
RR
RR
\n\n\n\n\n", "difficulty": 3}, {"id": 192, "year": 2013, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第4题-题目\n\n\n\n

已知三叉树 T 中 6 个叶结点的权分别是 2,3,4,5,6,7,T 的带权(外部)路径长度最小是( )。

\n
A.27
\n
B.46
\n
C.54
\n
D.56
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第4题-解析\n\n\n\n

将 哈夫曼树 的思想推广到三叉树的情形。为了构成严格的三叉树,需添加权为 0 的虚叶结点,对于严格的三叉树\n(n0​−1)%(3−1)=u=1=0\n,需要添加\nm−u−1=3−1−1\n个叶结点,说明 7 个叶结点刚好可以构成一个严格的三叉树。按照哈夫曼树的原则,权为 0 的叶结点应离树根最远构造最小带权生成树的过程如下:

\n\n
0
3
2
4
6
5
7
5
5
4
6
7
14
5
2
0
3
7
6
27
14
4
5
5
2
0
3

最小的带权路径长度为\n(2+3)×3+(4+5)×2+(6+7)×1=46\n。

\n\n\n\n\n", "difficulty": 2}, {"id": 193, "year": 2013, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第5题-题目\n\n\n\n

若 X 是后序线索二叉树中的叶结点,且 X 存在左兄弟结点 Y 。则 X 的右线索指的是( )。

\n
A.X 的父结点
\n
B.以 Y 为根的子树的最左下结点
\n
C.X 的左兄弟结点 Y
\n
D.以 Y 为根的子树的最右下结点
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第5题-解析\n\n\n\n

根据后序 线索二叉树 的定义,X 结点为叶子结点且有左兄弟,那么这个结点为右孩子结点,利用后序遍历的方式可知 X 结点的后序后继是其父结点,即其右线索指向的是父结点。
\n\n\n\n\n", "difficulty": 1}, {"id": 194, "year": 2013, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第6题-题目\n\n\n\n

在任意一棵非空二叉排序树 T1 中,删除某结点 v 之后形成二叉排序树 T2 ,再将 v 插入 T2 形成二叉排序树 T3 。下列关于 T1 与 T3 的叙述中,正确的是( )。

\n

I. 若 v 是 T1 的叶结点,则 T1 与 T3 不同

\n

II. 若 v 是 T1 的叶结点,则 T1 与 T3 相同

\n

III. 若 v 不是 T1 的叶结点,则 T1 与 T3 不同

\n

IV. 若 v 不是 T1 的叶结点,则 T1 与 T3 相同

\n
A.仅 I、III
\n
B.仅 I、IV
\n
C.仅 II、III
\n
D.仅 II、IV
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第6题-解析\n\n\n\n

在一棵 二叉排序树 中删除一个结点后再将此结点插入到二叉排序树中,如果删除的结点是叶子结点,那么在插入结点后,后来的二叉排序树与删除结点之前相同。如果删除的结点不是叶子结点,那么再插入这个结点后,后来的二叉树会发生变化,不完全相同。
\n\n\n\n\n", "difficulty": 1}, {"id": 195, "year": 2013, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第7题-题目\n\n\n\n

设图的邻接矩阵 A 如下所示。各顶点的度依次是()

\n
A.1,2,1,2
\n
B.2,2,1,1
\n
C.3,4,2,3
\n
D.4,4,2,2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第7题-解析\n\n\n\n

邻接矩阵 A 为非对称矩阵,说明图是有向图,度为入度加出度之和。各顶点的度是矩阵中此结点对应的行(对应出度)和列(对应入度)的非零元素之和。
\n\n\n\n\n", "difficulty": 1}, {"id": 196, "year": 2013, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第8题-题目\n\n\n\n

若对如下无向图进行遍历,则下列选项中,不是广度优先遍历序列的是()

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
e
f
g
c
d
h
\n
A.h,c,a,b,d,e,g,f
\n
B.e,a,f,g,b,h,c,d
\n
C.d,b,c,a,h,e,f,g
\n
D.a,b,c,d,h,e,f,g
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第8题-解析\n\n\n\n

此题为送分题。只要掌握 DFS 和 BFS 的遍历过程,便能轻易解决。逐个代入,手工模拟,选项 D 是深度优先遍历,而不是广度优先遍历。
\n\n\n\n\n", "difficulty": 1}, {"id": 197, "year": 2013, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第9题-题目\n\n\n\n

下列 AOE 网表示一项包含 8 个活动的工程。通过同时加快若干活动的进度可以缩短整个工程的工期。下列选项中,加快其进度就可以缩短工程工期的是()

\n
\n\n\n\n \n 408真题系统\n \n\n
2
1
3
5
4
6
a = 3
c = 9
g = 6
d = 4
e = 6
f = 10
b = 8
h = 9
\n
A.c 和 e
\n
B.d 和 e
\n
C.f 和 d
\n
D.f 和 h
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第9题-解析\n\n\n\n

找出 AOE 网的全部 关键路径 为 (b,d,c,g)、(b,d,e,h) 和 (b,f,h)。根据定义,只有关键路径上的活动时间同时减少时,才能缩短工期,即正确选项中的两条路径必须涵盖在所有关键路径之中。利用关键路径算法可求出图中的关键路径共有三条:(b,d,cg)、(b,d,e,h) 和 (b,f,h)。由此可知,选项 A 和 B 中并不能包含 (b,f,h) 这条路径,选项 C 中,并不能包含 (b,d,c,g) 和 (b,d,e,h) 这两条路径,只有 C 包含了所有的关键路径,因此只有加快 f 和 d 的进度才能缩短工期。
\n\n\n\n\n", "difficulty": 2}, {"id": 198, "year": 2013, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第10题-题目\n\n\n\n

在一株高度为 2 的 5 阶 B 树中,所含关键字的个数最少是()

\n
A.5
\n
B.7
\n
C.8
\n
D.14
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第10题-解析\n\n\n\n

对于 5 阶 B 树,根结点只有达到 5 个关键字时才能产生分裂,成为高度为 2 的 B 树,因此高度为 2 的 5 阶 B 树所含关键字的个数最少是 5。
\n\n\n\n\n", "difficulty": 1}, {"id": 199, "year": 2013, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第11题-题目\n\n\n\n

对给定的关键字序列 110,119,007,911,114,120,122 进行基数排序,则第 2 趟分配收集后得到的关键字序列是()。

\n
A.007,110,119,114,911,120,122
\n
B.007,110,119,114,911,122,120
\n
C.007,110,911,114,119,120,122
\n
D.110,120,911,122,114,007,119
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第11题-解析\n\n\n\n

基数排序 一般使用低位优先,即第 1 趟排序是按照个位数字的大小来排序的,第 2 趟排序是按照十位数字的大小进行排序的,排序的过程如下图所示。

\n\n
110
119
007
911
114
120
122
110
120
911
122
114
007
119
110
120
911
114
007
119
e[0]
e[1]
e[4]
e[3]
e[2]
e[5]
e[8]
e[7]
e[6]
e[9]
911
110
e[0]
e[1]
e[4]
e[3]
e[2]
e[5]
e[8]
e[7]
e[6]
e[9]
122
122
120
114
007
119
007
110
911
114
119
120
122
分配:
收集:
分配:
收集:
\n\n\n\n\n", "difficulty": 1}, {"id": 200, "year": 2013, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第12题-题目\n\n\n\n

某计算机主频为 1.2GHz,其指令分为 4 类,它们在基准程序中所占比例及 CPI 如下表所示。

\n
指令类型所占比例CPI
A50%2
B20%3
C10%4
D20%5
\n

该机的 MIPS 数是( )。

\n
A.100
\n
B.200
\n
C.400
\n
D.600
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第12题-解析\n\n\n\n

基准程序的 CPI= 2x0.5 + 3x0.2 + 4x0.1 + 5x0.2 = 3。计算机的主频为 1.2 GHz, 即 1200 MHz,故该机器的 MIPS = 1200/3= 400。
\n\n\n\n\n", "difficulty": 1}, {"id": 201, "year": 2013, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第13题-题目\n\n\n\n

某数采用 IEEE754 单精度浮点数格式表示为 C6400000H,则该数的值是( )。

\n
A.−1.5×213
\n
B.−1.5×212
\n
C.−0.5×213
\n
D.−0.5×212
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第13题-解析\n\n\n\n

IEEE 754 单精度浮点数格式为 C640 OOOOH, 二进制格式为 1100 0110 0100 0000 0000 0000 0000 0000, 转换为标准的格式为:

| 1(符号位) | 1000 1100(阶码) | 100 0000 0000 0000 0000 0000(尾数) |

数符 = 1 表示负数;阶码值为 1000 1100 - 0111 1111 = 0000 1101 = 13; 尾数值为 1.5(注意其有隐含位,要加 1)。因此,浮点数的值为\n−1,5×213\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 202, "year": 2013, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第14题-题目\n\n\n\n

某字长为 8 位的计算机中,已知整型变量 x、y 的机器数分别为 [x]补=11110100 , [y]补=10110000 。若整型变量 z=2x+y/2,则 z 的机器数为( )。

\n
A.11000000
\n
B.00100100
\n
C.10101010
\n
D.溢出
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第14题-解析\n\n\n\n

x*2,将 x 算术左移一位为 1 1101000;y/2,将 y 算术右移一位为 1 1011000, 均无溢出或丢失精度。补码相加为 1 1101000 + 1 1011000 = 1 1000000, 亦无溢出。
\n\n\n\n\n", "difficulty": 2}, {"id": 203, "year": 2013, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第15题-题目\n\n\n\n

用海明码对长度为 8 位的数据进行检/纠错时,若能纠正一位错,则校验位数至少为( )。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第15题-解析\n\n\n\n

设校验位的位数为 k,数据位的位数为 n,海明码 能纠正一位错应满足下述关系:\n2k≥n+k+1\n。n = 8,当 k = 4 时,\n24(=16)>8+4+1(=13)\n,符合要求,故校验位至少是 4 位。
\n\n\n\n\n", "difficulty": 2}, {"id": 204, "year": 2013, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第16题-题目\n\n\n\n

某计算机主存地址空间大小为 256MB,按字节编址。虚拟地址空间大小为 4GB,采用页式存储管理,页面大小为 4KB,TLB(快表)采用全相联映射,有 4 个页表项,内容如下表所示。

\n
有效位标记页框号…
0FF180H0002H…
13FFF1H0035H…
002FF3H0351H…
103FFFH0153H…
\n

则对虚拟地址 03FFF180H 进行虚实地址变换的结果是( )。

\n
A.0153180H
\n
B.0035180H
\n
C.TLB 缺失
\n
D.缺页
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第16题-解析\n\n\n\n

按字节编址,页面大小为 4KB,页内地址共 12 位。地址空间大小为 4GB,虚拟地址共 32 位,前 20 位为页号。虚拟地址为 03FF F180H,故页号为 03 FFFH,页内地址为 180H。查找页标记 03FFFH 所对应的页表项,页框号为 0153H,页框号与页内地址拼接即为物理地址 0153180H。
\n\n\n\n\n", "difficulty": 1}, {"id": 205, "year": 2013, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第17题-题目\n\n\n\n

假设变址寄存器 R 的内容为 1000H,指令中的形式地址为 2000H;地址 1000H 中的内容为 2000H,地址 2000H 中的内容为 3000H,地址 3000H 的内容为 4000H,则变址寻址方式下访问到的操作数是()。

\n
A.1000H
\n
B.2000H
\n
C.3000H
\n
D.4000H
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第17题-解析\n\n\n\n

根据 变址寻址 的方法,变址寄存器的内容(1000H)与形式地址的内容(2000H)相加,得到操作数的实际地址(3000H), 根据实际地址访问内存,获取操作数 4000H。
\n\n\n\n\n", "difficulty": 1}, {"id": 206, "year": 2013, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第18题-题目\n\n\n\n

某 CPU 主频为 1.03GHz,采用 4 级指令流水线,每个段的执行需要 1 个时钟周期。假定 CPU 执行了 100 条指令,在其执行过程中没有发生任何流水线阻塞,此时流水线的吞吐率为( )。

\n
A.0.25×109\n 条指令/秒
\n
B.0.97×109\n 条指令/秒
\n
C.1.0×109\n 条指令/秒
\n
D.1.03×109\n 条指令/秒
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第18题-解析\n\n\n\n

采用 4 级流水执行 100 条指令,在执行过程中共用 4 + (100-1) =103 个时钟周期。CPU 的主频是 1.03GHz,也就是说每秒钟有 1.03G 个时钟周期。流水线的吞吐率为\n1.03G×100/103=1.0x109\n条指令/秒。
\n\n\n\n\n", "difficulty": 1}, {"id": 207, "year": 2013, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第19题-题目\n\n\n\n

下列选项中,用于设备和设备控制器(I/O 接口)之间互连的接口标准是( )。

\n
A.PCI
\n
B.USB
\n
C.AGP
\n
D.PCI-Express
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第19题-解析\n\n\n\n

本题考察 常见总线标准。题目问的是 “设备和设备控制器(I/O 接口)之间互连” 的接口标准,这通常指的是 外部设备(如鼠标、键盘、打印机) 与计算机之间的连接方式。

各选项说明:

接口标准用途
PCI主板内部设备控制器与CPU之间通信
USB外部I/O设备与设备控制器之间的接口标准
AGP旧式显卡接口,已淘汰
PCI-Express高速内部设备连接

因此,正确答案是:B. USB。

\n\n\n\n\n", "difficulty": 1}, {"id": 208, "year": 2013, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第20题-题目\n\n\n\n

下列选项中,用于提高 RAID 可靠性的措施有( )。

\n

I. 磁盘镜像

\n

Ⅱ. 条带化

\n

Ⅲ. 奇偶校验

\n

Ⅳ. 增加 Cache 机制

\n
A.仅 I、Ⅱ
\n
B.仅 I、Ⅲ
\n
C.仅 I、Ⅲ和Ⅳ
\n
D.仅Ⅱ、Ⅲ和Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第20题-解析\n\n\n\n

本题考察 RAID,RAID0 方案是无几余和无校验的磁盘阵列,而 RAID1~5 方案均是加入了冗余(镜像)或校验的磁盘阵列。条带化技术就是一种自动地将 IO 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分但不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/0 并行能力,从而获得非常好的性能。故能够提高 RAID 可靠性的措施主要是对磁盘进行镜像处理和奇偶校验,其余选项不符合条件。
\n\n\n\n\n", "difficulty": 1}, {"id": 209, "year": 2013, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第21题-题目\n\n\n\n

某磁盘的转速为 10000rpm,平均寻道时间是 6ms,磁盘传输速率是 20MB/s,磁盘控制器延时为 0.2ms,读取一个 4KB 的扇区所需的平均时间约为( )。

\n
A.9ms
\n
B.9.4ms
\n
C.12ms
\n
D.12.4ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第21题-解析\n\n\n\n

磁盘转速是 10000rpm,转一圈的时间为 6ms,因此平均查询扇区的时间为 3ms,平均寻道时间为 6ms,读取 4KB 扇区信息的时间为 4KB/(20MB/s)=0.2ms,磁盘控制器延迟为 0.2ms,平均存取时间 为 3+6+0.2+0.2=9.4ms。
\n\n\n\n\n", "difficulty": 1}, {"id": 210, "year": 2013, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第22题-题目\n\n\n\n

下列关于中断 I/O 方式和 DMA 方式比较的叙述中,错误的是( )。

\n
A.中断 I/O 方式请求的是方式请求的是 CPU 处理时间,DMA 方式请求的是总线使用权
\n
B.中断响应发生在一条指令执行结束后,DMA 响应发生在一个总线事务完成后
\n
C.中断 I/O 方式下数据传送通过软件完成,DMA 方式下数据传送由硬件完成
\n
D.中断 I/O 方式适用于所有外部设备,DMA 方式仅适用于快速外部设备
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第22题-解析\n\n\n\n

中断处理方式:在 I/O 设备输入每个数据的过程中,由于无须 CPU 干预,因而可使 CPU 与 I/O 设备并行工作。仅当输完一个数据时,才需 CPU 花费极短的时间去做些中断处理。因此中断申请使用的是 CPU 处理时间,发生的时间是在一条指令执行结束之后,数据是在软件的控制下完成传送的。而 DMA 方式与之不同。DMA 方式:数据传输的基本单位是数据块,即在 CPU 与 I/O 设备之间,每次传送至少一个数据块;DMA 方式 每次申请的是总线的使用权,所传送的数据是从设备直接送入内存的,或者相反;仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。

D 选项错误。这个说法过于绝对。DMA 虽然适合大批量、速度较高的设备(如磁盘、网卡),但它并非仅适用于快速设备,只要设备支持 DMA 协议,都可以使用。此外,中断 I/O 虽然可以用于多数外设,但在频繁交互场景中反而效率低。

\n\n\n\n\n", "difficulty": 1}, {"id": 211, "year": 2013, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第23题-题目\n\n\n\n

用户在删除某文件的过程中,操作系统不可能执行的操作是( )。

\n
A.删除此文件所在的目录
\n
B.删除与此文件关联的目录项
\n
C.删除与此文件对应的文件控制块
\n
D.释放与此文件关联的内存缓冲区
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第23题-解析\n\n\n\n

此文件所在目录下可能还存在其他文件,因此删除文件时不能(也不需要)删除文件所在的目录,而与此文件关联的目录项和文件控制块需要随着文件一同删除,同时释放文件关联的内存缓冲区。
\n\n\n\n\n", "difficulty": 1}, {"id": 212, "year": 2013, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第24题-题目\n\n\n\n

为支持 CD-ROM 中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是( )。

\n
A.连续结构
\n
B.链式结构
\n
C.直接索引结构
\n
D.多级索引结构
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第24题-解析\n\n\n\n

为了实现快速随机播放,要保证最短的查询时间,即不能选取链表和索引结构,因此 连续分配方案 最优。
\n\n\n\n\n", "difficulty": 1}, {"id": 213, "year": 2013, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第25题-题目\n\n\n\n

用户程序发出磁盘 I/O 请求后,系统的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是( )。

\n
A.用户程序
\n
B.系统调用处理程序
\n
C.设备驱动程序
\n
D.中断处理程序
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第25题-解析\n\n\n\n

计算磁盘号、磁头号和扇区号的工作是由 设备驱动程序 完成的。题中的功能因设备硬件的不同而不同,因此应由厂家提供的设备驱动程序实现。
\n\n\n\n\n", "difficulty": 1}, {"id": 214, "year": 2013, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第26题-题目\n\n\n\n

若某文件系统索引结点 (inode) 中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。

\n
A.索引结点的总数
\n
B.间接地址索引的级数
\n
C.地址项的个数
\n
D.文件块大小
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第26题-解析\n\n\n\n

四个选项中,只有 A 选项是与单个文件长度无关的。索引结点 的总数即文件的总数,与单个文件的长度无关;间接地址级数越多、地址项数越多、文件块越大,单个文件的长度就会越大。
\n\n\n\n\n", "difficulty": 1}, {"id": 215, "year": 2013, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第27题-题目\n\n\n\n

设系统缓冲区和用户工作区均采用单缓冲,从外设读入 1 个数据块到系统缓冲区的时间为 100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5,对用户工作区中的 1 个数据块进行分析的时间为 90(如下图所示)。

\n
\n\n\n\n \n 408真题系统\n \n\n
外设
系统缓冲区
用户工作区
100
5
90
\n

进程从外设读入并分析 2 个数据块的最短时间是( )。

\n
A.200
\n
B.295
\n
C.300
\n
D.390
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第27题-解析\n\n\n\n

在 单缓冲 中,数据块 1 从外设到用户工作区的总时间为 105,在这段时间中,数据块 2 没有进行操作。在数据块 1 进行分析处理 时,数据块 2 从外设到用户工作区的总时间为 105,这段时间是并行的。再加上处理数据块 2 的时间 90,总时间为 300,答案为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 216, "year": 2013, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第28题-题目\n\n\n\n

下列选项中,会导致用户进程从用户态切换到内核态的操作是( )。

\n

I. 整数除以零

\n

II. sin() 函数调用

\n

III. read 系统调用

\n
A.仅 I、II
\n
B.仅 I、III
\n
C.仅 II、III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第28题-解析\n\n\n\n

需要在系统 内核态 执行的操作是整数除零操作(需要中断处理)和 read 系统调用函数,sin() 函数调用是在用户态下进行的。
\n\n\n\n\n", "difficulty": 1}, {"id": 217, "year": 2013, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第29题-题目\n\n\n\n

计算机开机后,操作系统最终被加载到(  )。

\n
A.BIOS
\n
B.ROM
\n
C.EPROM
\n
D.RAM
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第29题-解析\n\n\n\n

此题为基本常识题,送分题。系统开机后,操作系统的程序会被自动加载到内存中的系统区,这段区域是 RAM。
\n\n\n\n\n", "difficulty": 1}, {"id": 218, "year": 2013, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第30题-题目\n\n\n\n

若用户进程访问内存时产生缺页,则下列选项中,操作系统可能执行的操作是( )。

\n

I. 处理越界错

\n

II. 置换页

\n

III. 分配内存

\n
A.仅 I、II
\n
B.仅 II、III
\n
C.仅 I、III
\n
D.I、II 和 III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第30题-解析\n\n\n\n

用户进程访问内存时缺页会发生缺页中断。发生 缺页中断,系统会执行的操作可能是置换页面或分配内存。系统内没有越界的错误,不会进行越界出错处理。
\n\n\n\n\n", "difficulty": 2}, {"id": 219, "year": 2013, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第31题-题目\n\n\n\n

某系统正在执行三个进程\nP1​\n、\nP2​\n和\nP3​\n,各进程的计算 (CPU) 时间和 I/O 时间比例如下表所示。

\n
进程计算时间I/O 时间
P1​90%10%
P2​50%50%
P3​15%85%
\n

为提高系统资源利用率,合理的进程优先级设置应为( )。

\n
A.P1​>P2​>P3​
\n
B.P3​>P2​>P1​
\n
C.P2​>P1​=P3​
\n
D.P1​>P2​=P3​
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第31题-解析\n\n\n\n

为了合理地设置进程优先级,应该将进程的 CPU 时间和 I/0 时间做综合考虑,对千 CPU 占用时间较少而 I/O 占用时间较多的进程,优先调度能让 I/O 更早地得到使用,提高了系统的资源利用率,显然应该具有更高的优先级。
\n\n\n\n\n", "difficulty": 1}, {"id": 220, "year": 2013, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2013-第32题-题目\n\n\n\n

下列关于银行家算法的叙述中,正确的是( )。

\n
A.银行家算法可以预防死锁
\n
B.当系统处于安全状态时,系统中一定无死锁进程
\n
C.当系统处于不安全状态时,系统中一定会出现死锁进程
\n
D.银行家算法破坏了死锁必要条件中的“请求和保持”条件
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第32题-解析\n\n\n\n

银行家算法 是避免死锁的方法,破坏死锁产生的必要条件是预防死锁的方法。利用银行家算法,系统处于安全状态时就可以避免死锁(即此时必然无死锁);当系统进入不安全状态后便可能进入死锁状态(但也不是必然)。
\n\n\n\n\n", "difficulty": 1}, {"id": 221, "year": 2013, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第33题-题目\n\n\n\n

在 OSI 参考模型中,下列功能需由应用层的相邻层实现的是( )。

\n
A.对话管理
\n
B.数据格式转换
\n
C.路由选择
\n
D.可靠数据传输
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第33题-解析\n\n\n\n

在 OSI 参考模型 中,应用层的相邻层是表示层。表示层是 OSI 七层协议的第六层。表示层的功能是表示出用户看得懂的数据格式,实现与数据表示有关的功能。主要完成数据字符集的转换、数据格式化和文本压缩、数据加密和解密等工作。
\n\n\n\n\n", "difficulty": 1}, {"id": 222, "year": 2013, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第34题-题目\n\n\n\n

若下图为 10 BaseT 网卡接收到的信号波形,则该网卡收到的比特串是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
\n
A.0011 0110
\n
B.1010 1101
\n
C.0101 0010
\n
D.1100 0101
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第34题-解析\n\n\n\n

需要了解 传输介质 的命名规则:10BaseT 即 10Mbps 的以太网,采用 曼彻斯特编码,将一个码元分成两个相等的间隔,前一个间隔为低电平后一个间隔为高电平表示码元 1;码元 0 正好相反,也可以采用相反的规定。故对应比特串可以是 0011 0110 或 1100 1001。
\n\n\n\n\n", "difficulty": 1}, {"id": 223, "year": 2013, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第35题-题目\n\n\n\n

主机甲通过 1 个路由器(存储转发方式)与主机乙互联,两段链路的数据传输速率均为 10Mbps,主机甲分别采用报文交换和分组大小为 10kb 的分组交换向主机乙发送 1 个大小为 8 Mb(1M = 10⁶ )的报文。若忽略链路传播延迟、分组头开销和分组拆装时间,则两种交换方式完成该报文传输所需的总时间分别为( )。

\n
A.800 ms、1600 ms
\n
B.801 ms、1600 ms
\n
C.1600 ms、800 ms
\n
D.1600 ms、801 ms
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第35题-解析\n\n\n\n

本题考察分组交换的 传输时间计算,不进行分组时,发送一个报文的时延是 8Mb / 10Mbps = 800s,采用报文交换时,主机甲发送报文需要一次时延,而报文到达路由器进行存储转发又需要一次时延,总时延为 800ms × 2 = 1600ms。进行分组后,发送一个报文的时延是 10kb / 10Mbps = 1ms,一共有 8Mb / 10kb = 800 个分组,主机甲发送 800 个分组需要 1ms × 800 = 800ms 的时延,而路由器接收到第一个分组后直接开始转发,即除了第一个分组,其余分组经过路由器转发不会产生额外的时延,总时延就为 800ms+1ms=801ms。
\n\n\n\n\n", "difficulty": 1}, {"id": 224, "year": 2013, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第36题-题目\n\n\n\n

下列介质访问控制方法中,可能发生冲突的是( )。

\n
A.CDMA
\n
B.CSMA
\n
C.TDMA
\n
D.FDMA
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第36题-解析\n\n\n\n

选项 A、C 和 D 都是 信道划分协议,信道划分协议是静态划分信道的方法,肯定不会发生冲突。CSMA 全称是载波侦听多路访问协议,其原理是站点在发送数据前先侦听信道,发现信道空闲后再发送,但在发送过程中有可能会发生冲突。
\n\n\n\n\n", "difficulty": 1}, {"id": 225, "year": 2013, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第37题-题目\n\n\n\n

HDLC 协议对 01111100 01111110 组帧后对应的比特串为( )。

\n
A.01111100 00111110 10
\n
B.01111100 01111101 01111110
\n
C.01111100 01111101 0
\n
D.01111100 01111110 01111101
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第37题-解析\n\n\n\n

HDLC 协议 对比特串进行组帧时,HDLC 数据帧以位模式 0111 1110 标识每一个帧的开始和结束,因此在帧数据中凡是出现了 5 个连续的位“1”的时候,就会在输出的位流中填充一个“0”。因此组帧后的比特串为 0111 1100 0011 1110 10。
\n\n\n\n\n", "difficulty": 1}, {"id": 226, "year": 2013, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第38题-题目\n\n\n\n

对于 100 Mbps 的以太网交换机,当输出端口无排队,以直通交换 (cut-through switching) 方式转发一个以太网帧(不包括前导码)时,引入的转发延迟至少是( )。

\n
A.0 μs
\n
B.0.48 μs
\n
C.5.12 μs
\n
D.121.44 μs
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第38题-解析\n\n\n\n

直通交换 在输入端口检测到一个数据帧时,检查帧首部,获取帧的目的地址,启动内部的动态查找表转换成相应的输出端口,在输入与输出交叉处接通,把数据帧直通到相应的端口,实现交换功能。直通交换方式只检查帧的目的地址,共 6B,所以最短的传输延迟是 6 × 8bit / 100Mbps = 0.48μs。
\n\n\n\n\n", "difficulty": 1}, {"id": 227, "year": 2013, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第39题-题目\n\n\n\n

主机甲与主机乙之间已建立一个 TCP 连接,双方持续有数据传输,且数据无差错与丢失。若甲收到 1 个来自乙的 TCP 段,该段的序号为 1913、确认序号为 2046、有效载荷为 100 字节,则甲立即发送给乙的 TCP 段的序号和确认序号分别是( )。

\n
A.2046、2012
\n
B.2046、2013
\n
C.2047、2012
\n
D.2047、2013
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第39题-解析\n\n\n\n

本题考察 序列号和确认号,确认序号 ack 是期望收到对方下一个报文段的数据的第一个字节的序号,序号 seq 是指本报文段所发送的数据的第一个字节的序号。甲收到 1 个来自乙的 TCP 段,该段的序号 seq=1913、确认序号 ack=2046、有效载荷为 100 字节,表明到序号 1913+100-1=2012 为止的所有数据甲均已收到,而乙期望收到下一个报文段的序号从 2046 开始。故甲发给乙的 TCP 段的序号 seq1=ack=2046 和确认序号 ack1=seq+100=2013。
\n\n\n\n\n", "difficulty": 1}, {"id": 228, "year": 2013, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2013-第40题-题目\n\n\n\n

下列关于 SMTP 协议的叙述中,正确的是( )。

\n

I. 只支持传输 7 比特 ASCII 码内容

\n

II. 支持在邮件服务器之间发送邮件

\n

III. 支持从用户代理向邮件服务器发送邮件

\n

IV. 支持从邮件服务器向用户代理发送邮件

\n
A.仅 I、II 和 III
\n
B.仅 I、II 和 IV
\n
C.仅 I、III 和 IV
\n
D.仅 II、III 和 IV
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第40题-解析\n\n\n\n

SMTP协议用于用户代理向邮件服务器发送邮件,或在邮件服务器之间发送邮件。SMTP 协议只支持传输 7 比特的 ASCII 码内容。
\n\n\n\n\n", "difficulty": 1}, {"id": 229, "year": 2013, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2013-第41题-题目\n\n\n\n

已知一个整数序列 \nA=(a0​,a1​,…,an−1​)\n ,其中 \n0≤ai​<n\n(0≤i<n)\n 。

\n

若存在 \nap1​​=ap2​​=⋯=apm​​=x\n 且 \nm>n/2\n(0≤pk​<n,1≤k≤m)\n ,则称 \nx\n 为 \nA\n 的主元素。

\n

例如 \nA=(0,5,5,3,5,7,5,5)\n,则 \n5\n 为主元素;又如 \nA=(0,5,5,3,5,1,5,7)\n ,则 \nA\n 中没有主元素。

\n

假设 \nA\n 中的 \nn\n 个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出 \nA\n 的主元素。若存在主元素,则输出该元素;否则输出 \n−1\n 。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第41题-解析\n\n\n\n

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

算法的策略是从前向后扫描数组元素,标记出一个可能成为主元素的元素 Num。然后重新计数,确认 Num 是否为主元素。

算法可分为以下两步:

① 选取候选的主元素:依次扫描所给数组中的每个整数,将第一个遇到的整数 Num 保存到 c 中,记录 Num 的出现次数为 1;若遇到的下一个整数仍等于 Num,则计数加 1,否则计数减 1;当计数减到 0 时,将遇到的下一个整数保存到 c 中,计数重新记为 1,开始新一轮计数,即从当前位置开始重复上述过程,直到扫描完全部数组元素。

② 判断 c 中元素是否是真正的主元素:再次扫描该数组,统计 c 中元素出现的次数,若大于 2,则为主元素;否则,序列中不存在主元素。

2)算法实现

int majority(int a[], int n) {\n  if (n == 0) {\n    return -1;\n  }\n  // 选取候选元素\n  int num = a[0];\n  int cnt = 1;\n\n  // 如果主元素存在,会被以下过程筛选出来\n  // 但是筛选出来的不一定是主元素\n  for (int i = 1; i < n; i++) {\n    if (a[i] == num) {\n      // 候选元素个数 +1\n      cnt++;\n    } else {\n      // 重新设置候选元素\n      cnt--;\n      if (cnt == 0) {\n        num = a[i];\n        cnt = 1;\n      }\n    }\n  }\n\n  // 再判断候选元素是不是主元素\n  int m = 0;\n  for (int i = 0; i < n; i++) {\n    // 统计候选元素出现的次数\n    if (a[i] == num) {\n      m++;\n    }\n  }\n  if (m > n / 2) {\n    return num;\n  }\n  return -1;\n}\n

【评分说明】

① 若考生设计的算法满足题目的功能要求且正确,则 (1)、(2) 根据所实现算法的效率给分,细则见下表:

时间复杂度空间复杂度(1) 得分(2) 得分
O(n)O(1)47
O(n)O(n)46
O(nlog2​n)其他36
≥O(n2)其他35

② 若在算法的基本设计思想描述中因文字表达没有非常清晰反映出算法思路,但在算法实现中能够清晰看出算法思想且正确的,可参照①的标准给分。

③ 若算法的基本设计思想描述或算法实现中部分正确,可参照①中各种情况的相应给分标准酌情给分。

(3) 说明算法复杂性:

参考答案中实现的程序的时间复杂度为\nO(m)\n,空间复杂度为\nO(1)\n。

【评分说明】若考生所估计的时间复杂度与空间复杂度与考生所实现的算法一致,可各给 1 分。

【说明】本题如果采用先排好序再统计的方法,只要解答正确,最高可拿 9 分,因此对于统考算法题,去花费大量时间去思考最优解法是得不偿失的。

\n\n\n\n\n", "difficulty": 1}, {"id": 230, "year": 2013, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第42题-题目\n\n\n\n

设包含 4 个数据元素的集合 S = { “do”, “for”, “repeat”, “while” },各元素的查找概率依次为: \np1​=0.35\n,\np2​=0.15\n,\np3​=0.15\n,\np4​=0.35\n 。将 S 保存在一个长度为 4 的顺序表中,采用折半查找法,查找成功时的平均查找长度为 2.2 。请回答:

\n

(1) 若采用顺序存储结构保存 S ,且要求平均查找长度更短,则元素应如何排列?应使用何种查找方法?查找成功时的平均查找长度是多少?

\n

(2) 若采用链式存储结构保存 S ,且要求平均查找长度更短,则元素应如何排列?应使用何种查找方法?查找成功时的平均查找长度是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第42题-解析\n\n\n\n

1)折半查找要求元素有序顺序存储,若各个元素的查找概率不同,则折半查找的性能不一定优于顺序查找。采用顺序查找时,元素按其查找概率的降序排列时查找长度最小。

采用顺序存储结构,数据元素按其查找概率降序排列。采用顺序查找方法。

查找成功时的平均查找长度=0.35×1+0.35×2+0.15×3+0.15×4=2.1。

此时,显然查找长度比折半查找的更短。

2)答案一:采用链式存储结构时,只能采用顺序查找,其性能和顺序表一样,类似于上题。数据元素按其查找概率降序排列,构成单链表。采用顺序查找方法。

查找成功时的平均查找长度=0.35×1+0.35×2+0.15×3+0.15×4=2.1。

答案二:还可以构造成二叉排序树的形式。采用二叉链表的存储结构,构造二叉排序树,元素的存储方式见下图。采用二叉排序树的查找方法。

\n\n
for
do
while
repeat
repeat
do
while
for
二叉排序树1
二叉排序树2
或

查找成功时的平均查找长度=0.15×1+0.35×2+0.35×2+0.15×3=2.0。

【评分说明】

①若考生以实际元素表示“降序排列”,同样给分。

②若考生正确求出与其查找方法对应的查找成功时的平均查找长度,给 2 分;若计算过\n程正确,但结果错误,给 1 分。

③考生给出其他更高效的查找方法且正确,可参照评分标准给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 231, "year": 2013, "index": 43, "type": 2, "typeName": "应用题", "score": 9, "subject": "computer-network", "question": "\n\n\n\n\n\n2013-第43题-题目\n\n\n\n

某 32 位计算机,CPU 主频为 800MHz,Cache 命中时的 CPI 为 4,Cache 块大小为 32 字节;主存采用 8 体交叉存储方式,每个体的存储字长为 32 位、存储周期是 40ns;存储器总线宽度为 32 位,总线时钟频率为 200MHz,支持突发传送总线事务。每次读突发传送总线事务的过程包括:送首地址和命令、存储器准备数据、传送数据。每次突发传送 32 字节,传送地址或者 32 位数据均需要一个总线时钟周期。请回答下列问题,要求给出理由或者计算过程。

\n

(1) CPU 和总线的时钟周期各是多少?总线的带宽(即最大数据传输率)为多少?

\n

(2) Cache 缺失时,需要用几个读突发传送总线事务来完成一个主存块的读取?

\n

(3) 存储器总线完成一次读突发传送总线事务所需的时间是多少?

\n

(4) 若程序 BP 执行过程中,共执行了 100 条指令,平均每条指令需要 1.2 次访存,Cache 缺失率是 5%,不考虑替换等开销,则 BP 的 CPU 执行时间是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第43题-解析\n\n\n\n

1)CPU 的时钟周期是主频的倒数,即 1/800MHz=1.25ns。

总线的时钟周期是总线频率的倒数,即 1/200MHz=5ns。

总线宽度为 32 位,故总线带宽为 4B×200MHz=800MB/s 或 4B/5ns=800MB/s。

2)Cache 块大小是 32B,因此 Cache 缺失时需要一个读突发传送总线事务读取一个主存块。

3)本题重点考查多体交叉存储器的 并行性。一次 读突发总线传输事务 包括一次地址传送和 32B 数据传送:用 1 个总线时钟周期传输地址;每隔 40ns/8=5ns 启动一个体工作(各进行 1 次存取),第一个体读数据花费 40ns,之后数据存取与数据传输重叠;用 8 个总线时钟周期传输数据。读突发传送总线事务时间:5ns+40s+8×5ns=85ns

4)BP 的 CPU 执行时间包括 Cache 命中时的指令执行时间和 Cache 缺失时带来的额外开销。命中时的指令执行时间:100×4×1.25ns=500ns。\n指令执行过程中 Cache 缺失时的额外开销:1.2×100×5%×85ns=510ns。BP 的 CPU 执行时间:500ns+510ns=1010ns。

【评分说明】

① 执行时间采用如下公式计算时,可酌情给分。

执行时间=指令条数×CPI×时钟周期×命中率 + 访存次数×缺失率×缺失损失

② 计算公式正确但运算结果不正确时,可酌情给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 232, "year": 2013, "index": 44, "type": 2, "typeName": "应用题", "score": 14, "subject": "computer-network", "question": "\n\n\n\n\n\n2013-第44题-题目\n\n\n\n

某计算机采用 16 位定长指令字格式,其 CPU 中有一个标志寄存器,其中包含进位/借位标志 CF、零标志 ZF 和符号标志 NF。假定为该机设计了条件转移指令,其格式如下:

\n
\n\n\n\n \n 408真题系统\n \n\n
0 0 0 0 0
15
11
C
Z
N
OFFSET
10
9
8
7
0
\n

其中,00000 为操作码 OP;C、Z 和 N 分别为 CF、ZF 和 NF 的对应检测位,某检测位为 1 时表示需检测对应标志,需检测的标志位中只要有一个为 1 就转移,否则就不转移,例如,若 C=1,Z=0,N=1,则需检测 CF 和 NF 的值,当 CF=1 或 NF=1 时发生转移;OFFSET 是相对偏移量,用补码表示。转移执行时,转移目标地址为 (PC)+2+2×OFFSET;顺序执行时,下条指令地址为 (PC)+2。请回答下列问题。

\n

(1) 该计算机存储器按字节编址,还是按字编址?该条件转移指令向后(反向)最多可跳转最多少条指令?

\n

(2) 某条件转移指令的地址为 200CH,指令内容如下图所示,若该执行时 CF=0,ZF=0,NF=1,则该指令执行后 PC 的值是多少?若该指令执行时 CF=1,ZF=0,NF=0,则该指令执行后 PC 的值又是多少?请给出计算过程。

\n
\n\n
0 0 0 0 0
15
11
0
1
1
1 1 1 0 0 0 1 1
10
9
8
7
0
\n

(3) 实现“无符号数比较小于等于时转移”功能的指令中,C、Z 和 N 应各是什么?

\n

(4) 以下是该指令对应的数据通路示意图,要求给出中部件①~③的名称或功能说明。

\n
\n\n
标志寄存器
OP
OFFSET
N
Z
C
①
符号扩展器
②
③
多路选择器
PC
2
加法器
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第44题-解析\n\n\n\n

1)因为指令长度为 16 位,且下条指令地址为 (PC)+2,故编址单位是字节。

偏移量 OFFSET 为 8 位补码,范围为 -128~127,故相对于当前条件转移指令,向后最多可跳转 127 条指令。

【评分说明】若正确给出 OFFSET 的取值范围,则酌情给分。

2)指令中 C=0,Z=1,N=1,故应根据 ZF 和 NT 的值来判断是否转移。当 CF=0,ZF=0,NF=1 时,需转移。己知指令中偏移量为 11100011B=E3H,符号扩展后为 FFE3H,左移一位(乘 2)后为 FFC6H,故 PC 的值(即转移目标地址)为 200CH+2+FFC6H=1FD4H。当 CF=1,ZF=0,NF=0 时不转移。PC 的值为 200CH+2=200EH。

3)指令中的 C、Z 和 N 应分别设置为 C=Z=1,N=0,进行数之间的大小比较通常是对两个数进行减法,而因为是无符号数比较小于等于时转移,即两个数相减结果为 0 或者负数都应该转移,若是 0,则 ZF 标志应当为 1,所以是负数,则借位标志应该为 1,而无符号数并不涉及符号标志 NF。

4)部件①用于存放当前指令,不难得出为指令寄存器;多路选择器根据符号标志 C/Z/N 来决定下一条指令的地址是 PC+2 还是 PC+2+2×OFFSET,故多路选择器左边线上的结果应该是 PC+2+2×OFFSET。根据运算的先后顺序以及与 PC+2 的连接,部件②用于左移一位实现乘 2,为移位寄存器。部件③用于 PC+2 和 2×OFFSET 相加,为加法器。

部件②:移位寄存器(用于左移一位);部件③:加法器(地址相加)。

【评分说明】合理给出部件名称或功能说明均给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 233, "year": 2013, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第45题-题目\n\n\n\n

某博物馆最多可以容纳 500 人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下:

\n

请添加必要的信号量和 P、V(或 wait()、signal())操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第45题-解析\n\n\n\n

出入口一次仅允许一个人通过,设置互斥信号量 mutex, 初值为 1。博物馆最多可同时容\n纳 500 人,故设置信号量 empty, 初值为 500。

semaphore empty = 500;\nsemaphore mutex = 1;\n\nvisitor() {\n    P(empty);\n    P(mutex);\n    进门;\n    V(mutex);\n    参观;\n    P(mutex);\n    出门;\n    V(mutex);\n    V(empty);\n}\n

【评分说明】

①信号量初值给 1 分,说明含义给 1 分,两个信号量的初值和含义共 4 分。

②对 mutex 的 P、V 操作正确给 2 分。

③对 empty 的 P、V 操作正确给 1 分。

④其他答案,参照①~③的标准给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 234, "year": 2013, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第46题-题目\n\n\n\n

某计算机主存按字节编址,逻辑地址和物理地址都是 32 位,页表项大小为 4 字节。请回答下列问题。

\n

(1) 若使用一级页表的分页存储管理方式,逻辑地址结构为:

\n
\n\n\n\n \n 408真题系统\n \n\n
页号(20 位)
页内偏移量(12 位)
\n

则页的大小是多少字节?页表最大占用多少字节?

\n

(2) 若使用二级页表的分页存储管理方式,逻辑地址结构为:

\n
\n\n
页目录号(10 位)
页表索引(10 位)
页内偏移量(12 位)
\n

设逻辑地址为 LA,请分别给出其对应的页目录号和页表索引的表达式。

\n

(3) 采用 (1) 中的分页存储管理方式,一个代码段起始逻辑地址为 0000 8000H,其长度为 8KB,被装载到从物理地址 0090 0000H 开始的连续主存空间中。页表从主存 0020 0000H 开始的物理地址处连续存放,如下图所示(地址大小自下向上递增)。请计算出该代码段对应的两个页表项的物理地址、这两个页表项中的页框号以及代码页面 2 的起始物理地址。

\n
\n\n
页框号 2
物理地址 2
页框号 1
物理地址 1
0020 0000H
页表
代码页面 1
代码页面 2
物理地址 3
0090 0000H
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第46题-解析\n\n\n\n

1)因为主存按字节编址,页内偏移量是 12 位,所以页大小为\n212\nB=\n4\nKB。(1 分)

页表项数为\n220\n,故该一级页表最大为\n220×4\nB =\n4\nMB。(2 分)

2)页目录号可表示为:(((unsigned int)(LA)) >> 22) & 0x3FF。(1 分)

页表索引可表示为:(((unsigned int)(LA)) >> 12) & 0x3FF。(1 分)

【评分说明】

①页目录号也可以写成 (unsigned int)(LA) > 22;如果两个表达式没有对 LA 进行类型转换,同样给分。

②如果用除法和其他开销很大的运算方法,但对基本原理是理解的,同样给分。

③参考答案给出的是 C 语言的描述,用其他语言(包括自然语言)正确地表述了,同样给分。

3)代码页面 1 的逻辑地址为 00008000H,表明其位于第 8 个页的位置,对应页表中的第 8 个页表项,所以第 8 个页表项的物理地址 = 页表起始地址 + 8×页表项的字节数 = 00200000H + 8×4 = 00200020H。由此可得如下图所示的答案。(3 分)

\n\n
00901H
00900H
0020 0024H
0020 0020H
代码页面2
代码页面1
0090 1000H
0090 0000H
页表

【评分说明】共 5 个答数。物理地址 1 和物理地址 2 共 1 分;页框号 1 和页框号 2 共 1 分;物理地址 3 给 1 分。

\n\n\n\n\n", "difficulty": 1}, {"id": 235, "year": 2013, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2013-第47题-题目\n\n\n\n

假设 Internet 的两个自治系统构成的网络如题 47 图所示,自治系统 AS1 由路由器 R1 连接两个子网构成;自治系统 AS2 由路由器 R2、R3 互联并连接 3 个子网构成。各子网地址、R2 的接口名、R1 与 R3 的部分接口 IP 地址如题 47 图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
153.14.5.128/25
194.17.20.128/25
194.17.21.0/25
194.17.20.0/25
153.14.5.0/25
R1
R2
S0
S1
E0
R3
153.14.3.2
194.17.24.2
AS1
AS2
\n

请回答下列问题。

\n

(1) 假设路由表结构如下表所示。

\n
\n\n
目的网络
下一跳
接口
\n

请利用路由聚合技术,给出 R2 的路由表,要求包括到达题 47 图中所有子网的路由,且路由表中的路由项尽可能少。

\n

(2) 若 R2 收到一个目的 IP 地址为 194.17.20.200 的 IP 分组,R2 会通过哪个接口转发该 IP 分组?

\n

(3) R1 与 R2 之间利用哪个路由协议交换路由信息?该路由协议的报文被封装到哪个协议的分组中进行传输?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2013-第47题-解析\n\n\n\n

1)要求 R2 的路由表能到达图中所有的子网,且路由项尽可能的少,则应对每个路由接口的子网进行 聚合。在 AS1 中,子网 153.14.5.0/25 和子网 153.14.5.128/25 可以聚合为子网 153.14.5.0/24;在 AS2 中,子网 194.17.20.0/25 和子网 194.17.21.0/24 可以聚合为子网 194.17.20.0/23;子网 194.17.20.128/25 单独连接到 R2 的接口 E0。(6 分)

于是可以得到 R2 的路由表如下:

目的网络下一跳接口
153.14.5.0/24153.14.3.2S0
194.17.20.0/23194.17.24.2S1
194.17.20.128/25-E0

【评分说明】①每正确解答 1 个路由项,给 2 分,共 6 分。每条路由项正确解答目的网络 IP 地址但无前缀长度,给 0.5 分,正确解答前缀长度给 0.5 分,正确解答下一跳 IP 地址给 0.5 分,正确解答接口给 0.5 分。

②路由项解答部分正确或路由项多于 3 条,可酌情给分。

2)该 IP 分组的目的 P 地址 194.17.20.200 与路由表中 194.17.20.0/23 和 194.17.20.128/25 两个路由表项均匹配,根据 最长匹配原则,R2 将通过 E0 接口转发该 P 分组。(1 分)

3)R1 和 R2 属于不同的 自治系统,故应使用边界网关协议 BGP(或 BGP4)交换路由信息;(1 分)BGP 是应用层协议,它的报文被封装到 TCP 协议段中进行传输。(1 分)

【评分说明】若考生解答为 EGP 协议,且正确解答 EGP 采用 IP 协议进行通信,亦给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 236, "year": 2014, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第1题-题目\n\n\n\n

下列程序段的时间复杂度是( )。

\n
count = 0;\nfor (k = 1; k <= n; k *= 2)\n    for (j = 1; j <= n; j++)\n        count++;\n
\n
A.O(log2​n)
\n
B.O(n)
\n
C.O(nlog2​n)
\n
D.O(n2)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第1题-解析\n\n\n\n

内层循环条件\nj≤n\n与外层循环的变量无关,每次循环\nj\n自增 1, 每次内层循环都执行\nn\n次。外层循环条件为\nk≤n\n, 增量定义为\nk\n*= 2, 可知循环次数为\n2k≤n\n, 即\nk≤log2​(n)\n。所以内层循环的时间复杂度是\nO(n)\n, 外层循环的时间复杂度是\nO(log2n)\n。对于嵌套循环,根据乘法规则可知,该段程序的时间复杂度\nT(n)=T1​(n)T2​(n)=O(n)O(log2​(n))=O(nlog2n)\n, 选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 237, "year": 2014, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第2题-题目\n\n\n\n

假设栈初始为空,将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中,当扫描到 f 时,栈中的元素依次是( )。

\n
A.+(*-
\n
B.+(-*
\n
C./+(*−*
\n
D./+-*
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n2014-第2题-解析\n\n\n\n

\n

将中缀表达式转换为后缀表达式的算法思想如下:

\n

初始化一个 操作符栈,从左向右开始扫描中缀表达式;

\n\n

以中序表达式 a/b+(c*d-e*f)/g 为例,可以通过如下步骤将其转换为后续表达式:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
待处理序列栈后缀表达式当前扫描元素动作
a/b+(c*d-e*f)/gaa 加入后缀表达式
/b+(c*d-e*f)/ga// 入栈
b+(c*d-e*f)/g/abb 加入后缀表达式
+(c*d-e*f)/g/ab++ 优先级 低于栈顶的 /,弹出 /
+(c*d-e*f)/gab/++ 入栈
(c*d-e*f)/g+ab/(( 入栈
c*d-e*f)/g+(ab/cc 加入后缀表达式
*d-e*f)/g+(ab/c*栈顶为 (,* 入栈
d-e*f)/g+(*ab/cdd 加入后缀表达式
-e*f)/g+(*ab/cd-- 优先级低于栈顶的 *,弹出 *
-e*f)/g+(ab/cd*-栈顶为 (,- 入栈
e*f)/g+(-ab/cd*ee 加入后缀表达式
*f)/g+(-ab/cd*e** 优先级 高于栈顶的 -, * 入栈
f)/g+(-*ab/cd*eff 加入后缀表达式
)/g+(-*ab/cd*ef)把栈中 ( 之前的符号加入表达式
/g+ab/cd*ef*-// 优先级 高于栈顶的 +,/ 入栈
g+/ab/cd*ef*-gg 加入后缀表达式
+/ab/cd*ef*-g扫描完毕,运算符依次退栈加入表达式
ab/cd*ef*-g/+完成
\n
\n\n\n\n\n", "difficulty": 1}, {"id": 238, "year": 2014, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第3题-题目\n\n\n\n

循环队列放在一维数组 A[0..M-1] 中,end1 指向队头元素,end2 指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳 M-1 个元素。初始时为空。下列判断队空和队满的条件中,正确的是( )。

\n
A.队空:end1 == end2;队满:end1 == (end2 + 1) mod M
\n
B.队空:end1 == end2;队满:end2 == (end1 + 1) mod (M - 1)
\n
C.队空:end1 == (end1 + 1) mod M;队满:end1 == (end2 + 1) mod M
\n
D.队空:end1 == (end2 + 1) mod M;队满:end2 == (end1 + 1) mod (M - 1)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第3题-解析\n\n\n\n

本题考查 循环队列:end1 指向队头元素,那么可知出队的操作是先从 A[end1] 读数,然后 end1 再加 1。end2 指向队尾元素的后一个位置,那么可知入队操作是先存数到 A[end2],然后 end2 再加 1。若把 A[0]储存第一个元素,当队列初始时,入队操作是先把数据放到 A[0],然后 end2 自增,即可知 end2 初值为 0;end1 指向的是队头元素,队头元素的在数组 A 中的下标为 0,所以得知 end1 初值也为 0,可知队空条件为 end1-end2。然后考虑队列满时,因为队列最多能容纳 M-1 个元素,假设队列存储在下标为 0 到下标为 M-2 的 M-1 个区域,队头为 A[0],队尾为 A[M-2],此时队列满,考虑在这种情况下 end1 和 end2 的状态,end1 指向队头元素,可知 end1-0,end2 指向队尾元素的后一个位置,可知 end2=M-2+1=M-1,所以可知队满的条件为 end1-(end2+1)modM,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 239, "year": 2014, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第4题-题目\n\n\n\n

若对如下的二叉树进行中序线索化,则结点 x 的左、右线索指向的结点分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
c
d
x
e
\n
A.e、c
\n
B.e、a
\n
C.d、c
\n
D.b、a
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第4题-解析\n\n\n\n

线索二叉树 的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点,所以先写出二叉树的中序遍历序列 debxac, 中序遍历中在 x 左边和右边的字符,就是它在中序线索化的左、右线索,即 b、a, 选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 240, "year": 2014, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第5题-题目\n\n\n\n

将森林 F 转换为对应的二叉树 T,F 中叶子的个数等于( )。

\n
A.T 中叶结点的个数
\n
B.T 中度为 1 的结点个数
\n
C.T 中左孩子指针为空的结点个数
\n
D.T 中右孩子指针为空的结点个数
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第5题-解析\n\n\n\n

将 森林转化为二叉树 即相当于用孩子兄弟表示法表示森林。在变化过程中,原森林某结点的第一个孩子结点作为它的左子树,它的兄弟作为它的右子树。那么森林中的叶结点由千没有孩子结点,那么转化为二叉树时,该结点就没有左结点,所以 F 中叶结点的个数就等于 T 中左孩子指针为空的结点个数,选 C。此题还可以通过一 些特例来排除 A、B、D 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 241, "year": 2014, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第6题-题目\n\n\n\n

5 个字符有如下 4 种编码方案,不是前缀编码的是( )。

\n
A.01, 0000, 0001, 001, 1
\n
B.011, 000, 001, 010, 1
\n
C.000, 001, 010, 011, 100
\n
D.0, 100, 110, 1110, 1100
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第6题-解析\n\n\n\n

前缀编码 的定义是在一个字符集中,任何一个字符的编码都不是另一个字符 编码的前缀。选项 D 中编码 110 是编码 1100 的前缀,违反了前缀编码的规则,所以 D 不是前缀编码。
\n\n\n\n\n", "difficulty": 1}, {"id": 242, "year": 2014, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第7题-题目\n\n\n\n

对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是()

\n
\n\n\n\n \n 408真题系统\n \n\n
1
2
4
3
5
6
\n
A.3,1,2,4,5,6
\n
B.3,1,2,4,6,5
\n
C.3,1,4,2,5,6
\n
D.3,1,4,2,6,5
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第7题-解析\n\n\n\n

按照 拓扑排序 的算法,每次都选择入度为 0 的结点从图中删去,此图中一开始只有结点 3 的入度为 0;删掉结点 3 后,只有结点 1 的入度为 0; 删掉结点 1 后,只有结点 4 的入度为 0;删掉结点 4 后,结点 2 和结点 6 的入度都为 0,此时选择删去不同的结点,会得出不同的拓扑序列,分别处理完毕后可知可能的拓扑序列为 3,1 4,2,6,5 和 3,1,4,6,2,5, 选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 243, "year": 2014, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第8题-题目\n\n\n\n

用哈希(散列)方法处理冲突(碰撞)时可能出现堆积(聚集)现象,下列选项中,会受堆积现象直接影响的是()

\n
A.存储效率
\n
B.散列函数
\n
C.装填(装载)因子
\n
D.平均查找长度
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第8题-解析\n\n\n\n

产生堆积现象,即产生了冲突,它对存储效率、散列函数和装填因子均 不会有影响,而 平均查找长度 会因为堆积现象而增大,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 244, "year": 2014, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第9题-题目\n\n\n\n

在一棵具有 15 个关键字的 4 阶 B 树中,含关键字的结点个数最多是()

\n
A.5
\n
B.6
\n
C.10
\n
D.15
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第9题-解析\n\n\n\n

关键字数量不变,要求结点数量最多,那么即每个结点中含关键字的数最最少。根据 4 阶 B 树 的定义,根结点最少含 1 个关键字,非根结点中最少含 ⌈4/2⌉-1=1 个关键字,所以每个结点中,关键字数量最少都为 1 个,即每个结点都有 2 个分支,类似于排序二叉树,而 15 个结点正好可以构造一个 4 层的 4 阶 B 树,使得叶结点全在第四层,符合 B 树定义,因此选 D。
\n\n\n\n\n", "difficulty": 2}, {"id": 245, "year": 2014, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第10题-题目\n\n\n\n

用希尔排序方法对一个数据序列进行排序时,若第 1 趟排序结果为 9,1,4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是()

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第10题-解析\n\n\n\n

首先,第二个元素为 1,是整个序列中的最小元素,所以可知该 希尔排序 为从小到大排序然后考虑增量问题,若增量为 2,第 1+2 个元素 4 明显比第 1 个元素 9 要大,A 排除;若增量为 3,第 i、i+3、i+6 个元素都为有序序列 (i=1,2,3),符合希尔排序的定义;若增量为 4,第 1 个元素 9 比第 1+4 个元素 7 要大,C 排除;若增量为 5,第 1 个元素 9 比第 1+5 个元素 8 要大,D 排除,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 246, "year": 2014, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第11题-题目\n\n\n\n

下列选项中,不可能是快速排序第 2 趟排序结果的是()

\n
A.2,3,5,4,6,7,9
\n
B.2,7,5,6,4,3,9
\n
C.3,2,5,4,7,6,9
\n
D.4,2,3,5,7,6,9
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第11题-解析\n\n\n\n

快速排序 的阶段性排序结果的特点是,第 i 趟完成时,会有 i 个以上的数出现在它最终将要出现的位置,即它左边的数都比它小,它右边的数都比它大。题目问第二趟 排序的结果,即要找不存在两个这样的数的选项。A 选项中 2、3、6、7、9 均符合,所以 A 排除;B 选项中,2、9 均符合,所以 B 排除;D 选项中 5、9 均符合,所以 D 选项排除;最后看 C 选项,只有 9 一个数符合,所以 C 不可能是快速排序第二趟的结果。
\n\n\n\n\n", "difficulty": 1}, {"id": 247, "year": 2014, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第12题-题目\n\n\n\n

程序 P 在机器 M 上的执行时间是 20 秒,编译优化后,P 执行的指令数减少到原来的 70%,而 CPI 增加到原来的 1.2 倍,则 P 在 M 上的执行时间是( )。

\n
A.8.4 秒
\n
B.11.7 秒
\n
C.14 秒
\n
D.16.8 秒
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第12题-解析\n\n\n\n

不妨设原来指令条数为 X,那么原 CPI 就为 20/x,经过编译优化后,指令条数减少到原来的 70%,即指令条数为 0.7x,而 CPI 增加到原来的 1.2 倍,即 24/x,那么 现在 P 在 M 上的执行时间就为 指令条数×CPI = 0.7x × 24/x = 24x0.7 = 16.8s,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 248, "year": 2014, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第13题-题目\n\n\n\n

若 x=103,y=-25,则下列表达式采用 8 位定点补码运算实现时,会发生溢出的是( )。

\n
A.x+y
\n
B.-x+y
\n
C.x-y
\n
D.-x-y
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第13题-解析\n\n\n\n

8 位 定点补码 表示的数据范围为 -128~127,若运算结果超出这个范围则会溢出,A 选项 x+y=103-25=78,符合范围,A 排除;B 选项-x+y=-103-25=-128,符合范围,B 排除;D 选项-x-y=-103+25=-78,符合范围,D 排除;C 选项 x-y=103+25=128,超过了 127,选 C.
\n\n\n\n\n", "difficulty": 1}, {"id": 249, "year": 2014, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第14题-题目\n\n\n\n

float 型数据常用 IEEE754 单精度浮点格式表示。假设两个 float 型变量 x 和 y 分别存放在 32 位寄存器 f1 和 f2 中,若 (f1)=CC90 0000H,(f2)=B0C0 0000H,则 x 和 y 之间的关系为( )。

\n
A.x<y 且符号相同
\n
B.x<y 且符号不同
\n
C.x>y 且符号相同
\n
D.x>y 且符号不同
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第14题-解析\n\n\n\n

(f1) 和 (f2) 对应的二进制分别是\n(110011001001⋯)2​\n和\n(101100001100⋯)2​\n, 根据 IEEE754 浮点数标准,可知 (f1) 的数符为 1,阶码为 10011001,尾数为 1.001,而 (f2) 的数符为 1,阶码为 01100001,尾数为\n1.1\n,则可知两数均为负数,符号相同,B、D 排除。 (f1) 的绝对值为\n1.001×226\n, (f2) 的绝对值为\n1.1×2−30\n,则 (f1) 的绝对值比 (f2) 的绝对值大,而符号为负,真值大小相反,即 (f1) 的真值比 (f2) 的真值小,即 x<y,选 A。

此题还有更为简便的算法, (f1) 与 (f2) 的前 4 位为 1100 与 1011,可以看出两数均为负数,而阶码用移码表示,两数的阶码头三位分别为 100 和 011, 可知 (f1) 的阶码大于 (f2) 的阶码,又因为是 IEEE754 规格化的数,尾数部分均为 l.xxx, 则阶码大的数,真值的绝对值必然大,可知 (f1) 真值的绝对值大于 (f2) 真值的绝对值,因为都为负数,则 (fl)<(f2), 即 x<y。

\n\n\n\n\n", "difficulty": 1}, {"id": 250, "year": 2014, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第15题-题目\n\n\n\n

某容量为 256MB 的存储器由若干 4M×8 位的 DRAM 芯片构成,该 DRAM 芯片的地址引脚和数据引脚总数是( )。

\n
A.19
\n
B.22
\n
C.30
\n
D.36
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第15题-解析\n\n\n\n

4Mx8 位的芯片数据线应为 8 根,地址线应为\nlog2​4M=22\n根,而 DRAM 采用 地址复用 技术,地址线是原来的 1/2,且地址信号分行、列两次传送。地址线数为 22/2 = 11 根,所以地址引脚与数据引脚的总数为 11+ 8=19 根,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 251, "year": 2014, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第16题-题目\n\n\n\n

采用指令 Cache 与数据 Cache 分离的主要目的是( )。

\n
A.降低 Cache 的缺失损失
\n
B.提高 Cache 的命中率
\n
C.降低 CPU 平均访存时间
\n
D.减少指令流水线资源冲突
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第16题-解析\n\n\n\n

把指令 Cache 与数据 Cache 分离后,取指和取数分别到不同的 Cache 中寻找,那么指令流水线中取指部分和取数部分就可以很好地避免冲突,即减少了指令流水线的冲突,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 252, "year": 2014, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第17题-题目\n\n\n\n

某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段(含寻址方式位)为 8 位,Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则 Store 指令中偏移量的取值范围是( )。

\n
A.-32768 ~ +32767
\n
B.-32767 ~ +32768
\n
C.-65536 ~ +65535
\n
D.-155535 ~ +65536
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第17题-解析\n\n\n\n

采用 32 位定长指令字,其中操作码为 8 位,两个地址码一共占用 32-8=24 位,而 Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址,机器中共有 16 个通用寄存器,则寻址一个寄存器需要 logz16 =4 位,源操作数中的寄存器直接寻址用掉 4 位,而目的操作数采用基址寻址也要指定一个寄存器,同样用掉 4 位,则留给偏移址的位数为 24-4-4=16 位,而偏移址用补码表示,16 位补码的表示范围为 -32768~+32767,选 A。
\n\n\n\n\n", "difficulty": 2}, {"id": 253, "year": 2014, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第18题-题目\n\n\n\n

某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法(下地址字段法)确定下条微指令地址,则微指令中下地址字段的位数至少是( )。

\n
A.5
\n
B.6
\n
C.8
\n
D.9
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第18题-解析\n\n\n\n

计算机共有 32 条指令,各个指令对应的 微程序 平均为 4 条,则指令对应的微指令为 32x4=128 条,而公共微指令还有 2 条,整个系统中微指令的条数一共为 128+ 2 = 130 条,所以需要\nlog2​130=8\n位才能寻址到 130 条微指令,答案选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 254, "year": 2014, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第19题-题目\n\n\n\n

某同步总线采用数据线和地址线复用方式,其中地址/数据线有 32 根,总线时钟频率为 66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是( )。

\n
A.132MB/s
\n
B.264MB/s
\n
C.528MB/s
\n
D.1056MB/s
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第19题-解析\n\n\n\n

数据线有 32 根,也就是一次可以传送 32bit/8 = 4B 的数据,66MHz 意味着有 66M 个时钟周期,而每个时钟周期传送两次数据,可知总线每秒传送的最大数据量为 66Mx2x4B=528MB,所以总线的最大数据传输率为 528MB/s,选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 255, "year": 2014, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第20题-题目\n\n\n\n

一次总线事务中,主设备只需给出一个首地址,从设备就能从首地址开始的若干连续单元读出或写入多个数据。这种总线事务方式称为( )。

\n
A.并行传输
\n
B.串行传输
\n
C.突发传输
\n
D.同步传输
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第20题-解析\n\n\n\n

突发传输 是在一个总线周期中,可以传输多个存储地址连续的数据,即一次传输一个地址和一批地址连续的数据,并行传输是在传输中有多个数据位同时在设备之间进行的传输,串行传输是指数据的二进制代码在一条物理信道上以位为单位按时间顺序逐位传输的方式,同步传输是指传输过程由统一的时钟控制,选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 256, "year": 2014, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第21题-题目\n\n\n\n

下列有关 I/O 接口的叙述中,错误的是( )。

\n
A.状态端口和控制端口可以合用同一个寄存器
\n
B.I/O 接口中 CPU 可访问的寄存器称为 I/O 端口
\n
C.采用独立编址方式时,I/O 端口地址和主存地址可能相同
\n
D.采用统一编址方式时,CPU 不能用访存指令访问 I/O 端口
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第21题-解析\n\n\n\n

采用 统一编址 时,CPU 访存和访问 I/O 端口用的是一样的指令,所以访存指令可以访问 I/O 端口,D 选项错误,其他三个选项均为正确陈述,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 257, "year": 2014, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第22题-题目\n\n\n\n

若某设备中断请求的响应和处理时间为 100ns,每 400ns 发出一次中断请求,中断响应所允许的最长延迟时间为 50ns,则在该设备持续工作过程中,CPU 用于该设备的 I/O 时间占整个 CPU 时间的百分比至少是( )。

\n
A.12.5%
\n
B.25%
\n
C.37.5%
\n
D.50%
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第22题-解析\n\n\n\n

每 400ns 发出一次中断请求,而响应和处理时间为 100ns,其中允许的延迟为干扰信息,因为在 50ns 内,无论怎么延迟,每 400ns 还是要花费 100ns 处理中断的,所以该设备的 I/O 时间占整个 CPU 时间的百分比为 100ns/400ns = 25%,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 258, "year": 2014, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第23题-题目\n\n\n\n

下列调度算法中,不可能导致饥饿现象的是( )。

\n
A.时间片轮转
\n
B.静态优先数调度
\n
C.非抢占式短作业优先
\n
D.抢占式短作业优先
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第23题-解析\n\n\n\n

采用 静态优先级调度 时,当系统总是出现优先级高的任务时,优先级低的任务会总是得不到处理机而产生饥饿现象;短任务优先调度不管是抢占式或是非抢占的,当系统总是出现新来的短任务时,长任务会总是得不到处理机,产生饥饿现象,因此 B、C、D 都错误,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 259, "year": 2014, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第24题-题目\n\n\n\n

某系统有 n 台互斥使用的同类设备,三个并发进程分别需要 3、4、5 台设备,可确保系统不发生死锁的设备数 n 最小为( )。

\n
A.9
\n
B.10
\n
C.11
\n
D.12
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第24题-解析\n\n\n\n

本题考察 死锁产生的必要条件,三个并发进程分别需要 3、4、5 台设备,当系统只有 (3-1) + (4-1) + (5-1) =9 台设备时,第一个进程分配 2 台,第二个进程分配 3 台,第三个进程分配 4 台。这种情况下,三个进程均无法继续执行下去,发生死锁。当系统中再增加 1 台设备,也就是总共 10 台设备时,这最后 1 台设备分配给任意一个进程都可以顺利执行完成,因此保证系统不发生死锁的最小设备数为 10。
\n\n\n\n\n", "difficulty": 1}, {"id": 260, "year": 2014, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第25题-题目\n\n\n\n

下列指令中,不能在用户态执行的是( )。

\n
A.trap 指令
\n
B.跳转指令
\n
C.压栈指令
\n
D.关中断指令
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第25题-解析\n\n\n\n

trap 指令、跳转指令和压栈指令均可以在用户态执行,其中 trap 指令负责由用户态转换成为内核态,而关中断指令为特权指令,必须在核心态才能执行,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 261, "year": 2014, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第26题-题目\n\n\n\n

一个进程的读磁盘操作完成后,操作系统针对该进程必做的是(  )。

\n
A.修改进程状态为就绪态
\n
B.降低进程优先级
\n
C.给进程分配用户内存空间
\n
D.增加进程时间片大小
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第26题-解析\n\n\n\n

本题考察 状态种类,进程申请读磁盘操作的时候,因为要等待 I/O 操作完成,会把自身阻塞,此时进程就变为了阻塞状态,当 I/O 操作完成后,进程得到了想要的资源,就会从阻塞态转换到就绪态(这是操作系统的行为)。而降低进程优先级、分配用户内存空间和增加进程的时间片大小都不一定会发生,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 262, "year": 2014, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第27题-题目\n\n\n\n

现有一个容量为 10GB 的磁盘分区,磁盘空间以簇 (Cluster) 为单位进行分配,簇的大小为 4KB,若采用位图法管理该分区的空闲空间,即用一位 (bit) 标识一个簇是否被分配,则存放该位图所需簇的个数为( )。

\n
A.80
\n
B.320
\n
C.80K
\n
D.320K
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第27题-解析\n\n\n\n

簇 的总数为 10GB/4KB = 2.5M, 用一位标识一簇是否被分配,则整个磁盘共需要 2.5M 位,即需要 2.5M/8 =320KB, 因此共需要 320KB/4KB = 80 个簇,选 A。
\n\n\n\n\n", "difficulty": 2}, {"id": 263, "year": 2014, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第28题-题目\n\n\n\n

下列措施中,能加快虚实地址转换的是( )。

\n

I. 增大快表 (TLB) 容量

\n

II. 让页表常驻内存

\n

III. 增大交换区 (swap)

\n
A.仅 I
\n
B.仅 II
\n
C.仅 I、II
\n
D.仅 II、IIII
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第28题-解析\n\n\n\n

虚实地址转换 是指逻辑地址和物理地址的转换。增大快表容量能把更多的表项装入快表中,会加快虚实地址转换的平均速率;让页表常驻内存可以省去一 些不在内存中的页表从磁盘上调入的过程,也能加快虚实地址转换;增大交换区对虚实地址转换速度无影响,因此 I、II 正确,选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 264, "year": 2014, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第29题-题目\n\n\n\n

在一个文件被用户进程首次打开的过程中,操作系统需要做的是( )。

\n
A.将文件内容读到内存中
\n
B.将文件控制块读到内存中
\n
C.修改文件控制块中的读写权限
\n
D.将文件的数据缓冲区首指针返回给用户进程
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第29题-解析\n\n\n\n

一个文件被用户进程首次打开即被执行了 open 操作,会把文件的 FCB 调入内存,而不会把文件内容读到内存中,只有进程希望获取文件内容的时候才会读入文件内容;C、D 明显错误,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 265, "year": 2014, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第30题-题目\n\n\n\n

在页式虚拟存储管理系统中,采用某些页面置换算法,会出现 Belady 异常现象,即进程的缺页次数会随着分配给该进程的页框个数的增加而增加。下列算法中,可能出现 Belady 异常现象的是( )。

\n

I. LRU 算法

\n

II. FIFO 算法

\n

III. OPT 算法

\n
A.仅 II
\n
B.仅 I、II
\n
C.仅 I、III
\n
D.仅 II、III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第30题-解析\n\n\n\n

只有 FIFO 算法才会导致 Belady 异常,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 266, "year": 2014, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第31题-题目\n\n\n\n

下列关于管道(Pipe)通信的叙述中,正确的是(  )。

\n
A.一个管道可实现双向数据传输
\n
B.管道的容量仅受磁盘容量大小限制
\n
C.进程对管道进行读操作和写操作都可能被阻塞
\n
D.一个管道只能有一个读进程或一个写进程对其操作
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第31题-解析\n\n\n\n

管道 实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在写管道会被阻塞,而当管道空时,进程在读管道会被阻塞,因此选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 267, "year": 2014, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2014-第32题-题目\n\n\n\n

下列选项中,属于多级页表优点的是( )。

\n
A.加快地址变换速度
\n
B.减少缺页中断次数
\n
C.减少页表项所占字节数
\n
D.减少页表所占的连续内存空间
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第32题-解析\n\n\n\n

多级页表 不仅不会加快地址的变换速度,而且会因为增加更多的查表过程,使地址转换速度减慢;也不会减少缺页中断的次数,反而如果访问过程中多级的页表都不在内存中,会大大增加缺页的次数,也并不会减少页表项所占的字节数,而多级页表能够减少页表所占的连续内存空间,即当页表太大时,将页表再分级,可以把每张页表控制在一页之内,减少页表所占的连续内存空间,因此选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 268, "year": 2014, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第33题-题目\n\n\n\n

在 OSI 参考模型中,直接为会话层提供服务的是( )。

\n
A.应用层
\n
B.表示层
\n
C.传输层
\n
D.网络层
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第33题-解析\n\n\n\n

参考 ISO/OSI 模型,直接为会话层提供服务的是会话层的下一层,即传输层,选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 269, "year": 2014, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第34题-题目\n\n\n\n

某以太网拓扑及交换机当前转发表如下图所示,主机 00-e1-d5-00-23-a1 向主机 00-e1-d5-00-23-c1 发送 1 个数据帧,主机 00-e1-d5-00-23-c1 收到该帧后,向主机 00-e1-d5-00-23-a1 发送 1 个确认帧,交换机对这两个帧的转发端口分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
交换机
1
3%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%26lt%3Bfont%20style%3D%26quot%3Bfont-size%3A%2016px%3B%26quot%3B%26gt%3B1%26lt%3B%2Ffont%26gt%3B%22%20style%3D%22text%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3BwhiteSpace%3Dwrap%3Brounded%3D0%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%2270%22%20y%3D%22200%22%20width%3D%2230%22%20height%3D%2230%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
2
目的地址
端口
00-e1-d5-00-23-b1
2
00-e1-d5-00-23-a1
00-e1-d5-00-23-b1
00-e1-d5-00-23-c1
\n
A.{3} 和 {1}
\n
B.{2,3} 和 {1}
\n
C.{2,3} 和 {1,2}
\n
D.{1,2,3} 和 {1}
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第34题-解析\n\n\n\n

主机 00-el-d5-00-23-a1 向 00-el-d5-00-23-c1 发送数据帧时,交换机 转发表中没有 00-el-d5-00-23-c1 这项,所以向除 1 接口外的所有接口广播这帧,即 2、3 端口会转发这帧,同时因为转发表中并没有 00-e1-d5-00-23-a1 这项,所以转发表会把(目的地址 00-el-d5-00-23-a1,端口 1)这项加入转发表。而当 00-el-d5-00-23-c1 向 00-e1-d5-00-23-a1 发送确认帧时,由于转发表已经有 00-el-d5-00-23-a1 这项,所以交换机只向 1 端口转发,选 B。
\n\n\n\n\n", "difficulty": 2}, {"id": 270, "year": 2014, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第35题-题目\n\n\n\n

下列因素中,不会影响信道数据传输速率的是( )。

\n
A.信噪比
\n
B.频率宽带
\n
C.调制速度
\n
D.信号传播速度
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第35题-解析\n\n\n\n

由 香农定理 可知,信噪比和频率带宽都可以限制信道的极限传输速率,所以信噪比和频率带宽对信道的数据传输速率是有影响的,A、B 错误;信道的传输速率实际上就是信号的发送速率,而调制速度也会直接限制数据的传输速率,C 错误;信号的传播速度是信号在信道上传播的速度,与信道的发送速率无关,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 271, "year": 2014, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第36题-题目\n\n\n\n

主机甲与主机乙之间使用后退 N 帧协议 (GBN) 传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100 Mbps,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲乙之间的单向传播延迟是 50ms,则甲可以达到的最大平均数据传输速率约为( )。

\n
A.10 Mbps
\n
B.20 Mbps
\n
C.80 Mbps
\n
D.100 Mbps
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第36题-解析\n\n\n\n

本题间接考察 信道利用率。考虑制约甲的数据传输速率的因素,首先,信道带宽能直接制约数据的传输速率,传输速率一定是小于等于信道带宽的;其次,主机甲、乙之间采用后退 N 帧协议,那么因为甲、乙主机之间采用后退 N 帧协议传输数据,要考虑发送一个数据到接收到它的确认之前,最多能发送多少数据,甲的最大传输速率受这两个条件的约束,所以甲的最大传输速率是这两个值中小的那一个。甲的发送窗口的尺寸为 1000,即收到第一个数据的确认之前,最多能发送 1000 个数据帧,也就是发送 1000x1000B =1MB 的内容,而从发送第一个帧到接收到它的确认的时间是一个往返时延,也就是 50+50=100ms=0.1s,即在 100ms 中,最多能传输 1MB 的数据,因此,此时的最大传输速率为 1MB/0.1s=10MB/s=80Mbps。信道带宽为 100Mbps,所以答案为 min{80Mbps,100bps}=80Mbps,选 C.
\n\n\n\n\n", "difficulty": 1}, {"id": 272, "year": 2014, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第37题-题目\n\n\n\n

站点 A、B、C 通过 CDMA 共享链路,A、B、C 的码片序列 (chipping sequence) 分别是 (1,1,1,1)、(1,-1,1,-1) 和 (1,1,-1,-1) 。若 C 从链路上收到的序列是 (2,0,2,0,0,-2,0,-2,0,2,0,2),则 C 收到 A 发送的数据是( )。

\n
A.000
\n
B.101
\n
C.110
\n
D.111
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第37题-解析\n\n\n\n

本题考察 CMDA,把收到的序列分成每 4 个数字一组,即为 (2,0,2,0)、(0,-2,0,-2)、(0,2,0,2),因为题目求的是 A 发送的数据,因此把这三组数据与 A 站的码片序列 (1,1,1,1) 做内积运算,结果分别是 (2,0,2,0)·(1,1,1,1)/4=1、(0,-2,0,-2)·(1,1,1,1)/4=-1、(0,2,0,2)·(1,1,1,1)/4=1,所以 C 接收到的 A 发送的数据是 101,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 273, "year": 2014, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第38题-题目\n\n\n\n

主机甲和主机乙已建立了 TCP 连接,甲始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为 10KB 的确认段。若甲在 t 时刻发生超时时拥塞窗口为 8KB,则从 t 时刻起,不再发生超时的情况下,经过 10 个 RTT 后,甲的发送窗口是( )。

\n
A.10KB
\n
B.12KB
\n
C.14KB
\n
D.15KB
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第38题-解析\n\n\n\n

当 t 时刻发生超时时,根据 拥塞避免 算法,把 ssthresh 设为 8 的一半,即为 4,且拥塞窗口设为 1KB。然后经历 10 个 RTT 后,拥塞窗口的大小依次为 2,4,5,6,7,8,9,10,11,12,而发送窗口取当时的拥塞窗口和接收窗口的最小值,而接收窗口始终为 10KB,所以此时的发送窗口为 10KB,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 274, "year": 2014, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第39题-题目\n\n\n\n

下列关于 UDP 协议的叙述中,正确的是( )。

\n

I. 提供无连接服务

\n

II. 提供复用/分用服务

\n

III. 通过差错校验,保障可靠数据传输

\n
A.仅 I
\n
B.仅 I、II
\n
C.仅 II、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第39题-解析\n\n\n\n

UDP 提供的是无连接的服务,I 正确;同时 UDP 也提供复用/分用服务,II 正确;UDP 虽然有差错校验机制,但是 UDP 的差错校验只是检査数据在传输的过程中有没有出错,出错的数据直接丢弃,并没有重传等机制,不能保证可靠传输,使用 UDP 协议时,可靠传输必须由应用层实现,III 错误。答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 275, "year": 2014, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2014-第40题-题目\n\n\n\n

使用浏览器访问某大学 Web 网站主页时,不可能使用到的协议是( )。

\n
A.PPP
\n
B.ARP
\n
C.UDP
\n
D.SMTP
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第40题-解析\n\n\n\n

当接入网络时可能会用到 PPP 协议,A 可能用到;当计算机不知道某主机的 MAC 地址时用 IP 地址查询相应的 MAC 地址时会用到 ARP 协议,B 可能用到;当访问 Web 网站时,若 DNS 缓冲没有存储相应域名的 IP 地址,用域名査询相应的 IP 地址时要使用 DNS 协议,而 DNS 是基于 UDP 协议的,所以 C 可能用到;SMTP 只有使用邮件客户端发送邮件,或是邮件服务器向别的邮件服务器发送邮件时才会用到,单纯的访问 Web 网页不可能用到,选 D。
\n\n\n\n\n", "difficulty": 2}, {"id": 276, "year": 2014, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第41题-题目\n\n\n\n

二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树 T,采用二叉链表存储,结点结构为:

\n

其中叶结点的 weight 域保存该结点的非负权值。设 root 为指向 T 的根结点的指针,请设计求 T 的 WPL 的算法,要求:

\n

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

\n

(2) 使用 C 或 C++ 语言,给出二叉树结点的数据类型定义;

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第41题-解析\n\n\n\n
  1. 算法的基本设计思想:

①基于先序递归遍历的算法思想是用一个 static 变量记录 wpl,把每个结点的深度作为递归函数的一个参数传递,算法步骤如下:

若该结点是叶子结点,则变量 wpl 加上该结点的深度与权值之积;

若该结点非叶子结点,则若左子树不为空,对左子树调用递归算法,若右子树不为空,对右子树调用递归算法,深度参数均为本结点的深度参数加 1;

最后返回计算出的 wpl 即可。

②基于层次遍历的算法思想是使用队列进行层次遍历,并记录当前的层数,

当遍历到叶子结点时,累计 wpl;

当遍历到非叶子结点时,把该结点的子树加入队列;

当某结点为该层的最后一个结点时,层数自增 1;

队列空时遍历结束,返回 wpl。

  1. 二叉树结点的数据类型定义如下:
typedef struct BiTNode(\n    int weight;\n    struct BiTNode *lchild,*rchild;\n}BiTNode,*BiTree;\n
  1. 算法代码如下:
int _wpl(Node *root, int depth) {\n  if (!root) {\n    return 0;\n  }\n  int sum = 0;\n  if (root->lchild == NULL && root->rchild == NULL) {\n    sum += (depth * root->weight);\n  }\n  sum += _wpl(root->left, depth+1);\n  sum += _wpl(root->right, depth+1);\n  return sum;\n}\n\nint wpl(Node *root) {\n  return _wpl(root, 0);\n}\n

【评分说明】

①若考生给出能够满足题目要求的其他算法且正确,可同样给分。

②考生答案无论使用 C 或者 C++ 语言,只要答案正确同样给分。

③若对算法的基本设计思想和主要数据结构描述不十分准确,但在算法实现中能够清晰反映出算法思想且正确,参照①的标准给分。

④若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。

⑤若考生给出的答案中算法主要设计思想或算法中部分正确,可酌情给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 277, "year": 2014, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第42题-题目\n\n\n\n

某网络中的路由器运行 OSPF 路由协议,题 42 表是路由器 R1 维护的主要链路状态信息(LSI),题 42 图是根据题 42 表的接口名构造出来的网络拓扑。

\n
\n\n\n\n \n 408真题系统\n \n\n
R1 的 LSI
R2 的 LSI
R3 的 LSI
R4 的 LSI
备注
10.1.1.1
10.1.1.2
10.1.1.5
10.1.1.6
  标识路由器的 IP 地址
Router ID
Link1
ID
IP
Metric
10.1.1.2
10.1.1.1
3
10.1.1.1
10.1.1.2
3
10.1.1.6
10.1.1.5
6
10.1.1.5
10.1.1.6
6
  所连路由器的 Router ID
  Link1 的本地 IP 地址
  Link1 费用
Link2
ID
IP
Metric
10.1.1.5
10.1.1.9
2
10.1.1.6
10.1.1.13
4
10.1.1.1
10.1.1.10
2
10.1.1.2
10.1.1.14
4
  所连路由器的 Router ID
  Link2 的本地 IP 地址
  Link2 费用
Net1
Prefix
Metric
192.168.1.0/24
1
192.168.6.0/24
1
192.168.5.0/24
1
192.168.7.0/24
1
  直达网络 Net1 的网络前缀
  到达网络 Net1 的费用
R1 所维护的 LSI
R1
10.1.1.1
10.1.1.2
10.1.1.9
10.1.1.10
10.1.1.5
3
6
10.1.1.6
10.1.1.13
10.1.1.14
2
4
192.1.6.0/24
192.1.1.0/24
192.1.7.0/24
192.1.5.0/24
1
1
1
1
R1 构造的网络拓扑
R2
R3
R4
L1
E0
L0
\n

请回答下列问题。

\n

⑴ 本题中的网络可抽象为数据结构中的哪种结构?

\n

⑵ 针对题 42 表中的内容,设计合理的链式存储结构,以保存题 42 表中的链路状态信息(LSI)。要求给出链式存储结构的数据定义,并画出对应题 42 表的链式存储结构示意图(示意图中仅以 ID 标识结点)。

\n

⑶ 按照迪杰斯特拉(Dijkstra)算法的策略,依次给出 R1 到达题 42 图中子网 192.1.x.x 的最短路径及费用。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第42题-解析\n\n\n\n

很多考生乍看之下以为是网络的题目,其实该题本身并没有涉及太多的网络知识点,只是\n应用了网络的模型,实际上考查的还是数据结构的内容。

1)图(1 分)

题中给出的是一个简单的网络拓扑图,可以抽象为无向图。

【评分说明】只要考生的答案中给出与图含义相似的描述,例如,“网状结构”“非线性结构”等,同样\n给分。

2)链式存储结构的如下图所示。

struct Arc {\n  uint32_t id;\n  uint32_t ip;\n  int metric;\n};\n\nstruct Net {\n  uint32_t prefix;\n  uint32_t mask;\n  int metric;\n};\n\nstruct LNode {\n  LNode *next;\n  // flag == 1:链路连接到路由器\n  // flag == 2:链路连接到子网\n  int flag;\n  union NetOrArc {\n    Net net;\n    Arc arc;\n  };\n};\n\nstruct HNode {\n  uint32_t router_id;\n  LNode *next;\n  HNode *next_hnode;\n};\n

【评分说明】

① 若考生给出的答案是将链表中的表头结点保存在一个一维数组中(即采用邻接表形\n式),同样给分。

② 若考生给出的答案中,弧结点没有使用 union 定义,而是采用两种不同的结构分别表示\nLink 和 Net,同时在表头结点中定义了两个指针,分别指向由这两种类型的结点构成的两个链\n表,同样给分。

③考生所给答案的弧结点中,可以在单独定义的域中保存各直连网络 P 地址的前缀长度,\n也可以与网络地址保存在同一个域中。

④数据类型定义中,只要采用了可行的链式存储结构,并保存了题目中所给的 LS 信息,\n如将网络抽象为一类结点,写出含 8 个表头结点的链式存储结构,均可参照①③的标准给分。

⑤若考生给出的答案中,图示部分与其数据类型定义部分一致,图示只要能够体现链式\n存储结构和网络连接关系(可以不给出结点内细节信息),即可给分。

⑥若解答不完全正确,酌情给分。

3)计算结果如下表所示:

目的网络路径代价(费用)
步骤 1192.1.1.0/24直接到达1
步骤 2192.1.5.0/24R1→R3→192.1.5.0/243
步骤 3192.1.6.0/24R1→R2→192.1.6.0/244
步骤 4192.1.7.0/24R1→R2→R4→192.1.7.0/248

【评分说明】

①若考生给出的各条最短路径的结果部分正确,可酌情给分。

②若考生给出的从 R1 到达子网 192.1.x.x 的最短路径及代价正确,但不完全符合代价不减\n的次序,可酌情给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 278, "year": 2014, "index": 43, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第43题-题目\n\n\n\n

请根据题 42 描述的网络,继续回答下列问题。

\n

(1) 假设路由表结构如下表所示,请给出题 42 图中 R1 的路由表,要求包括到达题 42 图中子网 192.1.x.x 的路由,且路由表中的路由项尽可能少。

\n
\n\n\n\n \n 408真题系统\n \n\n
目的网络
下一跳
接口
\n

(2) 当主机 192.1.1.130 向主机 192.1.7.211 发送一个 TTL=64 的 IP 分组时,R1 通过哪个接口转发该 IP 分组?主机 192.1.7.211 收到的 IP 分组 TTL 是多少?

\n

(3) 若 R1 增加一条 Metric 为 10 的链路连接 Internet,则题 42 表中 R1 的 LSI 需要增加哪些信息?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第43题-解析\n\n\n\n

(1) 因为题目要求路由表中的路由项尽可能少,所以这里可以把子网 192.1.6.0/24 和 192.1.7.0/24 聚合为子网 192.1.6.0/23。其他网络照常,可得到路由表如下:(6分)

目的网络下一条接口
192.1.1.0/24-E0
192.1.6.0/2310.1.1.2L0
192.1.5.0/2410.1.1.10L1

【评分说明】

  1. 每正确解答一个路由项,给 2 分,共 6 分。
  2. 路由项解答不完全正确,或路由项多于 3 条,可酌情给分。

(2) 通过查路由表可知:R1 通过 L0 接口转发该 IP 分组。(1分)因为该分组要经过 3 个路由器(R1, R2, R4),所以主机 192.1.7.211 收到的 IP 分组的 TTL 是 64-3=61。(1分)

(3) R1 的 LSI 需要增加一条特殊的直连网络,网络前缀 Prefix 为 “0.0.0.0/0”,Metric 为 10。(1分)

【评分说明】
考生只要回答:增加前缀 Prefix 为 “0.0.0.0/0”,Metric 为 10,同样给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 279, "year": 2014, "index": 44, "type": 2, "typeName": "应用题", "score": 12, "subject": "computer-network", "question": "\n\n\n\n\n\n2014-第44题-题目\n\n\n\n

某程序中有如下循环代码段 P:“for (int i=0; i<N; i++) sum += A[i];”。假设编译时变量 sum 和 i 分别分配在寄存器 R1 和 R2 中。常量 N 在寄存器 R6 中,数组 A 的首地址在寄存器 R3 中。程序段 P 起始地址为 08048100H,对应的汇编代码和机器代码如下表所示。

\n
编号地址机器代码汇编代码注释
I08048100H00022080Hloop: sll R4, R2, 2(R2)«2 → R4
208048104H00083020Hadd R4, R4, R3(R4) + (R3) → R4
308048108H8C850000Hload R5, 0(R4)((R4) + 0) → R5
40804810CH00250820Hadd R1, R1, R5(R1) + (R5) → R1
508048110H20420001Hadd R2, R2, 1(R2) + 1 → R2
608048114H1446FFFAHbne R2, R6, loopif (R2)≠(R6) goto loop
\n

执行上述代码的计算机 M 采用 32 位定长指令字,其中分支指令 bne 采用如下格式:

\n
\n\n\n\n \n 408真题系统\n \n\n
OP
Rs
Rd
OFFSET
31
26
25
21
20
16
15
0
\n

Op 为操作码,Rs 和 Rd 为寄存器编号,OFFSET 为偏移量,用补码表示。请回答下列问题,并说明理由。

\n

(1) M 的存储器编址单位是什么?

\n

(2) 已知 sll 指令实现左移功能,数组 A 中每个元素占多少位?

\n

(3) 题 44 表中 bne 指令的 OFFSET 字段的值是多少?已知 bne 指令采用相对寻址方式,当前 PC 内容为 bne 指令地址,通过分析题 44 表中指令地址和 bne 指令内容,推断出 bne 指令的转移目标地址计算公式。

\n

(4) 若 M 采用如下“按序发射、按序完成”的 5 级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起 3 个时钟周期阻塞,则 P 中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令 1 的执行不会因为与指令 5 的数据相关而发生阻塞?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第44题-解析\n\n\n\n

该题涉及指令系统、存储管理以及 CPU 三个部分内容,考生应注意各章节内容之间的联系。

  1. 已知计算机 M 采用 32 位定长指令字,即一条指令占 4B,观察表中各指令的地址可知,每条指令的地址差为 4 个地址单位,即 4 个地址单位代表 4B,一个地址单位就代表了 1B,所以该计算机是按字节编址的。(2 分)

  2. 在二进制中某数左移两位相当于乘以 4,由该条件可知,数组间的数据间隔为 4 个地址单位,而计算机按字节编址,所以数组 A 中每个元素占 4B。(2 分)

  3. 由表可知,bne 指令的机器代码为 1446 FFFAH,根据题目给出的指令格式,后 2B 的内容为 OFFSET 字段,所以该指令的 OFFSET 字段为 FFFAH,用补码表示,值为 -6(1 分)。当系统执行到 bne 指令时,PC 自动加 4,PC 的内容就为 08048118H,而跳转的目标是 08048100H,两者相差了 18H,即 24 个单位的地址间隔,所以偏移址的一位即是真实跳转地址的 -24/-6=4 位(1 分)。可知 bne 指令的转移目标地址计算公式为 (PC)+4+OFFSETx4(1 分)。

  4. 由于数据相关而发生阻塞的指令为第 2、3、4、6 条,因为第 2、3、4、6 条指令都与各自前一条指令发生数据相关。(3 分)

第 6 条指令会发生控制冒险。(1 分)

当前循环的第五条指令与下次循环的第一条指令虽然有数据相关,但由于第 6 条指令后有 3 个时钟周期的阻塞,因而消除了该数据相关。(1 分)

【评分说明】对于第 1 问,若考生回答:因为指令 1 和 2、2 和 3、3 和 4、5 和 6 发生数据相关,因而发生阻塞的指令为第 2、3、4、6 条,同样给 3 分。答对 3 个以上给 3 分,部分正确酌情给分。

\n\n\n\n\n", "difficulty": 0}, {"id": 280, "year": 2014, "index": 45, "type": 2, "typeName": "应用题", "score": 11, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第45题-题目\n\n\n\n

假设对于题 44 中的计算机 M 和程序段 P 的机器代码,M 采用页式虚拟存储管理;P 开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码已调入主存但不在 Cache 中;数组 A 未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。

\n

(1) P 执行结束时,R2 的内容是多少?

\n

(2) M 的指令 Cache 和数据 Cache 分离。若指令 Cache 共有 16 行,Cache 和主存交换的块大小为 32 字节,则其数据区的容量是多少?若仅考虑程序段 P 的执行,则指令 Cache 的命中率为多少?

\n

(3) P 在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组 A 的访问,需要读磁盘和 TLB 至少各多少次?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第45题-解析\n\n\n\n

1)R2 里装的是 i 的值,循环条件是 i < N (1000),即当 i 自增到不满足这个条件时跳出循环,程序结束,所以此时 i 的值为 1000。(1 分)

2)Cache 共有 16 块,每块 32 字节,所以 Cache 数据区的容量为 16x32B=512B。(1 分)

P 共有 6 条指令,占 24 字节,小于主存块大小 (32B),其起始地址为 08048100H,对应一块的开始位置,由此可知所有指令都在一个主存块内。读取第一条指令时会发生 Cache 缺失,故将 P 所在的主存块调入 Cache 某一块,以后每次读取指令时,都能在指令 Cache 中命中。因此在 1000 次循环中,只会发生 1 次指令访问缺失,所以指令 Cache 的命中率为 (1000x6-1)/(1000×6)=99.98%。(2 分)

【评分说明】若考生给出正确的命中率,而未说明原因和过程,给 1 分。若命中率计算错误,但解题思路正确,可酌情给分。

3)指令 4 为加法指令,即对应 sum+=A[i],当数组 A 中元素的值过大时,则会导致这条加法指令发生溢出异常;而指令 2、5 虽然都是加法指令,但它们分别为数组地址的计算指令和存储变量 i 的寄存器进行自增的指令,而 i 最大到达 1000,所以它们都不会产生溢出异常。(2 分)

只有访存指令可能产生缺页异常,即指令 3 可能产生缺页异常。(1 分)

因为数组 A 在磁盘的一页上,而一开始数组并不在主存中,第一次访问数组时会导致访盘,把 A 调入内存,而以后数组 A 的元素都在内存中,则不会导致访盘,所以该程序一共访盘一次。(2 分)

每访问一次内存数据就会查 TLB 一次,共访问数组 1000 次,所以此时又访问 TLB 1000 次,还要考虑到第一次访问数组 A,即访问 A[0] 时,会多访问一次 TLB(第一次访问 A[0] 会先查一次 TLB,然后产生缺页,处理完缺页中断后,会重新访问 A[0],此时又查 TLB),所以访问 TLB 的次数一共是 1001 次。(2 分)

【评分说明】

①对于第 1 问,若答案中除指令 4 外还包含其他运算类指令(即指令 1、2、5),则给 1 分,其他情况,则给 0 分。

②对于第 2 问,只要回答“1oad 指令”,即可得分。

③对于第 3 问,若答案中给出的读 TLB 的次数为 1002,同样给分。若直接给出正确的 TLB 及磁盘的访问次数,而未说明原因,给 3 分。若给出的 TLB 及磁盘访问次数不正确,但解题思路正确,可酌情给分。

\n\n\n\n\n", "difficulty": 3}, {"id": 281, "year": 2014, "index": 46, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第46题-题目\n\n\n\n

文件 F 由 200 条记录组成,记录从 1 开始编号。用户打开文件后,欲将内存中的一条记录插入文件 F 中,作为其第 30 条记录。请回答下列问题,并说明理由。

\n

(1) 若文件系统采用连续分配方式,每个磁盘块存放一条记录,文件 F 存储区域前后均有足够的空闲磁盘空间,则完成上述插入操作最少需要访问多少次磁盘块?F 的文件控制块内容会发生哪些改变?

\n

(2) 若文件系统采用链接分配方式,每个磁盘块存放一条记录和一个链接指针,则完成上述插入操作需要访问多少次磁盘块?若每个存储块大小为 1KB,其中 4B 存放链接指针,则该文件系统支持的文件最大长度是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第46题-解析\n\n\n\n

1)系统采用顺序分配方式时,插入记录需要移动其他的记录块,整个文件共有 200 条记录,要插入新记录作为第 30 条,而存储区前后均有足够的磁盘空间,且要求最少的访问存储块数,则要把文件前 29 条记录前移,若算访盘次数移动一条记录读出和存回磁盘各是一次访盘,29 条记录共访盘 58 次,存回第 30 条记录访盘 1 次,共访盘 59 次。(1 分)

F 的文件控制区的起始块号和文件长度的内容会因此改变。(1 分)

2)文件系统采用链接分配方式时,插入记录并不用移动其他记录,只需找到相应的记录,修改指针即可。插入的记录为其第 30 条记录,那么 需要找到文件系统的第 29 块,一共需要访盘 29 次,然后把第 29 块的下块地址部分赋给新块,把新块存回内存会访盘 1 次,然后修改内存中第 29 块的下块地址字段,再存回磁盘(1 分),一共访盘 31 次。(1 分)

4 字节共 32 位,可以寻址 232=4G 块存储块,每块的大小为 1KB,即 1024B,其中下块地址部分占 4B,数据部分占 1020B,那么该系统的文件最大长度是 4G×1020B=4080GB。(2 分)

【评分说明】

①第 1 小题的第 2 小问,若答案中不包含文件的起始地址和文件大小,则不给分。

②若按 1024×232B=4096GB 计算最大长度,给 1 分。

\n\n\n\n\n", "difficulty": 2}, {"id": 282, "year": 2014, "index": 47, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2014-第47题-题目\n\n\n\n

系统中有多个生产者进程和多个消费者进程,共享一个能存放 1000 件产品的环形缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出 10 件产品后,其他消费者进程才可以取产品。请使用信号量 P、V(wait(),signal())操作实现进程间的互斥与同步,要求写出完整的过程,并说明所用信号量的含义和初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2014-第47题-解析\n\n\n\n

这是典型的生产者和消费者问题,只对典型问题加了一个条件,只需在标准模型上新加一\n个信号量,即可完成指定要求。

设置四个变量 consumer_mutex、buffer_mutex、empty 和 full, consumer_mutex 用于一个控制一个消费者进程一个\n周期(10 次)内对于缓冲区的控制,初值为 1;buffer_mutex 用于进程单次互斥的访问缓冲区,初值\n为 1;empty 代表缓冲区的空位数,初值为 0;full 代表缓冲区的产品数,初值为 1000,具体进\n程的描述如下:

semaphore consumer_mutex = 1;\nsemaphore buffer_mutex = 1;\nsemaphore full = 0;\nsemaphore empty = 1000;\n\nConsumer() {\n  while (1) {\n    P(consumer_mutex);\n    for (int i = 0; i < 10; i++) {\n      P(full);\n      P(buffer_mutex);\n      从缓冲区取出产品;\n      V(buffer_mutex);\n      V(empty);\n      消费产品;\n    }\n    V(consumer_mutex);\n  }\n}\n\nProducer() {\n  while (1) {\n    P(empty);\n    生产产品;\n    P(buffer_mutex);\n    将产品放入缓冲区;\n    V(buffer_mutex);\n    V(full);\n  }\n}\n

【评分说明】

①信号量的初值和含义都正确给 2 分。

②生产者之间的互斥操作正确给 1 分;生产者与消费者之间的同步操作正确给 2 分;消费者之间互斥操作正确给 1 分。

③控制消费者连续取产品数量正确给 2 分。

④仅给出经典生产者 - 消费者问题的信号量定义和伪代码描述最多给 3 分。

⑤若考生将题意理解成缓冲区至少有 10 件产品,消费者才能开始取,其他均正确,得 6 分。

⑥部分完全正确,酌情给分。

\n\n\n\n\n", "difficulty": 3}, {"id": 283, "year": 2015, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第1题-题目\n\n\n\n

已知程序如下:

\n
int S(int n) {\n    return (n <= 0) ? 0 : S(n - 1) + n;\n}\n\nvoid main() {\n    cout << S(1);\n}\n
\n

程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是( )。

\n
A.main() → S(1) → S(0)
\n
B.S(0) → S(1) → main()
\n
C.main() → S(0) → S(1)
\n
D.S(1) → S(0) → main()
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第1题-解析\n\n\n\n

递归调用函数时,在系统栈里保存的函数信息需满足先进后出的特点,依次调用了 main(),S(1),S(0),故栈底到栈顶的信息依次是 main(),S(1),S(O) 。
\n\n\n\n\n", "difficulty": 1}, {"id": 284, "year": 2015, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第2题-题目\n\n\n\n

先序序列为 a,b,c,d 的不同二叉树的个数是()。

\n
A.13
\n
B.14
\n
C.15
\n
D.16
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第2题-解析\n\n\n\n

本题考察 卡特兰数。根据二叉树前序遍历和中序遍历的递归算法中递归工作栈的状态变化得出:前序序列和中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序。因为前序序列和中序序列可以唯一地确定一棵二叉树,所以题意相当千“以序列 a, b, c, d 为入栈次序,则出栈序列的个数为多少“,对于 n 个不同元素进栈,出栈序列的个数\nn+11​C2nn​=14\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 285, "year": 2015, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第3题-题目\n\n\n\n

下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是( )。

\n
A.24, 10, 5 和 24, 10, 7
\n
B.24, 10, 5 和 24, 12, 7
\n
C.24, 10, 10 和 24, 14, 11
\n
D.24, 10, 5 和 24, 14, 6
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第3题-解析\n\n\n\n

在 哈夫曼树 中,左右孩子权值之和为父结点权值。仅以分析选项 A 为例:若两个 10 分别属于两棵不同的子树,根的权值不等于其孩子的权值和,不符;若两个 10 属于同棵子树,其权值不等千其两个孩子(叶结点)的权值和,不符。B、C 选项的排除方法一样。
\n\n\n\n\n", "difficulty": 1}, {"id": 286, "year": 2015, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第4题-题目\n\n\n\n

现有一棵无重复关键字的平衡二叉树(AVL 树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是( )。

\n
A.根结点的度一定为 2
\n
B.树中最小元素一定是叶结点
\n
C.最后插入的元素一定是叶结点
\n
D.树中最大元素一定是无左子树
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第4题-解析\n\n\n\n

只有两个结点的 平衡二叉树 的根结点的度为 1,A 错误。中序遍历后可以得到一个降序序列,树中最大元素一定无左子树(可能有右子树),因此不一定是叶结点,B 错误。最后插入的结点可能会导致平衡调整,而不一定是叶结点,C 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 287, "year": 2015, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第5题-题目\n\n\n\n

设有向图 G=(V,E),顶点集 V={\nv0​\n,\nv1​\n,\nv2​\n,\nv3​\n},边集 E={<\nv0​\n,\nv1​\n>,<\nv0​\n,\nv2​\n>,<\nv0​\n,\nv3​\n>,<\nv1​\n,\nv3​\n>}。若从顶点\nv0​\n开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是()。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第5题-解析\n\n\n\n

画出该有向图图形如下:

\n\n
0
1
2
3

采用图的深度优先遍历,共 5 种可能: <\nv0​\n,\nv1​\n,\nv3​\n,\nv2​\n>, <\nv0​\n,\nv2​\n,\nv3​\n,\nv1​\n>, <\nv0​\n,\nv2​\n, vi,\nv3​\n>, <\nv0​\n,\nv3​\n,\nv2​\n,\nv1​\n>, <\nv0​\n,\nv3​\n,\nv1​\n,\nv2​\n>, 选 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 288, "year": 2015, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第6题-题目\n\n\n\n

求下面带权图的最小(代价)生成树时,可能是克鲁斯卡(Kruskal)算法第 2 次选中但不是普里姆(Prim)算法(从 V4 开始)第 2 次选中的边是()。

\n
A.(\nV1​\n,\nV3​\n)
\n
B.(\nV1​\n,\nV4​\n)
\n
C.(\nV2​\n,\nV3​\n)
\n
D.(\nV3​\n,\nV4​\n)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第6题-解析\n\n\n\n

V4​\n开始, kruskal 算法 选中的第一条边一定是权值最小的 (\nV1​\n,\nV4​\n), B 错误。由于\nV1​\n和\nV4​\n已经可达,第二条边含有\nV1​\n和\nV4​\n的权值为 8 的一定符合 prim 算法,排除 A、D。
\n\n\n\n\n", "difficulty": 1}, {"id": 289, "year": 2015, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第7题-题目\n\n\n\n

下列选项中,不能构成折半查找中关键字比较序列的是()。

\n
A.500,200,450,180
\n
B.500,450,200,180
\n
C.180,500,200,450
\n
D.180,200,500,450
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第7题-解析\n\n\n\n

画出查找路径图,因为折半查找的判定树是一棵二叉排序树,看其是否满足二叉排序树的要求。

\n\n
500
200
450
180
500
450
200
180
180
500
200
450
180
200
500
450

显然,选项 A 的查找路径不满足。

\n\n\n\n\n", "difficulty": 2}, {"id": 290, "year": 2015, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第8题-题目\n\n\n\n

已知字符串 s 为 “abaabaabacacaabaabcc”,模式串 t 为 “abaabc”。采用 KMP 算法进行匹配,第一次出现“失配”(s[i] ≠ t[j])时,i = j = 5,则下次开始匹配时,i 和 j 的值分别是( )。

\n
A.i = 1, j = 0
\n
B.i = 5, j = 0
\n
C.i = 5, j = 2
\n
D.i = 6, j = 2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第8题-解析\n\n\n\n

由题中失配 s[i] ≠ s[j] 时,i = j = 5\", 可知题中的主串和模式串 的位序都是从 0 开始的(要注意灵活应变)。按照 next 数组生成算法,对于 t 有:

编号012345
tabaabb
next-100112

依据 KMP 算法 “当失配时,i 不变,j 回退到 next[j] 的位置并重新比较”,当失配 s[i] ≠ s[j]时,i=j=5, 由上表不难得出 next[j]=next[5]=2(位序从 0 开始)。从而最后结果应为 i=5(i 保持不变),j=2 。

\n\n\n\n\n", "difficulty": 1}, {"id": 291, "year": 2015, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第9题-题目\n\n\n\n

下列排序算法中,元素的移动次数与关键字的初始排列次序无关的是()。

\n
A.直接插入排序
\n
B.起泡排序
\n
C.基数排序
\n
D.快速排序
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第9题-解析\n\n\n\n

基数排序 的元素移动次数与关键字的初始排列次序无关,而其他三种排序都是与关键字的初始排列明显相关的。
\n\n\n\n\n", "difficulty": 1}, {"id": 292, "year": 2015, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第10题-题目\n\n\n\n

已知小根堆为 8,15,10,21,34,16,12,删除关键字 8 之后需重建堆,在此过程中,关键字之间的比较次数是()。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第10题-解析\n\n\n\n

删除 8 后,将 12 移动到堆顶,第一 次是 15 和 10 比较,第二次是 10 和 12 比较并交换,第三次还需比较 12 和 16, 故比较次数为 3 次。

\n\n
8
15
10
21
34
16
12
12
15
10
21
34
16
10
15
12
21
34
16
\n\n\n\n\n", "difficulty": 1}, {"id": 293, "year": 2015, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第11题-题目\n\n\n\n

希尔排序的组内排序采用的是()。

\n
A.直接插入排序
\n
B.折半插入排序
\n
C.快速排序
\n
D.归并排序
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第11题-解析\n\n\n\n

希尔排序 的思想是:先将待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
\n\n\n\n\n", "difficulty": 1}, {"id": 294, "year": 2015, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第12题-题目\n\n\n\n

计算机硬件能够直接执行的语言是( )。

\n

I. 机器语言程序

\n

II. 汇编语言程序

\n

III. 硬件描述语言程序

\n
A.仅 I
\n
B.仅 I、II
\n
C.仅 I、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第12题-解析\n\n\n\n

硬件能直接执行的只能是机器语言(二进制编码),汇编语言是为了增强机器语言的可读性和记忆性的语言,经过汇编后才能被执行。
\n\n\n\n\n", "difficulty": 1}, {"id": 295, "year": 2015, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第13题-题目\n\n\n\n

由 3 个“1”和 5 个“0”组成的 8 位二进制补码,能表示的最小整数( )。

\n
A.-126
\n
B.-125
\n
C.-32
\n
D.-3
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第13题-解析\n\n\n\n

使用 补码 表示整数时,负数的符号位为 1, 数值位按位取反,末位加 1, 因此剩下的 2 个 1 在最低位时,表示的是最小整数,为 10000011, 转换成真值为 -125。
\n\n\n\n\n", "difficulty": 1}, {"id": 296, "year": 2015, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第14题-题目\n\n\n\n

下列有关浮点数加减运算的叙述中,正确的是( )。

\n

Ⅰ. 对阶操作不会引起阶码上溢或下溢

\n

Ⅱ. 右规和尾数舍入都可能引起阶码上溢

\n

Ⅲ. 左规时可能引起阶码下溢

\n

Ⅳ. 尾数溢出时结果不一定溢出

\n
A.仅Ⅱ、Ⅲ
\n
B.仅Ⅰ、Ⅱ、Ⅳ
\n
C.仅Ⅰ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第14题-解析\n\n\n\n

参考浮点数加减,对阶是较小的阶码对齐至较 大的阶码,I 正确。右规和尾数舍入过程,阶码加 1 而可能上溢,II 正确,同理 III 也正确。尾数溢出时可能仅产生误差,结果不一定溢出,IV 正确。
\n\n\n\n\n", "difficulty": 2}, {"id": 297, "year": 2015, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第15题-题目\n\n\n\n

假定主存地址位数为 32 位,按字节编址,主存和 Cache 之间采用直接映射方式,主存块大小为 4 个字,每字 32 位,写操作时采用回写 (Write Back) 方式,则能存放 4K 字数据的 Cache 的总容量的位数至少是( )。

\n
A.146K
\n
B.147K
\n
C.148K
\n
D.158K
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第15题-解析\n\n\n\n

直接映射的 地址结构 为:

主存字块标记 | 行号 | 块内地址

\n\n\n\n\n", "difficulty": 2}, {"id": 298, "year": 2015, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第16题-题目\n\n\n\n

假定编译器将赋值语句 “x=x+3;” 转换为指令 “add xaddr, 3”,其中 xaddr 是 x 对应的存储单元地址。若执行该指令的计算机采用页式虚拟存储管理方式,并配有相应的 TLB,且 Cache 使用直写(Write Through)方式,则完成该指令功能需要访问主存的次数至少是( )。

\n
A.0
\n
B.1
\n
C.2
\n
D.3
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第16题-解析\n\n\n\n

上述指令的执行过程可划分为取数、运算和写回过程,取数时读取 xaddr 可能不需要访问主存而直接访问 Cache,而 直写法 需要把数据同时写入 Cache 和主存,因此至少访问 1 次。
\n\n\n\n\n", "difficulty": 1}, {"id": 299, "year": 2015, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第17题-题目\n\n\n\n

下列存储器中,在工作期间需要刷新的是( )。

\n
A.SRAM
\n
B.SDRAM
\n
C.ROM
\n
D.FLASH
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第17题-解析\n\n\n\n

DRAM 芯片 使用电容存储,所以必须隔一段时间刷新一次,如果存储单元没有被刷新,存储的信息就会丢失。SDRAM 表示同步动态随机存储器。

B 选项 SDRAM 中 S 的意思是 synchronized 的,意思是同步 DRAM。

\n\n\n\n\n", "difficulty": 1}, {"id": 300, "year": 2015, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第18题-题目\n\n\n\n

某计算机使用 4 体交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为 8005,8006,8007,8008,8001,8002,8003,8004,8000,则可能发生访存冲突的地址对是( )。

\n
A.8004 和 8008
\n
B.8002 和 8007
\n
C.8001 和 8008
\n
D.8000 和 8004
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第18题-解析\n\n\n\n

本题考察 多体交叉存储器,每个访存地址对应的存储模块序号 (0, 1, 2, 3) 如下所示:

\n\n
访存地址
模块序号
8005
8006
8007
8008
8001
8002
8003
8004
8000
1
2
3
0
1
2
3
0
0

其中,模块序号 = 访存地址 % 存储器交叉模块数。

判断可能发生访存冲突的规则是:给定的访存地址在相邻的四次访问中出现在同一个存储模块内。据此,根据上表可知 8004 和 8000 对应的模块号都为 0,即表明这两次的访问出现在同一模块内且在相邻的访问请求中,满足发生冲突的条件。

\n\n\n\n\n", "difficulty": 1}, {"id": 301, "year": 2015, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第19题-题目\n\n\n\n

下列有关总线定时的叙述中,错误的是( )。

\n
A.异步通信方式中,全互锁协议最慢
\n
B.异步通信方式中,非互锁协议的可靠性最差
\n
C.同步通信方式中,同步时钟信号可由各设备提供
\n
D.半同步通信方式中,握手信号的采样由同步时钟控制
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第19题-解析\n\n\n\n

在 同步通信方式 中,系统采用一个统一的时钟信号,而不是由各设备提供,否则没法实现统一的时钟。
\n\n\n\n\n", "difficulty": 1}, {"id": 302, "year": 2015, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第20题-题目\n\n\n\n

若磁盘转速为 7200rpm,平均寻道时间为 8ms,每个磁道包含 1000 个扇区,则访问一个扇区的平均存取时间大约是( )。

\n
A.8.1ms
\n
B.12.2ms
\n
C.16.3ms
\n
D.20.5ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第20题-解析\n\n\n\n

存取时间 = 寻道时间 + 延迟时间 + 传输时间。存取一个扇区的平均延迟时间为旋转半周的时间,即为 (60/7200)/2=4.17ms,传输时间为 (60/7200)/1000=0.01ms,因此访问一个扇区的平均存取时间为 4.17+0.01+8=12.18ms,保留一位小数则为 12.2ms。
\n\n\n\n\n", "difficulty": 1}, {"id": 303, "year": 2015, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第21题-题目\n\n\n\n

在采用中断 I/O 方式控制打印输出的情况下,CPU 和打印控制接口中的 I/O 端口之间交换的信息不可能是( )。

\n
A.打印字符
\n
B.主存地址
\n
C.设备状态
\n
D.控制命令
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第21题-解析\n\n\n\n

在 程序中断方式 中,CPU 和打印控制接口(I/O 端口)之间常见的交互信息包括:

所以 B 选项错误,主存地址属于内存地址空间,而不是 I/O 端口和控制接口之间直接交换的信息。

在中断 I/O 方式中:

因此,中断 I/O方式下不会在 CPU 和设备控制器之间交换主存地址。

\n\n\n\n\n", "difficulty": 2}, {"id": 304, "year": 2015, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第22题-题目\n\n\n\n

内部异常(内中断)可分为故障(fault)、陷阱(trap)和终止(abort)三类。下列有关内部异常的叙述中,错误的是( )。

\n
A.内部异常的产生与当前执行指令相关
\n
B.内部异常的检测由 CPU 内部逻辑实现
\n
C.内部异常的响应发生在指令执行过程中
\n
D.内部异常处理后返回到发生异常的指令继续执行
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第22题-解析\n\n\n\n

参考 中断和异常的区别,内中断是指来自 CPU 和内存内部产生的中断,包括程序运算引起的各种错误,如地址非法、校验错、页面失效、非法指令、用户程序执行特权指令自行中断(INT)和除数为零等,以上中断都在指令的执行过程中产生的,故 A 正确。这种检测异常的工作肯定是由 CPU(包括控制器和运算器)实现的,故 B 正确。内中断不能被屏蔽,一旦出现应立即处理,C 正确。对于 D,考虑到特殊情况,如除数为零和自行中断(INT)都会自动跳过中断指令,所以不会返回到发生异常的指令继续执行,故错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 305, "year": 2015, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第23题-题目\n\n\n\n

处理外部中断时,应该由操作系统保存的是( )。

\n
A.程序计数器(PC)的内容
\n
B.通用寄存器的内容
\n
C.块表(TLB)中的内容
\n
D.Cache 中的内容
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第23题-解析\n\n\n\n

外部中断处理过程 中,PC 值由中断隐指令自动保存,而通用寄存器 内容由操作系统保存。
\n\n\n\n\n", "difficulty": 2}, {"id": 306, "year": 2015, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第24题-题目\n\n\n\n

假定下列指令已装入指令寄存器,则执行时不可能导致 CPU 从用户态变为内核态(系统态)的是( )。

\n
A.DIV R0, R1; (R0)/(R1)→R0
\n
B.INT n; 产生软中断
\n
C.NOT R0; 寄存器 R0 的内容取非
\n
D.MOV R0, addr; 把地址 addr 的内存数据放入寄存器 R0 中
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第24题-解析\n\n\n\n

考虑到部分指令可能出现异常(导致中断),从而转到 内核模式。指令 A 有除零异常的可能,指令 B 为中断指令,指令 D 有缺页异常的可能,指令 C 不会发生异常。
\n\n\n\n\n", "difficulty": 1}, {"id": 307, "year": 2015, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第25题-题目\n\n\n\n

下列选项中,会导致进程从执行态变为就绪态的事件是(  )。

\n
A.执行 P(wait) 操作
\n
B.申请内存失败
\n
C.启动 I/O 设备
\n
D.被高优先级进程抢占
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第25题-解析\n\n\n\n

参考 状态转化,A、B 和 C 都 因为请求某一资源会进入阻塞态,而 D 只是被剥夺了处理机资源,进入就绪态,一 旦得到处理机即可运行。
\n\n\n\n\n", "difficulty": 1}, {"id": 308, "year": 2015, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第26题-题目\n\n\n\n

若系统 S1 采用死锁避免方法,S2 采用死锁检测方法。下列叙述中,正确的是()。

\n

Ⅰ、S1 会限制用户申请资源的顺序,而 S2 不会

\n

Ⅱ、S1 需要进程运行所需的资源总量信息,而 S2 不需要

\n

Ⅲ、S1 不会给可能导致死锁的进程分配资源,而 S2 会

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅲ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第26题-解析\n\n\n\n

死锁处理 采用三种策略:死锁预防、死锁避免、死锁检测和解除。

死锁预防,采用破坏产生死锁的四个必要条件中的一个或几个,以防止发生死锁。其中之一的“破坏循环等待条件”,一般采用顺序资源分配法,首先给系统的资源编号,规定每个进程必须按编号递增的顺序请求资源,也就是限制了用户申请资源的顺序,故 I 的前半句属于死锁预防的范畴。

银行家算法是最著名的死锁避免算法,其中的最大需求矩阵 MAX 定义了每一个进程对 m 类资源的最大需求量,系统在执行安全性算法中都会检查此次资源试分配后,系统是否处于安全状态,若不安全则将本次的试探分配作废。

在死锁的检测和解除中,在系统为进程分配资源时不采取任何措施,但提供死锁的检测和解除的手段。故 II、III 正确。

\n\n\n\n\n", "difficulty": 2}, {"id": 309, "year": 2015, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第27题-题目\n\n\n\n

系统为某进程分配了 4 个页框,该进程已访问的页号序列为 2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5。若进程要访问的下一页的页号为 7,依据 LRU 算法,应淘汰页的页号是( )。

\n
A.2
\n
B.3
\n
C.4
\n
D.8
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第27题-解析\n\n\n\n

参考 LRU,对页号序列从后往前计数,直到数到 4(页框数)个不同的数字为止,这个停止的数字就是要淘汰的页号(最近最久未使用的页),题中为页号 2。
\n\n\n\n\n", "difficulty": 1}, {"id": 310, "year": 2015, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第28题-题目\n\n\n\n

在系统内存中设置磁盘缓冲区的主要目的是( )。

\n
A.减少磁盘 I/O 次数
\n
B.减少平均寻道时间
\n
C.提高磁盘数据可靠性
\n
D.实现设备无关性
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第28题-解析\n\n\n\n

磁盘和内存的速度差异,决定了可以将内存经常访问的文件调入磁盘缓冲区,从高速缓存中复制的访问比磁盘 I/O 的机械操作要快很多。
\n\n\n\n\n", "difficulty": 1}, {"id": 311, "year": 2015, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第29题-题目\n\n\n\n

在文件的索引节点中存放直接索引指针 10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 个字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234 和 307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )。

\n
A.1、2
\n
B.1、3
\n
C.2、3
\n
D.2、4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第29题-解析\n\n\n\n

本题考察 混合索引:

其中 10 个直接索引指针指向的数据块大小为 10×1KB = 10KB。

每个索引指针占 4B,则每个磁盘块可存放 1KB/4B = 256 个索引指针,一级索引指针指向的数据块大小为 256×1KB = 256KB,二级索引指针指向的数据块大小为 256×256×1KB = 216KB = 64MB。

按字节编址,偏移量为 1234 时,因 1234B < 10KB,则由直接索引指针可得到其所在的磁盘块地址。文件的索引结点已在内存中,则地址可直接得到,故仅需 1 次访盘即可。

偏移量为 307400 时,因 10KB+256KB < 307400B < 64MB,可知该偏移量的内容在二级索引指针所指向的某个磁盘块中,索引结点已在内存中,故先访盘 2 次得到文件所在的磁盘块地址,再访盘 1 次即可读出内容,故共需 3 次访盘。

\n\n\n\n\n", "difficulty": 1}, {"id": 312, "year": 2015, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第30题-题目\n\n\n\n

在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是( )。

\n
A.可变分配,全局置换
\n
B.可变分配,局部置换
\n
C.固定分配,全局置换
\n
D.固定分配,局部置换
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第30题-解析\n\n\n\n

本题考察内存置换策略:对各进程进行固定分配时页面数不变,不可能出现全局置换。而 A、B、D 是现代操作系统中常见的 3 种策略。
\n\n\n\n\n", "difficulty": 1}, {"id": 313, "year": 2015, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第31题-题目\n\n\n\n

文件系统用 位图法 表示磁盘空间的分配情况,位图存于磁盘的 32~127 号块中,每个盘块占 1024 个字节,盘块和块内字节均从 0 开始编号。假设要释放的盘块号为 409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )。

\n
A.81、1
\n
B.81、2
\n
C.82、1
\n
D.82、2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第31题-解析\n\n\n\n

盘块号=起始块号 + ⌊盘块号/(1024x8)」= 32 + ⌊409612/(1024x8)」= 32 + 50 = 82,这里问的是块内字节号而不是位号,因此还需要除以 8(1 字节=8 位),块内字节号= ⌊(盘块号%(1024x8))/8」= 1。
\n\n\n\n\n", "difficulty": 1}, {"id": 314, "year": 2015, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2015-第32题-题目\n\n\n\n

某硬盘有 200 个磁道(最外侧磁道号为 0),磁道访问请求序列为:130,42,180,15,199,当前磁头位于第 58 号磁道并从外侧向内侧移动。按照 SCAN 调度方法处理完上述请求后,磁头移过的磁道数是( )。

\n
A.208
\n
B.287
\n
C.325
\n
D.382
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第32题-解析\n\n\n\n

SCAN 算法就是电梯调度算法。顾名思义,如果开始时磁头向外移动就一直要到最外侧,然后再返回向内侧移动,就像电梯若往下则一直要下到最底层需求才会再上升一样。当期磁头位于 58 号并从外侧向内侧移动,先依次访问 130 和 199, 然后再返回向外侧移动,依次访问 42 和 15, 故磁头移过的磁道数是:(199-58)+(199-15) = 325。
\n\n\n\n\n", "difficulty": 1}, {"id": 315, "year": 2015, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第33题-题目\n\n\n\n

通过 POP3 协议接收邮件时,使用的传输层服务类型是( )。

\n
A.无连接不可靠的数据传输服务
\n
B.无连接可靠的数据传输服务
\n
C.有连接不可靠的数据传输服务
\n
D.有连接可靠的数据传输服务
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第33题-解析\n\n\n\n

POP3 建立在 TCP 连接上,使用的是有连接可靠的数据传输服务。
\n\n\n\n\n", "difficulty": 2}, {"id": 316, "year": 2015, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第34题-题目\n\n\n\n

使用两种编码方案对比特流 01100111 进行编码的结果如下图所示,编码 1 和编码 2 分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
编码1
编码2
比特流
0
1
1
0
0
1
1
1
\n
A.NRZ 和曼彻斯特编码
\n
B.NRZ 和差分曼彻斯特编码
\n
C.NRZI 和曼彻斯特编码
\n
D.NRZI 和差分曼彻斯特编码
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第34题-解析\n\n\n\n

NRZ 是最简单的串行编码技术,用两个电压来代表两个二进制数,如高电平表示 1,低电平表示 0,题中编码 1 符合。NRZI 则是用电平的一次翻转来表示 1,与前一个 NRZI 电平相同的电平表示 0。曼彻斯特编码将一个码元分成两个相等的间隔,前一个间隔为低电平后一个间隔为高电平表示 1;0 的表示正好相反,题中编码 2 符合。
\n\n\n\n\n", "difficulty": 1}, {"id": 317, "year": 2015, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第35题-题目\n\n\n\n

主机甲通过 128 kbps 卫星链路,采用滑动窗口协议向主机乙发送数据,链路单向传播延迟为 250 ms,帧长为 1000 字节。不考虑确认帧的开销,为使链路利用率不小于 80%,帧序号的比特数至少是( )。

\n
A.3
\n
B.4
\n
C.7
\n
D.8
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第35题-解析\n\n\n\n

不考虑确认帧的开销,一个帧发送完后经过一个单程传播时延到达接收方,再经过一个单程传播时延发送方收到应答,从而继续发送。要使得传输效率最大化,就是不用等确认也可以连续发送多个帧。设连续发送 n 个帧,一个帧的发送时延为 1000B/128kbps= 62.5ms。对于采用滑动窗口协议的流水线机制,我们有如下公式:链路利用率 = (n×发送时延)/(RTT+ 发送时延)。

依题意,有 (n×62.5ms)/(62.5ms+250msx2)≥80%, 得 n≥7.2, 帧序号的比特数 K 需要满足\n2k≥n+1\n。从而,帧序号的比特数至少为 4。

\n\n\n\n\n", "difficulty": 3}, {"id": 318, "year": 2015, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第36题-题目\n\n\n\n

下列关于 CSMA/CD 协议的叙述中,错误的是( )。

\n
A.边发送数据帧,边检测是否发生冲突
\n
B.适用于无线网络,以实现无线链路共享
\n
C.需要根据网络跨距和数据传输速率限定最小帧长
\n
D.当信号传播延迟趋近 0 时,信道利用率趋近 100%
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第36题-解析\n\n\n\n

CCSM/CD 适用于有线网络,而 CSMA/CA 则 广泛应用于无线局域网。其他选项关于 CSMA/CD 的描述都是正确的。
\n\n\n\n\n", "difficulty": 1}, {"id": 319, "year": 2015, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第37题-题目\n\n\n\n

下列关于交换机的叙述中,正确的是( )。

\n
A.以太网交换机本质上是一种多端口网桥
\n
B.通过交换机互连的一组工作站构成一个冲突域
\n
C.交换机每个端口所连网络构成一个独立的广播域
\n
D.以太网交换机可实现采用不同网络层协议的网络互联
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第37题-解析\n\n\n\n

从本质上说,交换机 就是一个多端口的网桥(A 正确),工作在数据链路层(因此不能实现不同网络层协议的网络互联,D 错误),交换机能经济地将网络分成小的冲突域(B 错误)。广播域属于网络层概念,只有网络层设备(如路由器)才能分割广播域(C 错误)。
\n\n\n\n\n", "difficulty": 1}, {"id": 320, "year": 2015, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第38题-题目\n\n\n\n

某路由器的路由表如下表所示:

\n
目的网络下一跳接口
169.96.40.0/23176.1.1.1S1
169.96.40.0/25176.2.2.2S2
169.96.40.0/27176.3.3.3S3
0.0.0.0/0176.4.4.4S4
\n

若路由器收到一个目的地址为 169.96.40.5 的 IP 分组,则转发该 IP 分组的接口是( )。

\n
A.S1
\n
B.S2
\n
C.S3
\n
D.S4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第38题-解析\n\n\n\n

根据 最长前缀匹配,169.96.40.5 与 169.96.40.0 前 27 位匹配最长,故选 C。选项 D 为默认路由,只有当前面的所有目的网络都不能和分组的目的 IP 地址匹配时才使用。
\n\n\n\n\n", "difficulty": 1}, {"id": 321, "year": 2015, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第39题-题目\n\n\n\n

主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32 KB,甲向乙始终以 MSS = 1KB 大小的段发送数据,并一直有数据发送;乙为该连接分配 16 KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发生超时的情况下,经过 4 个 RTT 后,甲的发送窗口是( )。

\n
A.1 KB
\n
B.8 KB
\n
C.16 KB
\n
D.32 KB
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第39题-解析\n\n\n\n

发送窗口的上限值 = min{接收窗口,拥塞窗口}。4 个 RTT 后,乙收到的数据全部存入缓存,不被取走,接收窗口只剩下 1KB(16-1-2-4-8=1)缓存,使得甲的发送窗口为 1KB。
\n\n\n\n\n", "difficulty": 1}, {"id": 322, "year": 2015, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2015-第40题-题目\n\n\n\n

某浏览器发出的 HTTP 请求报文如下( )。

\n

下列叙述中,错误的是

\n
A.该浏览器请求浏览 index.html
\n
B.index.html 存放在 www.test.edu.cn 上
\n
C.该浏览器请求使用持续连接
\n
D.该浏览器曾经浏览过 www.test.edu.cn
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第40题-解析\n\n\n\n

Connection 字段代表 连接方式,Close 表明为非持续连接方式,keep-alive 表示持续连接方式。Cookie 值是由服务器产生的,HTTP 请求报文中有 Cookie 报头表示曾经访问过 www.test.edu.cn 服务器。
\n\n\n\n\n", "difficulty": 2}, {"id": 323, "year": 2015, "index": 41, "type": 3, "typeName": "算法题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n\n2015-第41题-题目\n\n\n\n

用单链表保存 \nm\n 个整数,结点的结构为,且 \n∣data∣≤n\n ( \nn\n 为正整数)。现要求设计一个时间复杂度尽可能高效的算法,对于链表中 data 的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如,若给定的单链表 head 如下:

\n
\n\n\n\n \n 408真题系统\n \n\n
21
-15
-15
-7
15
^
HEAD
\n

则删除结点后的 head 为:

\n
\n\n
21
-15
HEAD
-7
\n

要求:

\n

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

\n

(2) 使用 C 或 C++ 语言,给出单链表结点的数据类型定义。

\n

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

\n

(4) 说明你所设计算法的时间复杂度和空间复杂度。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第41题-解析\n\n\n\n

1)算法的基本设计思想

算法的核心思想是用空间换时间。使用辅助数组记录链表中已出现的数值,从而只需对链表进行一趟扫描。

因为\n∣data∣≤n\n,故辅助数组\nq\n的大小为\nn+1\n,各元素的初值均为 0。依次扫描链表中的各\n结点,同时检查\nq[∣data∣]\n的值,如果为\n0\n,则保留该结点,并令\nq[data]=1\n;否则,将该结点从\n链表中删除。

2)使用 C 语言描述的单链表结点的数据结构定义:

3)算法实现

void RemoveElements(ListNode *head, int n) {\n  // 数组充当哈希表\n  int hash[n+1];\n  for (int i = 0; i <= n; i++) {\n    // 0 表示没有命中\n    hash[i] = 0;\n  }\n  // 当遍历的结点\n  ListNode *q = head->link;\n  // 先前的结点\n  ListNode *p = head;\n  while (q != NULL) {\n    // 绝对值已经出现过\n    if (hash[abs(q->data)] == 1) {\n      // 删除该节点\n      p->next = q->next;\n      q = p->next;\n    } else {\n      // 设置哈希表\n      hash[abs(q->data)] = 1;\n      q = q->next;\n      p = p->next;\n    }\n  }\n}\n

【评分说明】若考生设计的算法满足题目的功能要求且正确,则酌情给分。

4)参考答案所给算法的时间复杂度为 O(m),空间复杂度为 O(n)。

【评分说明】若考生所估计的时间复杂度和空间复杂度与考生实现的算法一致,可给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 324, "year": 2015, "index": 42, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第42题-题目\n\n\n\n

已知含有\n5\n个顶点的图\nG\n如下图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
0
1
2
4
3
\n

请回答下列问题:

\n

(1) 写出图\nG\n的邻接矩阵 \nA\n (行、列下标均从\n0\n开始)。

\n

(2) 求 \nA2\n ,矩阵 \nA2\n 中位于 0 行 3 列元素值的含义是什么?

\n

(3) 若已知具有 \nn\n(n≥2)\n 个顶点的图的邻接矩阵为 \nB\n,则 \nBm\n(2≤m≤n)\n 中非零元素的含义是什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第42题-解析\n\n\n\n

1)图\nA\n的邻接矩阵如下:

A=​0 1 1 0 1​10011​10010​01101​11010​​

2)\nA2\n如下:

A=​3 1 0 3 1​13212​02202​31031​12213​​

0 行 3 列的元素值 3 表示从顶点 0 到顶点 3 之间长度为 2 的路径共有 3 条。

3)\nBm\n(\n2≤m≤n\n) 中位于\ni\n行\nj\n列(\n0≤i\n,\nj≤n−1\n)的非零元素的含义是:图中从顶点\ni\n到顶点\nj\n长度为\nm\n的路径条数。

\n\n\n\n\n", "difficulty": 3}, {"id": 325, "year": 2015, "index": 43, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2015-第43题-题目\n\n\n\n

某 16 位计算机的主存按字节编址,存取单位为 16 位;采用 16 位定长指令字格式;CPU 采用单总线结构,主要部分如下图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
R0
R1
R2
R3
MAR
MDR
PC
IR
控制部件
移位寄存器
SR
CPU
内总线
ALU
A
B
T
SRout
SRop
ALUop
MUX
0
1
2
Tin
CPU
(中央处理器)
主存
主
存
总
线
1
2
3
4
5
8
7
9
6
\n

图中 R0~R3 为通用寄存器;T 为暂存器;SR 为移位寄存器,可实现直送(mov)、左移一位(left)和右移一位(right)3 种操作,控制信号为 SRop,SR 的输出由信号 SRout 控制;ALU 可实现直送 A(mova)、A 加 B(add)、A 减 B(sub)、A 与 B(and)、A 或 B(or)、非 A(not)、A 加 1(inc)这 7 种操作,控制信号为 ALUop。

\n

注:已补充内总线到 MAR 的箭头和内总线到 IR 的箭头。

\n

请回答下列问题。

\n

(1) 图中哪些寄存器是程序员可见的?为何要设置暂存器 T?

\n

(2) 控制信号 ALUop 和 SRop 的位数至少各是多少?

\n

(3) 控制信号 SRout 所控制部件的名称或作用是什么?

\n

(4) 端点①~⑨中,哪些端点须连接到控制部件的输出端?

\n

(5) 为完善单总线数据通路,需要在端点①~⑨中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。

\n

(6) 为什么二路选择器 MUX 的一个输入端是 2?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第43题-解析\n\n\n\n

1)程序员可见寄存器为通用寄存器(R0~R3)和 PC。因为采用了单总线结构,因此,若无暂存器 T,则 ALU 的 A、B 端口会同时获得两个相同的数据,使数据通路不能正常工作。

【评分说明】回答通用寄存器(R0~R3),给分;回答 PC,给分;部分正确,酌情给分。设置暂存器 T 的原因若回答用于暂时存放端口 A 的数据,则给分;其他答案,酌情给分。

2)ALU 共有 7 种操作,故其操作控制信号 ALUop 至少需要 3 位;移位寄存器有 3 种操作,其操作控制信号 SRop 至少需要 2 位。

3)信号 SRout 所控制的部件是一个三态门,用于控制移位器与总线之间数据通路的连接与断开。

【评分说明】只要回答出三态门或者控制连接/断开,即给分。

4)端口 ①、②、③、⑤、⑧ 须连接到控制部件输出端。

【评分说明】答案包含④、⑥、⑦、⑨中任意一个,不给分;答案不全酌情给分。

5)连线 1,⑥→⑨:连线 2,⑦→④。

【评分说明】回答除上述连线以外的其他连线,酌情给分。

6)因为每条指令的长度为 16 位,按字节编址,所以每条指令占用 2 个内存单元,顺序执行时,下条指令地址为 (PC)+2。MUX 的一个输入端为 2,可便于执行 (PC)+2 操作。

\n\n\n\n\n", "difficulty": 2}, {"id": 326, "year": 2015, "index": 44, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2015-第44题-题目\n\n\n\n

题 43 中描述的计算机,其部分指令执行过程的控制信号如题 44 图 a 所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
  PCout=1, MARin=1, Tin=1, MEMop=read
  MUXop=①, ALUop=add, SRop=②
  SRout=1, PCin=1
  MDRout=1, IRin=1
  R1out=1, Tin=1, ALUop=③, SRop=④
  SRout=1, R2in=1
  R1out=1, MARin=1, MEMop=⑤
  R2out=1, Tin=1
  MDRout=1, MUXop=1, ALUop=⑥, SRop=⑦
  ⑧=1, R0in=1
取指阶段
执行阶段
shl R2, R1
sub R0, R2, (R1)
注:值为 0 的寄存器输入/输出控制信号以及值为任意的其他控制信号均为在图中标出。
图 a    部分指令控制信号
\n

该机指令格式如题 44 图 b 所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分别为 0 和 1,通用寄存器 R0~R3 的编号分别为 0、1、2 和 3。

\n
\n\n
其中:Md、Ms1、Ms2 均为寻址方式位,Rd、Rs1、Rs2 为寄存器信号
三地址指令:
二地址指令(末 3 位均为 0):
单地址指令(末 6 位均为 0):
OP
Md
Rd
Ms1
Rs1
Ms2
Rs2
指令操作码
目的操作数
源操作数 1
源操作数 2
源操作数1 OP 源操作数2 → 目的操作数地址
OP 源操作数1 → 目的操作数地址
OP 目的操作数 → 目的操作数地址
图 b   指令格式
\n

请回答下列问题。

\n

(1) 该机的指令系统最多可定义多少条指令?

\n

(2) 假定 inc、shl 和 sub 指令的操作码分别为 01H、02H 和 03H,则以下指令对应的机器代码各是什么?

\n

(3) 假设寄存器 X 的输入和输出控制信号分别为 Xin 和 Xout,其值为 1 表示有效,为 0 表示无效(例如,PCout=1 表示 PC 内容送总线);存储器控制信号为 MEMop,用于控制存储器的读 (read) 和写 (write) 操作。写出题 44 图 a 中标号①~⑧处的控制信号或控制信号的取值。

\n

(4) 指令 sub R1,R3,(R2) 和 inc R1 的执行阶段至少各需要多少个时钟周期?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第44题-解析\n\n\n\n

1)指令操作码有 7 位,因此最多可定义\n27=128\n条指令。

2)各条指令的机器代码分别如下:

①“incR1”的机器码为 0000001001000000,即 0240H。

②“shlR2,R1”的机器码为 0000010010001000,即 0488H。

③“subR3,(R1),R2”的机器码为 0000011011101010,即 06EAH。

3)各标号处的控制信号或控制信号取值如下:\n①0;②mov;③mova;④left;⑤read;⑥sub;⑦mov;⑧Srout

【评分说明】答对两个给分。

4)指令 subR1, R3, (R2) 的执行阶段至少包含 4 个时钟周期;指令 incR1 的执行阶段至少包含 2 个时钟周期。

\n\n\n\n\n", "difficulty": 2}, {"id": 327, "year": 2015, "index": 45, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第45题-题目\n\n\n\n

有 A、B 两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题,将答案和向对方提出的新问题组成一个邮件放人对方的信箱中。假设 A 的信箱最多放\nM\n个邮件,B 的信箱最多放\nN\n个邮件。初始时 A 的信箱中有\nx\n个邮件 (\n0<x<M\n),B 的的信箱中有\ny\n个邮件 (\n0<y<N\n)。辩论者每取出一个邮件,邮件数减 1。A 和 B 两人的操作过程描述如下:

\n

当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和 P、V(或 wait、signal)操作,以实现上述过程的同步。要求写出完整的过程,并说明信号量的含义和初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第45题-解析\n\n\n\n
semaphore A_full = x;        // A 信箱中已有的邮件个数\nsemaphore A_empty = M - x;   // A 信箱还可以放多少个邮件\nsemaphore B_full = y;        // B 信箱中已有的邮件个数\nsemaphore B_empty = N - y;   // B 信箱中还能放多少个邮件\nsemaphore A_mutex = 1;       // 互斥访问 A 信箱\nsemaphore B_mutex = 1;       // 互斥访问 B 信箱\n\nA() {\n  while (1) {\n    P(A_full);\n    P(A_mutex);\n    从A信箱中取出一个邮件;\n    V(A_mutex);\n    V(A_empty);\n    回答问题并提出新问题;\n    P(B_empty);\n    P(B_mutex);\n    将信件放入B邮箱;\n    V(B_mutex);\n    V(B_full);\n  }\n}\n\nB() {\n  while (1) {\n    P(B_full);\n    P(B_mutex);\n    从B信箱中取出一个邮件;\n    V(B_mutex);\n    V(B_empty);\n    回答问题并提出新问题;\n    P(A_empty);\n    P(A_mutex);\n    将信件放入A邮箱;\n    V(A_mutex);\n    V(A_full);\n  }\n}\n

【评分说明】\n1)每对信号量的定义及初值正确,给分。

2)每个互斥信号量的 P、V 操作使用正确,各给分。

3)每个同步信号量的 P、V 操作使用正确,各给分。

4)其他答案酌情给分。

\n\n\n\n\n", "difficulty": 0}, {"id": 328, "year": 2015, "index": 46, "type": 2, "typeName": "应用题", "score": 6, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第46题-题目\n\n\n\n

某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下所示:

\n
页目录号(10 位)页表索引(10 位)页内偏移量(12 位)
\n

请回答下列问题。

\n

(1) 页和页框的大小各为多少字节?进程的虚拟地址空间大小为多少页?

\n

(2) 假定页目录项和页表项均占 4 个字节,则进程的页目录和页表共占多少页?要求写出计算过程。

\n

(3) 若某指令周期内访问的虚拟地址为 0100 0000H 和 0111 2048H,则进行地址转换时共访问多少个二级页表?要求说明坪由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第46题-解析\n\n\n\n

1)在分页存储管理方式 中,将用户程序的地址空间分为若干固定大小的区域,称为“页”或“页面”。相应地,将内存空间分为若干物理块或页框(frame),页和页框大小相同。因此,页和页框大小均为\n212\nB =\n4\nKB。进程的虚拟地址空间大小为\n232/212=220\n页。

2)\n(210×4)/212\n(页目录所占页数)+\n(220×4)/212\n(页表所占页数)=\n1025\n页。

3)需要访问一个二级页表。因为虚拟地址 01000000H 和 01112048H 的最高 10 位的值都是 4,页目录号相同,访问的是同一个二级页表。

【评分说明】用其他方法计算,思路和结果正确同样给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 329, "year": 2015, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2015-第47题-题目\n\n\n\n

某网络拓扑如题 47 图所示,其中路由器内网接口、DHCP 服务器、WWW 服务器与主机 1 均采用静态 IP 地址配置,相关地址信息见图中标注;主机 2~主机 N 通过 DHCP 服务器动态获取 IP 地址等配置信息。

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
www 服务器
DHCP 服务器%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%26lt%3Bfont%20style%3D%26quot%3Bfont-size%3A%2018px%3B%26quot%3B%26gt%3Bwww%20%E6%9C%8D%E5%8A%A1%E5%99%A8%26lt%3B%2Ffont%26gt%3B%22%20style%3D%22text%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3BwhiteSpace%3Dwrap%3Brounded%3D0%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%223.3900000000000006%22%20y%3D%2260%22%20width%3D%22120%22%20height%3D%2240%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
主机 1
主机 2
主机 N
以太网交换机
111.123.15.4/24
111.123.15.3/24
111.123.15.2/24
00-b1-b1-b1-b1-b1
111.123.15.1/24
00-a1-a1-a1-a1-a1
路由器
\n

(1) DHCP 服务器可为主机 2~主机 N 动态分配 IP 地址的最大范围是什么?主机 2 使用 DHCP 协议获取 IP 地址的过程中,发送的封装 DHCP Discover 报文的 IP 分组的源 IP 地址和目的 IP 地址分别是什么?

\n

(2) 若主机 2 的 ARP 表为空,则该主机访问 Internet 时,发出的第一个以太网帧的目的 MAC 地址是什么?封装主机 2 发往 Internet 的 IP 分组的以太网帧的目的 MAC 地址是什么?

\n

(3) 若主机 1 的子网掩码和默认网关分别配置为 255.255.255.0 和 111.123.15.2,则该主机是否能访问 WWW 服务器?是否能访问 Internet?请说明理由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2015-第47题-解析\n\n\n\n

1)DHCP 服务器可为 主机 2 ~ 主机 N 动态分配 IP 地址的最大范围是:111.123.15.5 ~ 111.123.15.254;主机 2 发送的封装 DHCP Discover 报文的 IP 分组的源 IP 地址和目的 IP 地址分别是 0.0.0.0 和 255.255.255.255。

2)主机 2 发出的第一个以太网帧的目的 MAC 地址是 ff-ff-ff-f-ff-ff,封装主机 2 发往 Internet 的 P 分组的以太网帧的目的 MAC 地址是 00-a1-a1-a1-a1-a1。

3)主机 1 能访问 WWW 服务器,但不能访问 Internet。.由于主机 1 的子网掩码配置正确而默认网关 IP 地址被错误地配置为 111.123.15.2(正确 IP 地址是 111.123.15.1),所以主机 1 可以访问在同一个子网内的 WWW 服务器,但当主机 1 访问 Internet 时,主机 1 发出的 IP 分组会被路由到错误的默认网关(111.123.15.2),从而无法到达目的主机。

\n\n\n\n\n", "difficulty": 1}, {"id": 330, "year": 2016, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第1题-题目\n\n\n\n

已知表头元素为 c 的单链表在内存中的存储状态如下表所示。现将 f 存放于 1014H 处并插入单链表,若 f 在逻辑上位于 a 和 e 之间,则 a,e,f 的 “链接地址” 依次是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
a
1010H
b
100CH
c
1000H
d
NULL
e
1004H
元素
链接地址
地址
1000H
1004H
1008H
100CH
1010H
1014H
\n
A.1010H,1014H,1004H
\n
B.1010H,1004H,1014H
\n
C.1014H,1010H,1004H
\n
D.1014H,1004H,1010H
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第1题-解析\n\n\n\n

根据存储状态,单链表的结构如下图所示。

\n\n
c
a
e
b
d
^
f
1008H
1000H
1010H
1004H
100CH
1014H

其中“链接地址”是指结点 next 所指的内存地址。当结点 f 插入后,a 指向 f, f 指向 e, e 指向 b。显然 a、e 和 f 的“链接地址”分别是 f、b 和 e 的内存地址,即 1014H、1004H 和 1010H。

\n\n\n\n\n", "difficulty": 1}, {"id": 331, "year": 2016, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第2题-题目\n\n\n\n

已知一个带有表头结点的双向循环链表 L,结点结构为 prev|data|next,prev 和 next 分别是指向其直接前驱和直接后继结点的指针。现要删除指针 p 所指的结点,正确的语句序列是( )。

\n
A.p->next->prev = p->prev; p->prev->next = p->prev; free(p);
\n
B.p->next->prev = p->next; p->prev->next = p->next; free(p);
\n
C.p->next->prev = p->next; p-> prev->next = p->prev; free(p);
\n
D.p->next->prev = p->prev; p->prev->next = p->next; free(p);
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第2题-解析\n\n\n\n

参考 单链表删除 操作,这种题为送分题。
\n\n\n\n\n", "difficulty": 1}, {"id": 332, "year": 2016, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第3题-题目\n\n\n\n

设有下图所示的火车车轨,入口到出口之间有 n 条轨道,列车的行进方向均为从左至右,列车可驶入任意一条轨道。现有编号为 1-9 的 9 列列车,驶入的次序依次是 8, 4, 2, 5, 3, 9, 1, 6, 7。若期望驶出的次序依次为 1~9,则 n 至少是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
7 6 1 9 3 5 2 4 8
 9 8 7 6 5 4 3 2 1
入口
出口
轨道
\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第3题-解析\n\n\n\n

在确保队列先进先出原则的前提下。根据题意具体分析:入队顺序为 8, 4, 2, 5, 3, 9, 1, 6, 7,出队顺序为 1~9。入口和出口之间有多个队列(n 条轨道),且每个队列(轨道)可容纳多个元素(多列列车)。如此分析:显然先入队的元素必须小千后入队的元素(如果 8 和 4 入同一队列,8 在前 4 在后,那么出队时只能是 8 在前 4 在后),这样 8 入队列 1,4 入队列 2, 2 入队列 3,5 入队列 2(按照前面的原则“大的元素在小的元素后面”也可以将 5 入队列 3,但这时剩下的元素 3 就必须放到一个新的队列里面,无法确保”至少“,本应该是将 5 入队列 2,再将 3 入队列 3,不增加新队列的情况下,可以满足题意“至少”的要求),3 入队列 3,9 入队列 1,这时共占了 3 个队列,后面还有元素 1,直接再占用一个新的队列 4,1 从队列 4 出队后,剩下的元素 6 和 7 或者入队到队列 2 或者入队到队列 3(为简单起见我们不妨设 n 个队列的序号分别为 1, 2, …, n),这样就可以满足题目的要求。综上,共占用了 4 个队列。当然还有其他的入队出队的情况,请考生们自己推演。但要确保满足:O 队列中后面的元素大千前面的元素;@确保占用最少(即\n满足题目中的“至少\") 的队列。
\n\n\n\n\n", "difficulty": 1}, {"id": 333, "year": 2016, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第4题-题目\n\n\n\n

有一个 100 阶的三对角矩阵\nM\n,其元素\nmi,j​(1≤i≤100,1≤j≤100)\n 按行优先依次压缩存入下标从 0 开始的一维数组 N 中。元素\nm30,30​\n 在数组 N 中的下标是( )。

\n
A.86
\n
B.87
\n
C.88
\n
D.89
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2016-第4题-解析\r\n\r\n\r\n\r\n

参考三对角矩阵,采用压缩存储,将 3 条对角线上的元素按行优先方式存放在一 维数组 B 中,且\r\na1,1​\r\n存放于 B[0] 中,其存储形式如下所示:

\"\"

可以计算矩阵 A 中 3 条对角线上的元素\r\nai,j​\r\n(\r\n1≤i,j≤n,∣i−j∣≤1\r\n) 在一维数组 B 中存放的下标为\r\nk=2i+j−3\r\n。

解法一:针对该题,仅需将数字逐一代入公式里面即可:k=2x30+30-3 = 87, 结果为 87。

解法二:观察上图的三对角矩阵不难发现,第一行有两个元素,剩下的在元素\r\nm30,30​\r\n所在行之前的 28 行(注意下标\r\n1≤i≤100\r\n、\r\n1≤j≤100\r\n)中每行都有 3 个元素,而\r\nm30,30​\r\n之前仅有一个元素\r\nm30,29​\r\n, 那么不难发现元素\r\nm30,30​\r\n在数组 N 中的下标是:2+28x3+2-1 = 87。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 334, "year": 2016, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第5题-题目\n\n\n\n

若森林 F 有 15 条边、25 个结点,则 F 包含树的个数是( )。

\n
A.8
\n
B.9
\n
C.10
\n
D.11
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第5题-解析\n\n\n\n

解法一:树有一个很重要的性质:在 n 个结点的树中有 n-1 条边,“那么对于每棵树,其结点数比边数多 1”。题中的森林中的结点数比边数多 10(即 25-15=10),显然共有 10 棵树。

解法二:若考生再仔细分析可发现,此题也是考察图的某些方面的性质:生成树和生成森林。此时对于图的生成树有一个重要的性质:若图中顶点数为 n,则它的生成树含有 n-1 条边。对比解法一中树的性质,不难发现两种解法都利用到了“树中结点数比边数多 1”的性质,接下来的分析如解法一。

\n\n\n\n\n", "difficulty": 1}, {"id": 335, "year": 2016, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第6题-题目\n\n\n\n

下列选项中,不是下图深度优先搜索序列的是()

\n
A.V1​,V5​,V4​,V3​,V2​
\n
B.V1​,V3​,V2​,V5​,V4​
\n
C.V1​,V2​,V5​,V4​,V3​
\n
D.V1​,V2​,V3​,V4​,V5​
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第6题-解析\n\n\n\n

对于本题,只需按深度优先遍历的策略进行遍历即可。对千选项 A: 先访问\nV1​\n, 然后访问\n与\nV1​\n邻接且未被访问的任一顶点(满足的有\nV2​\n、\nV3​\n和\nV5​\n), 此时访问\nV5​\n, 然后从\nV5​\n出发,访\n问与\nV5​\n邻接且未被访问的任一顶点(满足的只有\nV4​\n), 然后从\nV4​\n出发,访问与\nV4​\n邻接且未被\n访问的任一顶点(满足的只有\nV3​\n),然后从\nV3​\n出发,访问与\nV3​\n邻接且未被访问的任一顶点(满足的只有\nV2​\n), 结束遍历。选项 B 和 C 的分析方法与选项 A 相同,不再赘述。对千选项 D, 首\n先访问\nV1​\n, 然后从\nV1​\n出发,访问与\nV1​\n邻接且未被访问的任一顶点(满足的有\nV2​\n、\nV3​\n和\nV5​\n),\n然后从\nV2​\n出发,访问与\nV2​\n邻接且未被访问的任一顶点(满足的只有\nV5​\n), 按规则本应该访问\nV5​\n, 但选项 D 却访问\nV3​\n, 因此 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 336, "year": 2016, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第7题-题目\n\n\n\n

若将 n 个顶点 e 条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是()

\n
A.O(n)
\n
B.O(n+e)
\n
C.O(n2)
\n
D.O(n∗e)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第7题-解析\n\n\n\n

根据拓扑排序的规则,输出每个顶点的同时还要删除以它为起点的边,这样对各顶点和边都要进行遍历,故拓扑排序的时间复杂度为\nO(n+e)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 337, "year": 2016, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第8题-题目\n\n\n\n

使用迪杰斯特拉(Djkstra)算法求下图中从顶点 1 到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
2
4
5
3
6
2
5
7
4
9
6
2
2
6
5
\n
A.5,2,3,4,6
\n
B.5,2,3,6,4
\n
C.5,2,4,3,6
\n
D.5,2,6,3,4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第8题-解析\n\n\n\n

根据 Dijkstra 算法,从顶点 1 到其余各顶点的最短路径如下表所示。

顶点第 1 趟第 2 趟第 3 趟第 4 趟第 5 趟
25
v1​→v2​
5
v1​→v2​
3∞∞7
v1​→v2​→v3​
4∞11
v1​→v5​→v4​
11
v1​→v5​→v4​
11<br>v1​→v5​→v4​11
v1​→v5​→v4​
54
v1​→v5​
6∞9
v1​→v5​→v6​
9
v1​→v5​→v6​
9
v1​→v5​→v6​
集合 S{1, 5}{1, 5, 2}{1, 5, 2, 3}{1, 5, 2, 3, 6}{1, 5, 2, 3, 6, 4}
\n\n\n\n\n", "difficulty": 1}, {"id": 338, "year": 2016, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第9题-题目\n\n\n\n

在有 n(n>1000) 个元素的升序数组 A 中查找关键字 x。查找算法的伪代码如下所示。

\n

本算法与折半查找算法相比,有可能具有更少比较次数的情形是()

\n
A.当 x 不在数组中
\n
B.当 x 接近数组开头处
\n
C.当 x 接近数组结尾处
\n
D.当 x 位于数组中间位置
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第9题-解析\n\n\n\n

此题为送分题。该程序采用跳跃式的顺利查找法查找升序数组中的 X, 显然是 x 越靠前,比较次数才会越少。
\n\n\n\n\n", "difficulty": 1}, {"id": 339, "year": 2016, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第10题-题目\n\n\n\n

B+ 树不同于 B 树的特点之一是()

\n
A.能支持顺序查找
\n
B.结点中含有关键字
\n
C.根结点至少有两个分支
\n
D.所有叶结点都在同一层上
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第10题-解析\n\n\n\n

由于 B+ 树 的所有叶结点中包含了全部的关键字信息,且叶结点本身依关键字从小到大顺序\n链接,可以进行顺序查找,而 B 树不支持顺序查找(只支持多路查找)。
\n\n\n\n\n", "difficulty": 1}, {"id": 340, "year": 2016, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第11题-题目\n\n\n\n

对 10TB 的数据文件进行排序,应使用的方法是()

\n
A.希尔排序
\n
B.堆排序
\n
C.快速排序
\n
D.归并排序
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第11题-解析\n\n\n\n

外部排序 指待排序文件较大,内存一次性放不下,需存放在外部介质中。外部排序通常采用归并排序法。选项 A、B、C 都是内部排序的方法。
\n\n\n\n\n", "difficulty": 1}, {"id": 341, "year": 2016, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第12题-题目\n\n\n\n

将高级语言源程序转换为机器目标代码文件的程序是( )。

\n
A.汇编程序
\n
B.链接程序
\n
C.编译程序
\n
D.解释程序
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第12题-解析\n\n\n\n

翻译程序是指把高级语言源程序转换成机器语言程序(目标代码)的软件。翻译程序有两种:一种是编译程序,它将高级语言源程序一次全部翻译成目标程序,每次执行程序时,只要执行目标程序,因此,只要源程序不变,就无须重新编译。另一种是解释程序,它将源程序的一条语旬翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译为机器语言程序。汇编语言是一种面向机器的低级语言,是机器语言的符号表示,与机器语言一一对应。
\n\n\n\n\n", "difficulty": 1}, {"id": 342, "year": 2016, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第13题-题目\n\n\n\n

有如下 C 语言程序段

\n
short si = -32767;\nunsigned short usi = si;\n
\n

执行上述两条语句后,usi 的值为( )。

\n
A.-32767
\n
B.32767
\n
C.32768
\n
D.32769
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第13题-解析\n\n\n\n

结合题干及选项可知,short 为 16 位。因 C 语言中的数据在内存中为 补码表示,si 对应的补码二进制表示为:1000 0000 0000 0001B, 最前面的一位 “1” 为符号位,表示负数,即 -32767。由 signed 型转化为等长 unsigned 型数据时,符号位成为数据的一部分,也就是说,负数转化为无符号数(即正数),其数值将发生变化。usi 对应的补码二进制表示与 si 的表示相同,但表示正数,为 32769。
\n\n\n\n\n", "difficulty": 1}, {"id": 343, "year": 2016, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第14题-题目\n\n\n\n

某计算机字长为 32 位,按字节编址,采用小端 (Little Endian) 方式存放数据,假定有一个 double 型变量,其机器数表示为 1122 3344 5566 7788H 存放在 0000 8040H 开始的连续存储单元中,则存储单元 0000 8046H 中存放的是( )。

\n
A.22H
\n
B.33H
\n
C.66H
\n
D.77H
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第14题-解析\n\n\n\n

大端模式:一个字中的高位字节(Byte)存放在内存中这个字区域的低地址处。小端方式:一个字中的低位字节(Byte)存放在内存中这个字区域的低地址处。依此分析,各字节的存储分配如下表所示。

地址00008040H00008041H00008042H00008043H
内容88H77H66H55H
地址00008044H00008045H00008046H00008047H
内容44H33H22H11H

从而存储单元 0000 804 6H 中存放的是 22H。

\n\n\n\n\n", "difficulty": 1}, {"id": 344, "year": 2016, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第15题-题目\n\n\n\n

有如下 C 语言程序段:

\n
for (k = 0; k < 1000; k++)\n    a[k] = a[k] + 32;\n
\n

若数组 a 以及变量 k 均为 int 型,int 型数据占 4B,数据 Cache 采用直接映射方式,数据区大小是 1KB,块大小是 16B,该程序段执行前 Cache 为空,则该程序段执行过程中,访问数组 a 的 Cache 的缺失率是( )。

\n
A.1.25%
\n
B.2.5%
\n
C.12.5%
\n
D.25%
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第15题-解析\n\n\n\n

分析语旬 a[k] = a[k] + 32: 首先读取 a[k] 需要访问一次 a[k],之后将结果赋值给 a[k] 需要访问一次,共访问两次。第一次访问 a[k] 未命中,并将该字所在的主存块调入 Cache 对应的块中,对于该主存块中的 4 个整数的两次访问中只在访问第一次的第一 个元素时发生缺失,其他\n的 7 次访问中全部命中,故该程序段执行过程中访问数组 a 的 Cache 缺失率约为 1/8(即 12.5%)。
\n\n\n\n\n", "difficulty": 1}, {"id": 345, "year": 2016, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第16题-题目\n\n\n\n

某存储器容量为 64KB,按字节编址,地址 4000H~5FFFH 为 ROM 区,其余为 RAM 区。若采用 8K×4 位的 SRAM 芯片进行设计,则需要该芯片的数量是( )。

\n
A.7
\n
B.8
\n
C.14
\n
D.16
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第16题-解析\n\n\n\n

参考 主存容量的扩展,5FFFH - 4000H + 1 = 2000H,即 ROM 区容量为\n213\nB = 8KB(2000H =\n2×163=213\n),RAM 区容量为 56KB(64KB-8KB=56KB),则需要 8 Kx4 位的 SRAM 芯片的数量为 14(56KB/(8Kx4bit)=14)。
\n\n\n\n\n", "difficulty": 1}, {"id": 346, "year": 2016, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第17题-题目\n\n\n\n

某指令格式如下所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
OP
M
I
D
\n

其中 M 为寻址方式,I 为变址寄存器编号,D 为形式地址。若采用先变址后间址的寻址方式,则操作数的有效地址是( )。

\n
A.I+D
\n
B.(I)+D
\n
C.((I)+D)
\n
D.((I))+D
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第17题-解析\n\n\n\n

变址寻址 中,有效地址 EA 等于指令字中的形式地址 D 与变址寄存器 I 的内容相加之和,即 EA= (I)+ D。间接寻址是相对于直接寻址而言的,指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数地址的地址,即 EA=(D)。从而该 操作数的有效地址是 ((I)+ D)。
\n\n\n\n\n", "difficulty": 1}, {"id": 347, "year": 2016, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第18题-题目\n\n\n\n

某计算机主存空间为 4GB,字长为 32 位,按字节编址,采用 32 位定长指令字格式,若指令按字边界对齐存放,则程序计数器 (PC) 和指令寄存器 (IR) 的位数至少分别是( )。

\n
A.30、30
\n
B.30、32
\n
C.32、30
\n
D.32、32
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第18题-解析\n\n\n\n

程序计数器(PC)给出下一条指令字的访存地址(指令在内存中的地址),取决于存储器的字数(4 GB / 32bit = 2³⁰),故程序计数器(PC)的位数至少是 30 位;指令寄存器(IR)用于接收取得的指令,取决于指令字长(32 位),故指令寄存器(IR) 的位数至少为 32 位。
\n\n\n\n\n", "difficulty": 2}, {"id": 348, "year": 2016, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第19题-题目\n\n\n\n

在无转发机制的五段基本流水线中,下列指令序列存在数据冒险的指令对是( )。

\n
A.I1 和 I2
\n
B.I2 和 I3
\n
C.I2 和 I4
\n
D.I3 和 I4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第19题-解析\n\n\n\n

数据冒险,即数据相关,指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况,则 这两条指令即为数据相关。当多条指令重叠处理时就会发生冲突。首先这两条指令发生写后读相关,并且两条指令在流水线中执行情况(发生数据冒险)如下表所示:

\n\n
I1
I2
时钟
指令
1
2
3
4
5
6
7
取指
译码
运算
访存
写回
取指
译码
运算
访存
写回

指令 I2 在时钟 5 时将结果写入寄存器 (R5),但指令 I3 在时钟 3 时读寄存器(R5)。本来指令 I2 应先写入 R5,指令 I3 后读 R5,结果变成指令 I3 先读 R5,指令 12 后写入 R5,因而发生数据冲突。

\n\n\n\n\n", "difficulty": 1}, {"id": 349, "year": 2016, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第20题-题目\n\n\n\n

单周期处理器中所有指令的指令周期为一个时钟周期。下列关干单周期处理器的叙述中,错误的是( )。

\n
A.可以采用单总线结构数据通路
\n
B.处理器时钟频率较低
\n
C.在指令执行过程中控制信号不变
\n
D.每条指令的 CPI 为 1
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第20题-解析\n\n\n\n

本题考察对 CPU 时钟周期的理解。

时钟周期:又称节拍周期,是处理操作的最基本单位。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU 仅完成一个最基本的动作。时钟周期是一个时间的量。

单总线结构 将 CPU、主存、I/O 设备都挂在一组总线上,允许 I/O 设备之间、I/O 设备与主存之间直接交换信息,但多个部件只能争用唯一的总线,且不支持并发传送操作,会造成总线冲突。单周期处理器 不可以采用单总线结构数据通路。A 错误。假设一条指令分为五段①IF 取值②ID 译码和取数③EX 执行④M 访存⑤WB,每段执行需要一个时钟周期,若要在一个时钟周期内完成该指令,则需要 5 条总线并行,单总线显然无法满足要求,若要在单总线上完成,则需要串行执行 5 个时钟周期。单周期处理器采用单总线结构数据通路,好比上班高峰交通要道限速又限流,直接造成交通堵塞。

因为要考虑比较慢的指令,所以处理器的时钟频率较低,B 正确。

因为在一个时钟周通常为一个节拍脉冲,控制信号时控制单元 (CU) 根据指令操作码发出的信号,一个时钟周期内的控制信号不变,单周期处理器中所有指令的指令周期为一个时钟周期,在指令执行过程中控制信号不变。C 正确。

因为单周期处理器即指所有指令的指令周期为一个时钟周期,所以每条指令的 CPI 为 1。D 正确。

本题选 A。

\n\n\n\n\n", "difficulty": 2}, {"id": 350, "year": 2016, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第21题-题目\n\n\n\n

下列关于总线设计的叙述中的叙述中,错误的是( )。

\n
A.并行总线传输比串行总线传输速度快
\n
B.采用信号线复用技术可减少信号线数量
\n
C.采用突发传输方式可提高总线数据传输率
\n
D.采用分离事务通信方式可提高总线利用率
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第21题-解析\n\n\n\n

并行总线传输通常比串行总线传输速度快,但这不是绝对的。在实际时钟频率比较低的情况下,并行总线因为可以同时传输若干比特,速率确实比串行总线快。但是,随着技术的发展,时钟频率越来越高,并行导线之间的相互干扰越来越严重,当时钟频率提高到一定程度时,传输的数据已经无法恢复。而串行总线因为导线少,线间干扰容易控制,反而可以通过不断提高时钟频率来提高传输速率。A错误。

总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线路传输更多的信息,从而节省了空间和成本。B正确。

突发(猝发)传输是在一个总线周期中,可以传输多个存储地址连续的数据,即一次传输一个地址和一批地址连续的数据。C正确。

分离事务通信即总线复用的一种,相比单一的传输线路可以提高总线的利用率。D正确。

本题选A。

\n\n\n\n\n", "difficulty": 1}, {"id": 351, "year": 2016, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第22题-题目\n\n\n\n

异常是指令执行过程中在处理器内部发生的特殊事件,中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中,错误的是( )。

\n
A.“访存时缺页” 属于中断
\n
B.“整数除以 0” 属于异常
\n
C.“DMA 传送结束” 属于中断
\n
D.“存储保护错” 属于异常
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第22题-解析\n\n\n\n

中断 是指来自 CPU 执行指令以外事件的发生,如设备发出的 I/O 结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发出下一个输入/输出请求,同时让完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。异常 也称内中断、例外或陷入(Trap),指源自 CPU 执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页以及专门的陷入指令等引起的事件。A 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 352, "year": 2016, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第23题-题目\n\n\n\n

下列关于批处理系统的叙述中,正确的是(  )

\n

Ⅰ.批处理系统允许多个用户与计算机直接交互

\n

Ⅱ.批处理系统分为单道批处理系统和多道批处理系统

\n

Ⅲ.中断技术使得多道批处理系统和 I/O 设备可与 CPU 并行工作

\n
A.仅Ⅱ、Ⅲ
\n
B.仅Ⅱ
\n
C.仅Ⅰ、Ⅱ
\n
D.仅Ⅰ、Ⅲ
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第23题-解析\n\n\n\n

本题考察操作系统 发展历程。批处理系统中,作业执行时用户无法干预其运行,只能通过事先配置作业控制来间接干预,缺少交互能力,也因此才发展出分时系统,I 错误。批处理系统按发展历程又分为单道批处理系统、多道批处理系统,II 正确。多道程序设计技术允许同时把多个程序放入内存,并允许它们交替在 CPU 中运行,它们共享系统中的各种硬、软件资源,当 一道程序因 1/0 请求而暂停运行时,CPU 便立即转去运行另 一道程序,即多道批处理系统的 1/0 设备可与 CPU 并行工作,这都是借助于中断技术实现的,III 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 353, "year": 2016, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第24题-题目\n\n\n\n

某单 CPU 系统中有输入和输出设备各 1 台,现有 3 个并发执行的作业,每个作业的输入、计算和输出时间均分别为 2ms,3ms 和 4ms,且都按输入、计算和输出的顺序执行,则执行完 3 个作业需要的时间最少是()。

\n
A.15ms
\n
B.17ms
\n
C.22ms
\n
D.27ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第24题-解析\n\n\n\n

这类调度题目最好画图。因 CPU、输入设备、输出设备都只有一个,因此各操作步骤不能重叠,画出运行时的甘特图后就能清楚地看到不同作业间的时序关系,如下表所示。

\n\n
作业\\时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
输入
计算
输出
17
输入
计算
输出
输入
计算
输出
\n\n\n\n\n", "difficulty": 1}, {"id": 354, "year": 2016, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第25题-题目\n\n\n\n

系统中有\n3\n个不同的临界资源\nR1​\n、\nR2​\n和\nR3​\n,被\n4\n个进程\np1​\n、\np2​\n、\np3​\n及\np4​\n共享。各进程对资源的需求为:\np1​\n申请\nR1​\n和\nR2​\n,\np2​\n申请\nR2​\n和\nR3​\n,\np3​\n申请\nR1​\n和\nR3​\n,\np4​\n申请\nR2​\n。若系统出现死锁,则处于死锁状态的进程数至少是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第25题-解析\n\n\n\n

对于本题,先满足一个进程的资源需求,再看其他进程是否能出现死锁状态。因为\np4​\n只申请一个资源,当将\nR2​\n分配给\np4​\n后,\np4​\n执行完后将\nR2​\n释放,这时使得系统满足死锁的条件是\nR1​\n分配给\np1​\n,\nR2​\n分配给\np2​\n,\nR3​\n分配给\np3​\n(或者\nR2​\n分配给\np1​\n,\nR3​\n分配给\np2​\n,\nR1​\n分配给\np3​\n)。穷举其他情况如\np1​\n申请的资源\nR1​\n和\nR2​\n,先都分配给\np1​\n,运行完并释放占有的资源后,可以分别将\nR1​\n、\nR2​\n和\nR3​\n分配给\np3​\n、\np4​\n和\np2​\n,也满足系统死锁的条件。各种情况需要使得处于死锁状态的进程数至少为 3。
\n\n\n\n\n", "difficulty": 1}, {"id": 355, "year": 2016, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第26题-题目\n\n\n\n

某系统采用改进型 CLOCK 置换算法,页表项中字段 A 为访问位,M 为修改位。A=0 表示页最近没有被访问,A=1 表示页最近被访问过。M=0 表示页没有被修改过,M=1 表示页被修改过。按 (A, M) 所有可能的取值,将页分为四类:(0, 0)、(1, 0)、(0, 1) 和 (1, 1),则该算法淘汰页的次序为( )。

\n
A.(0, 0), (0, 1), (1,0), (1, 1)
\n
B.(0, 0), (1, 0), (0, 1), (1, 1)
\n
C.(0, 0), (0, 1), (1, 1), (1, 0)
\n
D.(0, 0), (1, 1), (0, 1), (1, 0)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第26题-解析\n\n\n\n

改进型 Clock 也称为 “二次机会(Second-Chance)算法的增强版”,依据页的访问位 A 和修改位 M 将页分成四类:

因此,淘汰顺序是按照代价和“是否有用”排序的:

👉 (0, 0) < (0, 1) < (1, 0) < (1, 1)

✅ 正确答案是:A. (0, 0), (0, 1), (1, 0), (1, 1)

\n\n\n\n\n", "difficulty": 1}, {"id": 356, "year": 2016, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第27题-题目\n\n\n\n

使用 TSL (Test and Set Lock) 指令实现进程互斥的伪代码如下所示。

\n
do {\n    ...\n    while (TSL(&lock));\n    critical section;\n    lock = FALSE;\n    ...\n} while (TRUE);\n
\n

下列与该实现机制相关的叙述中,正确的是( )。

\n
A.退出临界区的进程负责唤醒阻塞态进程
\n
B.等待进入临界区的进程不会主动放弃 CPU
\n
C.上述伪代码满足“让权等待”的同步准则
\n
D.while (TSL(&lock)) 应在关中断状态下执行
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第27题-解析\n\n\n\n

本题考察 硬件互斥,当进程退出临界区时置 lock 为 FALSE,会负责唤醒处于就绪状态的进程,A 错误。若等待进入临界区的进程会一直停留在执行 while(TSL(&lock)) 的循环中,不会主动放弃 CPU, B 正确。让权等待,即当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。通过 B 选项的分析中发现上述伪代码并不满足“让权等待”的同步准则,C 错误。若 while(TSL(&lock)) 在关中断状态下执行,当 TSL(&lock) 一直为 true 时,不再开中断,则系统可能会因此终止,D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 357, "year": 2016, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第28题-题目\n\n\n\n

某进程的段表内容如下所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
段长
内存起始地址
权限
状态
100
6000
只读
在内存
200
· · ·
读写
不在内存
300
4000
读写
在内存
段号
0
1
2
\n

当访问段号为 2、段内地址为 400 的逻辑地址时,进行地址转换的结果是( )。

\n
A.段缺失异常
\n
B.得到内存地址 4400
\n
C.越权异常
\n
D.越界异常
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第28题-解析\n\n\n\n

分段系统的逻辑地址 A 到物理地址 E 之间的地址变换过程参考 该节。

题目中段号为 2 的段长为 300,小于段内地址为 400,故发生越界异常,D 正确。

\n\n\n\n\n", "difficulty": 1}, {"id": 358, "year": 2016, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第29题-题目\n\n\n\n

某进程访问页面的序列如下所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
···, 1, 3, 4, 5, 6, 0, 3, 2, 3, 2,     0, 4, 0, 3, 2, 9, 2, 1, ···
时间
\n

若工作集的窗口大小为 6,则在 t 时刻的工作集为( )。

\n
A.{6, 0, 3, 2}
\n
B.{2, 3, 0, 4}
\n
C.{0, 4, 3, 2, 9}
\n
D.{4, 5, 6, 0, 3, 2}
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第29题-解析\n\n\n\n

在任一时刻 t,都存在一个 集合,它包含所有最近 k 次(该题窗口大小为 6)内存访问所访问过的页面。这个集合 w(k, t) 就是工作集。该题中最近 6 次访问的页面分别为 6, 0, 3, 2, 3, 2, 再去除重复的页面,形成的工作集为 {6, 0, 3, 2}。
\n\n\n\n\n", "difficulty": 1}, {"id": 359, "year": 2016, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第30题-题目\n\n\n\n

进程 P1 和 P2 均包含并发执行的线程,部分伪代码描述如下所示。

\n

下列选项中,需要互斥执行的操作是( )。

\n
A.a=1 与 a=2
\n
B.a=x 与 b=x
\n
C.x+=1 与 x+=2
\n
D.x+=1 与 x+=3
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第30题-解析\n\n\n\n

P1 中对 a 进行赋值,并不影响最终的结果,故 a = l 与 a = 2 不需要互斥执行;a = x 与 b = x 执行先后不影响 a 与 b 的结果,无须互斥执行;x+=1 与 x+=2 执行先后会影响 x 的结果,需要互斥执行;P1 中的 x 和 P2 中的 x 是不同范围中的 X,互不影响,不需要互斥执行。
\n\n\n\n\n", "difficulty": 1}, {"id": 360, "year": 2016, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第31题-题目\n\n\n\n

下列关于 SPOOLing 技术的叙述中,错误的是( )。

\n
A.需要外存的支持
\n
B.需要多道程序设计技术的支持
\n
C.可以让多个作业共享一台独占设备
\n
D.由用户作业控制设备与输入/输出井之间的数据传送
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第31题-解析\n\n\n\n

SPOOLing 是利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,或者相反。SPOOLing 的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。高速磁盘即外存,A 正确。SPOOLing 技术需要进行输入/输出操作,单道批处理系统无法满足,B 正确。SPOOLing 技术实现了将独占设备改造成共享设备的技术,C 正确。设备与输入/输出井之间数据的传送是由系统实现的,D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 361, "year": 2016, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第32题-题目\n\n\n\n

下列关于管程的叙述中,错误的是( )。

\n
A.管程只能用于实现进程的互斥
\n
B.管程是由编程语言支持的进程同步机制
\n
C.任何时候只能有一个进程在管程中执行
\n
D.管程中定义的变量只能被管程内的过程访问
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第32题-解析\n\n\n\n

管程 是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥,而且能实现进程间的同步,故 A 错误、B 正确。管程具有特性:①局部于管程的数据只能被局部于管程内的过程所访问;②一个进程只有通过调用管程内的过程才能进入管程访问共享数据;③每次仅允许一个进程在管程内执行某个内部过程,故 C 和 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 362, "year": 2016, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第33题-题目\n\n\n\n

在 OSI 参考模型中,R1、Switch、Hub 实现的最高功能层分别是( )。

\n
A.2、2、1
\n
B.2、2、2
\n
C.3、2、1
\n
D.3、2、2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第33题-解析\n\n\n\n

本题考察 计算机网络设备,集线器是一个多端口的中继器,工作在物理层。以太网交换机是一个多端口的网桥,工作在数据链路层。路由器是网络层设备,它实现了网络模型的下三层,即物理层、数据链路层和网络层。题中 R1、Switch 和 Hub 分别是路由器、交换机和集线器,实现的最高层功能分别是网络层(即 3)、数据链路层(即 2)和物理层(即 1)。
\n\n\n\n\n", "difficulty": 1}, {"id": 363, "year": 2016, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第34题-题目\n\n\n\n

若连接 R2 和 R3 链路的频率带宽为 8 kHz,信噪比为 30 dB,该链路实际数据传输速率约为理论最大数据传输速率的 50%,则该链路的实际数据传输速率约是( )。

\n
A.8 kbps
\n
B.20 kbps
\n
C.40 kbps
\n
D.80 kbps
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第34题-解析\n\n\n\n

本题考查的是 香农定理,它给出了带宽受限信道的最大数据传输速率公式:

C=B⋅log2​(1+SNR)

其中:

步骤 1:将 dB 转换为比值

信噪比为 30 dB:

SNRratio​=1030/10=103=1000

步骤 2:带入香农公式计算最大数据速率

C=8000⋅log2​(1+1000)≈8000⋅log2​(1001)

利用换底公式(或估算):

log2​(1001)≈log2​(1024)=10

所以:

C≈8000⋅10=80000 bps=80 kbps

步骤 3:实际传输速率为理论值的 50%

实际速率=0.5⋅80 kbps=40 kbps

所以正确答案:C. 40 kbps

\n\n\n\n\n", "difficulty": 1}, {"id": 364, "year": 2016, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第35题-题目\n\n\n\n

若主机 H2 向主机 H4 发送 1 个数据帧,主机 H4 向主机 H2 立即发送一个确认帧,则除 H4 外,从物理层上能够收到该确认帧的主机还有( )。

\n
A.仅 H2
\n
B.仅 H3
\n
C.仅 H1、H2
\n
D.仅 H2、H3
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第35题-解析\n\n\n\n

参考 计算机网络设备,交换机可以隔离冲突域,但集线器无法隔离冲突域,因此从物理层上能够收到该确认帧的主机仅 H2、H3, 选项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 365, "year": 2016, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第36题-题目\n\n\n\n

若 Hub 再生比特流过程中,会产生 1.535μs 延时,信号传播速度为 200m/μs,不考虑以太网帧的前导码,则 H3 与 H4 之间理论上可以相距的最远距离是( )。

\n
A.200 m
\n
B.205 m
\n
C.359 m
\n
D.512 m
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第36题-解析\n\n\n\n

因为要解决 理论上可以相距的最远距离,所以最远肯定要保证能检测到碰撞,而以太网规定最短帧长为 64B,其中 Hub 为 100Base-T 集线器,可知线路的传输速率为 100Mbps, 则单程传输时延为 64B/100Mbps/2 = 2.56μs,又 Hub 再产生比特流的过程中会导致延时 1.535μs,则单程的传播时延为 2.56μs- 1.535μs = 1.025μs,从而 H3 与 H4 之间理论上可以相距的最远距离为 200m/μs x 1.025μs = 205m。
\n\n\n\n\n", "difficulty": 2}, {"id": 366, "year": 2016, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第37题-题目\n\n\n\n

假设 R1、R2、R3 采用 RIP 协议交换路由信息,且均已收敛。若 R3 检测到网络 201.1.2.0/25 不可达,并向 R2 通告一次新的距离向量,则 R2 更新后,其到达该网络的距离是( )。

\n
A.2
\n
B.3
\n
C.16
\n
D.17
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第37题-解析\n\n\n\n

因为 R3 检测到网络 201.1.2.0/25 不可达,故将到该网络的距离设置为 16(距离为 16 表示不可达)。当 R2 从 R3 收到路由信息时,因为 R3 到该网络的距离为 16,则 R2 到该网络也不可达,但此时记录 R1 可达(由千 RIP 的特点 坏消息传得慢,R1 并没有收到 R3 发来的路由信息),R1 到该网络的距离为 2,再加上从 R2 到 Rl 的 l 就是 R2 到该网络的距离 3。
\n\n\n\n\n", "difficulty": 2}, {"id": 367, "year": 2016, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第38题-题目\n\n\n\n

假设连接 R1、R2 和 R3 之间的点对点链路使用 201.1.3.x/30 地址,当 H3 访问 Web 服务器 S 时,R2 转发出去的封装 HTTP 请求报文的 IP 分组的源 IP 地址和目的 IP 地址分别是( )。

\n
A.192.168.3.251,130.18.10.1
\n
B.192.168.3.251,201.1.3.9
\n
C.201.1.3.8,130.18.10.1
\n
D.201.1.3.10,130.18.10.1
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第38题-解析\n\n\n\n

由题意知连接 R1、R2 和 R3 之间的点对点链路使用 201.1.3.x/30 地址,其子网掩码为 255.255.255.252,R1 的一 个接口的 IP 地址为 201.1.3.9,转换为对应的二进制的后 8 位为 0000 1001(由 201.1.3.x/30 知,IP 地址对应的二进制的后两位为主机号,而主机号全为 0 表示本网络本身,主机号全为 1 表示本网络的广播地址,不用于源 IP 地址或者目的 IP 地址),那么除 201.1.3.9 外,只有 IP 地址为 201.1.3.10 才可以作为源 IP 地址使用(本题为 201.1.3.10)。Web 服务器的 IP 地址为 130.18.10.1,作为 IP 分组的目的 IP 地址。综上可知,选项 D 正确。
\n\n\n\n\n", "difficulty": 3}, {"id": 368, "year": 2016, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第39题-题目\n\n\n\n

假设 H1 与 H2 的默认网关和子网掩码均分别配置为 192.168.3.1 和 255.255.255.128,H3 与 H4 的默认网关和子网掩码均分别配置为 192.168.3.254 和 255.255.255.128,则下列现象中可能发生的是( )。

\n
A.H1 不能与 H2 进行正常 IP 通信
\n
B.H2 与 H4 均不能访问 Internet
\n
C.H1 不能与 H3 进行正常 IP 通信
\n
D.H3 不能与 H4 进行正常 IP 通信
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第39题-解析\n\n\n\n

从子网掩码可知 H1 和 H2 处于同一网段,H3 和 H4 处于同一网段,分别可以进行正常的 IP 通信,A 和 D 错误。

因为 R2 的 E1 接口的 IP 地址为 192.168.3.254, 而 H2 的默认网关为 192.168.3.1,所以 H2 不能访问 Internet,而 H4 的默认网关为 192.168.3.254,所以 H4 可以正常访问 Internet,B 错误。

由 H1、H2、H3 和 H4 的子网掩码可知 H1、H2 和 H3、H4 处于不同的网段,需通过路由器才能进行正常的 IP 通信,而这时 H1 和 H2 的默认网关为 192.168.3.1, 但 R2 的 E1 接口的 IP 地址为 192.168.3.254, 无法进行通信,从而 H1 不能与 H3 进行正常的 IP 通信。C 正确。

\n\n\n\n\n", "difficulty": 1}, {"id": 369, "year": 2016, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第40题-题目\n\n\n\n

假设所有域名服务器均采用迭代查询方式进行域名解析。当 H4 访问规范域名为 www.abc.xyz.com 的网站时,域名服务器 201.1.1.1 在完成该域名解析过程中,可能发出 DNS 查询的最少和最多次数分别是( )。

\n
A.0,3
\n
B.1,3
\n
C.0,4
\n
D.1,4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第40题-解析\n\n\n\n

最少情况下:当本机 DNS 缓存 中存有该域名的 DNS 信息时,则不 需要查询任何域名服务器,这样最少发出 0 次 DNS 查询。最多情况下:因为均采用迭代查询的方式,在最坏的情况下,需要依次迭代地向本地域名服务器、根域名服务器 (.com)、顶级域名服务器 (xyz.com)、权限域名服务器 (abc.xyz.com) 发出 DNS 查询 请求,因此 最多发出 4 次 DNS 查询。
\n\n\n\n\n", "difficulty": 2}, {"id": 370, "year": 2016, "index": 41, "type": 3, "typeName": "算法题", "score": 9, "subject": "operating-system", "question": "\n\n\n\n\n\n2016-第41题-题目\n\n\n\n
\n\n\n\n \n 408真题系统\n \n\n
201.1.3.9
201.1.3.1
L1
L0
E0
E1
201.1.1.0/24
DNS 服务器
201.1.1.1
Switch
Hub
192.168.3.252
192.168.3.251
H4
H3
H1
H2
192.168.3.2
192.168.3.3
201.1.2.0/25
NAT
R2
R3
R1
130.18.10.1
Internet
Web 服务器 S
图中:
R1~R3 是路由器
Switch 为 100BaseT 交换机
Hub 为 100BaseT 集线器
主机 H1~H4 的默认域名服务器均配置为 201.1.1.1
192.168.3.254
\n

假设题 33~41 图中的 H3 访问 Web 服务器 S 时,S 为新建的 TCP 连接分配了 20 KB (K=1 024) 的接收缓存,最大段长 MSS=1 KB,平均往返时间 RTT=200 ms。H3 建立连接时的初始序号为 100,且持续以 MSS 大小的段向 S 发送数据,拥塞窗口初始阈值为 32 KB;S 对收到的每个段进行确认,并通告新的接收窗口。假定 TCP 连接建立完成后,S 端的 TCP 接收缓存仅有数据存入而无数据取出。请回答下列问题。

\n

(1) 在 TCP 连接建立过程中,H3 收到的 S 发送过来的第二次握手 TCP 段的 SYN 和 ACK 标志位的值分别是多少?确认序号是多少?

\n

(2) H3 收到的第 8 个确认段所通告的接收窗口是多少?此时 H3 的拥塞窗口变为多少?H3 的发送窗口变为多少?

\n

(3) 当 H3 的发送窗口等于 0 时,下一个待发送的数据段序号是多少?H3 从发送第 1 个数据段到发送窗口等于 0 时刻为止,平均数据传输速率是多少(忽略段的传输延时)?

\n

(4) 若 H3 与 S 之间通信已经结束,在 t 时刻 H3 请求断开该连接,则从 t 时刻起,S 释放该连接的最短时间是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第41题-解析\n\n\n\n

1)TCP 连接的建立过程为 三次握手:首先,H3 向 Wb 服务器 S 发出连接请求报文段,这时首部中的同步位 SYN=1,ACK=0,同时选择一个初始序号 seq=100。TCP 规定,SYN 报文段(即 SYN=1 的报文段)不能携带数据,但是要消耗一个序号。接着,S 收到连接请求报文段,为自己选择一个初始序号 seq=y,向 A 发送确认。这个报文段 SYN=1、ACK=1、seq=y,确认号 ack 是 100+1=101。它不能携带数据,但是也要消耗一个序号。最后,H3 收到 S 的确认报文段后,还要向 S 给出确认。这份确认报文段 SYN=0、ACK=1,确认号 ack=y+1,自己的序号 seq=101。因此,第二次握手 TCP 段的 SYN=1、(1 分)ACK=1;(1 分)确认序号是 101。(1 分)

2)题目规定 S 对收到的每个段(MSS 大小的段)进行确认,并通告新的接收窗口,而且 TCP 接收缓存仅有数据存入而无数据取出。H3 收到的第 8 个确认段所通告的接收窗口是 20-8=12KB;(1 分)在慢开始算法里,发送方 H3 先设置拥塞窗口 cwnd=1KB,接下来每收到一个对新报文段的确认就使发送方的拥塞窗口加 KB。H3 共收到 8 个确认段,所以此时 H3 的拥塞窗口变为 1+8=9KB;(1 分)发送窗口=min{拥塞窗口,接收窗口},所以 H3 的发送窗口变为 min{9,12}=9KB。(1 分)

3)TCP 是用字节作为 窗口 和 序号 的单位。当 H3 的发送窗口等于 0KB 时,也就是接收窗口等于 0KB 时,下一个待发送段的序号是 20K+101=20×1024+101=20581;(1 分)H3 从发送第 1 个段到发送窗口等于 0KB 时刻为止,经过五个传输轮次,每个传输轮次的时间就是往返 RTT,因此平均数据传输速率是 20KB/(5×200ms)=20KB/s=20.48kbps。(1 分)

4)通信结束后,H3 向 S 发送连接释放报文段。S 收到 H3 的连接释放报文段后,马上发出确认报文段。此时 S 已经没有数据需要传输,于是它也马上发出连接释放报文段。H3 在收到 S 的连接释放报文段后,发出确认报文段。S 在收到这份确认后就释放 TCP 连接。因此从 t 时刻起,S 释放该连接的最短时间是:H3 的连接释放报文段传送到 S 的时间+S 的连接释放报文段传送到 H3 的时间+H3 的确认报文段传送到 S 的时间 = 1.5×200ms = 300ms。(1 分)

\n\n\n\n\n", "difficulty": 1}, {"id": 371, "year": 2016, "index": 42, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第42题-题目\n\n\n\n

如果一棵非空 \nk\n(\nk≥2\n) 叉树\nT\n中每个非叶结点都有\nk\n 个孩子,则称\nT\n 为正则\nk\n 叉树。请回答下列问题并给出推导过程。

\n

(1) 若 \nT\n 有 \nm\n 个非叶结点,则 \nT\n 中的叶结点有多少个?

\n

(2) 若 \nT\n 的高度为 \nh\n (单结点的树 \nh=1\n ),则 \nT\n 的结点数最多为多少个?最少为多少个?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第42题-解析\n\n\n\n

1)根据定义,正则\nk\n叉树中仅含有两类结点;叶结点(个数记为\nn0​\n)和度为\nk\n的分支结点(个数记为\nn1​\n)。树\nT\n中的结点总数\nn=n0​+nk​=n0​+m\n。树中所含的边数\ne=n−1\n,这些边均为\nm\n个度为\nk\n的结点发出的,即\ne=mk\n。整理得\nn0​+m=mk​+1\n,故\nn0​=(k−1)m+1\n。

2)高度为\nh\n的正则\nk\n叉树\nT\n中,含最多结点的树形为:除第\nh\n层外,第\n1\n层到第\nh−1\n层的结点都是度为\nk\n的分支结点;而第\nh\n层均为叶结点,即树是“满”树。此时第\nj\n(\n1≤j≤h\n)层结点数为\nkj−1\n,结点总数\nM1​\n为

M1​=i=0∑h​kj−1=k−1kh−1​

含最少结点的正则\nK\n叉树的树形为:第\n1\n层只有根结点,第\n2\n层到第\nh−1\n层仅含\n1\n个分支结点和\nk−1\n个叶结点,第\nh\n层有\nK\n个叶结点。即除根外第\n2\n层到第\nh\n层中每层的结点数均为\nk\n,故\nT\n中所含结点总数\nM2​\n为

M2​=1+(h−1)k

【评分说明】①参考答案仅给出一种推导过程,若考生采用其他推导方法且正确,同样给分。\n②若考生仅给出结果,但没有推导过程,则 (1)、(2) 的最高得分分别是 2 分和 3 分。若推导过程或答案不完全正确,酌情给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 372, "year": 2016, "index": 43, "type": 2, "typeName": "应用题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n\n2016-第43题-题目\n\n\n\n

已知由 \nn(n≥2)\n 个正整数构成的集合 \nA=ak​∣0≤k<n\n ,将其划分为两个不相交的子集 \nA1​\n 和 \nA2​\n ,元素个数分别是 \nn1​\n 和 \nn2​\n , \nA1​\n 和 \nA2​\n 中元素之和分别为 \nS1​\n 和 \nS2​\n 。设计一个尽可能高效的划分算法,满足 \n∣n1​−n2​∣\n 最小且 \n∣S1​−S2​∣\n 最大。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第43题-解析\n\n\n\n

1)算法的基本设计思想

由题意知,将最小的\n⌊n/2⌋\n个元素放在\nA1​\n中,其余的元素放在\nA2​\n中,分组结果即可满足题目要求。仿照快速排序的思想,基于枢轴将个整数划分为两个子集。根据划分后枢轴所处的位置\ni\n分别处理:

基于该设计思想实现的算法,无须对全部元素进行全排序,其平均时间复杂度是\nO(n)\n,空间复杂度是\nO(1)\n。

2)算法实现

实现参考 快速排序的单向递归算法。

int partition(int a[], int low, int high) {\n  int l = low;\n  int r = high;\n  int pivot = a[l];\n  while (l < r) {\n    while (l < r && a[r] >= pivot) {\n      r--;\n    }\n    a[l] = a[r];\n    while (l < r && a[l] <= pivot) {\n      l++;\n    }\n    a[r] = a[l];\n  }\n  a[l] = pivot;\n  return l;\n}\n\n// 按照第 k 个元素进行分区\nvoid quickSelect(int a[], int low, int high, int k) {\n  if (low < high) {\n    int pivotIndex = partition(a, low, high);\n    if (pivotIndex == k) {\n      return\n    } else if (pivotIndex < k) {\n      quickSelect(a, pivotIndex+1, high, k);\n    } else {\n      quickSelect(a, low, pivotIndex-1, k);\n    }\n  }\n}\n\n// 空间复杂度:O(1)\n// 时间复杂度:O(n)\nvoid solve(int a[], int n) {\n  quickSelect(a, 0, n-1, n/2);\n  int S1 = 0;\n  int S2 = 0;\n  for (int i = 0; i < n/2; i++) {\n    S1 += a[i];\n  }\n  for (int i = n/2; i < n; i++) {\n    S2 += a[i];\n  }\n  return S2 - S1;\n}\n

3)本参考答案给出的算法平均时间复杂度是\nO(n)\n, 空间复杂度是\nO(1)\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 373, "year": 2016, "index": 44, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第44题-题目\n\n\n\n

假定 CPU 主频为 50MHz,CPI 为 4。设备 D 采用异步串行通信方式向主机传送 7 位 ASCII 字符,通信规程中有 1 位奇校验位和 1 位停止位,从 D 接收启动命令到字符送入 I/O 端口需要 0.5ms。请回答下列问题,要求说明理由。

\n

(1) 每传送一个字符,在异步串行通信线上共需传输多少位?在设备 D 持续工作过程中,每秒钟最多可向 I/O 端口送入多少个字符?

\n

(2) 设备 D 采用中断方式进行输入/输出,示意图如下∶

\n
\n\n\n\n \n 408真题系统\n \n\n
请
求
响
应
启
动
CPU
外设 D
工作
工作
完
成
完
成
启
动
启
动
工作
完
成
返
回
请
求
响
应
返
回
请
求
响
应
\n

I/O 端口每收到一个字符申请一次中断,中断响应需 10 个时钟周期,中断服务程序共有 20 条指令,其中第 15 条指令启动 D 工作。若 CPU 需从 D 读取 1000 个字符,则完成这一任务所需时间大约是多少个时钟周期?CPU 用于完成这一任务的时间大约是多少个时钟周期?在中断响应阶段 CPU 进行了哪些操作?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第44题-解析\n\n\n\n

1)每传送一个 ASCII 字符,需要传输的位数有 1 位起始位、7 位数据位(ASCII 字符占 7 位)、1 位奇校验位和 1 位停止位,故总位数为 1 + 7 + 1 + 1 = 10。(2 分)I/O 端口每秒钟最多可接收 1000/0.5 = 2000 个字符。(1 分)

【评分说明】对于第一问,若考生回答总位数为 9,则给 1 分。

2)一个字符传送时间包括:设备 D 将字符送/O 端口的时间、中断响应时间和中断服务程序前 15 条指令的执行时间。时钟周期为 1/(50MHz)=20ns,设备 D 将字符送 I/O 端口的时间为 0.5ms/20ns=2.5×10⁴ 个时钟周期。一个字符的传送时间大约为 2.5×10⁴+10+15×4=25070 个时钟周期。完成 1000 个字符传送所需时间大约为 1000×25070=25070000 个时钟周期。(3 分)

CPU 用于该任务的时间大约为 1000×(10+20×4)=9×10⁴ 个时钟周期。(1 分)

在中断响应阶段,CPU 主要进行以下操作:关中断、保护断点和程序状态、识别中断源。(2 分)

【评分说明】

①位于第一问,若答案是 25070020,则同样给分;若答案是 25000000 或 25000020,则给 2 分。如果没有给出分布计算步骤,但算式和结果正确,同样给分。

②对于第三问,只要回答关中断和保护断点,就给 2 分,其他答案酌情给分。

\n\n\n\n\n", "difficulty": 3}, {"id": 374, "year": 2016, "index": 45, "type": 2, "typeName": "应用题", "score": 14, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第45题-题目\n\n\n\n

某计算机采用页式虚拟存储管理方式,按字节编址,虚拟地址为 32 位,物理地址为 24 位,页大小为 8KB;TLB 采用全相联映射;Cache 数据区大小为 64KB,按 2 路组相联方式组织,主存块大小为 64B。存储访问过程的示意图如下。

\n
\n\n\n\n \n 408真题系统\n \n\n
A
B
虚拟地址
标记
页框号
存在位
页框号
C
D
物理地址
E
F
G
标记
数据
标记
页框号
H
Cache
比较器
比较器
比较器
比较器
TLB
页表
\n

请回答下列问题。

\n

(1) 图中字段 A~G 的位数各是多少?TLB 标记字段 B 中存放的是什么信息?

\n

(2) 将块号为 4099 的主存块装入到 Cache 中时,所映射的 Cache 组号是多少?对应的 H 字段内容是什么?

\n

(3) Cache 缺失处理的时间开销大还是缺页处理的时间开销大?为什么?

\n

(4) 为什么 Cache 可以采用直写 (Write Through) 策略,而修改页面内容时总是采用回写 (Write Back) 策略?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第45题-解析\n\n\n\n

1)页大小为 8KB,页内偏移地址为 13 位,故 A = B = 32-13 = 19;D = 13;C = 24-13 = 11;主存块大小为 64B,故 G = 6。\n2 路组相联,每组数据区容量有 64B×2 = 128B,共有 64KB/128B = 512 组,故 F = 9;E = 24-G-F = 24-6-9 = 9。

因而 A=19,B=19,C=11,D=13,E=9,F=9,G=6。(各 1 分,共 7 分)

TLB 中标记字段 B 的内容是虚页号,表示该 TLB 项对应哪个虚页的页表项。(1 分)

2)块号 4099=000001000000000011B,因此,所映射的 Cache 组号为 000000011B=3,(1 分)对应的 H 字段内容为 000001000B。(1 分)

3)Cache 缺失带来的开销小,而处理缺页的开销大。(1 分)因为缺页处理需要访问磁盘,而 Cache 缺失只要访问主存。(1 分)

【评分说明】对于 (3) 中第 2 问,若考生回答因为缺页需要软件实现而 Cache 缺失用硬件实现,则同样给分。

4)因为采用 直写法 时需要同时写快速存储器和慢速存储器,而写磁盘比写主存慢很多,所以,在 Cache-主存层次,Cache 可以采用直写策略,而在主存 - 外存(磁盘)层次,修改页面内容时总是采用 回写法。(2 分)

\n\n\n\n\n", "difficulty": 2}, {"id": 375, "year": 2016, "index": 46, "type": 2, "typeName": "应用题", "score": 6, "subject": "computer-organization", "question": "\n\n\n\n\n\n2016-第46题-题目\n\n\n\n

某进程调度程序采用基于优先数 (priority) 的调度策略,即选择优先数最小的进程运行,进程创建时由用户指定一个 nice 作为静态优先数。为了动态调整优先数,引入运行时间 cpuTime 和等待时间 waitTime,初值均为 0。进程处于执行态时,cpuTime 定时加 1,且 waitTime 置 0;进程处于就绪态时,cpuTime 置 0,waitTime 定时加 1。请回答下列问题。

\n

(1) 若调度程序只将 nice 的值作为进程的优先数,即 priority=nice,则可能会出现饥饿现象,为什么?

\n

(2) 使用 nice、cpuTime 和 waitTime 设计一种动态优先数计算方法,以避免产生饥饿现象,并说明 waitTime 的作用。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第46题-解析\n\n\n\n

1)由于采用了静态优先数,当就绪队列中总有优先数较小的进程时,优先数较大的进程一直没有机会运行,因而会出现饥饿现象。(2 分)

2)优先数 priority 的计算公式为 priority = nice + k1 × cpuTime - k2 × waitTime,其中 k1 > 0,k2 > 0,用来分别调整 cpuTime 和 waitTime 在 priority 中所占的比例。(3 分)waitTime 可使长时间等待的进程优先数减少,从而避免出现饥饿现象。(1 分)

【评分说明】

①公式中包含 nice 给 1 分,利用 cpuTime 增大优先数给 1 分,利用 waitTime 减少优先数\n给 1 分;部分正确,酌情给分。

②若考生给出包含 nice、cpuTime 和 waitTime 的其他合理的优先数计算方法,同样给分。

\n\n\n\n\n", "difficulty": 0}, {"id": 376, "year": 2016, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2016-第47题-题目\n\n\n\n

某磁盘文件系统使用链接分配方式组织文件,簇大小为 4KB。目录文件的每个目录项包括文件名和文件的第一个簇号,其他簇号存放在文件分配表 FAT 中。

\n

(1) 假定目录树如下图所示,各文件占用的簇号及顺序如下表所示,其中 dir、dir1 是目录,file1、file2 是用户文件。请给出所有目录文件的内容。

\n
\n\n\n\n \n 408真题系统\n \n\n
dir
dir1
file1
file2
文件名
簇号
dir
1
dir1
48
file1
100、106、108
file2
200、201、202
\n

(2) 若 FAT 的每个表项仅存放簇号,占 2 个字节,则 FAT 的最大长度为多少字节?该文件系统支持的文件长度最大是多少?

\n

(3) 系统通过目录文件和 FAT 实现对文件的按名存取,说明 file1 的 106、108 两个簇号分别存放在 FAT 的哪个表项中。

\n

(4) 假设仅 FAT 和 dir 目录文件已读入内存,若需将文件 dir/dir1/file1 的第 5000 个字节读入内存,则要访问哪几个簇?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2016-第47题-解析\n\n\n\n

1)两个目录文件 dir 和 dirl 的内容如下表所示。(3 分)

\n\n
dir1
48
文件名
簇号
dir 目录文件
file1
100
文件名
簇号
dir1 目录文件
file2
200

【评分说明】每个目录项的内容正确给 1 分,共 3 分。

2)由于 FAT 的簇号为 2 个字节,即 16 比特,因此在 FAT 表中最多允许 2¹⁶(65536)个表项,一个 FAT 文件最多包含 2¹⁶(65536)个簇。FAT 的最大长度为 2¹⁶×2B=128KB。(1 分)文件的最大长度是 2¹⁶×4B=256MB。(1 分)

【评分说明】若考生考虑到文件结束标志、坏块标志等,且答案正确,同样给分。

3)在 FAT 的每个表项中存放下一个簇号。file1 的簇号 106 存放在 FAT 的 100 号表项中,(1 分)簇号 108 存放在 FAT 的 106 号表项中。(1 分)

4)先在 dir 目录文件里找到 dir1 的簇号,然后读取 48 号簇,得到 dir1 目录文件,接着找到 file1 的第一个簇号,据此在 FAT 里查找 file1 的第 5000 个字节所在的簇号,最后访问磁盘中的该簇。因此,需要访问目录文件 dir1 所在的 48 号簇,(1 分)及文件 file1 的 106 号簇。(1 分)

\n\n\n\n\n", "difficulty": 0}, {"id": 377, "year": 2017, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第1题-题目\n\n\n\n

下列函数的时间复杂度是( )。

\n
int func(int n) {\n    int i = 0, sum = 0;\n    while(sum < n)\n        sum += ++i;\n    return i;\n}\n
\n
A.O(log2​n)
\n
B.O(n1/2)
\n
C.O(n)
\n
D.O(nlog2​n)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第1题-解析\n\n\n\n

sum += ++i; 相当于 ++i; sum = sum + i; 进行到第 k 趟循环,sum = (1+k)*k/2 。显然需要进行\nO(n1/2)\n趟循环,因此这也是该函数的时间复杂度。
\n\n\n\n\n", "difficulty": 1}, {"id": 378, "year": 2017, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第2题-题目\n\n\n\n

下列关于栈的叙述中,错误的是( )。

\n

I. 采用非递归方式重写递归程序时必须使用栈

\n

II. 函数调用时,系统要用栈保存必要信息

\n

III. 只要确定了入栈次序,即可确定出栈次序

\n

IV. 栈是一种受限的线性表,允许在其两端进行操作

\n
A.仅 I
\n
B.仅 I、II、III
\n
C.仅 I、III、IV
\n
D.仅 II、III、IV
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第2题-解析\n\n\n\n

I 的反例:计算斐波拉契数列迭代实现只需要一个循环即可实现。\nIII 的反例:入栈序列为 1、2, 进行如下操作 PUSH、PUSH、POP、POP,出栈次序为 2、1;进行如下操作 PUSH、POP、PUSH、POP,出栈次序为 1、2。\nIV,栈是一种受限的线性表,只允许在一端进行操作。\n因此 II 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 379, "year": 2017, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第3题-题目\n\n\n\n

适用于压缩存储稀疏矩阵的两种存储结构是()

\n
A.三元组表和十字链表
\n
B.三元组表和邻接矩阵
\n
C.十字链表和二叉链表
\n
D.邻接矩阵和十字链表
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第3题-解析\n\n\n\n

三元组表 的结点存储了行 row、列 col、值 value 三种信息,是主要用来存储稀疏矩阵的一种\n数据结构。十字链表将行单链表和列单链表结合起来存储稀疏矩阵。邻接矩阵空间复杂度达\nO(n2)\n,\n不适用于存储稀疏矩阵。二叉链表又名左孩子右兄弟表示法,可用于表示树或森林。因此 A 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 380, "year": 2017, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第4题-题目\n\n\n\n

要使一颗非空二叉树的先序序列与中序序列相同,其所有非叶节点须满足的条件是()

\n
A.只有左子树
\n
B.只有右子树
\n
C.结点的度均为 1
\n
D.结点的度均为 2
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第4题-解析\n\n\n\n

先序序列是根左右,中序序列是左根右,递归进行。如果所有非叶结点只有右子树,先序序列和中序序列都是先父结点,然后右子树,递归进行,因此 B 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 381, "year": 2017, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第5题-题目\n\n\n\n

已知一颗二叉树的树形如下图所示,其后序序列为 e,a,c,b,d,g,f,树中与结点 a 同层的结点是()

\n
\n\n\n\n \n 408真题系统\n \n\n
\n
A.c
\n
B.d
\n
C.f
\n
D.g
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第5题-解析\n\n\n\n

后序序列是先左子树,接着右子树,最后父结点,递归进行。根结点左子树的叶结点首先被访问,它是 e。接下来是它的父结点 a, 然后是 a 的父结点 c。接着访问根结点的右子树。它的叶结点 b 首先被访问,然后是 b 的父结点 d, 再者是 d 的父结点 g。最后是根结点 f。因此 d 与 a 同层,B 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 382, "year": 2017, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第6题-题目\n\n\n\n

已知字符集 {a, b, c, d, e, f, g, h},若各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011110101 的译码结果是( )。

\n
A.a c g a b f h
\n
B.a d b a g b b
\n
C.a f b e a g d
\n
D.a f e e f g d
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第6题-解析\n\n\n\n

哈夫曼编码 是前缀编码,各个编码的前缀各不相同,因此直接拿编码序列与哈夫曼编码一一比对即可。序列可分割为 0100 011 001 001 011 11 0101,译码结果是 a f e e f g d,选项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 383, "year": 2017, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第7题-题目\n\n\n\n

已知无向图 G 含有 16 条边,其中度为 4 的顶点个数为 3,度为 3 的顶点个数为 4,其他顶点的度均小于 3。图 G 所含的顶点个数至少是()

\n
A.10
\n
B.11
\n
C.13
\n
D.15
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第7题-解析\n\n\n\n

无向图边数的两倍等于各顶点度数的总和。由于其他顶点的度均小于 3,可以设它们的度都为 2,设它们的数量是 X,可列出方程 4x3 + 3x4 + 2x = 16x2,解得 x = 3。4 + 3 + 3 = 11,B 正确。
\n\n\n\n\n", "difficulty": 2}, {"id": 384, "year": 2017, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n2017-第8题-题目\n\n\n\n

下列二叉树中,可能成为折半查找判定树(不含外部结点)的是()

\n
A.
\n\n \n 408真题系统\n \n\n
\n
B.
\n\n \n 408真题系统\n \n\n
\n
C.
\n\n \n 408真题系统\n \n\n
\n
D.
\n\n \n 408真题系统\n \n\n
\n
", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第8题-解析\n\n\n\n

折半查找判定树 实际上是一棵 二叉排序树,它的中序序列是一个有序序列。可以在树结点上依次填上相应的元素,判断哪颗树符合折半查找的规则。

\n\n
5
2
1
4
0
3
8
7
9
6
5
2
1
4
0
3
8
6
9
7
10
4
1
0
3
2
7
5
8
6
4
2
1
3
0
7
6
9
5
8
A.
B.
C.
D.

折半查找树由于其中序遍历是一个升序序列,因此相比于在以往的序列中进行二分查找,折半查找二叉树的优点在于不用自己去找中点,而是直接将要查找的关键字与根节点相比,小的话再和根节点的左子节点(又是相应的左子树中点,更加方便)比较,大的话则是和根节点的右子节点比较。

而对于这道题的解题思路就在于向上或向下取整的问题,也就是说如果升序序列是偶数个,那么中点应该偏左多右少还是左少右多。但是很显然应该进行一个统一,像 B 和 C 选项中间的对称部分明显就是选择了不同的策略。D 则由根节点左子树 4 个节点而点右子树 5 个节点可以确定用的是向下取整策略,但是我们再看它的左子节点在左子树中对应的中点左边 2 个数,右边一个数,明显是向上取整策略,策略没有统一,所以是错的。

\n\n\n\n\n", "difficulty": 2}, {"id": 385, "year": 2017, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第9题-题目\n\n\n\n

下列应用中,适合使用 B+ 树的是()

\n
A.编译器中的词法分析
\n
B.关系数据库系统中的索引
\n
C.网络中的路由表快速查找
\n
D.操作系统的磁盘空闲块管理
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第9题-解析\n\n\n\n

B+ 树 是应文件系统所需而产生的 B 树 的变形,前者比后者更加适用于实际应用中的操作系统的文件索引和数据库索引,因为前者磁盘读写代价更低,查询效率更加稳定。编译器中的词法分析使用有穷自动机和语法树。网络中的路由表快速查找主要靠高速缓存、路由表压缩技术和快速查找算法。系统一 般使用空闲空间链表管理磁盘空闲块。所以 B 正确。
\n\n\n\n\n", "difficulty": 2}, {"id": 386, "year": 2017, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第10题-题目\n\n\n\n

在内部排序时,若选择了归并排序而没有选择插入排序,则可能的理由是()

\n
A.仅 2
\n
B.仅 3
\n
C.仅 1、2
\n
D.仅 1、3
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第10题-解析\n\n\n\n

参考 排序算法复杂度,归并排序代码比选择插入排序更复杂,前者空间复杂度是\nO(n)\n, 后者是\nO(1)\n。但是前者时间复杂度是\nO(nlogn)\n, 后者是\nO(n2)\n。所以 B 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 387, "year": 2017, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第11题-题目\n\n\n\n

下列排序方法中,若将顺序存储更换为链式存储,则算法的时间效率会降低的是()

\n
A.仅 1、2
\n
B.仅 2、3
\n
C.仅 3、4
\n
D.仅 4、5
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第11题-解析\n\n\n\n

插入排序、选择排序、冒泡原本时间复杂度是\nO(n2)\n,更换为链式存储后的时间复杂度还是\nO(n2)\n。希尔排序和堆排序都利用了顺序存储的随机访问特性,而链式存储不支持这种性质,所以时间复杂度会增加,因此选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 388, "year": 2017, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第12题-题目\n\n\n\n

假定计算机 M1 和 M2 具有相同的指令集体系结构(ISA),主频分别为 1.5GHz 和 1.2GHz。在 M1 和 M2 上运行某基准程序 P,平均 CPI 分别为 2 和 1,则程序 P 在 M1 和 M2 上运行时间的比值是( )。

\n
A.0.4
\n
B.0.625
\n
C.1.6
\n
D.2.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第12题-解析\n\n\n\n

运行时间 = 指令数 x CPI / 主频。M1 的时间 = 指令数 x 2 / 1.5,M2 的时间 = 指令数 x 1 / 1.2,两者之比为 (2/1.5):(1/1.2) = 1.6。故选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 389, "year": 2017, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第13题-题目\n\n\n\n

某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804001AH,则读取 x 需要的存储周期数是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第13题-解析\n\n\n\n

由 4 个 DRAM 芯片采用 交叉编址方式 构成主存可知主存地址最低二位表示该字节存储的芯片编号。double 型变量占 64 位,8 个字节。它的主存地址 804001AH 最低二位是 10,说明它从编号为 2 的 芯片开始存储(编号从 0 开始)。一个存储周期可以对所有芯片各读取一个字节,因此需要 3 轮,故选 C。
\n\n\n\n\n", "difficulty": 2}, {"id": 390, "year": 2017, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第14题-题目\n\n\n\n

某 C 语言程序段如下:

\n
for (i = 0; i <= 9; i++) {\n    temp = 1;\n    for (j = 0; j <= i; j++) {\n        temp *= a[j];\n    }\n    sum += temp;\n}\n
\n

下列关于数组 a 的访问局部性的描述中,正确的是( )。

\n
A.时间局部性和空间局部性皆有
\n
B.无时间局部性,有空间局部性
\n
C.有时间局部性,无空间局部性
\n
D.时间局部性和空间局部性皆无
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第14题-解析\n\n\n\n

时间局部性 是一旦一条指令被执行,则在不久的将来它可能再次被执行。空间局部性 是一旦一个存储单元被访问,那么它附近的存储单元也很快被访问。显然,这里的循环指令本身具有时间局部性,它对数组 a 的访问具有空间局部性,故选 A。
\n\n\n\n\n", "difficulty": 2}, {"id": 391, "year": 2017, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第15题-题目\n\n\n\n

下列寻址方式中,最适合按下标顺序访问一维数组元素的是( )。

\n
A.相对寻址
\n
B.寄存器寻址
\n
C.直接寻址
\n
D.变址寻址
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第15题-解析\n\n\n\n

在 变址寻址 时,将计算机指令中的地址与变址寄存器中的地址相加,得到有效地址,指令提供数组首地址,由变址寄存器来定位数据中的各元素。所以它最适合按下标顺序访问一维数组元素,故选 D。

相对寻址以 PC 为基地址,以指令中的地址为偏移量确定有效地址。寄存器寻址则是在指令中指出需要使用的寄存器。直接寻址是在指令的地址字段直接指出操作数的有效地址。

\n\n\n\n\n", "difficulty": 1}, {"id": 392, "year": 2017, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第16题-题目\n\n\n\n

某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个地址字段为 6 位,则指令字长至少应该是( )。

\n
A.24 位
\n
B.26 位
\n
C.28 位
\n
D.32 位
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第16题-解析\n\n\n\n

三地址指令有 29 条,所以它的操作码至少为 5 位。以 5 位进行计算,它剩余 32-29=3 种操作码给二地址。而二地址另外多了 6 位给操作码,因此它的数量最大达 3x64=192。所以指令字长最少为 23 位,因为计算机按字节编址,需要是 8 的倍数,所以指令字长至少应该是 24 位,故选 A。
\n\n\n\n\n", "difficulty": 3}, {"id": 393, "year": 2017, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第17题-题目\n\n\n\n

下列关于超标量流水线特性的叙述中,正确的是( )。

\n

Ⅰ. 能缩短流水线功能段的处理时间

\n

Ⅱ. 能在一个时钟周期内同时发射多条指令

\n

Ⅲ. 能结合动态调度技术提高指令执行并行性

\n
A.仅Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅲ
\n
D.Ⅰ、Ⅱ和Ⅲ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第17题-解析\n\n\n\n

超标量流水线 是指在 CPU 中有一条以上的流水线,并且每个时钟周期内可以完成一条以上的指令,其实质是以空间换时间。I 错误,它不影响流水线功能段的处理时间;II、III 正确。故选 C。
\n\n\n\n\n", "difficulty": 2}, {"id": 394, "year": 2017, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第18题-题目\n\n\n\n

下列关于主存储器(MM)和控制存储器(CS)的叙述中,错误的是( )。

\n
A.MM 在 CPU 外,CS 在 CPU 内
\n
B.MM 按地址访问,CS 按内容访问
\n
C.MM 存储指令和数据,CS 存储微指令
\n
D.MM 用 RAM 和 ROM 实现,CS 用 ROM 实现
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第18题-解析\n\n\n\n

主存储器就是我们通常说的主存,在 CPU 外,存储指令和数据,由 RAM 和 ROM 实现。控制存储器用来存放实现指令系统的所有微指令,是一种只读型存储器,机器运行时只读不写,在 CPU 的控制器内。CS 按照微指令的地址访问,所以 B 错误。
\n\n\n\n\n", "difficulty": 2}, {"id": 395, "year": 2017, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第19题-题目\n\n\n\n

下列关于指令流水线数据通路的叙述中,错误的是( )。

\n
A.包含生成控制信号的控制部件
\n
B.包含算术逻辑运算部件(ALU)
\n
C.包含通用寄存器组和取指部件
\n
D.由组合逻辑电路和时序逻辑电路组合而成
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第19题-解析\n\n\n\n

五阶段流水线 可分为取指(IF)、译码/取数(ID)、执行(EXC)、存储器读(MEM)、写回(Write Back)。数字系统中,各个子系统通过数据总线连接形成的数据传送路径称为 数据通路,包括程序计数器、算术逻辑运算部件、通用寄存器组、取指部件等,不包括控制部件,故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 396, "year": 2017, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第20题-题目\n\n\n\n

下列关于多总线结构的叙述中,错误的是( )。

\n
A.靠近 CPU 的总线速度较快
\n
B.存储器总线可支持突发传送方式
\n
C.总线之间须通过桥接器相连
\n
D.PCI-Express×16 采用并行传输方式
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第20题-解析\n\n\n\n

多总线结构 用速率高的总线连接高速设备用速率低的总线连接低速设备。一般来说,CPU 是计算机的核心,是计算机中速度最快的设备之一,所以 A 正确。突发传送方式把多个数据单元作为一个独立传输处理,从而最大化设备的吞吐量。现实中一般用支待突发传送方式的总线提高存储器的读写效率,B 正确。各总线通过桥接器相连,后者起流量交换作用。PCI-Express 总线都采用 串行 数据包传输数据,所以选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 397, "year": 2017, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第21题-题目\n\n\n\n

I/O 指令实现的数据传送通常发生在( )。

\n
A.I/O 设备和 I/O 端口之间
\n
B.通用寄存器和 I/O 设备之间
\n
C.I/O 端口和 I/O 端口之间
\n
D.通用寄存器和 I/O 端口之间
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第21题-解析\n\n\n\n

I/O 端口 是 CPU 与设备之间的交接面。由于主机和 I/0 设备的工作方式和工作速度有很大差异,I/O 端口就应运而生。在执行一条指令时,CPU 使用地址总线选择所请求的 I/O 端口,使用数据总线在 CPU 寄存器和端口之间传输数据。所以选 D。
\n\n\n\n\n", "difficulty": 2}, {"id": 398, "year": 2017, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第22题-题目\n\n\n\n

下列关于多重中断系统的叙述中,错误的是( )。

\n
A.在一条指令执行结束时响应中断
\n
B.中断处理期间 CPU 处于关中断状态
\n
C.中断请求的产生与当前指令的执行无关
\n
D.CPU 通过采样中断请求信号检测中断请求
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第22题-解析\n\n\n\n

多重中断 系统在保护被中断进程现场时关中断,执行中断处理程序时开中断,B 错误。CPU 一般在一条指令执行结束的阶段采样中断请求信号,查看是否存在中断请求,然后决定是否响应中断,A、D 正确。中断请求一般来自 CPU 以外的事件,异常一般发生在 CPU 内部,C 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 399, "year": 2017, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第23题-题目\n\n\n\n

假设 4 个作业到达系统的时刻和运行时间如下表所示。

\n
作业达到时刻 t运行时间
J1​03
J2​13
J3​12
J4​31
\n

系统在 t=2 时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是( )。

\n
A.J2​\n、\nJ3​
\n
B.J1​\n、\nJ4​
\n
C.J2​\n、\nJ4​
\n
D.J1​\n、\nJ3​
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第23题-解析\n\n\n\n

先来先服务 是作业来得越早,优先级越高,因此会选择\nJ1​\n。最短作业优先是作业运行时间越短,优先级越高,因此会选择\nJ3​\n。所以 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 400, "year": 2017, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第24题-题目\n\n\n\n

执行系统调用的过程包括如下主要操作:

\n

①返回用户态         ②执行陷入(trap)指令

\n

③传递系统调用参数   ④执行相应的服务程序

\n

正确的执行顺序是( )。

\n
A.②→③→①→④
\n
B.②→④→③→①
\n
C.③→②→④→①
\n
D.③→④→②→①
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第24题-解析\n\n\n\n

执行 系统调用 的过程是这样的:正在运行的进程先传递系统调用参数,然后由 陷入指令 负责将用户态转化为内核态,并将返回地址压入堆栈以备后用,接下来 CPU 执行相应的内核态服务程序,最后返回用户态。所以 C 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 401, "year": 2017, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第25题-题目\n\n\n\n

某计算机按字节编址,其动态分区内存管理采用最佳适应算法,每次分配和回收内存后都对空闲分区链重新排序。当前空闲分区信息如下表所示。

\n
分区起始地址20K500K1000K200K
分区大小40KB80KB100KB200KB
\n

回收起始地址为 60K、大小为 140KB 的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是( )。

\n
A.3、20K、380KB
\n
B.3、500K、80KB
\n
C.4、20K、180KB
\n
D.4、500K、80KB
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第25题-解析\n\n\n\n

参考 动态内存内存回收过程,回收起始地址为 60K、大小为 140KB 的分区时,它与表中第一个分区和第四个分区合并,成为起始地址为 20K、大小为 380KB 的分区,剩余 3 个空闲分区。在回收内存后,算法会对空闲分区链按分区大小由小到大进行排序,表中的第二个分区排第一。所以选择 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 402, "year": 2017, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第26题-题目\n\n\n\n

某文件系统的簇和磁盘扇区大小分别为 1KB 和 512B。若一个文件的大小为 1026B,则系统分配给该文件的磁盘空间大小是( )。

\n
A.1026B
\n
B.1536B
\n
C.1538B
\n
D.2048B
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第26题-解析\n\n\n\n

在文件系统中,磁盘空间 以簇为单位 分配,每个簇的大小为 1KB(1024B)。而磁盘扇区大小为 512B,但分配时只考虑簇的整数倍。
\n\n\n\n\n", "difficulty": 1}, {"id": 403, "year": 2017, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第27题-题目\n\n\n\n

下列有关基于时间片的进程调度的叙述中,错误的是( )。

\n
A.时间片越短,进程切换的次数越多,系统开销也越大
\n
B.当前进程的时间片用完后,该进程状态由执行态变为阻塞态
\n
C.时钟中断发生后,系统会修改当前进程在时间片内的剩余时间
\n
D.影响时间片大小的主要因素包括响应时间、系统开销和进程数量等
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第27题-解析\n\n\n\n

进程切换带来系统开销,切换次数越多,开销越大,A 正确。当前进程的时间片用完后,它的状态由执行态变为就绪态,B 错误。时钟中断是系统中特定的周期性时钟节拍。操作系统通过它来确定时间间隔,实现时间的延时和任务的超时,C 正确。现代操作系统为了保证性能最优,通常根据响应时间、系统开销、进程数量、进程运行时间、进程切换开销等因素确定 时间片大小,D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 404, "year": 2017, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第28题-题目\n\n\n\n

与单道程序系统相比,多道程序系统的优点是(  )

\n

Ⅰ.CPU 利用率高

\n

Ⅱ.系统开销小

\n

Ⅲ.系统吞吐量大

\n

Ⅳ.I/O 设备利用率高

\n
A.仅Ⅰ、Ⅲ
\n
B.仅Ⅰ、Ⅳ
\n
C.仅Ⅱ 、Ⅲ
\n
D.仅Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第28题-解析\n\n\n\n

多道程序系统通过组织作业(编码或数据)使 CPU 总有一个作业可执行,从而提高了 CPU 的利用率、系统吞吐量和 I/O 设备利用率,I、III、IV 是优点。但系统要付出额外的开销来组织作业和切换作业,II 错误。所以选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 405, "year": 2017, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第29题-题目\n\n\n\n

下列选项中,磁盘逻辑格式化程序所做的工作是( )。

\n

Ⅰ. 对磁盘进行分区

\n

Ⅱ. 建立文件系统的根目录

\n

Ⅲ. 确定磁盘扇区校验码所占位数

\n

Ⅳ. 对保存空闲磁盘块信息的数据结构进行初始化

\n
A.仅Ⅱ
\n
B.仅Ⅱ、Ⅳ
\n
C.仅Ⅲ、Ⅳ
\n
D.仅Ⅰ、Ⅱ、Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第29题-解析\n\n\n\n

一个新的磁盘是一个空白盘,必须分成扇区以便磁盘控制器能读和写,这个过程称为 物理格式化。低级格式化为磁盘的每个扇区采用特别的数据结构,包括校验码,III 错误。为了使用磁盘存储文件,操作系统还需要将其数据结构记录在磁盘上。这分为两步。第一步是将磁盘分为由一个或多个柱面组成的分区,每个分区可以作为一个独立的磁盘,I 错误。在分区之后,第二步是 逻辑格式化(创建文件系统)。在这一步,操作系统将初始的文件系统数据结构存储到磁盘上。这些数据结构包括空闲和已分配的空间和一个初始 为空的目录,II、IV 正确。所以选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 406, "year": 2017, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第30题-题目\n\n\n\n

某文件系统中,针对每个文件,用户类别分为 4 类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为 5 种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为( )。

\n
A.5
\n
B.9
\n
C.12
\n
D.20
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第30题-解析\n\n\n\n

可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限。这个矩阵有 4 行 5 列,1 代表 true,0 代表 false,所以需要 20 位,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 407, "year": 2017, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第31题-题目\n\n\n\n

若文件 f1 的硬链接为 f2,两个进程分别打开 f1 和 f2,获得对应的文件描述符为 fd1 和 fd2,则下列叙述中,正确的是( )。

\n

Ⅰ. f1 和 f2 的读写指针位置保持相同

\n

Ⅱ. f1 和 f2 共享同一个内存索引结点

\n

Ⅲ. fd1 和 fd2 分别指向各自的用户打开文件表中的一项

\n
A.仅Ⅲ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅱ
\n
D.Ⅰ、Ⅱ和Ⅲ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第31题-解析\n\n\n\n

背景知识:


分析选项:

Ⅰ. f1 和 f2 的读写指针位置保持相同

❌ 错误。\n虽然 f1 和 f2 是同一个文件(硬链接),但两个进程分别打开它们时,会在系统级打开文件表中生成两个不同的表项,每个表项维护独立的文件偏移量(读写指针),所以互不影响。

Ⅱ. f1 和 f2 共享同一个内存索引结点

✅ 正确。\n硬链接的本质就是多个目录项共享同一个 inode。即使路径不同(f1 和 f2),它们最终指向的是同一个 inode。

Ⅲ. fd1 和 fd2 分别指向各自的用户打开文件表中的一项

✅ 正确。\n每个进程维护自己的文件描述符表(用户级文件表),fd1 和 fd2 分别是两个不同进程打开文件得到的描述符,它们自然是指向各自进程的用户打开文件表项。

Ⅱ 和 Ⅲ 正确,因此,正确答案为 B。

\n\n\n\n\n", "difficulty": 1}, {"id": 408, "year": 2017, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2017-第32题-题目\n\n\n\n

系统将数据从磁盘读到内存的过程包括以下操作:

\n

① DMA 控制器发出中断请求

\n

② 初始化 DMA 控制器并启动磁盘

\n

③ 从磁盘传输一块数据到内存缓冲区

\n

④ 执行“DMA 结束”中断服务程序

\n

正确的执行顺序是( )。

\n
A.③→①→②→④
\n
B.②→③→①→④
\n
C.②→①→③→④
\n
D.①→②→④→③
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第32题-解析\n\n\n\n

在开始 DMA 传输时,主机向内存写入 DMA 命令块,向 DMA 控制器写入该命令块的地址,启动 I/O 设备。然后,CPU 继续其他工作,DMA 控制器则继续下去直接操作内存总线,将地址放到总线上开始传输。当整个传输完成后,DMA 控制器中断 CPU。因此执行顺序是 ②→③→①→④ 选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 409, "year": 2017, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第33题-题目\n\n\n\n

假设 OSI 参考模型的应用层欲发送 400B 的数据(无拆分),除物理层和应用层之外,其他各层在封装 PDU 时均引入 20B 的额外开销,则应用层数据传输效率约为( )。

\n
A.80%
\n
B.83%
\n
C.87%
\n
D.91%
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第33题-解析\n\n\n\n

OSI 参考模型共 7 层,除去物理层和应用层,剩五层。它们会向 PDU 引入 20Bx5 = 100B 的额外开销。应用层是最顶层,所以它的数据传输效率为 400B/500B=80%,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 410, "year": 2017, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第34题-题目\n\n\n\n

若信道在无噪声情况下的极限数据传输速率不小于信噪比为 30dB 条件下的极限数据传输速率,则信号状态数至少是( )。

\n
A.4
\n
B.8
\n
C.16
\n
D.32
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第34题-解析\n\n\n\n

可用 奈奎斯特定理 计算无噪声情况下的极限数据传输速率,用 香农定理 计算有噪信道极限数据传输速率。\n2Wlog2​N≥Wlog2​(1+S/N)\n,\nW\n是信道带宽,\nN\n是信号状态数,\nS/N\n是信噪比,将数据代入计算可得\nN≥32\n,选 D。(注意 分贝数=\n10log10​(S/N)\n。)
\n\n\n\n\n", "difficulty": 1}, {"id": 411, "year": 2017, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第35题-题目\n\n\n\n

在下图所示的网络中,若主机 H 发送一个封装访问 Internet 的 IP 分组的 IEEE 802.11 数据帧 F,则帧 F 的地址 1、地址 2 和地址 3 分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
F
Internet
00-12-34-56-78-9a
00-12-34-56-78-9b
00-12-34-56-78-9c
\n
A.00-12-34-56-78-9a, 00-12-34-56-78-9b, 00-12-34-56-78-9c
\n
B.00-12-34-56-78-9b, 00-12-34-56-78-9a, 00-12-34-56-78-9c
\n
C.00-12-34-56-78-9b, 00-12-34-56-78-9c, 00-12-34-56-78-9a
\n
D.00-12-34-56-78-9a, 00-12-34-56-78-9c, 00-12-34-56-78-9b
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第35题-解析\n\n\n\n

IEEE 802.11 数据帧有四种子类型,分别是 IBSS、From AP、ToAP、WDS。这里的数据帧 F 是从笔记本电脑发送往访问接入点(AP),所以属于 To AP 子类型。这种帧地址 l 是 RA (BSSID),地址 2 是 SA,地址 3 是 DA。RA 是 Receiver Address 的缩写,BSSID 是 basic service set identifier 的缩写,SA 是 source address 的缩写,DA 是 destination address 的缩写。因此地址 1 是 AP 的 MAC,地址 2 是 H 的 MAC,地址 3 是 R 的 MAC,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 412, "year": 2017, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第36题-题目\n\n\n\n

下列 IP 地址中,只能作为 IP 分组的源 IP 地址但不能作为目的 IP 地址的是( )。

\n
A.0.0.0.0
\n
B.127.0.0.1
\n
C.200.10.10.3
\n
D.255.255.255.255
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第36题-解析\n\n\n\n

0.0.0.0/32 可以作为本主机在本网络上的源地址。127.0.0.1 是 loopback 地址,以它为目的 IP 地址的数据将被立即返回到本机。200.10.10.3 是 C 类 IP 地址。255.255.255.255 是广播地址。
\n\n\n\n\n", "difficulty": 3}, {"id": 413, "year": 2017, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第37题-题目\n\n\n\n

直接封装 RIP、OSPF、BGP 报文的协议分别是( )。

\n
A.TCP、UDP、IP
\n
B.TCP、IP、UDP
\n
C.UDP、TCP、IP
\n
D.UDP、IP、TCP
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第37题-解析\n\n\n\n

参考 路由协议对比,RIP 是一种分布式的基于距离向量的路由选择协议,通过广播 UDP 报文来交换路由信息。OSPF 是一个内部网关协议,不使用传输协议,如 UDP 或 TCP,而是直接用 IP 包封装它的数据。BGP 是一个外部网关协议,用 TCP 封装它的数据。因此选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 414, "year": 2017, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第38题-题目\n\n\n\n

若将网络 21.3.0.0/16 划分为 128 个规模相同的子网,则每个子网可分配的最大 IP 地址个数是( )。

\n
A.254
\n
B.256
\n
C.510
\n
D.512
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第38题-解析\n\n\n\n

这个网络有 16 位的主机号,平均分成 128 个规模相同的子网,每个子网有 7 位的子网号,9 位的主机号。除去一个网络地址和广播地址,可分配的最大 IP 地址个数是 29-2=512-2=510,故选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 415, "year": 2017, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第39题-题目\n\n\n\n

若甲向乙发起一个 TCP 连接,最大段长 MSS=1KB,RTT=5ms,乙开辟的接收缓存为 64KB,则甲从连接建立成功至发送窗口达到 32KB,需经过的时间至少是( )。

\n
A.25 ms
\n
B.30 ms
\n
C.160 ms
\n
D.165 ms
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第39题-解析\n\n\n\n

按照 慢开始算法,发送窗口 = min{ 拥塞窗口,接收窗口},初始的拥塞窗口为最大报文段长度 1KB 海经过一个 RTT,拥塞窗口翻倍,因此需至少经过 5 个 RTT,发送窗口才能达到 32KB,所以选 A。这里假定乙能及时处理接收到的数据,空闲的接收缓存 ≥ 32KB。
\n\n\n\n\n", "difficulty": 0}, {"id": 416, "year": 2017, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第40题-题目\n\n\n\n

下列关于 FTP 协议的叙述中,错误的是( )。

\n
A.数据连接在每次数据传输完毕后就关闭
\n
B.控制连接在整个会话期间保持打开状态
\n
C.服务器与客户端的 TCP 20 端口建立数据连接
\n
D.客户端与服务器的 TCP 21 端口建立控制连接
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第40题-解析\n\n\n\n

FTP 协议使用控制连接和数据连接,控制连接存在于整个 FTP 会话过程中,数据连接在每次文件传输时才建立,传输结束就关闭,A 和 B 是正确的。默认情况下 FTP 协议使用 TCP 20 端口进行数据连接,TCP 21 端口进行控制连接。但是是否使用 TCP 20 端口建立数据连接与传输模式有关,主动方式使用 TCP20 端口,被动方式由服务器和客户端自行协商决定,C 错,D 对。所以选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 417, "year": 2017, "index": 41, "type": 3, "typeName": "算法题", "score": 15, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第41题-题目\n\n\n\n

请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法输入时:

\n
\n\n\n\n \n 408真题系统\n \n\n
*
+
*
a
b
c
-
d
+
*
-
a
b
c
-
d
\n

输出的中缀表达式分别为 (a+b)*(c*(−d)) 和 (a*b)+(−(c−d)) 。

\n

二叉树结点的定义如下:

\n
typedef struct node{\n    char data[10];   // 存储操作数或操作符\n    struct node *left, *right;\n} BTree;\n
\n

要求:

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第41题-解析\n\n\n\n

1)算法的基本设计思想

表达式树的中序序列加上必要的括号即为等价的中缀表达式。可以基于二叉树的中序遍历策略得到所需的表达式。(3 分)

表达式树中分支结点所对应的子表达式的计算次序,由该分支结点所处的位置决定。为得到正确的中缀表达式,需要在生成遍历序列的同时,在适当位置增加必要的括号。显然,表达式的最外层(对应根结点)及操作数(对应叶结点)不需要添加括号。(2 分)

2)算法实现(10 分)

void preorder(node *root, int depth) {\n  if (!root) {\n    return;\n  }\n  bool isRoot = (depth == 1);\n  bool isLeaf = (!root->left && !root->right);\n  if (!isRoot && !isLeaf) {\n    printf(\"(\");\n  }\n  preorder(root->left, depth+1);\n  printf(\"%s\", root->data);\n  preorder(root->right, depth+1);\n  if (!isRoot && !isLeaf) {\n    printf(\")\");\n  }\n}\n\nvoid solve(node *root) {\n  preorder(root, 1);\n}\n

将二叉树的中序遍历递归算法稍加改造即可得本题答案。除根结点和叶结点外,遍历到其他结点时在遍历其左子树之前加上左括号,在遍历完右子树后加上右括号。

【评分说明】①若考生设计的算法满足题目的功能要求,则(1)、(2) 根据所实现算法的策略及输出结果给分,评分标准见下表。

分数备注
15采用中序遍历算法且正确,括号嵌套正确,层数适当
14采用中序遍历算法且正确,括号嵌套正确,但括号嵌套层数过多。例如,表达式最外层加上括号,或操作数加括号,如 (a)
11采用中序遍历算法,但括号嵌套层数不完全正确。例如,左右括号数量不匹配
9采用中序遍历算法,但没有考虑括号
≤7其他

②若考生采用其他方法得到正确结果,可参照①的评分标准给分。

③如果程序中使用了求结点深度等辅助函数,但没有给出相应的实现过程,只要考生进\n行了必要的说明,可不扣分。

④若在算法的基本设计思想描述中因文字表达没有清晰反映出算法思路,但在算法实现\n中能够表达出算法思想且正确的,则可参照①的标准给分。

⑤若算法的基本设计思想描述或算法实现中部分正确,可参照①中各种情况的相应给分标准酌情给分。

\n\n\n\n\n", "difficulty": 2}, {"id": 418, "year": 2017, "index": 42, "type": 2, "typeName": "应用题", "score": 8, "subject": "computer-network", "question": "\n\n\n\n\n\n2017-第42题-题目\n\n\n\n

使用 Prim(普里姆)算法求带权连通图的最小(代价)生成树(MST)。请回答下列问题。

\n

(1) 对下列图 G,从顶点 A 开始求 G 的 MST,依次给出按算法选出的边。

\n
\n\n\n\n \n 408真题系统\n \n\n
A
E
B
C
D
6
5
4
4
5
6
4
\n

(2) 图 G 的 MST 是唯一的吗?

\n

(3) 对任意的带权连通图,满足什么条件时,其 MST 是唯一的?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第42题-解析\n\n\n\n

1)Prim 算法 属于贪心策略。算法从一个任意的顶点开始,一直长大到覆盖图中所有顶点为止。算法每一步在连接树集合 S 中顶点和其他顶点的边中,选择一条使得树的总权重增加最小的边加入集合 S。当算法终止时,S 就是最小生成树。

  1. S 中顶点为 A,候选边为 (A,D),(A,B),(A,E),选择 (A,D) 加入 S。
  2. S 中顶点为 A,D,候选边为 (A,B),(A,E),(D,E),(C,D),选择 (D,E) 加入 S。
  3. S 中顶点为 A,D,E,候选边为 (A,B),(C,D),(C,E),选择 (C,E) 加入 S。
  4. S 中顶点为 A,D,E,C,候选边为 (A,B),(B,C),选择 (B,C) 加入 S。
  5. S 就是最小生成树。

依次选出的边为 (A,D),(D,E),(C,E),(B,C)(4 分)

【评分说明】每正确选对一条边且次序正确,给 1 分。若考生选择的边正确,但次序不完\n全正确,酌情给分。

2)图 G 的 MST 是唯一的。(2 分)第一小题的最小生成树包括了图中权值最小的四条边,其他边都比这四条边大,所以此图的 MST 唯一。

3)当带权连通图的任意一个环中所包含的边的权值均不相同时,其 MST 是唯一的。(2 分)此题不要求回答充分必要条件,所以回答一个限制边权值的充分条件即可。

【评分说明】①若考生答案中给出的是其他充分条件,例如“带权连通图的所有边的权值均不相同”,同样给分。

②若考生给出的充分条件对图的顶点数和边数做了某些限制,例如,限制了图中顶点的个数(顶点个数少于 3 个)、限制了图的形状(图中没有环)等,则最高给 1 分。

③答案部分正确,酌情给分。

\n\n\n\n\n", "difficulty": 1}, {"id": 419, "year": 2017, "index": 43, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2017-第43题-题目\n\n\n\n

已知\nf(n)=∑i=0n​2i=2n+1−1=11⋯1\nB,计算\nf(n)\n的 C 语言函数 f1 如下:

\n
int f1(unsigned n) {\n    int sum=1, power=1;\n    for(unsigned i=0; i<= n -1; i ++) {\n        power * = 2;\n        sum += power;\n    }\n    return sum ;\n}\n
\n

将 f1 中的 int 都改为 float,可得到计算 f(n) 的另一个函数 f2。假设 unsigned 和 int 型数据都占 32 位,float 采用 IEEE754 单精度标准。请回答下列问题。

\n

(1) 当 n=0 时,f1 会出现死循环,为什么?若将 f1 中的变量 i 和 n 都定义为 int 型,则 f1 是否还会出现死循环?为什么?

\n

(2) f1(23) 和 f2(23) 的返回值是否相等?机器数各是什么(用十六进制表示)?

\n

(3) f1(24) 和 f2(24) 的返回值分别为 33554431 和 33554432.0,为什么不相等?

\n

(4) f(31)= \n232−1\n ,而 f1(31) 的返回值却为 -1,为什么?若使 f1(n) 的返回值与 f(n) 相等,则最大的 n 是多少?

\n

(5) f2(127) 的机器数为 7F80 0000H,对应的值是什么?若使 f2(n) 的结果不溢出,则最大的 n 是多少?若使 f2(n) 的结果精确(无舍入),则最大的 n 是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第43题-解析\n\n\n\n

1)由于\ni\n和\nn\n是 unsigned 型,故\ni≤n−l\n是无符号数比较,\nn=0\n时,\nn−1\n的机器数为全\n1\n,值是\n232−1\n,为 unsigned 型可表示的最大数,条件\ni≤n−1\n永真,因此出现死循环。(2 分)

若\ni\n和\nn\n改为 int 类型则不会出现死循环。(1 分)

因为\ni≤n−1\n是带符号整数比较,\nn=0\n时,\nn−1\n的值是\n−1\n,当\ni=0\n时条件\ni≤n−1\n不成立,此时退出 for 循环。(1 分)

2)f1(23) 与 f2(23) 的返回值相等。(1 分)f(23) =\n223+1−1=224−1\n,它的二进制形式是\n24\n个\n1\n。int 占\n32\n位,没有溢出。float 有\n1\n个符号位,\n8\n个指数位,\n23\n个底数位,\n23\n个底数位可以表示\n24\n位的底数。所以两者返回值相等。

f1(23) 的机器数是 00FF FFFFH。(1 分)

f2(23) 的机器数是 4B7F FFFFH。(1 分)

显而易见前者是\n24\n个\n1\n,即\n0000 0000 1111 1111 1111 1111 1111 1111(2)​\n,后者符号位是\n0\n,\n指数位为\n23+12710​=100101102​\n,底数位是\n111 1111 1111 1111 1111 11112​\n。

3)当 n=24 时,f(24) = 1 1111 1111 1111 1111 1111 1111 B,而 float 型数只有 24 位有效位,舍入后数值增大,所以 f2(24) 比 f1(24) 大 1。(1 分)

【评分说明】只要说明 f2(24) 需舍入处理即可给分。

4)显然 f(31) 已超出了 int 型数据的表示范围,用 f1(31) 实现时得到的机器数为 32 个 1,作为 int 型数解释时其值为 -1,即 f1(31) 的返回值为 -1。(1 分)

因为 int 型最大可表示数是 0 后面加 31 个 1,故使 f1(n) 的返回值与 f(n) 相等的最大 n 值是 30。(1 分)

【评分说明】对于第二问,只要给出 n=30 即可给分。

5)IEEE754 标准用“阶码全 1、尾数全 0”表示 无穷大。2 返回值为 f1oat 型,机器数 7F800000H 对应的值是+∞。(1 分)

当 n=126 时,f(126) =\n2127−1=1.1…1×2126\n,对应阶码为 127+126=253,尾数部分舍入后阶码加 1,最终阶码为 254,是 IEEE754 单精度格式表示的最大阶码。故使 2 结果不溢出的最大 n 值为 126。(1 分)

当 n=23 时,f(23) 为 24 位 1,f1oat 型数有 24 位有效位,所以不需舍入,结果精确。故使 f2 获得精确结果的最大 n 值为 23。(1 分)

【评分说明】对于第二问,只要给出 n=23,即可给分。对于第三问,只要给出 n=126,即可给分。

\n\n\n\n\n", "difficulty": 0}, {"id": 420, "year": 2017, "index": 44, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2017-第44题-题目\n\n\n\n

在按字节编址的计算机 M 上,题 43 中 f1 的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下图所示。

\n

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

\n

请回答下列问题。

\n

(1) 计算机 M 是 RISC 还是 CISC?为什么?

\n

(2) f1 的机器指令代码共占多少字节?要求给出计算过程。

\n

(3) 第 20 条指令 cmp 通过 i 减 n-1 实现对 i 和 n-1 的比较。执行 f1(0) 过程中,当 i=0 时,cmp 指令执行后,进/借位标志 CF 的内容是什么?要求给出计算过程。

\n

(4) 第 23 条指令 shl 通过左移操作实现了 power*2 运算,在 f2 中能否也用 shl 指令实现 power*2?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第44题-解析\n\n\n\n

(1)M 为 CISC。(1 分)
M 的指令长短不一,不符合 RISC 指令系统特点。(1 分)

(2)f1 的机器代码为 96B。(1 分)
因为 f1 的第一条指令 “push ebp” 所在的虚拟地址为 0040 1020H,最后一条指令 “ret” 所在的虚拟地址为 0040 107FH,所以,f1 的机器指令代码长度为:0040 107FH - 0040 1020H + 1 = 60H = 96B(1 分)

(3)CF = 1。(1 分)
cmp 指令实现 i 与 n-1 的比较功能,进行的是减法运算。在执行 f1(0) 过程中,n=0,当 i=0 时,i=0000 0000H,并且 n-1=FFFF FFFFH。因此,当执行第 20 条指令时,在补码加/减运算器中执行的是 “0 - FFFF FFFFH” 的操作,即:0000 0000H + 0000 0000H + 1 = 0000 0001H。此时,进位输出 C=0,减法运算时的借位标志 CF = C ⊕ 1 = 1。(2 分)

(4)f2 中不能用 shl 指令实现 power * 2。(1 分)
因为 shl 指令用来将一个整数的所有有效位作为一个整体左移;而 f2 中的变量 power 是 float 型,其机器数中不包含最高有效位,但包含了阶码部分,将其作为一个整体左移时并不能实现 “乘 2” 的功能。因此在 f2 中不能用 shl 指令实现 power * 2。(2 分)浮点数运算比整型运算要复杂,耗时也较长。

\n\n\n\n\n", "difficulty": 2}, {"id": 421, "year": 2017, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第45题-题目\n\n\n\n

假定题 44 给出的计算机 M 采用二级分页虚拟存储管理方式,虚拟地址格式如下:

\n
页目录号(10 位)页表索引(10 位)页内偏移量(12 位)
\n

请针对题 43 的函数 f1 和题 44 中的机器指令代码,回答下列问题。

\n

(1) 函数 f1 的机器指令代码占多少页?

\n

(2) 取第 1 条指令(push ebp)时,若在进行地址变换的过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从 0 开始)?

\n

(3) M 的 I/O 采用中断控制方式。若进程 P 在调用 f1 之前通过 scanf() 获取 n 的值,则在执行 scanf() 的过程中,进程 P 的状态会如何变化?CPU 是否会进入内核态?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第45题-解析\n\n\n\n

1)函数 1 的代码段中所有指令的虚拟地址的高 20 位相同,因此 1 的机器指令代码在同\n一页中,仅占用 1 页。(1 分)页目录号用于寻找页目录的表项,该表项包含页表的位置。页表\n索引用于寻找页表的表项,该表项包含页的位置。

2)push ebp 指令的虚拟地址的最高 10 位(页目录号)为 0000000001,中间 10 位(页\n表索引)为 0000000001,所以,取该指令时访问了页目录的第 1 个表项,(1 分)在对应的页\n表中访问了第 1 个表项。(1 分)

3)在执行 scanf0 的过程中,进程 P 因等待输入而从执行态变为阻塞态。(1 分)输入结束\n时,P 被中断处理程序唤醒,变为就绪态。(1 分)P 被调度程序调度,变为运行态。(1 分)CPU\n状态会从用户态变为内核态。(1 分)

\n\n\n\n\n", "difficulty": 1}, {"id": 422, "year": 2017, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2017-第46题-题目\n\n\n\n

某进程中有 3 个并发执行的线程 thread1、thread2、thread3,其伪代码如下所示。

\n

请添加必要的信号量和 P、V(或 wait()、signal())操作,要求确保线程互斥访问临界资源,并且最大程度地并发执行。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第46题-解析\n\n\n\n

先找出线程对在各个变量上的互斥、并发关系。如果是一读一写或两个都是写,那么这就是互斥关系。每一个互斥关系都需要一个信号量进行调节。

// 冲突:\n// t1 和 t3 关于 y 有读写冲突\n// t2 和 t3 关于 y, z 都有读写冲突\n\n// 解决 t1 和 t3 关于 y 读写冲突\nsemaphore y_mutex1 = 1;\n\nsemaphore y_mutex2 = 1;\nsemaphore z_mutex = 1;\n\n\n// 全局变量 x y z\ncnum x, y, z;\n\nthread1()\n{\n  cnum w;\n  // 读 x, y\n  P(y_mutex1);\n  w = add(x, y);\n  V(y_mutex1);\n  // ...\n}\n\nthread2()\n{\n  cnum w;\n  // 读 y, z\n  P(z_mutex);\n  P(y_mutex2);\n  w = add(y, z);\n  V(y_mutex2);\n  V(z_mutex);\n  // ...\n}\n\nthread3()\n{\n  cnum w;\n  w.a = 1;\n  w.b = 1;\n  // 写 z\n  P(z_mutex);\n  z = add(z, w);\n  V(z_mutex);\n  // 写 y\n  P(y_mutex1);\n  P(y_mutex2);\n  y = add(y, w);\n  V(y_mutex2);\n  V(y_mutex1);\n  // ...\n}\n

【评分标准】

① 各线程与变量之间的互斥、并发情况及相应评分见下表。

变量/线程对thread1 和 thread2thread2 和 thread3thread3 和 thread4给分
x不共享不共享不共享1 分
y同时读读写互斥读写互斥3 分
z不共享读写互斥不共享1 分

② 考生仅使用一个互斥信号量,互斥代码部分的得分最多给 2 分。

③ 答案部分正确,酌情给分。

\n\n\n\n\n", "difficulty": 0}, {"id": 423, "year": 2017, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "operating-system", "question": "\n\n\n\n\n\n2017-第47题-题目\n\n\n\n

甲乙双方均采用后退 N 帧协议 (GBN) 进行持续的双向数据传输,且双方始终采用捎带确认,帧长均为 1000 B。 \nSx,y​\n 和 \nRx,y​\n 分别表示甲方和乙方发送的数据帧,其中:\nx\n是发送序号;\ny\n是确认序号(表示希望接收对方的下一帧序号);数据帧的发送序号和确认序号字段均为 3 比特。信道传输速率为 100 Mbps,RTT = 0.96 ms。下图给出了甲方发送数据帧和接收数据帧的两种场景,其中 \nt0​\n 为初始时刻,此时甲方的发送和确认序号均为 0, \nt1​\n 时刻甲方有足够多的数据待发送。

\n

请回答下列问题。

\n

(1) 对于图 (a), \nt0​\n 时刻到 \nt1​\n 时刻期间,甲方可以断定乙方已正确接收的数据帧数是多少?正确接收的是哪几个帧(请用 \nSx,y​\n 形式给出)?

\n

(2) 对于图 (a),从 \nt1​\n 时刻起,甲方在不出现超时且未收到乙方新的数据帧之前,最多还可以发送多少个数据帧?其中第一个帧和最后一个帧分别是哪个(请用 \nSx,y​\n 形式给出)?

\n

(3) 对于图 (b),从 \nt1​\n 时刻起,甲方在不出现新的超时且未收到乙方新的数据帧之前,需要重发多少个数据帧?重发的第一个帧是哪个(请用 \nSx,y​\n 形式给出)?

\n

(4) 甲方可以达到的最大信道利用率是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2017-第47题-解析\n\n\n\n

1)6 时刻到 t 时刻期间,甲方可以断定乙方已正确接收了 3 个数据帧,(1 分)分别是\nS0,0​\n,\nS1,0​\n,\nS2,0​\n(1 分)。\nR3,3​\n说明乙发送的数据帧确认号是 3,即希望甲发送序号 3 的数据帧,说明乙已经接收了序号为 0~2 的数据帧。

2)从\nt1​\n时刻起,甲方最多还可以发送 5 个数据帧(1 分),其中第一个帧是\nS5,2​\n(1 分),最后一个数据帧是\nS1,2​\n(1 分)。发送序号 3 位,有 8 个序号。在 GBN 协议中,序号个数 ≥ 发送窗口 + 1,所以这里发送窗口最大为 7。此时已发送了\nS3,0​\n和\nS4,1​\n,所以最多还可以发送 5 个帧。

3)甲方需要重发 3 个数据帧(1 分),重发的第一个帧是\nS2,3​\n(1 分)。在 GBN 协议中,接收方发送了 N 帧后,检测出错,则需要发送出错帧及其之后的帧。\nS2,0​\n超时,所以重发的第一帧是\nS2​\n。已收到乙的\nR2​\n帧,所以确认号应为 3。

\\[\n\\frac{7 \\times \\frac{8 \\times 1000}{100 \\times 10^6}}{0.96 \\times 10^{-3} + 2 \\times \\frac{8 \\times 1000}{100 \\times 10^6}} \\times 100\\% = 50%\n\\]

4)甲方可以达到的最大信道利用率是

U\n= 发送数据的时间/从开始发送第一帧到收到第一个确认帧的时间 =\nN⋅Td/(Td+RTT+Ta)

U\n是信道利用率,\nN\n是发送窗口的最大值,\nTd\n是发送一数据帧的时间,\nRTT\n是往返时间,\nTa\n是发送一确认帧的时间。这里采用捎带确认,\nTd=Ta\n。

【评分说明】答案部分正确,酌情给分。

\n\n\n\n\n", "difficulty": 3}, {"id": 424, "year": 2018, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第1题-题目\n\n\n\n

若栈 S1 中保存整数,栈 S2 中保存运算符,函数 F() 依次执行下述各步操作:

\n

假定 S1 中的操作数依次是 5,8,3,2(2 在栈顶),S2 中的运算符依次是 ×,−,+ ( + 在栈顶)。调用 3 次 F() 后,S1 栈顶保存的值是( )。

\n
A.-15
\n
B.15
\n
C.-20
\n
D.20
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第1题-解析\n\n\n\n

本题考察 后序表达式求值,调用三次 F() 栈中内容如下表所示:

调用次数S1 初始状态(栈底 → 栈顶)S2 初始状态(栈底 → 栈顶)弹出操作数 a, b弹出运算符 op执行运算 b op a运算结果入栈后 S1 状态(栈底 → 栈顶)
第一次5, 8, 3, 2×, −, +a=2, b=3+3 + 2 = 55, 8, 5
第二次5, 8, 5×, −a=5, b=8−8 − 5 = 35, 3
第三次5, 3×a=3, b=5×5 × 3 = 1515

调用三次 F() 后,S1 的栈顶是 15,因此选择 B。

\n\n\n\n\n", "difficulty": 1}, {"id": 425, "year": 2018, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第2题-题目\n\n\n\n

现有队列 Q 与栈 S,初始时 Q 中的元素依次是 1,2,3,4,5,6(1 在队头),S 为空。若仅允许下列 3 种操作:

\n

① 出队并输出出队元素

\n

② 出队并将出队元素入栈

\n

③ 出栈并输出出栈元素

\n

则不可能得到的输出序列是( )。

\n
A.1,2,5,6,4,3
\n
B.2,3,4,5,6,1
\n
C.3,4,5,6,1,2
\n
D.6,5,4,3,2,1
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第2题-解析\n\n\n\n

本题考察 入栈出栈序列:A 的操作顺序:①①②②①①③③。B 的操作顺序:②①①①①①③。D 的操作顺序:②②②②②①③③③③。对于 C:首先输出 3,说明 1 和 2 必须先依次入栈,而此后 2 肯定比 1 先输出,因此无法得到 1,2 的输出顺序。
\n\n\n\n\n", "difficulty": 1}, {"id": 426, "year": 2018, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第3题-题目\n\n\n\n

设有一个\n12×12\n的对称矩阵\nM\n,将其上三角部分的元素\nmi,j​(1≤i≤j≤12)\n按行优先存入 C 语言的一维数组\nN\n中,元素\nm6,6​\n在\nN\n中的下标是( )。

\n
A.50
\n
B.51
\n
C.55
\n
D.66
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第3题-解析\n\n\n\n

数组\nN\n的下标从\n0\n开始,第一个元素\nm1,1​\n对应存入\nn0​\n,矩阵\nM\n的第一行有 12 个元素,第二行有 11 个,第三行有 10 个,第四行有 9 个,第五行有 8 个,所以\nm6,6​\n是第 12 + 11 + 10 + 9 + 8 + 1 = 51 个元素,下标应为 50, 故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 427, "year": 2018, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第4题-题目\n\n\n\n

设一棵非空完全二叉树 T 的所有叶结点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是( )。

\n
A.2k−1
\n
B.2k
\n
C.k2
\n
D.2k−1
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第4题-解析\n\n\n\n

非叶结点的度均为 2, 且所有叶结点都位于同一层的完全二叉树就是满二叉树。对一棵高度为 h 的满二叉树(空树\nh=0\n), 其最后一层全部是叶结点,数量为\n2h−1\n; 总结点数为\n2h−1\n。因此当\n2h−1=k\n时,可以得到\n2h−1=2k−1\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 428, "year": 2018, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第5题-题目\n\n\n\n

已知字符集{a, b, c, d, e, f},若各字符出现的次数分别为 6, 3, 8, 2, 10, 4,则对应字符集中各字符的哈夫曼编码可能是( )。

\n
A.00, 1011, 01, 1010, 11, 100
\n
B.00, 100, 110, 000, 0010, 01
\n
C.10, 1011, 11, 0011, 00, 010
\n
D.0011, 10, 11, 0010, 01, 000
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第5题-解析\n\n\n\n

构造一棵符合题意的哈夫曼树,如下图所示。

\n\n
33
14
19
6
8
9
10
5
4
2
3

由此可知,左子树为 0, 右子树为 1, 故答案为 A。


这题也可以 使用排除法,因为哈夫曼编码是前缀编码,所以任意编码都不能是另一个编码的前缀,根据这一点可以排除掉 B、C 选项。\nD 选项也是错误的,因为字符 e 的出现次数为 10 很高,它不能哈夫曼编码长度最短,这不合理。

\n\n\n\n\n", "difficulty": 1}, {"id": 429, "year": 2018, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2018-第6题-题目\r\n\r\n\r\n\r\n

已知二叉排序树如下图所示,元素之间应满足的大小关系是( )。

\r\n
\"\"
\r\n
A.x1​<x2​<x3​
\r\n
B.x1​<x4​<x5​
\r\n
C.x3​<x5​<x4​
\r\n
D.x4​<x3​<x5​
\r\n\r\n\r\n\r\n\r\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第6题-解析\n\n\n\n

根据 二叉排序树 的特性:中序遍历(LNR)得到的是一个递增序列。图中二叉排序树的中序遍历序列为\nxi​,x3​,x5​,x4​,x2​\n, 可知\nx3​<x5​<x4​\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 430, "year": 2018, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第7题-题目\n\n\n\n

下列选项中,不是如下有向图的拓扑序列的是( )

\n
\n\n\n\n \n 408真题系统\n \n\n
1
5
3
6
4
2
\n
A.1, 5, 2, 3, 6, 4
\n
B.5, 1, 2, 6, 3, 4
\n
C.5, 1, 2, 3, 6, 4
\n
D.5, 2, 1, 6, 3, 4
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第7题-解析\n\n\n\n

拓扑排序 每次选取入度为 0 的结点输出,经观察不难发现拓扑序列前两位一定是 1,5 或 5,1(因为只有 1 和 5 的入度均为 0,且其他结点都不满足仅有 1 或仅有 5 作为前驱)。因此 D 显然错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 431, "year": 2018, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第8题-题目\n\n\n\n

高度为 5 的 3 阶 B 树含有的关键字个数至少是( )

\n
A.15
\n
B.31
\n
C.62
\n
D.242
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第8题-解析\n\n\n\n

m\n阶 B 树 的基本性质:根结点以外的非叶结点最少含有\n⌈m/2⌉−1\n个关键字,代入\nm=3\n得到每个非叶结点中最少包含 1 个关键字,而根结点含有 1 个关键字,因此所有非叶结点都有两个孩子。此时其树形与 h=5 的满二叉树相同,可求得关键字最少为 31 个。
\n\n\n\n\n", "difficulty": 1}, {"id": 432, "year": 2018, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第9题-题目\n\n\n\n

现有长度为 7、初始为空的散列表 HT,散列函数 H(k) = k % 7,用线性探测再散列法解决冲突。将关键字 22, 43, 15 依次插人到 HT 后,查找成功的平均查找长度是( )

\n
A.1.5
\n
B.1.6
\n
C.2
\n
D.3
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第9题-解析\n\n\n\n

可以构造得到如下的 HT:

下标0123456
关键词224315

成功时的平均查找长度 = (1+2+3)/3 = 2。

\n\n\n\n\n", "difficulty": 1}, {"id": 433, "year": 2018, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第10题-题目\n\n\n\n

对初始数据序列 (8, 3, 9, 11, 2, 1, 4, 7, 5, 10, 6) 进行希尔排序。若第一趟排序结果为 (1, 3, 7, 5, 2, 6, 4, 9, 11, 10, 8),第二趟排序结果为 (1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9),则两趟排序采用的增量(间隔)依次是( )。

\n
A.3,1
\n
B.3,2
\n
C.5,2
\n
D.5,3
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第10题-解析\n\n\n\n

参考 希尔排序,可以观察到,第一次排序后的数组沿 gap=5 有序,第二次排序后数组沿 gap=3 有序,所以答案选择 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 434, "year": 2018, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第11题-题目\n\n\n\n

在将数据序列 (6, 1, 5, 9, 8, 4, 7) 建成大根堆时,正确的序列变化过程是()。

\n
A.6,1,7,9,8,4,5 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
\n
B.6,9,5,1,8,4,7 → 6,9,7,1,8,4,5 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
\n
C.6,9,5,1,8,4,7 → 9,6,5,1,8,4,7 → 9,6,7,1,8,4,5 → 9,8,7,1,6,4,5
\n
D.6,1,7,9,8,4,5 → 7,1,6,9,8,4,5 → 7,9,6,1,8,4,5 → 9,7,6,1,8,4,5 → 9,8,6,1,7,4,5
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第11题-解析\n\n\n\n

参考构造初始堆,该题的堆变化过程如下图所示:

\n\n
6
1
5
9
8
4
7
6
1
7
9
8
4
5
6
9
7
1
8
4
5
9
6
7
1
8
4
5
9
8
7
1
6
4
5
从结点 5 开始堆化
从结点 1 堆化
交换
5 和 7
交换
1 和 9
从结点 6 堆化
交换
6 和 8
继续向子结点
递归
交换
6 和 8

答案选择 A。

\n\n\n\n\n", "difficulty": 2}, {"id": 435, "year": 2018, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第12题-题目\n\n\n\n

冯诺依曼结构计算机中数据采用二进制编码表示,其主要原因是()。

\n

Ⅰ.二进制的运算规则简单

\n

Ⅱ.制造两个稳态的物理器件较容易

\n

Ⅲ.便于用逻辑门电路实现算术运算

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅲ
\n
D.Ⅰ、Ⅱ和Ⅲ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第12题-解析\n\n\n\n

对于 I,二进制由千只有 0,1 两种数值,运算规则较简单,都是通过 ALU 部件转换成加法运算。对于 II,二进制只需要高电平和低电平两个状态就可以表示,这样的物理器件很容易制造。对于 III, 二进制与逻辑量相吻合。二进制的 0 和 1 正好与逻辑量的“真”和“假”相对应,因此用二进制数表示二值逻辑显得十分自然,采用逻辑门电路很容易实现运算。
\n\n\n\n\n", "difficulty": 1}, {"id": 436, "year": 2018, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第13题-题目\n\n\n\n

假定带符号整数采用补码表示,若 int 型变量 x 和 y 的机器数分别是 FFFF FFDFH 和 0000 0041H,则 x、y 的值以及 x-y 的机器数分别是( )。

\n
A.x=-65,y=41,x-y 的机器数溢出
\n
B.x=-33,y=65,x-y 的机器数为 FFFFFF9DH
\n
C.x=-33,y=65,x-y 的机器数为 FFFFFF9EH
\n
D.x=-65,y=41,x-y 的机器数为 FFFFFF96H
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第13题-解析\n\n\n\n

利用 补码转换成原码的规则:负数符号位不变数值位取反加 1;正数补码等于原码。两个机器数对应的原码是 [x]原 = 80000021H,对应的数值是 -33,[y]原=[y]补=00000041H=65。排除 A、D 选项。x-y 直接利用补码减法准则,[x]补-[y]补 =[x]补+[-y]补,-y 的补码是连同符号位取反加 1,最终减法变成加法,得出结果为 FFFFFF9EH。
\n\n\n\n\n", "difficulty": 1}, {"id": 437, "year": 2018, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第14题-题目\n\n\n\n

IEEE 754 单精度浮点格式表示的数中,最小的规格化正数是 (  )

\n
A.1.0×2−126
\n
B.1.0×2−127
\n
C.1.0×2−128
\n
D.1.0×2−149
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第14题-解析\n\n\n\n

IEEE754 单精度浮点数的符号位、阶码位、尾数位(省去正数位 1)所占的位数分别是 1、8、23 位。最小正数,数符位取 0,移码的取值范围是 1~254,取 1,得阶码值 1-127=-126(127 为我们规定的偏置值),尾数取全 0,最终推出最小规格化正数为 A 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 438, "year": 2018, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第15题-题目\n\n\n\n

某 32 位计算机按字节编址,采用小端(Little Endian)方式。若语句 int i=0 对应指令的机器代码为 C7 45 FC 00 00 00 00,则语句 int i=-64 对应指令的机器代码是( )。

\n
A.C7 45 FC C0 FF FF FF
\n
B.C7 45 FC 0C FF FF FF
\n
C.C7 45 FC FF FF FF C0
\n
D.C7 45 FC FF FF FF 0C
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第15题-解析\n\n\n\n

按字节编址,采用 小端序,低位的数据存储在低地址位、高位的数据存储在高地址位,并且按照一个字节相对不变的顺序存储。由题意知机器代码的地址是递减的,存储 0 的位数是后 32 位,那么我们只需要把 -64 的补码按字节存储在其中即可,而 -64 表示成 32 位的十六进制数是 FFFFFF CO, 根据小端方式的特点,高字节存储在低地址,就是 CO FF FF FF, 故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 439, "year": 2018, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第16题-题目\n\n\n\n

整数 x 的机器数为 11011000,分别对 x 进行逻辑右移 1 位和算术右移 1 位操作,得到的机器数各是( )。

\n
A.1110 1100、1110 1100
\n
B.0110 1100、1110 1100
\n
C.1110 1100、0110 1100
\n
D.0110 1100、0110 1100
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第16题-解析\n\n\n\n

逻辑移位:左移和右移空位都补 0, 并且所有数字参与移动。算术移位:符号位不参与移动,右移空位补符号位,左移空位补 0。根据该规则,轻松选出 B 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 440, "year": 2018, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第17题-题目\n\n\n\n

假定 DRAM 芯片中存储阵列的行数为 r、列数为 c,对于一个 2K×1 位的 DRAM 芯片,为保证其地址引脚数最少,并尽量减少刷新开销,则 r、c 的取值分别是( )。

\n
A.2048、1
\n
B.64、32
\n
C.32、64
\n
D.1、2048
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第17题-解析\n\n\n\n

本题考察 主存容量的扩展,首先根据 DRAM 采用的是行列地址线复用技术,我们尽量选用行列差值不要太大的。对于 B、C 选项,地址线只需 6 根(取行或列所需地址线的最大值),轻松排除 A、D 选项。其次,为了减小刷新开销,而 DRAM 一般是按行刷新的,所以应选行数值较少的,答案为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 441, "year": 2018, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第18题-题目\n\n\n\n

按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double),取完后变址寄存器内容自动加 1。若某次循环所取元素的地址为 2100H,则进入该次循环时变址寄存器的内容是( )。

\n
A.25
\n
B.32
\n
C.64
\n
D.100
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第18题-解析\n\n\n\n

根据 变址寻址 的公式 EA=(IX)+A, 则 (IX)=2100H-2000H=100H=256,sizeof(double)=8(双精度浮点数用 8 位字节表示),因此数组的下标为 256/8=32, 答案选 B。
\n\n\n\n\n", "difficulty": 2}, {"id": 442, "year": 2018, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第19题-题目\n\n\n\n

减法指令 sub R1,R2,R3 的功能为 (R1)-(R2)→R3,该指令执行后将生成进位/借位标志 CF 和溢出标志 OF。若 (R1)=FFFFFFFFH,(R2)=FFFFFFF0H,则该减法指令执行后,CF 与 OF 分别为( )。

\n
A.CF=0,OF=0
\n
B.CF=1,OF=0
\n
C.CF=0,OF=1
\n
D.CF=1,OF=1
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第19题-解析\n\n\n\n

[x]补 = [y]补 = [x]补 + [-y]补,[-R2]补 = 00000010H, 很明显[R1]补 + [-R2]补的最高位进位和符号位进位都是 1(当最高位进位和符号位进位的 值不相同 时才产生溢出),可以判断溢出标志 OF 为 0。同时,减法操作只需判断借位标志,R1 大于 R2, 所以借位标志为 0, 综上选 A
\n\n\n\n\n", "difficulty": 2}, {"id": 443, "year": 2018, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第20题-题目\n\n\n\n

若某计算机最复杂指令的执行需要完成 5 个子功能,分别由功能部件 A~E 实现,各功能部件所需时间分别为 80ps、50ps、50ps、70ps 和 50ps,采用流水线方式执行指令,流水段寄存器延时为 20ps,则 CPU 时钟周期至少为( )。

\n
A.60ps
\n
B.70ps
\n
C.80ps
\n
D.100ps
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第20题-解析\n\n\n\n

指令流水线的每个流水段时间单位为时钟周期,题中指令流水线的指令需要用到 A~E 五个部件,所以每个流水段时间应取:最大部件时间 80ps, 此外还有寄存器延时为 20ps, 则 CPU 时钟周期至少是 100ps。答案选 D。
\n\n\n\n\n", "difficulty": 2}, {"id": 444, "year": 2018, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第21题-题目\n\n\n\n

下列选项中,可提高同步总线数据传输率的是( )。

\n

Ⅰ. 增加总线宽度

\n

Ⅱ. 提高总线工作频率

\n

Ⅲ. 支持突发传输

\n

Ⅳ. 采用地址/数据线复用

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅱ、Ⅲ
\n
C.仅Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ和Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第21题-解析\n\n\n\n

总线数据传输率 = 总线工作频率 x 总线带宽(=总线宽度 / 8), 所以 Ⅰ 和 Ⅱ 会影响总线数据传输率。采用突发总线传输事务(也称猝发传输),在一个总线周期内传输存储地址连续的多个数据字,从而提高了传输效率。采用地址 I 数据线复用只是减少了线的数量,节省了成本,并不能提高传输率。
\n\n\n\n\n", "difficulty": 1}, {"id": 445, "year": 2018, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第22题-题目\n\n\n\n

下列关于外部 I/O 中断的叙述中,正确的是( )。

\n
A.中断控制器按所接收中断请求的先后次序进行中断优先级排队
\n
B.CPU 响应中断时,通过执行中断隐指令完成通用寄存器的保护
\n
C.CPU 只有在处于中断允许状态时,才能响应外部设备的中断请求
\n
D.有中断请求时,CPU 立即暂停当前指令执行,转去执行中断服务程序
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第22题-解析\n\n\n\n

本题考察 突发总线传输事务,中断优先级由屏蔽字决定,而不是根据请求的先后次序,因此 A 错误。中断隐指令完成的工作有:① 关中断;② 保存断点;③ 引出中断服务程序,通用寄存器的保护由中断服务程序完成,B 错误。中断允许状态即开中断后,才能响应中断请求,C 正确。有中断请求时,先要由中断隐指令完成中断前程序的状态保存,D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 446, "year": 2018, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第23题-题目\n\n\n\n

下列关于多任务操作系统的叙述中,正确的是(  )。

\n

Ⅰ.具有并发和并行的特点

\n

Ⅱ.需要实现对共享资源的保护

\n

Ⅲ.需要运行在多 CPU 的硬件平台上

\n
A.仅Ⅰ
\n
B.仅Ⅱ
\n
C.仅Ⅰ、Ⅱ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第23题-解析\n\n\n\n

多任务操作系统可以在同一时间内运行多个应用程序,故 Ⅰ 正确。多个任务必须互斥地访问共享资源,为达到这一目标必须对共享资源进行必要的保护,故 Ⅱ 正确。现代操作系统都是多任务的(主要特点是并发和并行),并不一定需要运行在多 CPU 的硬件上,单个 CPU 也可以满足要求,Ⅲ 错误。综上所述,Ⅰ、Ⅱ 正确,Ⅲ 错误,故选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 447, "year": 2018, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第24题-题目\n\n\n\n

某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为 1us。在 T 时刻就绪队列中有 3 个进程 P1、P2 和 P3,其在就绪队列中的等待时间、需要的 CPU 时间和优先权如下表所示。若优先权值大的进程优先获得 CPU,从 T 时刻起系统开始进程调度,则系统的平均周转时间为()。

\n
进程等待时间需要的 CPU 时间优先级
P130us12us10
P215us24us30
P318us36us20
\n
A.54us
\n
B.73us
\n
C.74us
\n
D.75us
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第24题-解析\n\n\n\n

本题考察 非抢占式优先级调度,由优先权可知,进程的执行顺序为 P2 → P3 → P1。

P2 的周转时间:1 +15+24= 40μs

P3 的周转时间:18+1+24+1 +36= 80μs

P1 的周转时间:30+1+24 +1 +36+1 +12=105μs

平均周转时间: (40+80+105) /3= 225/3= 75μs, 故选 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 448, "year": 2018, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2018-第25题-题目\r\n\r\n\r\n\r\n

属于同一进程的两个线程 thread1 和 thread2 并发执行,共享初值为 0 的全局变量 x。thread1 和 thread2 实现对全局变量 x 加 1 的机器级代码描述如下:

\r\n
thread1
\r\nmov R1, x   // (x) → R1\r\ninc R1      // (R1) + 1 → R1\r\nmov x, R1   // (R1) → x\r\n
thread2
\r\nmov R2, x   // (x) → R2\r\ninc R2      // (R2) + 1 → R2\r\nmov x, R2   // (R2) → x\r\n
\r\n

在所有可能的指令执行序列中,使 x 的值为 2 的序列个数是()。

\r\n
A.1
\r\n
B.2
\r\n
C.3
\r\n
D.4
\r\n\r\n\r\n\r\n\r\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第25题-解析\n\n\n\n

仔细阅读两个线程代码可知,threadl 和 thread2 均是对 x 进行加 1 操作,x 初始值为 0,若要使得最终 x = 2,只有先执行 thread1 再执行 thread2,或先执行 thread2 再执行 threadl,故只有 2 种可能,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 449, "year": 2018, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第26题-题目\n\n\n\n

假设系统中有 4 个同类资源,进程 P1、P2 和 P3 需要的资源数分别为 4、3 和 1,P1、P2 和 P3 已申请到的资源数分别为 2、1 和 0,则执行安全性检测算法的结果是()。

\n
A.不存在安全序列,系统处于不安全状态
\n
B.存在多个安全序列,系统处于安全状态
\n
C.存在唯一安全序列 P3、P1、P2,系统处于安全状态
\n
D.存在唯一安全序列 P3、P2、P1,系统处于安全状态
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第26题-解析\n\n\n\n

本题考察安全性检查,由题中数据可知,仅剩最后一个同类资源,若将其分给 P1 或 P2,则均无法正常执行;若分给 P3,则 P3 正常执行完成后,释放的这个资源仍无法使 P1、P2 正常执行,故不存在安全序列,选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 450, "year": 2018, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第27题-题目\n\n\n\n

下列选项中,可能导致当前进程 P 阻塞的事件是(  )。

\n

Ⅰ.进程 P 申请临界资源

\n

Ⅱ.进程 P 从磁盘读数据

\n

Ⅲ.系统将 CPU 分配给高优先级的进程

\n
A.仅Ⅰ
\n
B.仅Ⅱ
\n
C.仅Ⅰ、Ⅱ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第27题-解析\n\n\n\n

本题考察 进程的状态转化,进程等待某资源为可用(不包括处理机)或等待输入/输出完成均会进入阻塞状态,故 I、II 正确;III 中情况发生时,进程进入就绪状态,故 III 错误,答案选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 451, "year": 2018, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第28题-题目\n\n\n\n

若 x 是管程内的条件变量,则当进程执行 x.wait() 时所做的工作是()。

\n
A.实现对变量 x 的互斥访问
\n
B.唤醒一个在 x 上阻塞的进程
\n
C.根据 x 的值判断该进程是否进入阻塞态
\n
D.阻塞该进程,并将之插入 x 的阻塞队列中
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第28题-解析\n\n\n\n

条件变量 是 管程 内部说明和使用的一种特殊变量,其作用类似于信号量机制中的信号量,都是用于实现进程同步的。需要注意的是,在同一时刻,管程中只能有一个进程在执行。如果进程 A 执行了 x.wait() 操作,那么该进程会阻塞,并挂到条件变量 x 对应的阻塞队列上。这样,管程的使用权被释放,就可以有另一个进程进入管程。如果进程 B 执行了 x.signal() 操作,那么会唤醒 x 对应的阻塞队列队头进程。在 Pascal 语言的管程中,规定只有一个进程要离开管程时才能调用 signal() 操作。
\n\n\n\n\n", "difficulty": 2}, {"id": 452, "year": 2018, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第29题-题目\n\n\n\n

定时器产生时钟中断后,由时钟中断服务程序更新的部分内容是(  )。

\n

Ⅰ.内核中时钟变量的值

\n

Ⅱ.当前进程占用 CPU 的时间

\n

Ⅲ.当前进程在时间片内的剩余执行时间

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅲ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第29题-解析\n\n\n\n

时钟中断的主要工作是处理和时间有关的信息以及决定是否执行调度程序,和时间有关的所有信息,包括系统时间、进程的时间片、延时、使用 CPU 的时间、各种定时器,故 Ⅰ、Ⅱ、Ⅲ 均正确,选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 453, "year": 2018, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第30题-题目\n\n\n\n

系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁臂黏着。下列磁盘调度算法中,不会导致磁臂粘着的是( )。

\n
A.先来先服务 (FCFS)
\n
B.最短寻道时间优先 (SSTF)
\n
C.扫描算法 (SCAN)
\n
D.循环扫描算法 (CSCAN)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第30题-解析\n\n\n\n

参考 机械硬盘调度算法,当系统总是持续出现某个磁道的访问请求时,均持续满足最短寻道时间优先、扫描算法和循环扫描算法的访问条件,会一直服务该访问请求。因此,先来先服务按照请求次序进行调度,比较公平,故选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 454, "year": 2018, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第31题-题目\n\n\n\n

下列优化方法中,可以提高文件访问速度的是( )。

\n

Ⅰ. 提前读

\n

Ⅱ. 为文件分配连续的簇

\n

Ⅲ. 延迟写

\n

Ⅳ. 采用磁盘高速缓存

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第31题-解析\n\n\n\n

II 和 IV 显然均能提高文件访问速度。对于 I,提前读是指在读当前盘块时,将下一个可能要访问的盘块数据读入缓冲区,以便需要时直接从缓冲区中读取,提高了文件的访问速度。对于 III,延迟写是先将写数据写入缓冲区,并置上“延迟写”标志,以备不久之后访问,当缓冲区需要再次被分配出去时才将缓冲区数据写入磁盘,减少了访问磁盘的次数,提高了文件的访问速度,III 也正确,答案选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 455, "year": 2018, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2018-第32题-题目\n\n\n\n

在下列同步机制中,可以实现让权等待的是( )。

\n
A.Peterson 方法
\n
B.swap 指令
\n
C.信号量方法
\n
D.TestAndSet 指令
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第32题-解析\n\n\n\n

硬件方法实现进程同步需要通过 自旋锁,不能实现让权等待,故 B、D 错误;Peterson 算法满足有限等待但不满足让权等待,故 A 错误;记录型信号量由千引入阻塞机制,消除了不让权等待的情况,故 C 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 456, "year": 2018, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第33题-题目\n\n\n\n

下列 TCP/IP 应用层协议中,可以使用传输层无连接服务的是( )。

\n
A.FTP
\n
B.DNS
\n
C.SMTP
\n
D.HTTP
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第33题-解析\n\n\n\n

FTP 用来传输文件,SMTP 用来发送电子邮件,HTTP 用来传输网页文件,都对可靠性的要求较高,因此都用传输层有连接的 TCP 服务。无连接 UDP 服务效率更高、开销小,DNS 在传输层采用无连接的 UDP 服务。
\n\n\n\n\n", "difficulty": 1}, {"id": 457, "year": 2018, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第34题-题目\n\n\n\n

下列选项中,不属于物理层接口规范定义范畴的是()。 

\n
A.接口形状
\n
B.引脚功能
\n
C.物理地址
\n
D.信号电平
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第34题-解析\n\n\n\n

物理层的接口规范主要分为 4 种:机械特性、电气特性、功能特性、规程特性。机械特性规定连接所用设备的规格,即 A 所说的接口形状。电气特性规定信号的电压高低、阻抗匹配等,如 D 所说的信号电平。功能特性规定线路上出现的电平代表什么意义、接口部件的信号线(数据线、控制线、定时线等)的用途,如 B 所说的引脚功能。选项 C 中的物理地址就是 MAC 地址,它属于数据链路层的范畴。
\n\n\n\n\n", "difficulty": 1}, {"id": 458, "year": 2018, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第35题-题目\n\n\n\n

IEEE 802.11 无线局域网的 MAC 协议 CSMA/CA 进行信道预约的方法是( )。

\n
A.发送确认帧
\n
B.采用二进制指数退避
\n
C.使用多个 MAC 地址
\n
D.交换 RTS 与 CTS 帧
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第35题-解析\n\n\n\n

参考 CSMA/CA 流程,CSMA/CA 协议进行信道预约主要使用的是请求发送帧 RTS(Request to Send)和允许发送帧 CTS(Clear to Send)。当一台主机想要发送信息时,先向无线站点发送一个 RTS 帧,说明要传输的 数据及相应的时间。当无线站点收到 RTS 帧之后,会广播一个 CTS 帧作为对此的响应,既给发送端发送许可,又指示其他主机不要在这个时间内发送数据,从而预约信道,避免碰撞。发送确认帧,主要是保证信息的可靠传输;二进制指数退避法是在 CSMA/CD 中的一种冲突处理 方法;C 选项则与预约信道无关。
\n\n\n\n\n", "difficulty": 2}, {"id": 459, "year": 2018, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第36题-题目\n\n\n\n

主机甲采用停 - 等协议向主机乙发送数据,数据传输速率是 3 kbps,单向传播延时是 200 ms,忽略确认帧的传输延时。当信道利用率等于 40% 时,数据帧的长度为( )。

\n
A.240 比特
\n
B.400 比特
\n
C.480 比特
\n
D.800 比特
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第36题-解析\n\n\n\n

信道利用率 = 传输帧的有效时间/传输帧的周期。假设帧的长度为 x 比特。对于有效时间,应该用帧的大小除以数据传输速率,即 x/3kbps。对于帧的传输周期,应包含 4 个部分:帧在发送端的发送时延、帧从发送端到接收端的单程传播时延、确认帧在接收端的发送时延、确认帧从接收端到发送端的单程传播时延。这 4 个时延中,由于题目中说“忽略确认帧的传输延时”,因此不计算确认帧的发送时延(注意传输时延和传播时延的区别,传输时延也称发送时延,和传播时延只有一字之差)。所以帧的传输周期由三部分组成:首先是帧在发送端的发送时延 x/3kbps,其次是帧从发送端到接收端的单程传播时延 200ms,最后是确认帧从接收端到发送端的单程传播时延 200ms,三者相加可得其周期应为 x/3kbps + 400ms。代入信道利用率的公式,求出 x = 800bit。答案选 D。
\n\n\n\n\n", "difficulty": 2}, {"id": 460, "year": 2018, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第37题-题目\n\n\n\n

路由器 R 通过以太网交换机 S1 和 S2 连接两个网络,R 的接口、主机 H1 和 H2 的 IP 地址与 MAC 地址如下图所示。若 H1 向 H2 发送一个 IP 分组 P,则 H1 发出的封装 P 的以太网帧的目的 MAC 地址、H2 收到的封装 P 的以太网帧的源 MAC 地址分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
S1
S2
192.168.3.2
00-1a-2b-3c-4d-52
192.168.4.2
00-a1-b2-c3-d4-62
H1
H2
192.168.3.1
00-1a-2b-3c-4d-51
00-1a-2b-3c-4d-61
192.168.4.1
\n
A.00-a1-b2-c3-d4-62、00-1a-2b-3c-4d-52
\n
B.00-a1-b2-c3-d4-62、00-1a-2b-3c-4d-61
\n
C.00-1a-2b-3c-4d-51、00-1a-2b-3c-4d-52
\n
D.00-1a-2b-3c-4d-51、00-a1-b2-c3-d4-61
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第37题-解析\n\n\n\n

在网络的信息传递中,会经常用到两个地址:MAC 地址和 IP 地址。其中,MAC 地址会随着信息被发往不同的网络而改变,但 IP 地址当且仅当信息在私人网络中传递时才会改变。分组 P 在如题图所示的网络中传递时,首先由主机 H1 将分组发往路由器 R,此时源 MAC 地址为 1 主机本身的 MAC 地址,即 00-1a-2b-3c-4d-52,目的 MAC 地址 为路由器 R 的 MAC 地址,即 00-1a-2b-3c-4d-51。当路由器 R 收到分组 P 后,根据分组 P 的目的 IP 地址,得知应将分组从另一个端口转发出去,于是会给分组 P 更换新的 MAC 地址,此时由于从另外的端口转发出去,因此 P 的新源 MAC 地址变为负责转发的端口 MAC 地址,即 00-a1-b2-c3-d4-61, 目的 MAC 地址应为主机 H2 的 MAC 地址,即 00-a1-b2-c3-d4-62。根据分析过程,题目所问的 MAC 地址应为路由器 R 两个端口的 MAC 地址,故选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 461, "year": 2018, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第38题-题目\n\n\n\n

某路由表中有转发接口相同的 4 条路由表项,其目的网络地址分别是 35.230.32.0/21、35.230.40.0/21、35.230.48.0/21 和 35.230.56.0/21,将该 4 条路由聚合后的目的网络地址为( )。

\n
A.35.230.0.0/19
\n
B.35.230.0.0/20
\n
C.35.230.32.0/19
\n
D.35.230.32.0/20
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第38题-解析\n\n\n\n

对于此类题目,先分析需要聚合的 IP 地址。观察发现,题中的 4 个路由地址,前 16 位完全相同,不同之处在于第 3 段的 8 位中,将这 8 位展开写成二进制,分别如下:

\n\n
7
6
5
4
3
2
1
0
32
0
0
1
0
0
0
0
0
40
0
0
1
0
1
0
0
0
48
0
0
1
1
0
0
0
0
56
0
0
1
1
1
0
0
0

观察发现,4 个地址的第 3 段中,从前向后最多有 3 位相同,因此这 3 位是能聚合的最大位数。将这些相同的位都保留,将第 3 段第 3 位之后的所有位都置 0,就得到了聚合后的 IP 地址 35.230.32.0,其网络前缀为 16+3,也即前 19 位,故聚合后的网络地址为 35.230.32.0/19,答案为 C。

\n\n\n\n\n", "difficulty": 3}, {"id": 462, "year": 2018, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第39题-题目\n\n\n\n

UDP 协议实现分用 (demultiplexing) 时所依据的头部字段是( )。

\n
A.源端口号
\n
B.目的端口号
\n
C.长度
\n
D.校验和
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第39题-解析\n\n\n\n

传输层分用的定义是:接收方的传输层剥去报文首部后,能把这些数据正确交付到目的进程。C 和 D 选项显然不符。端口号是传输层服务访问点 TSAP, 用来标识主机中的应用进程。对于 A 和 B 选项,源端口号是在需要对方回信时选用,不需要时可用全 0。目的端口号是在终点交付报文时使用到,符合题意,故选 B。
\n\n\n\n\n", "difficulty": 2}, {"id": 463, "year": 2018, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2018-第40题-题目\n\n\n\n

无需转换即可由 SMTP 协议直接传输的内容是( )。

\n
A.JPEG 图形
\n
B.MPEG 视频
\n
C.EXE 文件
\n
D.ASCII 文本
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第40题-解析\n\n\n\n

电子邮件 出现得较早,当时的数据传输能力较弱,使用者们往往也不需要传输较大的图片、视频等,因此 SMTP 具有一些目前来看较为老旧的性质,例如限制所有邮件报文的体部分,只能采用 7 位 ASCII 来表示。在如今的传输过程中,如果传输了非文本文件,往往需要将这些多媒体文件重新编码为 ASCII 再传输。因此无须转换即可传输的是 ASCII 文本,答案为 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 464, "year": 2018, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2018-第41题-题目\n\n\n\n

给定一个含 n(n≥1) 个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是 1;数组{1, 2, 3}中未出现的最小正整数是 4。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第41题-解析\n\n\n\n

1)题目要求算法时间上尽可能高效,因此采用空间换时间的办法。分配一个用于标记的数组\nB[n]\n,用来记录\nA\n中是否出现了\n1∼n\n中的正整数,\nB[0]\n对应正整数\n1\n,\nB[n−1]\n对应正整数\nn\n,初始化\nB\n中全部为\n0\n。由于\nA\n中含有\nn\n个整数,因此可能返回的值是\n1∼n+1\n,当\nA\n中\nn\n个数恰好为\n1∼n\n时返回\nn+1\n。当数组\nA\n中出现了小于等于\n0\n或大于\nn\n的值时,会导致\n1∼n\n中出现空余位置,返回结果必然在\n1∼n\n中,因此对于\nA\n中出现了小于等于\n0\n或大于\nn\n的值可以不采取任何操作。

经过以上分析可以得出算法流程:从\nA[0]\n开始遍历\nA\n,若\n0<A[i]≤n\n,则令\nB[A[i]−1]=1\n;否则不进行操作。对\nA\n遍历结束后,开始遍历数组\nB\n,若能查找到第一个满足\nB[i]=0\n的下标\ni\n,返回\ni+1\n即为结果,此时说明\nA\n中未出现的最小正整数在\n1∼n\n之间。若\nB[i]\n全部不为\n0\n,返回\ni+1\n(跳出循环时\ni=n\n,\ni+1\n等于\nn+1\n),此时说明\nA\n中未出现的最小正整数是\nn+1\n。

2)算法实现

int findMissMin(int a[], int n) {\n  // 来记录 1 ~ n 是否出现过\n  int vis[n];\n  for (int i = 0; i < n; i++) {\n    vis[i] = 0;\n  }\n  // 在 vis 数组中记录哪些正整数出现过\n  for (int i = 0; i < n; i++) {\n    int num = a[i];\n    if (num > 0) {\n      vis[num-1] = 1;\n    }\n  }\n  // 遍历 vis 来找到最小消失的正整数\n  for (int i = 0; i < n; i++) {\n    if (vis[i] == 0) {\n      return i+1;\n    }\n  }\n  return n+1;\n}\n

3)时间复杂度:遍历\nA\n一次,遍历\nB\n一次,两次循环内操作步骤为\nO(1)\n量级,因此时间\n复杂度为\nO(n)\n。空间复杂度:额外分配了\nB[n]\n, 空间复杂度为\nO(n)\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 465, "year": 2018, "index": 42, "type": 2, "typeName": "应用题", "score": 12, "subject": "computer-network", "question": "\n\n\n\n\n\n2018-第42题-题目\n\n\n\n

拟建设一个光通信骨干网络连通 BJ、CS、XA、QD、JN、NJ、TL 和 WH 等 8 个城市,题 42 图中无向边上的权值表示两个城市间备选光缆的铺设费用。

\n
\n\n\n\n \n 408真题系统\n \n\n
XA
BJ
TL
WH
CS
JN
NJ
QD
2
3
2
2
4
3
3
2
3
4
3
2
\n

请回答下列问题。

\n

(1) 仅从铺设费用角度出发,给出所有可能的最经济的光缆铺设方案(用带权图表示),并计算相应方案的总费用。

\n

(2) 题 42 图可采用图的哪一种存储结构?给出求解问题 (1) 所使用的算法名称。

\n

(3) 假设每个城市采用一个路由器按 (1) 中得到的最经济方案组网,主机 H1 直接连接在 TL 的路由器上,主机 H2 直接连接在 BJ 的路由器上。若 H1 向 H2 发送一个 TTL=5 的 IP 分组,则 H2 是否可以收到该 IP 分组?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第42题-解析\n\n\n\n

1)为了求解最经济的方案,可以把问题抽象为求无向带权图的最小生成树。可以采用手动 Prim 算法或 Kruskal 算法作图。注意本题最小生成树有两种构造,如下图所示。

\n\n
XA
BJ
WH
CS
QD
TL
JN
NJ
2
2
2
2
2
3
3
XA
BJ
WH
CS
QD
TL
JN
NJ
2
2
2
2
2
3
3
方案 1
方案 2

方案的总费用为 16。

2)存储题中的图可以采用邻接矩阵(或邻接表)。构造最小生成树采用 Prim 算法(或 Kruskal\n算法)。

3)TTL= 5,即 IP 分组的生存时间(最大传递距离)为 5,方案 1 中 TL 和 BJ 的距离过远,TTL = 5 不足以让 IP 分组从 H1 传送到 H2,因此 H2 不能收到 IP 分组。而方案 2 中 TL 和 BJ 邻近,H2 可以收到 IP 分组。

\n\n\n\n\n", "difficulty": 1}, {"id": 466, "year": 2018, "index": 43, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第43题-题目\n\n\n\n

假定计算机的主频为 500MHz,CPI 为 4。现有设备 A 和 B,其数据传输率分别为 2MBps 和 40MBps,对应 I/O 接口中各有一个 32 位数据缓冲寄存器。请回答下列问题,要求给出计算过程。

\n

(1) 若设备 A 采用定时查询 I/O 方式,每次输入/输出都至少执行 10 条指令。设备 A 最多间隔多长时间查询一次才能不丢失数据?CPU 用于设备 A 输入/输出的时间占 CPU 总时间的百分比至少是多少?

\n

(2) 在中断 I/O 方式下,若每次中断响应和中断处理的总时钟周期数至少为 400,则设备 B 能否采用中断 I/O 方式?为什么?

\n

(3) 若设备 B 采用 DMA 方式,每次 DMA 传送的数据块大小 1000B,CPU 用于 DMA 预处理和后处理的总时钟周期数为 500,则 CPU 用于设备 B 输入/输出的时间占 CPU 总时间的百分比最大是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第43题-解析\n\n\n\n

1)程序定时向缓存端口查询数据,由于缓存端口大小有限,必须在传输完端口大小的数据时访问端口,以防止部分数据未被及时读取而丢失。设备 A 准备 32 位数据所用的时间为 4B/2MB=2μs,所以最多每隔 2μs 必须查询一次,每秒的查询次数至少是 1s / 2μs =\n5×105\n,每秒 CPU 用于设备 A 输入/输出的时间至少为\n5×105×10×4=2×107\n个时钟周期,占整个 CPU 时间的百分比至少是\n2×10/500M=4%\n。

2)中断响应和中断处理的时间为 400×(1/500M)=0.8μs,这时只需判断设备 B 准备 32 位数据要多久,如果准备数据的时间小于中断响应和中断处理的时间,那么数据就会被刷新,造成丢失。经过计算,设备 B 准备 32 位数据所用的时间为 4B/40MB=0.1us,因此设备 B 不适合采用中断 I/O 方式。

3)在 DMA 方式中,只有预处理和后处理需要 CPU 处理,数据的传送过程是由 DMA 控制的。设备 B 每秒的 DMA 次数最多为 40MB/1000B=40000,CPU 用于设备 B 输入/输出的时间最多为\n40000×500=2×107\n个时钟周期,占 CPU 总时间的百分比最多为\n2×107/500M=4%\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 467, "year": 2018, "index": 44, "type": 2, "typeName": "应用题", "score": 15, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第44题-题目\n\n\n\n

某计算机采用页式虚拟存储管理方式,按字节编址。CPU 进行存储访问的过程如题 44 图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
00324H
1
F800H
0008CH
1
0040H
8C040H
1
0160H
04320H
0
0E80H
Tag
有效位
实页号
F8000H
1
008C0H
1
00400H
0
Tag
有效位
Data
0
1
2
Data
F2840H
23008H
01600H
Tag
1
0
1
有效位
页内地址(12 位)
虚页号(20 位)
CPU
=
=
=
=
10 位
10 位
页目录
页表
PDBR
实页号
页内地址
TLB 缺失
20 位
3 位
5 位
=
=
比较器
多路选择
数据
Cache
TLB
比较器
比较器
\n

根据题 44 图回答下列问题。

\n

(1) 主存物理地址占多少位?

\n

(2) TLB 采用什么映射方式?TLB 用 SRAM 还是 DRAM 实现?

\n

(3) Cache 采用什么映射方式?若 Cache 采用 LRU 替换算法和回写(Write Back)策略,则 Cache 每行中除数据(Data)、Tag 和有效位外,还应有哪些附加位?Cache 总容量是多少?Cache 中有效位的作用是什么?

\n

(4) 若 CPU 给出的虚拟地址为 0008C040H,则对应的物理地址是多少?是否在 Cache 中命中?说明理由。若 CPU 给出的虚拟地址为 0007C260H,则该地址所在主存块映射到的 Cache 组号是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第44题-解析\n\n\n\n

1)物理地址 由实页号和页内地址拼接,因此其位数为 16+12=28 或直接可得 20+3+5=28。

2)TLB 采用全相联映射,可以把页表内容调入任一块空 TLB 项中,TLB 中每项都有一个比较器,没有映射规则,只要空闲就行。TLB 采用静态存储器 SRAM,读写速度快,但成本高,多用于容量较小的高速缓冲存储器。

3)从图中可以看到,Cache 中每组有两行,故采用 2 路组相联映射。因为是 2 路组相联并采用 LRU 替换算法,所以每行(或每组)需要 1 位 LRU 位;因为采用回写策略,所以每行有 1 位修改位(脏位),根据脏位判断数据是否被更新,若脏位为 1 则需要写回内存。

28 位物理地址中 Tag 字段占 20 位,组索引字段占 3 位,块内偏移地址占 5 位,故 Cache\n共有\n23=8\n组,每组 2 行,每行有\n25=32\nB,故 Cache 总容量为\n8×2×(20+1+1+1+32×8)=4464\n位= 558 字节。

Cache 中有效位用来指出所在 Cache 行中的信息是否有效。

4)虚拟地址分为两部分:虚页号、页内地址;物理地址分为两部分:实页号、页内地址。利用虚拟地址的虚页号部分去查找 TLB 表(缺失时从页表调入),将实页号取出后和虚拟地址的页内地址拼接,就形成了物理地址。虚页号 008CH 恰好在 TLB 表中对应实页号 0040H(有效位为 1,说明存在),虚拟地址的后 3 位为页内地址 040H,则对应的物理地址是 0040040H。

物理地址为 0040040H,其中高 20 位 00400H 为标志字段,低 5 位 00000B 为块内偏移量,中间 3 位 010B 为组号 2,因此将 00400H 与 Cache 中的第 2 组两行中的标志字段同时比较,可以看出,虽然有一个 Cache 行中的标志字段与 00400H 相等,但对应的有效位为 0,而另一 Cache 行的标志字段与 00400H 不相等,故访问 Cache 不命中。

因为物理地址的低 12 位与虚拟地址低 12 位相同,即为 001001100000B。根据物理地址的结构,物理地址的后八位 01100000B 的前三位 011B 是组号,因此该地址所在的主存映射到 Cache 的组号为 3。

\n\n\n\n\n", "difficulty": 1}, {"id": 468, "year": 2018, "index": 45, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第45题-题目\n\n\n\n

请根据题 44 图给出的虚拟存储管理方式,回答下列问题。

\n

(1) 某虚拟地址对应的页目录号为 6,在相应的页表中对应的页号为 6,页内偏移量为 8,该虚拟地址的十六进制表示是什么?

\n

(2) 寄存器 PDBR 用于保存当前进程的页目录起始地址,该地址是物理地址还是虚拟地址?进程切换时,PDBR 的内容是否会变化?说明理由。同一进程的线程切换时,PDBR 的内容是否会变化?说明理由。

\n

(3) 为了支持改进型 CLOCK 置换算法,需要在页表项中设置哪些字段?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第45题-解析\n\n\n\n

1)由图可知,地址总长度为 32 位,高 20 位为虚页号,低 12 位为页内地址,且虚页号高 10 位为页目录号,低 10 位为页号。十六进制表示为 01806008H。

2)PDBR 为页目录基址地址寄存器(Page-Directory Base Register),其存储页目录表物理内存基地址。进程切换时,PDBR 的内容会变化;同一进程的线程切换时,PDBR 的内容不会变化。每个进程的地址空间、页目录和 PDBR 的内容存在一一对应的关系。进程切换时,地址空间发生了变化,对应的页目录及其起始地址也相应变化,因此需要用进程切换后当前进程的页目录起始地址刷新 PDBR。同一进程中的线程共享该进程的地址空间,其线程发生切换时,地址空间不变,线程使用的页目录不变,因此 PDBR 的内容也不变。

3)改进型 Clock 置换算法需要用到使用位和修改位,故需要设置访问字段(使用位)和修改字段(脏位)。

\n\n\n\n\n", "difficulty": 0}, {"id": 469, "year": 2018, "index": 46, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第46题-题目\n\n\n\n

某文件系统采用索引节点存放文件的属性和地址信息,簇大小为 4KB。每个文件索引节点占 64B,有 11 个地址项,其中直接地址项 8 个,一级、二级和三级间接地址项各 1 个,每个地址项长度为 4B。请回答下列问题。

\n

(1) 该文件系统能支持的最大文件长度是多少?(给出计算表达式即可)

\n

(2) 文件系统用 1M(1M= \n220\n )个簇存放文件索引节点,用 512M 个簇存放文件数据。若一个图像文件的大小为 5600B,则该文件系统最多能存放多少个这样的图像文件?

\n

(3) 若文件 F1 的大小为 6KB,文件 F2 的大小为 40KB,则该文件系统获取 F1 和 F2 最后一个簇的簇号需要的时间是否相同?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第46题-解析\n\n\n\n

1)簇大小为 4KB,每个地址项长度为 4B,故每簇有 4KB/4B = 1024 个地址项。最大文件的物理块数可达\n8+1×1024+1×10242+1×10243\n,每个物理块(簇)大小为 4KB,故最大文件长度为\n(8+1×1024+1×10242+1×10243)×4KB=32KB+4MB+4GB+4TB\n。

2)文件索引节点总个数为 1M×4KB/64B=64M,5600B 的文件占 2 个簇,512M 个簇可存放的文件总个数为 512M/2=256M。可表示的文件总个数受限于文件索引节点总个数,故能存储 64M 个大小为 5600B 的图像文件。

3)文件 F1 的大小为\n6KB<4KB×8=32KB\n,故获取文件 F1 的最后一个簇的簇号只需要访问索引节点的直接地址项。文件 F2 的大小为 40KB,\n4KB×8<40KB<4KB×8+4KB×1024\n,故获取 F2 的最后一个簇的簇号还需要读一级索引表。综上,需要的时间不相同。

\n\n\n\n\n", "difficulty": 1}, {"id": 470, "year": 2018, "index": 47, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2018-第47题-题目\n\n\n\n

某公司网络如题 47 图所示。IP 地址空间 192.168.1.0/24 被均分给销售部和技术部两个子网,并已分别为部分主机和路由器接口分配了 IP 地址,销售部子网的 MTU=1500 B,技术部子网的 MTU=800 B。

\n
\n\n\n\n \n 408真题系统\n \n\n
技术部
已分配地址
192.168.1.129 ~ 192.168.1.208
销售部
已分配地址
192.168.1.1 ~ 192.168.1.20
路由器
F0
F1
192.168.1.126
192.168.1.254
MTU = 1500B
MTU = 800B
\n

请回答下列问题。

\n

(1) 销售部子网的广播地址是什么?技术部子网的子网地址是什么?若每个主机仅分配一个 IP 地址,则技术部子网还可以连接多少台主机?

\n

(2) 假设主机 192.168.1.1 向主机 192.168.1.208 发送一个总长度为 1500 B 的 IP 分组,IP 分组的头部长度为 20 B,路由器在通过接口 F1 转发该 IP 分组时进行了分配。若分片时尽可能分为最大片,则一个最大 IP 分片封装数据的字节数是多少?至少需要分为几个分片?每个分片的片偏移量是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2018-第47题-解析\n\n\n\n

1)广播地址是网络地址中主机号全 1 的地址(主机号全 0 的地址代表网络本身)。销售部和技术部均分配了 192.168.1.0/24 的 P 地址空间,P 地址的前 24 位为子网的网络号。于是在后 8 位中划分部门的子网,选择前 1 位作为部门子网的网络号。令销售部子网的网络号为 0,技术部子网的网络号为 1,则技术部子网的完整地址为 192.168.1.128;令销售部子网的主机号全 1,可以得到该部门的广播地址为 192.168.1.127。

每个主机仅分配一个 P 地址,计算目前还可以分配的主机数,用技术部可以分配的主机数减去已分配的主机数,技术部总共可以分配给计算机的主机数为 2-2=126(减去全 0 和全 1 的主机号)。已经分配了 208-129+1=80 个,此外还有 1 个 P 地址分配给了路由器的端口(192.168.1.254),因此还可以分配 126-80-1=45 台。

2)判断分片的大小,需要考虑各个网段的 MTU,而且注意分片的数据长度必须是 8B 的整数倍。由题可知,在技术部子网内,MTU=800B,P 分组头部长 20B,最大 IP 分片封装数据的字节数为\n⌊(800−20)/8×8=776⌋\n。至少需要的分片数为\n⌈(1500−20)/776=2⌉\n。第 1 个分片的偏移量为 0;第 2 个分片的偏移量为 776/8=97。

\n\n\n\n\n", "difficulty": 0}, {"id": 471, "year": 2019, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第1题-题目\n\n\n\n

设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是( )。

\n
x = 0;\nwhile (n >= (x + 1) * (x + 1))\n    x = x + 1;\n
\n
A.O(logn)
\n
B.O(n1/2)
\n
C.O(n)
\n
D.O(n2)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第1题-解析\n\n\n\n

假设第 k 次循环终止,则第 k 次执行时,\n(x+1)2>n\n,x 的初始值为 0,第 k 次判断时,x=k-1,即\nk2>n\n,\nk>n1/2\n,,因此该程序段的时间复杂度为\nO(n1/2)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 472, "year": 2019, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第2题-题目\n\n\n\n

若将一棵树 T 转化为对应的二又树 BT,则下列对 BT 的遍历中,其遍历序列与 T 的后根遍历序列相同的是( )。

\n
A.先序遍历
\n
B.中序遍历
\n
C.后序遍历
\n
D.按层遍历
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第2题-解析\n\n\n\n

本第一步,需要知道如何将一棵 树转化为二叉树:对于每一个结点,第一个孩子结点放左子树,其余孩子结点(即第一个孩子结点的兄弟结点)放在第一个孩子结点的右子树,其余的孩子结点再依次放在右子树的右子树,依次类推。

第二步,需要知道选项中的四种遍历方式先序遍历:该结点,左子树,右子树中序遍历:左子树,该结点,右子树后序遍历:左子树,右子树,该节点层次遍历:队列实现前 3 种遍历方式,左子树都是先于右子树,“先”、“中”、“后”指的是访问该结点的次序,对于上图,我们发现,对树的后序遍历与对二叉树的中序遍历相同,选 B。

\n\n\n\n\n", "difficulty": 1}, {"id": 473, "year": 2019, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第3题-题目\n\n\n\n

对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是( )。

\n
A.56
\n
B.57
\n
C.58
\n
D.60
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第3题-解析\n\n\n\n

哈夫曼树 是一颗带权路径长度最短二叉树,有性质:n 个叶子结点的哈夫曼树,共 2n-1 个结点 2n-1 = 115 解得 n = 58,选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 474, "year": 2019, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第4题-题目\n\n\n\n

在任意一棵非空平衡二叉树(AVL 树)T1 中,删除某结点 v 之后形成平衡二叉树 T2 ,再将 v 插入 T2 形成平衡二叉树 T3 。下列关于 T1 与 T3 的叙述中,正确的是( )。

\n

I.若 v 是 T1 的叶结点,则 T1 与 T3 可能不相同

\n

II.若 v 不是 T1 的叶结点,则 T1 与 T3 一定不相同

\n

III.若 v 不是 T1 的叶结点,则 T1 与 T3 一定相同

\n
A.仅 I
\n
B.仅 II
\n
C.仅 I、II
\n
D.仅 I、III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第4题-解析\n\n\n\n

非空平衡二叉树中插入结点,在失去平衡调整前,一定插入在叶结点的位置。

若删除的是 T1 的叶结点,则删除后平衡二叉树不会失去平衡,即不会发生调整,再插入此结点得到的二叉平衡树 T1 与 T3 相同;若删除后平衡二叉树失去平衡而发生调整,再插入结点得到的二叉平衡树 T3 与 T1 可能不同。I 正确。例如,如下图所示,删除结点 0,平衡二叉树失衡调整,再插入结点 0 后,平衡二叉树和以前不同。

对于比较绝对的说法 II 和 III,通常只需举出反例即可。

\n\n
1
0
2
3
2
1
3
2
1
3
0
删除 0
调整
插入 0

若删除的是 T1 的非叶结点,且删除和插入操作均没有导致平衡二叉树的调整 (这时可以首先想到删除的结点只有一个孩子的情况),则该结点从非叶结点变成了叶结点,T1 与 T3 显然不同。例如,如下图所示,删除结点 2,用右孩子结点 3 填补,再插入结点 2,平衡二叉树和以前不同。

\n\n
1
0
2
3
1
0
3
1
0
3
2
删除 2
调整
插入 0

若删除的是 T1 的非叶结点,且删除和插入操作后导致了平衡二叉树的调整,则该结点有可能通过旋转后继续变成非叶结点,T1 与 T3 相同。例如,如下图所示,删除结点 2,用右孩子结点 3 填补,再插入结点 2,平衡二叉树失衡调整,调整后的平衡二叉树和以前相同。

\n\n
2
1
3
3
1
3
1
2
删除 2
调整
插入 2
调整
2
1
3
\n\n\n\n\n", "difficulty": 2}, {"id": 475, "year": 2019, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第5题-题目\n\n\n\n

下图所示的 AOE 网表示一项包含 8 个活动的工程。活动 d 的最早开始时间和最迟开始时间分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
2
3
4
5
6
a=3
b=4
c=8
d=7
f=10
h=9
g=6
e=6
\n
A.3 和 7
\n
B.12 和 12
\n
C.12 和 14
\n
D.15 和 15
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第5题-解析\n\n\n\n

AOE 网 是以边表示活动的有向无环网。活动 d 开始必须满足活动 a 和活动 b 结束,所以最早开始时间是 12。最晚开始时间是指不会延长整个网的结束时间的前提下,d 的开始时间。结点 1 到结点 6 的最长路径(关键路径)是 27,结点 4 的最晚开始时间是 27-6=21,结点 d 的最晚开始时间是 21-7=14。答案选 C。
\n\n\n\n\n", "difficulty": 2}, {"id": 476, "year": 2019, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第6题-题目\n\n\n\n

用有向无环图描述表达式 (x+y)*((x+y)/x),需要的顶点个数至少是( )。

\n
A.5
\n
B.6
\n
C.8
\n
D.9
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第6题-解析\n\n\n\n

先将该表达式转换成有向二叉树,注意到该二叉树中有些顶点时重复的,为了节省存储空间,可以去除重复的顶点(使顶点个数达到最少),将有向二叉树去重转换成有向无环图,结果如图所示:

\n\n
*
+
/
x
y
\n\n\n\n\n", "difficulty": 2}, {"id": 477, "year": 2019, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第7题-题目\n\n\n\n

选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是( )。

\n

Ⅰ.数据的规模     Ⅱ.数据的存储方式  Ⅲ.算法的稳定性    Ⅳ.数据的初始状态

\n
A.仅Ⅲ
\n
B.仅Ⅰ、Ⅱ
\n
C.仅Ⅱ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第7题-解析\n\n\n\n

当数据规模较小时可选择是复杂度为\nO(n2)\n的简单排序算法,当数据规模较大时应选择复杂度为\nO(nlog2​n)\n的排序方法,当数据规模大到内存无法放下时需选择外部排序方法,Ⅰ 正确。数据的存储方式主要分为顺序存储和链式存储,有些排序方法(如堆排序)只能用于顺序存储方式,Ⅱ 正确。若对数据稳定性有要求,则不能选择不稳定的排序方法,Ⅲ 显然正确。当数据初始基本有序时,直接插入排序的效率最高,冒泡排序和直接插入排序的时间复杂度都是\nO(n)\n,而归并排序的时间复杂度依旧是\nO(nlog2​n)\n,Ⅳ 正确。所以选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 478, "year": 2019, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第8题-题目\n\n\n\n

现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突将关键字序列 87,40,30,6,11,22,98,20 依次插入到 HT 后,HT 查找失败的平均查找长度是( )。

\n
A.4
\n
B.5.25
\n
C.6
\n
D.6.29
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第8题-解析\n\n\n\n

构造 散列表 只有当遇到关键字为空的地址时才会查找失败,key%7 之后,初始地址只可能在 0~6,所以即 0~6 到空地址的距离求平均,即为查找失败的平均查找长度初始地址是 0 的失败查找长度为 9,同理得初始地址为 1,2,3,4,5,6 的失败查找长度为 8,7,6,5,4,3,(9+8+7+6+5+4+3)/7 = 6 答案是 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 479, "year": 2019, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第9题-题目\n\n\n\n

设主串 T=“abaabaabcabaabc”,模式串 S=“abaabc”,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是( )。

\n
A.9
\n
B.10
\n
C.12
\n
D.15
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第9题-解析\n\n\n\n

假设位序都是从 0 开始的,按照 next 数组生成算法,对于 S 有

编号012345
Sabaabc
next-100112

根据 KMP 算法,第一趟连续对比 6 次,在模式串的 5 号位和主串的 5 号位匹配失败,模式串的下一个比较位置为 next[5],即下一次比较从模式串的 2 号位和主串 5 号位开始,然后直到模式串 5 号位和主串 8 号位匹配,第二趟比较 4 次,模式串匹配成功。单个字符的比较次数为 10 次,所以选 B。

\n\n\n\n\n", "difficulty": 2}, {"id": 480, "year": 2019, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第10题-题目\n\n\n\n

排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是( )。

\n
A.5,2,16,12,28,60,32,72
\n
B.2,16,5,28,12,60,32,72
\n
C.2,12,16,5,28,32,72,60
\n
D.5,2,12,28,16,32,72,60
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第10题-解析\n\n\n\n

快速排序每趟都将基准元素放在其最终位置,然后以它为基准将序列划分为两个子序列,基准左边都比基准小,右边都比基准大。

排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”,故快速排序第一趟被枢轴分成的 两个子序列 在第二趟中应该 各放一个枢轴 在最终位置(也即如果第一趟的枢轴在中间,第二趟应该至少有 3 个元素在最终位置),如果枢轴的位置正好在首端或尾端,那第一趟就只被分成了 一个序列,那第二趟只能放 一个枢轴 在最终位置(也即如果枢轴在首尾,第二趟应该至少有 2 个元素在最终位置)

所以答案选择 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 481, "year": 2019, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第11题-题目\n\n\n\n

设外存上有 120 个初始归并段,进行 12 路归并时,为实现最佳归并,需要补充的虚段个数是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第11题-解析\n\n\n\n

在 12 路归并树中只存在度为 0 和度为 12 的结点,设度为 0 的结点数、度为 12 的结点数和要补充的结点数分别为\nn0​\n,\nn12​\n,\nn补​\n,则有\nn0​=120+n补​\n,\nn0​=(12−1)n12​+1\n,可得\nn12​=(120−1+n补​)/(12−1)\n。由于结点数\nn12​\n为整数,所以 n 补是使上式整除的最小整数,求得\nn补​=2\n,所以答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 482, "year": 2019, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第12题-题目\n\n\n\n

下列关于冯·诺依曼结构计算机基本思想的叙述中,错误的是( )。

\n
A.程序的功能都通过中央处理器执行指令实现
\n
B.指令和数据都用二进制表示,形式上无差别
\n
C.指令按地址访问,数据都在指令中直接给出
\n
D.程序执行前,指令和数据需预先存放在存储器中
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第12题-解析\n\n\n\n

冯·诺依曼计算机 的功能部件包括输入设备、输出设备、存储器、运算器和控制器,程序的功能都通过中央处理器(运算器和控制器)执行指令,A 正确。指令和数据以同等地位存于存储器内,形式上无差别,只在程序执行时具有不同的含义,B 正确。指令在地址访问,数据由指令的地址码指出,除立即寻址,数据均存放在存储器内,C 错误。在程序执行前,指令和数据需预先存放在存储器中,中央处理器可以从存储器存取代码,D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 483, "year": 2019, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2019-第13题-题目\r\n\r\n\r\n\r\n

考虑以下 C 语言代码:

\r\n
unsigned short usi = 65535;\r\nshort si = usi;\r\n
\r\n

执行上述程序段后,si 的值是( )。

\r\n
A.-1
\r\n
B.-32767
\r\n
C.-32768
\r\n
D.-65535
\r\n\r\n\r\n\r\n\r\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第13题-解析\n\n\n\n

unsigned short 类型为 无符号 短整型,长度为 2 字节,因此 unsigned short usi 转换为二进制代码即 1111 1111 1111 1111。short 类型为短整型,长度为 2 字节,在采用 补码 的机器上 short si 的二进制代码为 1111 1111 1111 1111,因此 si 的值为 -1,所以选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 484, "year": 2019, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第14题-题目\n\n\n\n

下列关于缺页处理的叙述中,错误的是( )。

\n
A.缺页是在地址转换时 CPU 检测到的一种异常
\n
B.缺页处理由操作系统提供的缺页处理程序来完成
\n
C.缺页处理程序根据页故障地址从外存读入所缺失的页
\n
D.缺页处理完成后回到发生缺页的指令的下一条指令执行
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第14题-解析\n\n\n\n

在请求分页系统中,每当要访问的页面不在内存中时,CPU 检测到异常,便会产生 缺页中断,请求操作系统将所缺的页调入内存。缺页处理由缺页中断处理程序完成,根据发生缺页故障的地址从外存读入所缺失的页,鋏页处理完成后回到发生缺页的指令继续执行。选项 D 中描述回到发生缺页的指令的下一条指令执行,明显错误,所以选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 485, "year": 2019, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第15题-题目\n\n\n\n

某计算机采用大端方式,按字节编址。某指令中操作数的机器数为 1234FF00H,该操作数采用基址寻址方式,形式地址(用补码表示)为 FF12H,基址寄存器内容为 F0000000H,则该操作数的 LSB(最低有效字节)所在的地址是( )。

\n
A.F000FF12H
\n
B.F000FF15H
\n
C.EFFFFF12H
\n
D.EFFFFF15H
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第15题-解析\n\n\n\n

注意,内存地址是无符号数。操作数采用基址寻址方式,EA=(BR)+A,基址寄存器 BR 的内容为 F000 0000H,形式地址用补码表示为 FF12H,即 1111 1111 0001 0010B,因此有效地址为 F000 0000H +(-00EEH) = EFFF FF12H。计算机采用 大端方式 编址,故低位字节存放在字的高地址处,机器数一共占 4 字节,该操作数的 LSB 所在的地址是 EFFF FF12H + 3 = EFFF FF15H,所以选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 486, "year": 2019, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第16题-题目\n\n\n\n

下列有关处理器时钟脉冲信号的叙述中,错误的是( )。

\n
A.时钟脉冲信号由机器脉冲源发出的脉冲信号经整形和分频后形成
\n
B.时钟脉冲信号的宽度称为时钟周期,时钟周期的倒数为机器主频
\n
C.时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定
\n
D.处理器总是在每来一个时钟脉冲信号时就开始执行一条新的指令
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第16题-解析\n\n\n\n

时钟脉冲信号 的宽度称为 时钟周期,时钟周期是 CPU 工作的最小时间单位,时钟周期的倒数为机器主频。时钟脉冲信号是由机器脉冲源发出的脉冲信号经整形和分频后形成的,时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定。CPU 从内存中取出并执行一条指令所需的全部时间称为指令周期,指令周期又由若干机器周期来表示,一个机器周期又包含若干时钟周期,选项 D 显然错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 487, "year": 2019, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第17题-题目\n\n\n\n

某指令功能为 R[r2] ← R[r1] + M[R[r0]],其两个源操作数分别采用寄存器、寄存器间接寻址方式。对于下列给定部件,该指令在取数及执行过程中需要用到的是( )。

\n

I.通用寄存器组(GPRs)      II. 算术逻辑单元(ALU)

\n

II.存储器(Memory)      IV. 指令译码器(ID)

\n
A.仅 I、II
\n
B.仅 I、II、III
\n
C.仅 II、III、IV
\n
D.仅 I、III、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第17题-解析\n\n\n\n

该指令的两个源操作数分别采用 寄存器寻址 和 寄存器间接寻址,因此在取数阶段需要用到通用寄存器组和存储器;在执行阶段,两个源操作数相加需要用到算术逻辑单元;而指令译码器用于操作码字段进行译码,向控制器提供特定的操作信号,在取数及执行阶段用不到,所以答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 488, "year": 2019, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第18题-题目\n\n\n\n

在采用“取指、译码/取数、执行、访存、写回”5 段流水线的处理器中,执行如下指令序列,其中 s0、s1、s2、s3 和 t2 表示寄存器编号。

\n

下列指令对中,不存在数据冒险的是( )。

\n
A.I1 和 I3
\n
B.I2 和 I3
\n
C.I2 和 I4
\n
D.I3 和 I4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第18题-解析\n\n\n\n

出这四条指令在流水线中执行的过程如下图所示:

\n\n
指令
1
2
3
4
5
6
7
8
9
10
11
12
I1: add s2,s1,s0
IF
ID
EX
MEM
WB
I2: load s3,0(t2)
I3: add s2,s2,s3
IF
I4: store s2,0(t2)
IF
IF
ID
EX
MEM
WB
ID
EX
MEM
WB
13
14
ID
EX
MEM
WB

数据冒险 指在程序中存在必须等前条指令执行完才能执行后一条指令的情况,此时这两条指令即为数据相关。其中 I1 和 I3、I2 和 I3、I3 和 I4 均发生了写后读相关,因此必须等相关的前条指令执行完才能执行后一条指令。只有 I2 和 I4 不存在数据冒险。所以答案选 C。

\n\n\n\n\n", "difficulty": 1}, {"id": 489, "year": 2019, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第19题-题目\n\n\n\n

假定一台计算机采用 3 通道存储器总线,配套的内存条型号为 DDR3-1333,即内存条所接插的存储器总线的工作频率为 1333MHz,总线宽度为 64 位,则存储器总线的总带宽大约是( )。

\n
A.10.66GBps
\n
B.32GBps
\n
C.64GBps
\n
D.96GBps
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第19题-解析\n\n\n\n

由题目可知,计算机采用 3 通道存储器总线,存储器总线的工作频率为 1333MHz,即 1 秒内传送 1333M 次数据,总线宽度为 64 位即单条总线工作一次可传输 8 字节(Byte),因此存储器总线的总带宽 3×8×1333MB/s,约为 32GB/s,故答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 490, "year": 2019, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第20题-题目\n\n\n\n

下列关于磁盘存储器的叙述中,错误的是( )。

\n
A.磁盘的格式化容量比非格式化容量小
\n
B.扇区中包含数据、地址和校验等信息
\n
C.磁盘存储器的最小读写单位为一字节
\n
D.磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第20题-解析\n\n\n\n

磁盘存储器 的最小读写单位为一个扇区,即磁盘按块存取,选项 C 错误。磁盘存储数据之前需进行格式化,将磁盘分成扇区,并写入信息,因此磁盘的格式化容量比非格式化容量小,选项 A 正确。磁盘扇区中包含数据、地址和校验等信息,选项 B 正确。磁盘存储器由磁盘控制器、磁盘驱动器和盘片组成,选项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 491, "year": 2019, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第21题-题目\n\n\n\n

某设备以中断方式与 CPU 进行数据交换,CPU 主频为 1GHz,设备接口中的数据缓冲寄存器为 32 位,设备的数据传输率为 50KBps。若每次中断开销(包括中断响应和中断处理)为 1000 个时钟周期,则 CPU 用于该设备输入/输出的时间占整个 CPU 时间的百分比最多是( )。

\n
A.1.25%
\n
B.2.5%
\n
C.5%
\n
D.12.5%
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第21题-解析\n\n\n\n

设备接口中的数据缓冲寄存器为 32 位,即一次 中断 可以传输 4B 数据,设备数据传输率为 50kB/s,共需要 12.5k 次中断,每次中断开销为 1000 个时钟周期,CPU 频为 1GHz,则 CPU 用于该设备输入/输出的时间占整个 CPU 时间的百分比最多是 (12.5k×1000)/1G=1.25%。
\n\n\n\n\n", "difficulty": 1}, {"id": 492, "year": 2019, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第22题-题目\n\n\n\n

下列关于 DMA 方式的叙述中,正确的是( )。

\n

Ⅰ. DMA 传送前由设备驱动程序设置传送参数

\n

Ⅱ. 数据传送前由 DMA 控制器请求总线使用权

\n

Ⅲ. 数据传送由 DMA 控制器直接控制总线完成

\n

Ⅳ. DMA 传送结束后的处理由中断服务程序完成

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ、Ⅳ
\n
C.仅Ⅱ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第22题-解析\n\n\n\n

每类设备都配置一个设备驱动程序,设备驱动程序向上层用户程序提供一组标准接口,负责实现对设备发出各种具体操作指令,用户程序不能直接和 DMA 打交道。DMA 的数据传送过程分为预处理、数据传送和后处理 3 个阶段。预处理阶段由 CPU 完成必要的准备工作,数据传送前由 DMA 控制器请求总线使用权;数据传送由 DMA 控制器直接控制总线完成;传送结束后,DMA 控制器向 CPU 发送中断请求,CPU 执行中断服务程序做 DMA 结束处理。
\n\n\n\n\n", "difficulty": 1}, {"id": 493, "year": 2019, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第23题-题目\n\n\n\n

下列关于线程的描述中,错误的是( )。

\n
A.内核级线程的调度由操作系统完成
\n
B.操作系统为每个用户级线程建立一个线程控制块
\n
C.用户级线程间的切换比内核级线程间的切换效率高
\n
D.用户级线程可以在不支持内核级线程的操作系统上实现
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第23题-解析\n\n\n\n

应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口,内核为进程及其内部的每个线程维护上下文信息,调度也是在内核中由操作系统完成的,选项 A 正确。在多线程模型中,用户级线程和内核级线程 的连接方式分为多对一、一对一、多对多,“操作系统为每个用户线程建立一个线程控制块”属于一对一模型,选项 B 错误。用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助进行调度,故用户级线程的切换效率更高,选项 C 正确。用户级线程的管理工作可以只在用户空间中进行,故可以在不支持内核级线程的操作系统上实现,选项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 494, "year": 2019, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第24题-题目\n\n\n\n

下列选项中,可能将进程唤醒的事件是( )。

\n

Ⅰ.I/O 结束

\n

Ⅱ.某进程退出临界区

\n

Ⅲ.当前进程的时间片用完

\n
A.仅Ⅰ
\n
B.仅Ⅲ
\n
C.仅Ⅰ、Ⅱ
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第24题-解析\n\n\n\n

参考 进程状态转化,当被阻塞进程等待的某资源为可用时,进程将会被唤醒。I/O 结束后,等待该 I/O 结束而被阻塞的有关进程就会被唤醒,Ⅰ正确;某进程退出临界区后,之前因需要进入该临界区而被阻塞的有关进程就会被唤醒,Ⅱ正确,当前进程的时间片用完后进入就绪队列等待重新调度,优先级最高的进程将获得处理机资源从就绪态变成执行态,Ⅲ错误。
\n\n\n\n\n", "difficulty": 2}, {"id": 495, "year": 2019, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第25题-题目\n\n\n\n

下列关于系统调用的叙述中,正确的是( )。

\n

Ⅰ.在执行系统调用服务程序的过程中,CPU 处于内核态

\n

Ⅱ.操作系统通过提供系统调用避免用户程序直接访问外设

\n

Ⅲ.不同的操作系统为应用程序提供了统一的系统调用接口

\n

Ⅳ.系统调用是操作系统内核为应用程序提供服务的接口

\n
A.仅Ⅰ、Ⅳ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅱ、Ⅳ
\n
D.Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第25题-解析\n\n\n\n

用户可以在用户态调用操作系统的服务,但执行具体的系统调用服务程序是处于内核态的,Ⅰ正确:设备管理属于操作系统的职能之一,包括对输入/输出设备的分配、初始化、维护等,用户程序需要通过系统调用使用操作系统的设备管理服务,Ⅱ正确:操作系统不同,底层逻辑、实现方式均不相同,为应用程序提供的系统调用接口也不同,Ⅲ错误:系统调用是用户在程序中调用操作系统提供的子功能,Ⅳ正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 496, "year": 2019, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第26题-题目\n\n\n\n

下列选项中,可用于文件系统管理空闲磁盘块的数据结构是( )。

\n

Ⅰ. 位图

\n

Ⅱ. 索引结点

\n

Ⅲ. 空闲磁盘块链

\n

Ⅳ. 文件分配表 (FAT)

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ、Ⅳ
\n
C.仅Ⅰ、Ⅲ
\n
D.仅Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第26题-解析\n\n\n\n

传统的文件系统 管理空间磁盘的方法 包括空闲表法、空闲链表法、位示图和成组链接法,Ⅰ、Ⅲ 正确。文件分配表(FAT)的表项与物理磁盘块一一对应,并且可以用一个特殊的数字 -1 表示文件的最后一块,用 -2 表示这个磁盘块是空闲的(当然,规定用 -3、-4 来表示也是可行的)。因此文件分配表(FAT)不仅记录了文件中各个块的先后链接关系,同时还标记了空闲的磁盘块,操作系统可以通过 FAT 对文件存储空间进行管理,Ⅳ正确。索引结点是操作系统为了实现文件名与文件信息分开而设计的数据结构,存储了文件描述信息,索引结点属于文件目录管理部分的内容,Ⅱ错误。
\n\n\n\n\n", "difficulty": 2}, {"id": 497, "year": 2019, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第27题-题目\n\n\n\n

系统采用二级反馈队列调度算法进行进程调度。就绪队列 Q1 采用时间片轮转调度算法,时间片为 10ms;就绪队列 Q2 采用短进程优先调度算法;系统优先调度 Q1 队列中的进程,当 Q1 为空时系统才会调度 Q2 中的进程;新创建的进程首先进入 Q1;Q1 中的进程执行一个时间片后,若未结束,则转入 Q2。若当前 Q1,Q2 为空,系统依次创建进程 P1,P2 后即开始进程调度,P1,P2 需要的 CPU 时间分别为 30ms 和 20ms,则进程 P1,P2 在系统中的平均等待时间为( )。

\n
A.25ms
\n
B.20ms
\n
C.15ms
\n
D.10ms
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第27题-解析\n\n\n\n

参考 多级反馈队列。进程 P1、P2 依次创建后进入队列 Q1,根据时间片调度算法的规则,进程 P1、P2 将依次被分配 10ms 的 CPU 时间,两个进程分别执行完一个时间片后都会被转入队列 Q2,就绪队列 Q2 采用短进程优先调度算法,此时 P1 还需要 20ms 的 CPU 时间,P2 还需要 10ms 的 CPU 时间,所以 P2 会被优先调度执行,10ms 后进程 P2 执行完成,之后 P1 再调度执行,再过 20ms 后 P1 也执行完成。平均等待时间 = (P1 等待时间 + P2 等待时间) / 2 = (20 + 10) / 2 = 15。
\n\n\n\n\n", "difficulty": 1}, {"id": 498, "year": 2019, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第28题-题目\n\n\n\n

在分段存储管理系统中,用共享段表描述所有共享的段。若进程 P1 和 P2 共享段 S,下列叙述中,错误的是( )。

\n
A.在物理内存中仅保存一份段 S 的内容
\n
B.段 S 在 P1 和 P2 中应该具有相同的段号
\n
C.P1 和 P2 共享段 S 在共享段表中的段表项
\n
D.P1 和 P2 都不再使用段 S 时才回收段 S 所占的内存空间
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第28题-解析\n\n\n\n

本题考察 段式管理。段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的,因此在内存中仅保存一份段 s 的内容。选项 A 正确。段 S 对于进程 P1,P2 来说,使用位置可能不同,所以在不同进程中的逻辑段号可能不同,选项 B 错误。段表项存放的是段的物理地址,对于共享段 S 来说物理地址唯一,选项 C 正确。为了保证进程可以顺利使用段 S,段 S 必须确保在没有任何进程使用它后才能被删除,选项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 499, "year": 2019, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第29题-题目\n\n\n\n

某系统采用 LRU 页置换算法和局部置换策略,若系统为进程 P 预分配了 4 个页框,进程 P 访问页号的序列为 0, 1, 2, 7, 0, 5, 3, 5, 0, 2, 7, 6,则进程访问上述页的过程中,产生页置换的总次数是( )。

\n
A.3
\n
B.4
\n
C.5
\n
D.6
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第29题-解析\n\n\n\n

LRU 每次执行页面置换时会换出最近最久没有使用过的页面。第一次访问 5 页面时,会把最久未被使用的 1 页面换出,第一次访问 3 页面时,会把最久未访问的 2 页面换出。具体的页面置换情况如下图所示:

访问页面012705350276
物理块100000000000
物理块11115555556
物理块2222333377
物理块777777222
缺页否√√√√√√√√√

需要注意的是:题中问的是页置换算法,而不是缺页次数,所以前 4 次缺页未还也的操作不考虑在内,答案为 5 次,故选 C。

\n\n\n\n\n", "difficulty": 1}, {"id": 500, "year": 2019, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第30题-题目\n\n\n\n

下列关于死锁的叙述中,正确的是( )。

\n

Ⅰ、可以通过剥夺进程资源解除死锁

\n

Ⅱ、死锁的预防方法能确保系统不发生死锁

\n

Ⅲ、银行家算法可以判断系统是否处于死锁状态

\n

Ⅳ、当系统出现死锁时,必然有两个或两个以上的进程处于阻塞态

\n
A.仅Ⅱ、Ⅲ
\n
B.仅Ⅰ、Ⅱ、Ⅳ
\n
C.仅Ⅰ、Ⅱ、Ⅲ
\n
D.仅Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第30题-解析\n\n\n\n

本题考察 死锁 相关知识。剥夺进程资源,将其分配给其他死锁进程,可以解除死锁,Ⅰ正确。死锁预防是死锁处理策略(死锁预防、死锁避免、死锁检测)中最为严苛的一种策略,破坏死锁产生的 4 个必要条件之一。可以确保系统不发生死锁,Ⅱ正确。银行家算法是一种死锁避免算法,用于计算动态资源分配的完全性以避免系统进入死锁状态,不能用于判断系统是否处于死锁,Ⅲ错误。通过简化资源分配图可以检测系统是否为死锁状态,当系统出现死锁时,资源分配图不可完全简化。只有两个成两个以上的进程才会出现“环”而不能被简化,Ⅳ正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 501, "year": 2019, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第31题-题目\n\n\n\n

某计算机主存按字节编址,采用二级分页存储管理,地址结构如下所示:

\n
\n\n\n\n \n 408真题系统\n \n\n
页目录号(10 位)
页号(10 位)
页内偏移(12 位)
\n

虚拟地址 20501225H 对应的页目录号、页号分别是( )。

\n
A.081H、101H
\n
B.081H、401H
\n
C.201H、101H
\n
D.201H、401H
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第31题-解析\n\n\n\n

题中给出的是十六进制地址,首先将它转化为二进制地址,然后用二进制地址去匹配题中对应的地址结构。转换为进制地址和地址结构的对应关系如下所示。

2050 1225H = 0010 0000 01010000 00010010 00100101

前 10 位、1120 位、2132 位分别对应页目录号、页号和页内偏移。把页目录号、页号单独拿出,转换为十六进制时缺少的位数在高位补零,0000 1000 0001、0001 0000 0001 分别对应 081H、101H,选项 A 正确。

\n\n\n\n\n", "difficulty": 1}, {"id": 502, "year": 2019, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2019-第32题-题目\n\n\n\n

在下列动态分区分配算法中,最容易产生内存碎片的是( )。

\n
A.首次适应算法
\n
B.最坏适应算法
\n
C.最佳适应算法
\n
D.循环首次适应算法
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第32题-解析\n\n\n\n

最佳适应算法总是匹配与当前大小要求最接近的空闲分区,但是大多数情况下空闲分区的大小不可能完全和当前要求的大小相等,几乎每次分配内存都会产生很小的难以利用的内存块,所以最佳适应算法最容易产生最多的内存碎片,选项 C 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 503, "year": 2019, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第33题-题目\n\n\n\n

OSI 参考模型的第 5 层(自下而上)完成的主要功能是( )

\n
A.差错控制
\n
B.路由选择
\n
C.会话管理
\n
D.数据表示转换
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第33题-解析\n\n\n\n

OSI 参考模型 自下而上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。第 5 层为会话层,它的主要功能是管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止应用程序之间的会话,这也是会话层得名的原因。
\n\n\n\n\n", "difficulty": 1}, {"id": 504, "year": 2019, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第34题-题目\n\n\n\n

100BaseT 快速以太网使用的导向传输介质是( )。

\n
A.双绞线
\n
B.单模光纤
\n
C.多模光纤
\n
D.同轴电缆
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第34题-解析\n\n\n\n

参考 以太网传输介质:100base-T 是一种以速度 100Mb/s 工作的局域网标准,它通常被称为快速以太网标准,并使用两对铜质电缆。100base-T:100 标识传输速度为 100Mb/s,base 标识采用基带传输,T 表示传输介质为双绞线,当为 F 时表示光纤。
\n\n\n\n\n", "difficulty": 1}, {"id": 505, "year": 2019, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第35题-题目\n\n\n\n

对于滑动窗口协议,如果分组序号采用 3 比特编号,发送窗口大小为 5,则接收窗口最大是( )。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第35题-解析\n\n\n\n

对于一般的如果要满足在窗口中发送缓存的帧序号不存在二义性,那么需要满足 窗口大小限制:发送窗口大小 + 接收窗口大小 ≤\n2n\n。例如当 n=3 时,若发送窗口大小 + 接收窗口大小大于帧序号数,那么说明其容纳下的帧数已经超过了帧的序号,则对于接收方,一定会出现重复的帧号,此时若出现故障,就不能辨别是同帧号中哪一个帧出现了丢失
\n\n\n\n\n", "difficulty": 1}, {"id": 506, "year": 2019, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第36题-题目\n\n\n\n

假设一个采用 CSMA/CD 协议的 100Mbps 局域网,最小帧长是 128 B,则在一个冲突域内两个站点之间的单向传播延时最多是( )。

\n
A.2.56 us
\n
B.5.12 us
\n
C.10.24 us
\n
D.20.48 us
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第36题-解析\n\n\n\n

本题考察 CSMA/CD 协议中的 限制条件:每次发送一个数据帧,最少需要 2τ时间才能收到其回复。因此发送一个最小数据帧的时间必须大于 2τ,再本题中 128×8/100M>=2τ,所以 τ 最大为 5.12us,答案为 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 507, "year": 2019, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第37题-题目\n\n\n\n

若将 101.200.16.0/20 划分为 5 个子网,则可能的最小子网的可分配 IP 地址数是( )。

\n
A.126
\n
B.254
\n
C.510
\n
D.1022
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第37题-解析\n\n\n\n

本题考察 变长子网划分。网络前缀为 20 位,将 101.200.16.0/20 划分为 5 个子网,为了保证有子网的可分配 IP 地址数尽可能小,即要让其他子网的可分配 IP 地址数尽可能大,不能采用平均划分的方法,而要采用变长的子网划分方法,也就是最大子网用 1 位子网号,第二大子网用 2 位子网号,以此类推。当地址范围为 101.200.31.1/24~101.200.31.254/24 时,可分配的 IP 地址数为 254 个,即可能的最小子网的可分配 IP 地址数是 254 个。
\n\n\n\n\n", "difficulty": 3}, {"id": 508, "year": 2019, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第38题-题目\n\n\n\n

某客户通过一个 TCP 连接向服务器发送数据的部分过程如题 38 图所示。客户在\nt0​\n时刻第一次收到确认序列号 ack_seq=100 的段,并发送序列号 seq=100 的段,但发生丢失。若 TCP 支持快速重传,则客户重新发送 seq=100 段的时刻是( )。

\n
A.t1​
\n
B.t2​
\n
C.t3​
\n
D.t4​
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第38题-解析\n\n\n\n

TCP 规定当发送方收到对同一个报文段的 3 个重复的确认时,就可以认为跟在这个被确认报文段之后的报文已经丢失,立即执行 快速重传 算法。t3 时刻连续收到了来自服务器的三个确认序列号 ack_seq = 100 的段。发送方认为 seq = 100 的段已经丢失,执行快速重传算法,重新发送 seq = 100 段。
\n\n\n\n\n", "difficulty": 0}, {"id": 509, "year": 2019, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第39题-题目\n\n\n\n

若主机甲主动发起一个与主机乙的 TCP 连接,甲、乙选择的初始序列号分别为 2018 和 2046,则第三次握手 TCP 段的确认序列号是( )。

\n
A.2018
\n
B.2019
\n
C.2046
\n
D.2047
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第39题-解析\n\n\n\n

根据 TCP 连接建立的 三次握手 原理,第三次握手时甲发出的确认序列号应为第二次握手时乙发出的序列号 +1,即 2047。
\n\n\n\n\n", "difficulty": 3}, {"id": 510, "year": 2019, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2019-第40题-题目\n\n\n\n

下列关于网络应用模型的叙述中,错误的是( )。

\n
A.在 P2P 模型中,结点之间具有对等关系
\n
B.在客户/服务器 (C/S) 模型中,客户与客户之间可以直接通信
\n
C.在 C/S 模型中,主动发起通信的是客户,被动通信的是服务器
\n
D.在向多用户分发一个文件时,P2P 模型通常比 CIS 模型所需时间短
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第40题-解析\n\n\n\n

在 P2P 模型 中,每个结点的权利和义务是对等的,在 C/S 模型中,客户是服务发起请求,使服务器被动接受各地客户的请求,但是客户之间不能直接通信,例如 Web 应用中两个浏览器不能直接通信,P2P 模型减轻了对某个服务器的计算压力,可以将任务分配到各个节点,提高了系统效率和资源利用率。
\n\n\n\n\n", "difficulty": 3}, {"id": 511, "year": 2019, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2019-第41题-题目\n\n\n\n

设线性表\nL=(a1​,a2​,a3​,⋯,an−1​,an−1​,an​)\n采用带头结点的单链表保存,链表中的结点定义如下:

\n
typedef struct node {\n    int data;\n    struct node *next;\n} NODE;\n
\n

请设计一个空间复杂度为\nO(1)\n且时间上尽可能高效的算法,重新排列\nL\n 中的各结点,得到线性表 \nL′=(a1​,an​,a2​,an−1​,a3​,an−2​,⋯)\n。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第41题-解析\n\n\n\n

1)算法的基本设计思想:先观察 L(\na1​,a2​,a3​,⋯,an−2​,an−1​,an​\n) 和 L’(\na1​,an​,a2​,an−1​,a3​,an−2​,⋯\n),发现 L’ 是由 L 摘取第一个元素,再摘取倒数第一个元素\n⋯\n依次合并而成的。为了方便链表后半段取元素,需要先将 L 后半段原地逆置[题目要求空间复杂度为 助栈],否则每取最后一个结点都需要遍历一次链表。

①先找出链表 L 的中间结点,为此设置两个指针 p 和 q,指针 p 每次走一步,指针 q 每次走两步,当指针 q 到达链尾时,指针 p 正好在链表的中间结点;

②然后将 L 的后半段结点原地逆置。

③从单链表前后两段中依次各取一个结点,按要求重排。

2)算法实现如下:

// 找到链表的中间结点\nNODE *findMiddleNode(NODE *head) {\n  NODE *slow = head;\n  NODE *fast = head;\n  while (fast != NULL) {\n    fast = fast->next;\n    if (fast != NULL) {\n      fast = fast->next;\n    }\n    slow = slow->next;\n  }\n  return slow;\n}\n\n// 反转链表\nNODE *reverse(NODE *start) {\n  NODE *p = start;\n  NODE *q = start->next;\n  while (q != NULL) {\n    NODE *tmp = q->next;\n    q->next = p;\n    p = q;\n    q = tmp;\n  }\n  return p;\n}\n\n// 1. 找到中位结点\n// 2. 翻转后一半链表\n// 3. 遍历两个链表,依次穿插所有结点\nvoid solve(HEAD *head) {\n  if (head->next == NULL) {\n    return;\n  }\n  NODE *middle = findMiddleNode(head);\n  NODE *list2 = reverse(middle);\n  NODE *list1 = head->next;\n  // 穿插操作\n  NODE *p = list1;\n  NODE *q = list2;\n  // 退出循环的条件\n  // 链表长度为奇数:p == q\n  // 链表长度为偶数:p->next == q\n  // while (!(p == q || p->next == q))\n  while (p != q && p->next != q) {\n    NODE *tmp1 = p->next;\n    NODE *tmp2 = q->next;\n    p->next = q;\n    q->next = tmp1;\n    p = tmp1;\n    q = tmp2;\n  }\n}\n

3)第 1 步找中间结点的时间复杂度为 O(n),第 2 步逆置的时间复杂度为 O(n),第 3 步合并链表的时间复杂度为 O(n),所以该算法的时间复杂度为 O(n)。

\n\n\n\n\n", "difficulty": 1}, {"id": 512, "year": 2019, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第42题-题目\n\n\n\n

请设计一个队列,要求满足:

\n

① 初始时队列为空;

\n

② 入队时,允许增加队列占用空间;

\n

③ 出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;

\n

④ 入队操作和出队操作的时间复杂度始终保持为 O(1) 。

\n

请回答下列问题:

\n

(1) 该队列是应选择链式存储结构,还是应选择顺序存储结构?

\n

(2) 画出队列的初始状态,并给出判断队空和队满的条件。

\n

(3) 画出第一个元素入队后的队列状态。

\n

(4) 给出入队操作和出队操作的基本过程。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第42题-解析\n\n\n\n

1)顺序存储无法满足要求②的队列占用空间随着入队操作而增加。根据要求来分析:要求①容易满足;链式存储方便开辟新空间,要求②容易满足;对于要求③,出队后的结点并不真正释放,用队头指针指向新的队头结点,新元素入队时,有空余结点则无须开辟新空间,赋值到队尾后的第一个空结点即可,然后用队尾指针指向新的队尾结点,这就需要设计成一个首尾相接的循环单链表,类似于循环队列的思想。设置队头、队尾指针后,链式队列的入队操作和出队操作的时间复杂度均为 O(1),要求④可以满足。因此,采用链式存储结构(两段式单向循环链表),队头指针为 front,队尾指针为 rear。

2)该循环链式队列的实现,可以参考循环队列,不同之处在于循环链式队列可以方便增加空间,出队的结点可以循环利用,入队时空间不够也可以动态增加。同样,循环链式队列也要区分队满和队空的情况,这里参考循环队列牺牲一个单元来判断。初始时,创建只有一个空闲结点的循环单链表,头指针 front 和尾指针 rear 均指向空闲结点,如下图所示。

\n\n
front
rear

队空的判定条件:front == rear。

队满的判定条件:front == rear->next。

3)插入第一个元素后的状态如下图所示。

\n\n
front
rear

4)操作的基本过程:

入队操作

if (front == rear->next)\n    则在 rear 后面插入一个新的空闲结点;\n入队元素保存到 rear 所指结点中;rear=rear->next;返回。\n

出队操作

if(front==rear) // 队空\n    则出队失败,返回;\n取 front 所指结点中的元素 e;front=front->next;返回 e。\n
\n\n\n\n\n", "difficulty": 1}, {"id": 513, "year": 2019, "index": 43, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第43题-题目\n\n\n\n

有 n(n ≥ 3)位哲学家围坐在一张圆桌边,每位哲学家交替地就餐和思考。在圆桌中心有 m(m ≥ 1)个碗,每两位哲学家之间有一根筷子。每位哲学家必须取到一个碗和两侧的筷子后,才能就餐,进餐完毕,将碗和筷子放回原位,并继续思考。为使尽可能多的哲学家同时就餐,且防止出现死锁现象,请使用信号量的 P、V 操作(wait()、signal() 操作)描述上述过程中的互斥与同步,并说明所用信号量及初值的含义。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第43题-解析\n\n\n\n

回顾传统的哲学家就餐问题,假设餐桌上有 n 个哲学家、根筷子,那么可以用这种方法避免死锁:限制至多允许 n-1 个哲学家同时“抢”筷子,那么至少会有 1 个哲学家可以获得两根筷子并顺利进餐,于是不可能发生死锁的情况。

本题可以用碗这个限制资源来避免死锁:当碗的数量 m 小于哲学家的数量 n 时,可以直接让碗的资源量等于 m,确保不会出现所有哲学家都拿一侧筷子而无限等待另一侧筷子进而造成死锁的情况;当碗的数量大于等于哲学家的数量时,为了让碗起到同样的限制效果,我们让碗的资源量等于 -1,这样就能保证最多只有 n-1 个哲学家同时进餐,所以得到碗的资源量为 min{n-1, m}。在进 PV 操作时,碗的资源量起限制哲学家取筷子的作用,所以需要先对碗的资源量进行 P 操作。具体过程如下:

// 限制哲学家能同时拿到盘子的数量\nsemaphore fork[n] = {1};\n// 并发盘子数量 < n\nsemaphore plate = min(m, n-1);\nphilosopher(int i) {\n  while (1) {\n    think();\n    P(plate);\n    P(fork[i]);\n    P(fork[(i + 1) % n]);\n    eat();\n    V(fork[i]);\n    V(fork[(i + 1) % n]);\n    V(plate);\n  }\n}\n
\n\n\n\n\n", "difficulty": 0}, {"id": 514, "year": 2019, "index": 44, "type": 2, "typeName": "应用题", "score": 7, "subject": "computer-network", "question": "\n\n\n\n\n\n2019-第44题-题目\n\n\n\n

某计算机系统中的磁盘有 300 个柱面,每个柱面有 10 个磁道,每个磁道有 200 个扇区,扇区大小为 512B。文件系统的每个簇包含 2 个扇区。请回答下列问题:

\n

(1) 磁盘的容量是多少?

\n

(2) 假设磁头在 85 号柱面上,此时有 4 个磁盘访问请求,簇号分别为 100260、60005、101660 和 110560。若采用最短寻道时间优先 (SSTF) 调度算法,则系统访问簇的先后次序是什么?

\n

(3) 第 100530 簇在磁盘上的物理地址是什么?将簇号转换成磁盘物理地址的过程是由 I/O 系统的什么程序完成的?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第44题-解析\n\n\n\n

1)磁盘容量 = 磁盘的柱面数每个柱面的磁道数每个磁道的扇区数每个扇区的大小 =\n(300×10×200×512/1024)KB=3×105KB\n。

2)磁头在 85 号柱面上,对 SSTF 算法而言,总是访问当前柱面距离最近的地址。注意每\n个簇包含 2 个扇区,通过计算得到,85 号柱面对应的簇号为 85000~85999。通过比较得\n出,系统最先访问离 85000~85999 最近的 100260,随后访问离 100260 最近的 101660,\n然后访问 110560,最后访问 60005。顺序为 100260、101660、110560、60005。

3)参考 CHS 地址,第 100530 簇在磁盘上的物理地址由其所在的柱面号、磁道号、扇区号构成。

柱面号= ⌊簇号/每个柱面的簇数⌋ = ⌊100530/(10×200/2)⌋ = 100。

磁道号 = ⌊(簇号%每个柱面的簇数)/每个磁道的簇数⌋ = ⌊530/(200/2)⌋ = 5。

扇区号 = 扇区地址%每个磁道的扇区数 = (530×2) % 200 = 60。

将簇号转换成磁盘物理地址的过程由磁盘驱动程序完成。

\n\n\n\n\n", "difficulty": 3}, {"id": 515, "year": 2019, "index": 45, "type": 2, "typeName": "应用题", "score": 16, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第45题-题目\n\n\n\n

已知\nf(n)=n!=n×(n−1)×(n−2)×⋯×2×1\n,计算\nf(n)\n的 C 语言函数 f1 的源程序(阴影部分)及其在 32 位计算机 M 上的部分机器级代码如下:

\n

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M 按字节编址,int 型数据占 32 位。请回答下列问题:

\n

(1) 计算 f(10) 需要调用函数 f1 多少次?执行哪条指令会递归调用 f1?

\n

(2) 上述代码中,哪条指令是条件转移指令?哪几条指令一定会使程序跳转执行?

\n

(3) 根据第 16 行的 call 指令,第 17 行指令的虚拟地址应是多少?已知第 16 行的 call 指令采用相对寻址方式,该指令中的偏移量应是多少(给出计算过程)?已知第 16 行的 call 指令的后 4 字节为偏移量,M 是采用大端方式还是采用小端方式?

\n

(4) f(13)=6227020800,但 f1(13) 的返回值为 1932053504,为什么两者不相等?要使 f1(13) 能返回正确的结果,应如何修改 f1 的源程序?

\n

(5) 第 19 行的 imul 指令(带符号整数乘)的功能是 R[eax]←R[eax]×R[ecx],当乘法器输出的高、低 32 位乘积之间满足什么条件时,溢出标志 OF=1?要使 CPU 在发生溢出时转异常处理,编译器应在 imul 指令后应加一条什么指令?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第45题-解析\n\n\n\n

1)计算 f(10) 需要调用函数 f1 共 10 次,执行第 16 行的 call 指令会递归调用 f1。

2)第 12 行的 jle 指令是条件转移指令,其含义为小于等于时转移,本行代码的意义为:当 n≤1 时,跳转至地址 0040 1035H。第 16 行的 call 指令为函数调用指令,第 20 行的 jmp 指令为无条件转移指令,第 30 行的 ret 指令为子程序的返回指令,这三条指令一定会使程序跳转执行。

3)其长度计算机 M 上按字节编址,第 16 行的 call 指令的虚拟地址为 0040 1025H,长度为 5 字节,故第 17 行的指令的虚拟地址为 0040 1025H + 5 = 0040 102AH。第 16 行的 call 指令采用相对寻址方式,即目标地址 = (PC) +偏移量,call 指令的目标地址为 0040 1000H,所以偏移量 = 目标地址 - (PC) = 0040 1000H - 0040 102AH = FFFF FFD6H。根据第 16 行的 call 指令的偏移量字段为 D6 FF FF FF,可以确定 M 采用小端方式。

4)因为 f(13) = 6227020800,其结果超出了 32 位 int 型数据可表示的最大范围,因此 f(13) 的返回值是一个发生了溢出的错误结果。为使 f1(13) 能返回正确结果,可将函数 f1 的返回值类型改为 double(或 long long,或 long double,或 float)类型。

5)若乘积的高 33 位为非全 0 或非全 1,则 OF=1。编译器应在 imul 指令后加一条“溢出自陷指令”,使得 CPU 自动查询溢出标志 OF,当 OF=1 时调出“溢出异常处理程序”。

\n\n\n\n\n", "difficulty": 1}, {"id": 516, "year": 2019, "index": 46, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第46题-题目\n\n\n\n

对于上题,若计算机 M 的主存地址为 32 位,釆用分页存储管理方式,页大小为 4KB,则第 1 行的 push 指令和第 30 行的 ret 指令是否在同一页中(说明理由)?若指令 Cache 有 64 行,采用 4 路组相联映射方式,主存块大小为 64B,则 32 位主存地址中,哪几位表示块内地址?哪几位表示 Cache 组号?哪几位表示标记(tag)信息?读取第 16 行的 call 指令时,只可能在指令 Cache 的哪一组中命中(说明理由)?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第46题-解析\n\n\n\n

因为页大小为 4KB,所以虚拟地址的高 20 位为虚拟页号。第 1 行的 push 指令和第 30 行的 ret 指令的虚拟地址的高 20 位都是 00401H,因此两条指令在同一页中。

指令 Cache 有 64 块,采用 4 路组相联映射方式,故指令 Cache 共有 64/4 = 16 组,Cache 组号共 4 位。主存块大小为 64B,故块内地址为低 6 位。综上所述,在 32 位主存地址中,低 6 位为块内地址,中间 4 位为组号,高 22 位为标记。

因为页大小为 4KB,所以虚拟地址和物理地址的最低 12 位完全相同,因而 call 指令虚拟地址 0040 1025H 中的 025H = 0000 0010 0101B 为物理地址的低 12 位,对应的 7~10 位为组号,故对应的 Cache 组号为 0。

\n\n\n\n\n", "difficulty": 0}, {"id": 517, "year": 2019, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2019-第47题-题目\n\n\n\n

某网络拓扑如题 47 图所示,其中 R 为路由器,主机 HI~H4 的 IP 地址配置以及 R 的各接口 IP 地址配置如图中所示。现有若干台以太网交换机(无 VLAN 功能)和路由器两类网络互连设备可供选择。

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
设备 1
设备 2
设备 3
101.1.2.10
192.168.1.253/30
IF1
IF2
IF3
IF1
IF2
IF3
IF1
IF2
IF3
H1
H2
H3
H4
   IP 地址:
192.168.1.2/26
   默认网关:
192.168.1.1
   IP 地址:
192.168.1.3/26
   默认网关:
192.168.1.1
   IP 地址:
192.168.1.66/26
   默认网关:
192.168.1.65
   IP 地址:
192.168.1.67/26
   默认网关:
192.168.1.65
\n

请回答下列问题:

\n

(1) 设备 1、设备 2 和设备 3 分别应选择什么类型网络设备?

\n

(2) 设备 1、设备 2 和设备 3 中,哪几个设备的接口需要配置 IP 地址?并为对应的接口配置正确的 IP 地

\n

址。

\n

(3) 为确保主机 H1~H4 能够访问 Internet,R 需要提供什么服务?

\n

(4) 若主机 H3 发送一个目的地址为 192.168.1.127 的 IP 数据报,网络中哪几个主机会接收该数据报?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2019-第47题-解析\n\n\n\n

1)以太网交换机(无 VLAN 功能)连接的若干 LAN 仍然是一个网络(同一个广播域),路由器可以连接不同的 LAN、不同的 WAN 或把 WAN 和 LAN 互联起来,隔离了广播域。IP 地址 192.168.1.2/26 与 192.168.1.3/26 的网络前缀均为 192.168.1.0,视为 LAN1。IP 地址 192.168.1.66/26 与 192.168.1.67/26 的网络前缀均为 192.168.1.64,视为 LAN2。所以设备 1 为路由器,设备 2、3 为以太网交换机。

2)设备 1 为路由器,其接口应配置 IP 地址。IF1 接口与路由器 R 相连,其相连接口的 IP 地址为 192.168.1.253/30,253 的二进制表示形式为 11111101,故 IF1 接口的网络前缀也应为 192.168.1.111111,已分配 192.168.1.253,去除全 0 全 1,IF1 接口的 IP 地址应为 192.168.1.254。LAN1 的默认网关为 192.168.1.1,LAN2 的默认网关为 192.168.1.65,网关的 IP 地址是具有路由功能的设备的 IP 地址,通常默认网关地址就是路由器中的 LAN 端口地址,设备 1 的 IF2、IF3 接口的 IP 地址分别设置为 192.168.1.1 和 192.168.1.65。

3)私有地址段:C 类 192.168.0.0~192.168.255.255,即 H1~H4 均为私有 IP 地址,若要能够访问 Internet,R 需要提供 NAT 服务,即网络地址转换服务。

4)主机 H3 发送一个目的地址为 192.168.1.127 的 IP 数据报,主机号全为 1,为本网络的广播地址,由于路由器可以隔离广播域,只有主机 H4 会接收到数据报。

\n\n\n\n\n", "difficulty": 0}, {"id": 518, "year": 2020, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第1题-题目\n\n\n\n

将一个 10*10 对称矩阵 M 的上三角部分的元素\nmi,j​(1≤i≤j≤10)\n,按列优先存入 C 语言的一维数组 N 中,元素\nm7,2​\n在 N 中的下标是( )

\n
A.15
\n
B.16
\n
C.22
\n
D.23
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第1题-解析\n\n\n\n

上三角矩阵 按列优先存储,先存储仅 1 个元素的第一列,再存储有 2 个元素的第二列,以此类推。加 7,2 位于左下角,对应右上角的元素为加 2, 7 , 在加 2,7 之前存有

前面共存有 1 + 2 + 3 + 4 + 5 + 6 + 1 = 2 2 个 元 素(数组下标范围为 0〜21), 注意数组下标\n从 0 开始,故加工 7 在数组 N 中的下标为 2 2 , 即加 7,2 在数组 N 中的下标为 22。

\n\n\n\n\n", "difficulty": 1}, {"id": 519, "year": 2020, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第2题-题目\n\n\n\n

对空栈 S 进行 Push 和 Pop 操作入栈序列 a,b,c,d,e 经过 Push,Push,Pop,Push,Pop,Push,Push,Pop 操作后得到的出栈序列是(  )。

\n
A.b,a,c
\n
B.b,a,e
\n
C.b,c,a
\n
D.b,c,e
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第2题-解析\n\n\n\n

按题意,出入栈操作的过程如下:

操作栈内元素出栈元素
Pusha
Pusha b
Popab
Pusha c
Popac
Pusha d
Pusha d e
Popa de

故出栈序列为 c,e。

\n\n\n\n\n", "difficulty": 1}, {"id": 520, "year": 2020, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第3题-题目\n\n\n\n

对于任意一棵高度为 5 且有 10 个节点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元数量至少是( )。

\n
A.31
\n
B.16
\n
C.15
\n
D.10
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第3题-解析\n\n\n\n

二叉树采用 顺序存储 时,用数组下标来表示结点之间的父子关系。对于一棵高度为 5 的二叉树,为了满足任意性,其 1~5 层的所有结点都要被存储起来,即考虑为一棵高度为 5 的满二叉树,总共需要存储单元的数量为 1 + 2 + 4 + 8 + 16 = 31。
\n\n\n\n\n", "difficulty": 2}, {"id": 521, "year": 2020, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第4题-题目\n\n\n\n

已知森林 F 及与之对应的二叉树 T,若 F 的先根遍历序列是 a,b,c,d,e,f,中根遍历序列是 b,a,d,f,e,c,则 T 的后根遍历序列是( )。

\n
A.b,a,d,f,e,c
\n
B.b,d,f,e,c,a
\n
C.b,f,e,d,c,a
\n
D.f,e,d,c,b,a
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第4题-解析\n\n\n\n

本题考察的是 森林的遍历,\n森林 F 的先根遍历序列对应其二叉树 T 的先序遍历序列,森林 F 的中根遍历序列对应其二叉树 T 的中序遍历序列。即 T 的先序遍历序列为 a,b,c,d,e,f,中序遍历序列为 b,a,d,f,e,c。根据二叉树 T 的先序序列和中序序列可以唯一确定它的结构,构造过程如下:

\n\n
a
b
dfec
a
b
c
dfc
a
b
c
d
fe
a
b
c
d
e
f

可以得到二叉树 T 的后序序列为 b,f,e,d,c,a。

\n\n\n\n\n", "difficulty": 1}, {"id": 522, "year": 2020, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第5题-题目\n\n\n\n

下列给定的关键字输入序列中,不能生成如下二叉排序树的是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
4
2
5
1
3
\n
A.4,5,2,1,3
\n
B.4,5,1,2,3
\n
C.4,2,5,3,1
\n
D.4,2,1,3,5
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第5题-解析\n\n\n\n

选项 B 生成二叉排序树的过程如下,显然 B 选项错误:

\n\n
4
4
5
4
5
1
4
5
1
2
4
5
1
2
3
\n\n\n\n\n", "difficulty": 1}, {"id": 523, "year": 2020, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第6题-题目\n\n\n\n

修改递归方式实现的图的深度优先搜索(DFS)算法,将输出(访问)定点信息的语句移到退出递归前(即执行输出语句后立刻退出递归)。采用修改后的算法遍历有向无环图 G,若输出结果中包含 G 中的全部顶点,则输出的顶点序列是 G 的( )。

\n
A.拓扑有序序列
\n
B.逆拓扑有序序列
\n
C.广度优先搜索序列
\n
D.深度优先搜索序列
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第6题-解析\n\n\n\n

DFS 是一个递归算法,在遍历过程中,先访问的顶点被压入栈底。设在图中有顶点\nvi​\n,它有后继顶点\nvj​\n,即存在边<\nvi​\n,\nvj​\n>。根据 DFS 的规则,\nvi​\n入栈后,必先遍历完其后继顶点后\nvj​\n才会出栈,也就是说\nvi​\n会在\nvj​\n之后出栈,在如题所指的过程中,\nvi​\n在\nvj​\n后打印。由于\nvi​\n和\nvj​\n具有任意性,从上面的规律可以看出,输出顶点的序列是逆拓扑有序序列。
\n\n\n\n\n", "difficulty": 1}, {"id": 524, "year": 2020, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第7题-题目\n\n\n\n

已知无向图 G 如下所示,使用克鲁斯卡尔(Kruskal)算法求图 G 的最小生成树,加入到最小生成树中的边依次是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
a
c
b
d
e
f
12
20
18
6
5
7
14
10
9
11
\n
A.(b,f)(b,d)(a,e)(c,e)(b,e)
\n
B.(b,f)(b,d)(b,e)(a,e)(e,c)
\n
C.(a,e)(b,e)(c,e)(b,d)(b,f)
\n
D.(a,e)(c,e)(b,e)(b,f)(b,d)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第7题-解析\n\n\n\n

kruskal 算法 依次将当前 不会导致环路的最短边 加入最小生成树中:

\n\n
a
c
b
d
e
f
12
20
18
6
5
7
14
10
9
11
a
c
b
d
e
f
12
20
18
6
5
7
14
10
9
11
a
c
b
d
e
f
12
20
18
6
5
7
14
10
9
11
a
c
b
d
e
f
12
18
6
5
7
14
10
9
11
a
c
b
d
e
f
12
18
6
5
7
14
10
9
11
第一步
选取 < b, f >
第二步
选取 < b, d >
第三步
选取 < a, e >
第四步
选取 < c, e >
第五步
选取 < b, e >
\n\n\n\n\n", "difficulty": 1}, {"id": 525, "year": 2020, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第8题-题目\n\n\n\n

若使 AOE 网估算工程进度则下列叙述中正确的是( )。

\n
A.关键路径是从原点到汇点边数最多的一条路径
\n
B.关键路径是从原点到汇点路径长度最长的路径
\n
C.增加任一关键活动的时间不会延长工程的工期
\n
D.缩短任一关键活动的时间将会缩短工程的工期
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第8题-解析\n\n\n\n

关键路径 是指权值之和最大而非边数最多的路径,故选项 A 错误。选项 B 正确,是关键路径的概念。无论是存在一条还是存在多条关键路径,增加任一关键活动的时间都会延长工程的工期,因为关键路径始终是权值之和最大的那条路径,选项 C 错误。仅有一条关键路径时,减少关键活动的时间会缩短工程的工期;存在多条关键路径时,缩短一条关键活动的时间不一定会缩短工程的工期,缩短了路径长度的那条关键路径不一定还是关键路径,选项 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 526, "year": 2020, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第9题-题目\n\n\n\n

下列关于大根堆(至少含 2 个元素)的叙述中正确的是( )。

\n

I. 可以将堆看成一颗完全二叉树;II. 可采用顺序存储方式保存堆;

\n

III. 可以将堆看成一棵二叉排序树;IV. 堆中的次大值一定在根的下一层。

\n
A.仅 I,II
\n
B.仅 II,III
\n
C.仅 I,II,IV
\n
D.仅 I,III,IV
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第9题-解析\n\n\n\n

堆 是一棵完全树,采用一维数组存储,故 I 正确,II 正确。大根堆 只要求根结点值大于左右孩子值,并不要求左右孩子值有序,III 错误。堆的定义是递归的,所以其左右子树也是大根堆,所以堆的次大值一定是其左孩子或右孩子,IV 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 527, "year": 2020, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第10题-题目\n\n\n\n

依次将关键字 5, 6, 9, 13, 8, 2, 12, 15 插入初始为空的 4 阶 B 树后, 根节点中包含的关键字是( )。

\n
A.8
\n
B.6, 9
\n
C.8, 13
\n
D.9, 12
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第10题-解析\n\n\n\n

一 个 4 阶 B 树 的任意非叶结点至多含有加 4-1=3 个关键字,在关键字依次插入的过程中,会导致结点的不断分裂,插入过程如下所示。

\n\n
5    6    9
5    6    9    13
9    13
5
6
8    9    13
2    5
6
8    9    12    13
2    5
6
12    13
2    5
6    9
8
12    13    15
2    5
6    9
8
插入 5, 6, 9
插入 13
分裂
插入 8, 2
插入 12
分裂
插入 15

得到根结点包含的关键字为 6, 9。

\n\n\n\n\n", "difficulty": 1}, {"id": 528, "year": 2020, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第11题-题目\n\n\n\n

对大部分元素已有序的数组进行排序时,直接插入排序比简单选择排序效率更高,其原因是( )。

\n

I. 直接插入排序过程中元素之间的比较次数更少

\n

II. 直接插入排序过程中所需要的辅助空间更少

\n

III. 直接插入排序过程中元素的移动次数更少

\n
A.仅 I
\n
B.仅 III
\n
C.仅 I,II
\n
D.仅 I,II 和 III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第11题-解析\n\n\n\n

考虑较极端的情况,对于有序数组,直接插入排序 的比较次数为\nn−1\n,简单选择排序的比较次数始终为\n1+2+⋯+n−1=n(n−1)/2\n,I 正确。两种排序方法的辅助空间都是\nO(1)\n,无差别,II 错误。初始有序时,移动次数均为 0;对于通常情况,直接插入排序每趟插入都\n需要依次向后挪位,而简单选择排序只需与找到的最小元素交换位置,后者的移动次数少很多,III 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 529, "year": 2020, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第12题-题目\n\n\n\n

下列给出的部件中其位数(宽度)一定与机器字长相同的是( )。

\n

I、ALU
II、指令寄存器
III、通用寄存器
IV、浮点寄存器

\n
A.Ⅰ,Ⅱ
\n
B.Ⅰ,Ⅲ
\n
C.Ⅱ,Ⅲ
\n
D.Ⅱ,Ⅲ,IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第12题-解析\n\n\n\n

机器字长 是指 CPU 内部用于整数运算的数据通路的宽度。CPU 内部数据通路是指 CPU 内部的数据流经的路径及路径上的部件,主要是 CPU 内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致才能相互匹配。因此,机器字长等于 CPU 内部用于整数运算的运算器位数和通用寄存器宽度。

ALU(算术逻辑单元)

✅ 一定与机器字长相同

指令寄存器(IR)

❌ 不一定相同

通用寄存器

✅ 通常与机器字长相同

浮点寄存器

❌ 不一定相同

所以 I、III 正确,答案选择 B。

\n\n\n\n\n", "difficulty": 2}, {"id": 530, "year": 2020, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第13题-题目\n\n\n\n

已知带符号整数用补码表示,float 型数据用 IEEE 754 标准表示,假定变量 x 的类型只能是 int 或 float。当 x 的机器数为 C800 0000H 时,x 的值可能是( )。

\n
A.−7×227
\n
B.−216
\n
C.217
\n
D.25×227
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第13题-解析\n\n\n\n

C800 0000H = 1100 1000 0000 0000 0000 0000 0000 0000

将其转换为对应的 float 或 int:

  1. 为 float 型时,尾数隐藏最高位 1 ,数符为 1 表示负数,阶码\n10010000=27+24=128+16\n,\n再减去偏置值 127 得到 17 ,算出 x 值为\n−217\n。

  2. 为 int 型时,带符号补码,为负数,数值部分取反加 1 ,得 011 1000 0000 0000 0000 0000\n0000 0000 ,算出 x 值为\n−7×227\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 531, "year": 2020, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第14题-题目\n\n\n\n

在按字节编址,采用小端方式的 32 位计算机中,按边界对齐方式为以下 C 语言结构型变量 a 分配存储空间。

\n
struct record {\n    short x1;\n    int x2;\n} a;\n
\n

若 a 的首地址为 2020FE00H,a 的成员变量 x2 的机器数为 12340000H,则其中 34H 所在存储单元的地址是( )。

\n
A.2020FE03H;
\n
B.2020FE04H;
\n
C.2020FE05H;
\n
D.2020FE06H;
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第14题-解析\n\n\n\n

在 32 位计算机中,按字节编址,根据 小端序 和按 边界对齐 的定义,给出变量 a 的存放方式如下:

\n\n
地址
说明
2020 FE00H
2020 FE01H
2020 FE02H
2020 FE03H
x1 (LSB)
x1 (MSB)
地址
说明
2020 FE04H
2020 FE05H
2020 FE06H
2020 FE07H
x2 (LSB)
x2 (MSB)
未知
未知
00H
00H
34H
12H
\n\n\n\n\n", "difficulty": 2}, {"id": 532, "year": 2020, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第15题-题目\n\n\n\n

下列关于 TLB 和 Cache 的叙述中,错误的是( )。

\n
A.命中率都与程序局部性有关
\n
B.缺失后都需要去访问主存
\n
C.缺失处理都可以由硬件实现
\n
D.都由 DRAM 存储器组成
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第15题-解析\n\n\n\n

Cache 由 SRAM 组成;TLB 通常由相联存储器组成,也可由 SRAM 组成。DRAM 需要不断刷新,性能偏低,不适合组成 TLB 和 Cache 选项 A、B 和 C 都是 TLB 和 Cache 的特点。
\n\n\n\n\n", "difficulty": 1}, {"id": 533, "year": 2020, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第16题-题目\n\n\n\n

某计算机采用 16 位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有 48 条指令,支持直接、间接、立即、相对 4 种寻址方式,单地址指令中直接寻址方式可寻址范围是( )。

\n
A.0 ~ 255;
\n
B.0 ~ 1023;
\n
C.-128 ~ 127;
\n
D.-512 ~ 511;
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第16题-解析\n\n\n\n

参考 指令格式,48 条指令需要 6 位操作码字段 (\n25<48<26\n), 4 种寻址方式需要 2 位寻址特征位 (\n4=22\n),\n还剩 16 - 6 - 2 = 8 位作为地址码,故直接寻址范围为 0 ~ 255。注意,主存地址不能为负。

🚫 常见误区说明:

\n\n\n\n\n", "difficulty": 3}, {"id": 534, "year": 2020, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第17题-题目\n\n\n\n

下列给出的处理器类型中理想情况下 CPI 为 1 的是( )。

\n

I、单周期 CPU;
II、多周期 CPU;
III、基本流水线 CPU;
IV、超标量流水线 CPU

\n
A.I、II;
\n
B.I、III;
\n
C.II、IV;
\n
D.III、IV.
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第17题-解析\n\n\n\n

CPI 表示执行指令所需的时钟周期数。对于一个程序或一台机器来说,其 CPI 指执行该程序或机器指令集中的所有指令所需的平均时钟周期数。

对于单周期 CPU,令指令周期 = 时钟周期,CPI=1,I 正确。

对于多周期 CPU,CPU 的执行过程分成几个阶段,每个阶段用一个时钟去完成,每种指令所用的时钟数可以不同,CPI > 1 , II 错误。

对于基本流水线 CPU,让每个时钟周期流出一条指令,CPI = 1, III 正确。

超标量流水线 CPU 在每个时钟周期内并发执行多条独立的指令,每个时钟周期流出多条指令,CPI < 1, IV 错误。

\n\n\n\n\n", "difficulty": 2}, {"id": 535, "year": 2020, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第18题-题目\n\n\n\n

下列关于“自陷”(Trap,也称陷阱)的叙述中错误的是( )。

\n
A.自陷是通过陷阱指令预先设定的一类外部中断事件;
\n
B.自陷可用于实现程序调试时的断点设置和单步跟踪;
\n
C.自陷发生后 CPU 将转去执行操作系统内核相应程序;
\n
D.自陷处理完成后返回到陷阱指令的下一条指令执行。
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第18题-解析\n\n\n\n

自陷 是一种内部异常,A 错误。在 8086 中,用于程序调试的“断点设置”功能是通过“自陷”方式实现的,选 项 B 正确。执行到自陷指令时,无条件或有条件地自动调出操作系统内核程序进行执行,选 项 C 正确。CPU 执 行“陷阱指令”后,会自动地根据不同“陷阱”\n类型进行相应的处理,然后返回到“陷阱指令”的下一条指令执行,选 项 D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 536, "year": 2020, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第19题-题目\n\n\n\n

QPI 总线是一种点对点全工双同步串行总线,总线上的设备可同时接收和发送信息,每个方向可同时传输 20 位信息(16 位数据 + 4 位校验位),每个 QPI 数据包有 80 位信息,分 2 个时钟周期传送,每个时钟周期传递 2 次,因此 QPI 总线带宽为每秒传送次数×2B×2。若 QPI 时钟频率为 2.4GHz,则总线带宽为( )。

\n
A.4.8
\n
B.9.6
\n
C.19.2
\n
D.38.4(单位 GB/s)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第19题-解析\n\n\n\n

每个时钟周期传送 2 次,故每秒传送的次数= 时钟频率 x2 = 2.4Gx2/s。

总线带宽 = 每秒传送次数×2B×2 = 2.4G×2×2B×2/s=19.2GB/s。

题中已给出总线带宽公式,降低了难度。公式中的“x2B”是因为每次传输 16 位数据,“x2”

是因为采用点对点全双工总线,两个方向可同时传输信息。

\n\n\n\n\n", "difficulty": 2}, {"id": 537, "year": 2020, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第20题-题目\n\n\n\n

下列事件中属于外部中断事件的是( )。

\n

I、访存时缺页;

\n

II、定时器到时;

\n

III、网络数据包到达;

\n
A.仅 I、II
\n
B.仅 I、III
\n
C.仅 II、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第20题-解析\n\n\n\n

访存时缺页属于 内部异常,I 错误;定时器到时描述的是时钟中断,属于 外部中断,II 正确;网络数据包到达描述的是 CPU 执行指令以外的事件,属于外部中断,III 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 538, "year": 2020, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第21题-题目\n\n\n\n

外部中断包括不可屏蔽中断(NMI)和可屏蔽中断,下列关于外部中断的叙述中错误的是( )。

\n
A.CPU 处于关中断状态时也能响应 NMI 请求;
\n
B.一旦可屏蔽中断请求信号有效,CPU 将立即响应;
\n
C.不可屏蔽中断的优先级比可屏蔽中断的优先级高;
\n
D.可通过中断屏蔽字改变可屏蔽中断的处理优先级。
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第21题-解析\n\n\n\n

由 CPU 内部产生的异常称为 内中断,内中断都是 不可屏蔽中断。通过中断请求线 INTR 和 NMI 从 CPU 外部发出的中断请求为外中断,通过 INTR 信号线发出的外中断是可屏蔽中断,而通过 NMI 信号线发出的是不可屏蔽中断。不可屏蔽中断不受中断标志位的影响,使在关中断的情况下也会被响应,选项 A 正确。

不可屏蔽中断的处理优先级最高,任何时候只要发生不可屏蔽中断,都要中止现行程序的执行,转到不可屏蔽中断处理程序执行,选项 C 正确。

可屏蔽中断 可以通过中断屏蔽字来设定优先级,选项 D 正确。

CPU 响应中断需要满足 3 个条件:① 中断源有中断请求;② CPU 允许中断 及开中断;③ 一条指令执行完毕,且没有更紧迫的任务。故选项 B 错误。

\n\n\n\n\n", "difficulty": 1}, {"id": 539, "year": 2020, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第22题-题目\n\n\n\n

若设备采用周期挪用 DMA 方式进行输入输出,每次 DMA 传送的数据块大小为 512 字节,相应的 I/O 接口中有一个 32 位数数据缓冲寄存器,对于数据输入过程,下列叙述中错误的是( )。

\n
A.每准备好 32 位数据,DMA 控制器就发出一次总线请求;
\n
B.相对于 CPU,DMA 控制器的总线使用权的优先级更高;
\n
C.在整个数据块的传送过过程中,CPU 不可以访问主存储器;
\n
D.数据块传送结束时,会产生“DMA 传送结束”的中断请求。
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第22题-解析\n\n\n\n

题目考查 周期挪用法 的基本概念和过程。

我们先简单回顾一下 周期挪用 DMA 的基本特点:

各选项逐一分析:

A 正确。题中说数据缓冲寄存器是 32 位,那么每准备好 32 位,就要进行一次 DMA 请求。这符合周期挪用方式的基本操作流程。

B 正确。周期挪用的机制就是 DMA 控制器能优先抢占主存总线,在不影响整个系统效率的前提下完成数据传输。

C 错误。这是正确答案。

在周期挪用方式下,CPU 是可以访问主存的,只是当 DMA 传输发生的那个特定周期,CPU 被暂停一个周期,因为 DMA 暂时挪用了总线资源。

也就是说,CPU 的访问会被“打断一下”,而不是整个传输过程中都无法访问主存。

D 正确。DMA 会在一整个数据块(比如 512 字节)传送完毕后,产生一次中断,通知 CPU“数据传送完成”,此时 CPU 可以进行下一步操作(如处理数据等)。

所以正确答案选择 C,因为在周期挪用 DMA 方式下,CPU 在数据传送过程中可以访问主存,只是会偶尔被暂停一个周期,不是整个过程都被阻止。

\n\n\n\n\n", "difficulty": 2}, {"id": 540, "year": 2020, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第23题-题目\n\n\n\n

若多个进程共享同一个文件 F,则下列叙述中,正确的是( )。

\n
A.各进程只能用“读”方式打开文件 F
\n
B.在系统打开文件表中仅有一个表项包含 F 的属性
\n
C.各进程的用户打开文件表中关于 F 的表项内容相同
\n
D.进程关闭 F 时,系统删除 F 在系统打开文件表中的表项
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第23题-解析\n\n\n\n

多个进程可同时以“读”或“写”方式打开文件,操作系统并不保证写操作的互斥性,进程可通过系统调用对文件加锁,保证互斥写(读者 - 写者问题),选项 A 错误。

整个系统只有一个 系统文件打开表,同一个文件打开多次只需改变引用计数,选项 B 正确。

用户进程的打开文件表关于同一个文件不一定相同,例如读写指针位置不一定相同,选项 C 错误。

进程关闭文件时,文件的引用计数减 1 , 引用计数变为 0 时才删除系统打开文件表中的表项,选项 D 错误。

\n\n\n\n\n", "difficulty": 1}, {"id": 541, "year": 2020, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第24题-题目\n\n\n\n

下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是( )。

\n
A.索引分配
\n
B.链接分配
\n
C.连续分配
\n
D.动态分区分配
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第24题-解析\n\n\n\n

索引分配 支持变长的文件,同时可以随机访问文件的指定数据块,选项 A 正确。链接分配\n不支持随机访问,需要依靠指针依次访问,选项 B 错误。连续分配的文件长度固定,不支持\n可变文件长度(连续分配的文件长度虽然也可变,但是需大量移动数据,代价较大,相比之\n下不太合适),选项 C 错误。动态分区分配是内存管理方式,不是磁盘空间的管理方式,选\n项 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 542, "year": 2020, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第25题-题目\n\n\n\n

下列与中断相关的操作中,由操作系统完成的是()。

\n

Ⅰ、保存被中断程序的中断点

\n

Ⅱ、提供中断服务

\n

Ⅲ、初始化中断向量表

\n

Ⅳ、保存中断屏蔽字

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅱ、Ⅳ
\n
C.仅Ⅲ、Ⅳ
\n
D.仅Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第25题-解析\n\n\n\n

当 CPU 检测到中断信号后,由硬件自动保存被中断程序的断点(即程序计数器 PC), I 错\n误。之后,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址(各\n中断向量统一存放在中断向量表中,该表由操作系统初始化,Ⅲ 正确)。接下来开始执行\n中断服务程序,保存 PSW、保存中断屏蔽字、保存各通用寄存器的值,并提供与中断信号\n对应的中断服务,中断服务程序属于操作系统内核,Ⅱ 和 Ⅳ 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 543, "year": 2020, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第26题-题目\n\n\n\n

下列与进程调度有关的因素中,在设计多级反馈队列调度算法时需要考虑的是( )。

\n

Ⅰ. 就绪队列的数量

\n

Ⅱ. 就绪队列的优先级

\n

Ⅲ. 各就绪队列的调度算法

\n

Ⅳ. 进程在就绪队列间的迁移条件

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅲ、Ⅳ
\n
C.仅Ⅱ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ和Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第26题-解析\n\n\n\n

多级反馈队列 调度算法需要综合考虑优先级数量、优先级之间的转换规则等,就绪队列的\n数量会影响长进程的最终完成时间,I 正确;就绪队列的优先级会影响进程执行的顺序,II\n正确;各就绪队列的调度算法会影响各队列中进程的调度顺序,m 正确;进程在就绪队列\n中的迁移条件会影响各进程在各队列中的执行时间,IV 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 544, "year": 2020, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第27题-题目\n\n\n\n

某系统中有 A、B 两类资源各 6 个,t 时刻资源分配及需求情况如下表所示。

\n
进程A 已分配数量B 已分配数量A 需求总量B 需求总量
P12344
P22131
P31234
\n

t 时刻安全性检测结果是( )。

\n
A.存在安全序列 P1、P2、P3
\n
B.存在安全序列 P2、P1、P3
\n
C.存在安全序列 P2、P3、P1
\n
D.不存在安全序列
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第27题-解析\n\n\n\n

首先求出 需求矩阵:\n由 Allocation 得知当前 Available 为 (1,0)。由需求矩阵可知,初始只能满足 P2 的需求,选\n项 A 错误。P2 释放资源后 Available 变为 (3,1),此时仅能满足 P1 的需求,选 项 C 错误。\nP1 释放资源后 Available 变为 (5,4),可以满足 P 3 的需求,得到的安全序列为 P2, Pl, P3,\n选项 B 正确,选项 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 545, "year": 2020, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第28题-题目\n\n\n\n

下列因素中,影响请求分页系统有效(平均)访存时间的是( )。

\n

Ⅰ. 缺页率

\n

Ⅱ. 磁盘读写时间

\n

Ⅲ. 内存访问时间

\n

Ⅳ. 执行缺页处理程序的 CPU 时间

\n
A.仅Ⅱ、Ⅲ
\n
B.仅Ⅰ、Ⅳ
\n
C.仅Ⅰ、Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ和Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第28题-解析\n\n\n\n

I 影响缺页中断的频率,缺页率越高,平均访存时间越长;Ⅱ 和 Ⅳ 影响缺页中断的处理时\n间,中断处理时间越长,平均访存时间越长;皿影响访问页表和访问目标物理地址的时间,\n故Ⅰ、Ⅱ、Ⅲ 和Ⅳ 均正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 546, "year": 2020, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第29题-题目\n\n\n\n

下列关于父进程与子进程的叙述中,错误的是( )。

\n
A.父进程与子进程可以并发执行
\n
B.父进程与子进程共享虚拟地址空间
\n
C.父进程与子进程有不同的进程控制块
\n
D.父进程与子进程不能同时使用同一临界资源
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第29题-解析\n\n\n\n

父进程与子进程 当然可以并发执行,选项 A 正确。父进程可与子进程共享一部分资源,但\n不能共享虚拟地址空间,在创建子进程时,会为子进程分配资源,如虚拟地址空间等,选\n项 B 错误。临界资源一次只能为一个进程所用,选项 D 正确。进程控制块 PCB 是进程存\n在的唯一标志,每个进程都有自己的 PCB,选项 C 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 547, "year": 2020, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第30题-题目\n\n\n\n

对于具备设备独立性的系统,下列叙述中,错误的是( )。

\n
A.可以使用文件名访问物理设备
\n
B.用户程序使用逻辑设备名访问物理设备
\n
C.需要建立逻辑设备与物理设备之间的映射关系
\n
D.更换物理设备后必须修改访问该设备的应用程序
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第30题-解析\n\n\n\n

设备可视为特殊文件,选项 A 正确。用户使用 逻辑设备名 来访问物理文件,有利于设备独\n立性,选项 B 正确。通过逻辑设备名访问物理设备时,需要建立逻辑设备和物理设备之间\n的 映射关系,选项 C 正确。应用程序按逻辑设备名访问设备,再经驱动程序的处理来控制物理设备,若更换物理设备,则只需更换驱动程序,而无须修改应用程序,选项 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 548, "year": 2020, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第31题-题目\n\n\n\n

某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为 64 字节,其中 4 字节存放索引结点号,60 字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )。

\n
A.226
\n
B.232
\n
C.260
\n
D.264
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第31题-解析\n\n\n\n

在总长为 64 字节的目录项中,索引结点占 4 字节,即 32 位。不同目录下的文件的文件名可以相同,所以在考虑系统创建最多文件数量时,只需考虑索引结点的个数,即创建文件数量上限 = 索引结点数量上限。整个系统中最多存储\n232\n个索引结点,因此整个系统最多可以表示\n232\n个文件,选项 B 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 549, "year": 2020, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2020-第32题-题目\n\n\n\n

下列准则中,实现临界区互斥机制必须遵循的是( )。

\n

Ⅰ、两个进程不能同时进入临界区

\n

Ⅱ、允许进程访问空闲的临界资源

\n

Ⅲ、进程等待进入临界区的时间是有限的

\n

Ⅳ、不能进入临界区的执行态进程立即放弃 CPU

\n
A.仅Ⅰ、Ⅳ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅰ、Ⅱ、Ⅲ
\n
D.仅Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第32题-解析\n\n\n\n

实现临界区互斥需满足多个准则。“忙则等待”准则,即两个进程不能同时访问临界区,Ⅰ\n正确。 “空闲让进”准则,若临界区空闲,则允许其他进程访问,Ⅱ 正确。 “有限等待”\n准则,即进程应该在有限时间内访问临界区,Ⅲ 正确。Ⅰ、Ⅱ 和 Ⅲ 是互斥机制必须遵循的\n原则。Ⅳ 是“让权等待”准则,不一定非得实现,如皮特森算法。
\n\n\n\n\n", "difficulty": 1}, {"id": 550, "year": 2020, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第33题-题目\n\n\n\n

下图描述的协议要素是 (  )。

\n
\n\n\n\n \n 408真题系统\n \n\n
发送方
接收方
时间
\n

Ⅰ、语法;Ⅱ、语义;Ⅲ、时序

\n
A.仅 Ⅰ;
\n
B.仅 Ⅱ;
\n
C.仅 Ⅲ;
\n
D.Ⅰ、Ⅱ、Ⅲ
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第33题-解析\n\n\n\n

本题考查 网络协议要素。协议 由语法、语义和时序(又称同步)三部分组成:

由图可知发送方与接收方依次交换信息,体现了协议三要素中的时序要素。

\n\n\n\n\n", "difficulty": 1}, {"id": 551, "year": 2020, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第34题-题目\n\n\n\n

下列关于虚电路网络的叙述中错误的是( )。

\n
A.可以确保数据分组传输顺序;
\n
B.需要为每条虚电路预分配带宽;
\n
C.建立虚电路时需要进行路由选择;
\n
D.依据虚电路号(VCID)进行数据分组 转发。
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第34题-解析\n\n\n\n

虚电路 服务需要有建立连接过程,每个分组使用短的虚电路号,属于同一条虚电路的分组\n按照同一路由进行转发,分组到达终点的顺序与发送顺序相同,可以保证有序传输,不需\n要为每条虚电路预分配带宽。
\n\n\n\n\n", "difficulty": 2}, {"id": 552, "year": 2020, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第35题-题目\n\n\n\n

下图所示的网络冲突域和广播域的个数分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
路由器
以太网交换机
100 BastT 集线器
\n
A.2,2;
\n
B.2,4;
\n
C.4,2;
\n
D.4,4;
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第35题-解析\n\n\n\n

参考网络设备总结:\n网络层设备路由器可以隔离广播域和冲突域;链路层设备普通交换机只能隔离冲突域;物\n理层设备集线器、中继器既不能隔离冲突域又不能隔离广播域。因此,题中共有 2 个广播\n域、4 个冲突域。
\n\n\n\n\n", "difficulty": 1}, {"id": 553, "year": 2020, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第36题-题目\n\n\n\n

假设主机采用停等协议向主机乙发送数据帧,数据帧长与确认帧长均为 1000B。数据传输速率是 10kbps,单项传播延时是 200ms。则甲的最大信道利用率( )。

\n
A.80%;
\n
B.66.7%;
\n
C.44.4%;
\n
D.40%
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第36题-解析\n\n\n\n

发送数据帧和确认帧的时间均为 t= 1000x8b/10kbps = 800ms。

发送周期 T = 800ms + 200ms + 800ms + 200ms = 2000ms。

信道利用率 = t/T x 100% = 800/2000x100% = 40%。

\n\n\n\n\n", "difficulty": 3}, {"id": 554, "year": 2020, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第37题-题目\n\n\n\n

某 IEEE 802.11 无线局域网中主机 H 与 AP 之间发送或接收 CSMA/CA 帧的过程如下图所示,在 H 或 AP 发送帧前所等待的帧间间隔时间(IFS)中最长的是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
RTS
CTS
DATA
ACK
IFS1
IFS3
IFS2
IFS4
时间
\n
A.IFS1;
\n
B.IFS2;
\n
C.IFS3;
\n
D.IFS4;
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第37题-解析\n\n\n\n

为了尽量避免碰撞,IEEE 802.11 规定,所有站在完成发送后,必须等待一段很短的时间(继续\n监听)才能发送下一帧。这段时间称为帧间间隔(InterFrame Space, IFS)。帧间间隔的长\n短取决于该站要发送的帧的类型。IEEE 802.11 使 用 3 种帧间间隔:

网络中的控制帧及所接收数据的确认帧都采用 SIFS 作为发送之前的等待时延。当结点要发\n送数据帧时,载波监听到信道空闲时,需等待 DIFS 后发送 RTS 预约信道,图中 IFS1 对应\n的是帧间间隔 DIFS,时间最长,图中 IFS2、IFS3、IFS4 对应 SIFS。

\n\n\n\n\n", "difficulty": 1}, {"id": 555, "year": 2020, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第38题-题目\n\n\n\n

若主机甲与主机乙已建立一条 TCP 连接,最大段长(MSS)为 1KB,往返时间(RTT)为 2ms,则在不出现拥塞的前提下,拥塞窗口从 8KB 增长到 32KB 所需的最长时间是:

\n
A.4ms;
\n
B.8ms;
\n
C.24ms;
\n
D.48ms;
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第38题-解析\n\n\n\n

由于慢开始门限 ssthresh 可以根据需求设置,为了求拥塞窗口从 8KB 增长到 32KB 所需的最长时间,可以假定慢开始门限小于等于 8KB,只要不出现拥塞,拥塞窗口就都是加法增大,每经历一个传输轮次(RTT),拥塞窗口逐次加 1,所需最长时间为 (32-8)x2ms=48ms。
\n\n\n\n\n", "difficulty": 0}, {"id": 556, "year": 2020, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第39题-题目\n\n\n\n

若主机甲与主机乙建立 TCP 连接时发送的 SYN 段中的序号为 1000,在断开连接时,甲发送给乙的 FIN 段中的序号为 5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为:

\n
A.4002;
\n
B.4001;
\n
C.4000;
\n
D.3999;
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第39题-解析\n\n\n\n

甲与乙建立 TCP 连接时发送的 SYN 段中的序号为 1000,则在数据传输阶段所用的起始序号为 1001;断开连接时,甲发送给乙的 FIN 段中的序号为 5001,在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为 5001-1001=4000。
\n\n\n\n\n", "difficulty": 3}, {"id": 557, "year": 2020, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2020-第40题-题目\n\n\n\n

假设下图所示网络中的本地域名服务器只提供递归查询服务,其他域名的服务器均只提供迭代查询服务;局域网内主机访问 Internet 上各服务器的往返时间(RTT)均为 10ms,忽略其他各种时延,若主机 H 通过超链接 http://www.abc.com/index.html,请求浏览纯文本 Web 页 index.html,则从点击 超链接开始到浏览器接收到 index.html 页面为止,所需最短、最长时间分别是:

\n
\n\n\n\n \n 408真题系统\n \n\n
路由器
本地域名服务器
局域网
H
www.abc.com
Internet
com 顶级
域名服务器
根域名
服务器
abc.com
域名服务器
\n
A.10ms,40ms;
\n
B.10ms,50ms;
\n
C.20ms,40ms;
\n
D.20ms,50ms;
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第40题-解析\n\n\n\n

题中 RTT 均为局域网内主机(主机 H、本地域名服务器)访 问 Internet 上各服务器的往返时间,且忽略其他时延,因此主机 H 向本地域名服务器的查询时延忽略不计。

最短时间:本地主机中有该域名到 IP 地址对应的记录,因此不需要 DNS 查询时延,直接和 www.abc.com 服务器建立 TCP 连接再进行资源访问,TCP 连接建立需要 1 个 RTT,接着发送访问请求并收到服务器资源响应需要 1 个 RTT,共计 2 个 RTT,即 20ms;

最长时间:本地主机 递归查询 本地域名服务器(延时忽略),本地服务器依次迭代查询根域名服务器、com 顶级域名服务器、abc.com 域名服务器,共 3 个 RTT,查询到 IP 地址后,将该映射返回给主机 H,主机 H 和 www.abc.com 服务器建立 TCP 连接再进行资源访问,共 2 个 RTT,因此最长时间需要 3+2=5 个 RTT,即 50ms。

\n\n\n\n\n", "difficulty": 0}, {"id": 558, "year": 2020, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2020-第41题-题目\n\n\n\n

定义三元组\n(a,b,c)\n(\na,b,c\n均为正数)的距离\nD=∣a−b∣+∣b−c∣+∣c−a∣\n。给定\n3\n个非空整数集合\nS1​,S2​,S3​\n,按升序分别存储在\n3\n个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组\n(a,b,c)\n(\na∈S1​,b∈S2​,c∈S3​\n)中的最小距离。例如\nS1​={−1,0,9},S2​={−25,−10,10,11},S3​={2,9,17,30,41}\n。则最小距离为\n2\n,相应的三元组为\n(9,10,9)\n。

\n

要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2020-第41题-解析\r\n\r\n\r\n\r\n

分析,由\r\nD=∣a−b∣+∣b−c∣+∣c−a∣≥0\r\n得:

① 当\r\na=b=c\r\n时,距离最小。

② 其余情况。不失一般性,假设观察下面的数轴:

\"\"

L1​=∣a−b∣\r\n,\r\nL2​=∣b−c∣\r\n,\r\nL3​=∣c−a∣\r\n,\r\nD=∣a−b∣+∣b−c∣+∣c−a∣=L1​+L2​+L3​=2L3​

由\r\nD\r\n的表达式可知,事实上决定\r\nD\r\n大小的关键是\r\na\r\n和\r\nc\r\n之间的距离,于是问题就可以简化

为每次固定\r\nc\r\n找一个\r\na\r\n使得\r\nL3​=∣c−a∣\r\n最小。

1)算法的基本设计思想

2)算法实现

void solve(int S1[], int n1, int S2[], int n2, int S3[], int n3) {\r\n  int i = 0, j = 0, k = 0;\r\n  int res = INT32_MAX;\r\n  while (i < n1 && j < n2 && k < n3) {\r\n    int a = S1[i], b = S2[j], c = S3[k];\r\n    int D = abs(a-b) + abs(b-c) + abs(a-c);\r\n    res = min(res, D);\r\n    int v = min3(a, b, c);\r\n    if (v == a) {\r\n      i++;\r\n    } else if (v == b) {\r\n      j++;\r\n    } else {\r\n      k++;\r\n    }\r\n  }\r\n  return res;\r\n}\r\n

3)设\r\nn=∣S1​∣+∣S2​∣+∣S3​∣\r\n,时间复杂度为\r\nO(n)\r\n,空间复杂度为\r\nO(1)\r\n。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 559, "year": 2020, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2020-第42题-题目\n\n\n\n

任一个字符的编码都不是其它字符编码的前缀,则称这种编码具有前缀特性。现有某字符集(字符个数≥2)的不等长编码,每个字符的编码均为二进制的 0、1 序列,最长为 L 位,且具有前缀特性。请回答下列问题:

\n

⑴ 哪种数据结构适宜保存上述具有前缀特性的不等长编码?

\n

⑵ 基于你所设计的数据结构,简述从 0/1 串到字符串的译码过程。

\n

⑶ 简述判定某字符集的不等长编码是否具有前缀特性的过程。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第42题-解析\n\n\n\n

1)使用一棵二叉树保存字符集中各字符的编码,每个编码对应于从根开始到达某叶结点的\n一条路径,路径长度等于编码位数,路径到达的叶结点中保存该编码对应的字符。

2)从左至右依次扫描 0/1 串中的各位。从根开始,根据串中当前位沿当前结点的左子指针\n或右子指针下移,直到移动到叶结点时为止。输出叶结点中保存的字符。然后从根开始\n重复这个过程,直到扫描到 0/1 串结束,译码完成。

3)二叉树既可用于保存各字符的编码,又可用于检测编码是否具有前缀特性。判定编码是\n否具有前缀特性的过程,也是构建二叉树的过程。初始时,二叉树中仅含有根结点,其\n左子指针和右子指针均为空。

依次读入每个编码 C,建立/寻找从根开始对应于该编码的一条路径,过程如下:

对每个编码,从左至右扫描 C 的各位,根据 C 的当前位 (0 或 1) 沿结点的指针(左子指\n针或右子指针)向下移动。当遇到空指针时,创建新结点,让空指针指向该新结点并继续\n移动。沿指针移动的过程中,可能遇到三种情况:

  1. 若遇到了叶结点(非根),则表明不具有前缀特性,返回。
  2. 若在处理 C 的所有位的过程中,均没有创建新结点,则表明不具有前缀特性,返回。
  3. 若在处理 C 的最后一个编码位时创建了新结点,则继续验证下一个编码。

若所有编码均通过验证,则编码具有前缀特性。

\n\n\n\n\n", "difficulty": 2}, {"id": 560, "year": 2020, "index": 43, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2020-第43题-题目\n\n\n\n

有实现\nx×y\n的两个 C 语言函数如下:

\n
unsigned umul (unsigned x, unsigned y) { return x*y; }\nint imul (int x, int y) { return x * y; }\n
\n

假定某计算机 M 中 ALU 只能进行加减运算和逻辑运算。请回答下列问题。

\n

(1) 若 M 的指令系统中没有乘法指令,但有加法、减法和移位等指令,则在 M 上也能实现上述两个函数中的乘法运算,为什么?

\n

(2) 若 M 的指令系统中有乘法指令,则基于 ALU、移位器、寄存器以及相应控制逻辑实现乘法指令时,控制逻辑的作用是什么?

\n

(3) 针对以下三种情况:
①没有乘法指令;
②有使用 ALU 和移位器实现的乘法指令;
③有使用阵列乘法器实现的乘法指令,
函数 umul() 在哪种情况下执行时间最长?哪种情况下执行的时间最短?说明理由。

\n

(4)\nn\n位整数乘法指令可保存\n2n\n位乘积,当仅取低\nn\n位作为乘积时,其结果可能会发生溢出。当\nn=32\n、\nx=231−1\n 、\ny=2\n时,带符号整数乘法指令和无符号整数乘法指令得到的\nx×y\n的\n2n\n位乘积分别是什么(用十六进制表示)?此时函数 umul() 和 imul() 的返回结果是否溢出?对于无符号整数乘法运算,当仅取乘积的低位作为乘法结果时,如何用\n2n\n位乘积进行溢出判断

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第43题-解析\n\n\n\n

1)乘法运算可以通过加法和移位来实现。编译器可以将乘法运算转换为一个循环代码段,在循环代码段中通过比较、加法和移位等指令实现乘法运算。

2)控制逻辑的作用是控制循环次数,控制加法和移位操作。

3)①最长,③最短。对于①,需要用循环代码段(即软件)实现乘法操作,因而需要反复\n执行很多条指令,而每条指令都需要取指令、译码、取数、执行并保存结果,所以执行\n时间很长;对于②和③,都只需用一条乘法指令实现乘法操作,不过②中的乘法指令需\n要多个时钟周期才能完成,而③中的乘法指令可以在一个时钟周期内完成,所以③的执\n行时间最短。

4)当\nn=32\n,\nx=231−1\n,\ny=2\n时,带符号整数和无符号整数乘法指令得到的\n64\n位乘积都是\n00000000 FFFF FFFEH。int 型的表示范围为\n[−231,231−1]\n,故函数 imul() 的结果溢出:\nunsigned int 型的表示范围为\n[0,232−1]\n,故函数 umul() 的结果不溢出。对于无符号整数\n乘法,若乘积高\nn\n位全为\n0\n,即使低\nn\n位全为\n1\n也正好是\n232−1\n,不溢出,否则溢出。

\n\n\n\n\n", "difficulty": 2}, {"id": 561, "year": 2020, "index": 44, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2020-第44题-题目\n\n\n\n

假定主存地址为 32 位,按字节编址,指令 Cache 和数据 Cache 与主存之间均采用 8 路组相联映射方式,直写(WriteThrough)写策略和 LRU 替换算法,主存块大小为 64B,数据区容量各为 32KB。开始时 Cache 均为空。请回答下列问题。

\n

(1) Cache 每一行中标记(Tag)、LRU 位各占几位?是否有修改位?

\n

(2) 有如下 C 语言程序段:

\n
for(k = 0; k < 1024; k++)\n    s[k] = 2 * s[k];\n
\n

若数组 s 及其变量 k 均为 int 型,int 型数据占 4B,变量 k 分配在寄存器中,数组 s 在主存中的起始地址为 008000C0H,则该程序段执行过程中,访问数组 s 的数据 Cache 缺失次数为多少?

\n

(3) 若 CPU 最先开始的访问操作是读取主存单元 00010003H 中的指令,简要说明从 Cache 中访问该指令的过程,包括 Cache 缺失处理过程。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第44题-解析\n\n\n\n

1)主存块大小为 64B=2 字节,所以主存地址低 6 位为块内地址,Cache 组数为\n32KB/(64B×8) = 64 =\n26\n,故主存地址中间 6 位为 Cache 组号,主存地址中高 32-6-6\n=20 位为标记,采用 8 路组相联映射,故每行中的 LRU 位占 3 位,采用直写方式,故\n没有修改位。

2)0080 00C0H = 0000 0000 1000 0000 0000 0000 1100 0000B,主存地址的低 6 位为块内地\n址,为全 0,故 s 位于一个主存块的开始处,占 1024×4B/64B=64 个主存块:在执行程\n序段的过程中,每个主存块中的 64B/4B=16 个数组元素依次读、写 1 次,因而对每个\n主存块,总是第一次访问缺失,此时会将整个主存块调入 Cache,之后每次都命中。综\n上,数组 s 的数据 Cache 访问缺失次数为 64 次。

3)0001 0003H = 0000 0000 0000 0001 0000 0000 0000 0011B,根据主存地址划分可知,组\n索引为 0,故该地址所在主存块被映射到指令 Cache 的第 0 组;因为 Cache 初始为空,\n所有 Cache 行的有效位均为 O,所以 Cache 访问缺失。此时,将该主存块取出后存入指\n令 Cache 的第 0 组的任意一行,并将主存地址高 20 位(00010H)填入该行标记字段,\n设置有效位,修改 LRU 位,最后根据块内地址 000011B 从该行中取出相应的内容。

\n\n\n\n\n", "difficulty": 0}, {"id": 562, "year": 2020, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第45题-题目\n\n\n\n

现有 5 个操作 A、B、C、D 和 E,操作 C 必须在 A 和 B 完成后执行,操作 E 必须在 C 和 D 完成后执行,请使用信号量的 wait()、signal() 操作(P、V 操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第45题-解析\n\n\n\n

本题要求实现操作的先后顺序,没有互斥关系,是一个简单的同步问题。\n本题虽然有 5 个操作,但是只有 4 个同步关系,因此分别设置信号量 SAC、SBC、SCE 和 SDE 对应 4 个同步关系。

semaphore SAC = 0; // 实现 A 是 C 的前驱关系\nsemaphore SBC = 0; // 实现 B 是 C 的前驱关系\nsemaphore SCE = 0; // 实现 C 是 E 的前驱关系\nsemaphore SDE = 0; // 实现 D 是 E 的前驱关系\n\nA() {\n  操作A;\n  V(SAC);\n}\n\nB() {\n  操作B;\n  V(SBC);\n}\n\nC() {\n  P(SAC);\n  P(SBC);\n  操作C;\n  V(SCE);\n}\n\nD() {\n  操作D;\n  V(SDE);\n}\n\nE() {\n  P(SCE);\n  P(SDE);\n  操作E;\n}\n
\n\n\n\n\n", "difficulty": 0}, {"id": 563, "year": 2020, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第46题-题目\n\n\n\n

某 32 位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为 4 字节,虚拟地址结构如下所示。

\n

某 C 程序中数组 a[1024][1024]的起始虚拟地址为 1080 0000H,数组元素占 4 字节,该程序运行时,其进程的页目录起始物理地址为 0020 1000H,请回答下列问题。

\n

(1) 数组元素 a[1][2]的虚拟地址是什么?对应的页目录号和页号分别是什么?对应的页目录项的物理地址是什么?若该目录项中存放的页框号为 00301H,则 a[1][2]所在页对应的页表项的物理地址是什么?

\n

(2) 数组 a 在虚拟地址空间中所占区域是否必须连续?在物理地址空间中所占区域是否必须连续?

\n

(3) 已知数组 a 按行优先方式存放,若对数组 a 分别按行遍历和按列遍历,则哪一种遍历方式的局部性更好?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第46题-解析\n\n\n\n

1) ①页面大小=\n212\nB = 4096B = 4KB。每个数组元素 4B,每个页面可以存放 4KB/4B=\n1024 个数组元素,正好是数组的一行,数组 a 按行优先方式存放。10800000H 的虚\n页号为 10800H,因此 a[0] 行存放在虚页号为 10800H 的页面中,a[1] 行存放在页号\n为 10801H 的页面中。a[1][2] 的虚拟地址为 10801000H+4×2=10801008H。

②转换为二进制 0001 0000 1000 0000 0001 0000 0000 1000,根据虚拟地址结构可知,对\n应的页目录号为 042H,页号为 001H。

③进程的页目录表起始地址为 00201000H,每个页目录项长 4B,因此 042H 号页目录\n项的物理地址是 00201000H+4×42H=00201108H。

④页目录项存放的页框号为 00301H,二级页表的起始地址为 00301000H,因此 a[1][2]\n所在页的页号为 001H,每个页表项 4B,因此对应的页表项物理地址是 00301000H + 001H×4 = 00301004H。

2)根据数组的随机存取特点,数组 a 在虚拟地址空间中所占的区域必须连续,由于数组 a\n不止占用一页,相邻逻辑页在物理上不一定相邻,因此数组 a 在物理地址空间中所占的\n区域可以不连续。

3)由 1)可知每个页面正好可以存放一整行的数组元素,“按行优先方式存放”意味着数\n组的同一行的所有元素都存放在同一个页面中,同一列的各个元素都存放在不同的页面\n中,因此数组 a 按行遍历的局部性较好。

\n\n\n\n\n", "difficulty": 1}, {"id": 564, "year": 2020, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2020-第47题-题目\n\n\n\n

某校园网有两个局域网,通过路由器 R1、R2 和 R3 互联后接入 Internet,S1 和 S2 为 以太网交换机,局域网采用静态 IP 地址配置,路由器部分接口以及各主机的 IP 地址如图所示:

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
203.10.2.5/30
203.10.2.1/30
203.10.2.2/30
192.168.1.1
NAT
NAT
203.10.2.6/30
192.168.1.1
S1
S2
web 服务器
H1
192.168.1.2
192.168.1.3
H2
H3
192.168.1.2
192.168.1.3
R1
R2
R3
\n

假设 NAT 转换表结构为:

\n
\n\n
IP 地址
端口号
IP 地址
端口号
外网
内网
\n

请回答下列问题:

\n

1)为使 H2 和 H3 能够访问 Web 服务器(使用默认端口号),需要进行什么配置?

\n

2)若 H2 主动访问 Web 服务器时,将 HTTP 请求报文封装到 IP 数据报 P 中发送,则 H2 发送 P 的源 IP 地址和目的 IP 地址分别是?经过 R3 转发后,P 的源 IP 地 址和目的 IP 地址分别是?经过 R2 转发后,P 的源 IP 地址和目的 IP 地址分别是?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2020-第47题-解析\n\n\n\n

1)两个子网使用了相同的网段,且路由器开启了 NAT 功能,加上题干给出了 NAT 表的结\n构,因此需要配置 NAT 表。路由器 R2 开启 NAT 服务,当路由器 R2 从 WAN 口收到\nH2 或 H3 发来的数据时,根据 NAT 表发送给 Web 服务器的对应端口。外网 P 地址应\n该为路由器的外端 P 地址,内网 P 地址应该为 Web 服务器的地址,Web 服务器的默\n认端口为 80,因此内网端口号固定为 80,当其他网络的主机访问 Web 服务器时,默认\n访问的端口应该也是 80,但是访问的目的 P 是路由器的 P 地址,因此 NAT 表中的外\n部端口最好也统一为 80。题目中并未要求对 H1 进行访问,因此 H1 的 NAT 表项可以\n不写。R2 的 NAT 表配置如下:

\n\n
外网
内网
IP 地址
端口号
IP 地址
端口号
203.10.2.2
80
192.168.1.2
80

2)由于启用了 NAT 服务,H2 发送的 P 的源 P 地址应该是 H2 的内网地址,目的地址应\n该是 R2 的外网 P 地址,源 P 地址是 192.168.1.2,目的 P 地址是 203.10.2.2。R3 转发\n后,将 P 的源 P 地址改为 R3 的外网 P 地址,目的 P 地址仍然不变,源 P 地址是\n203.10.2.6,目的 IP 地址是 203.10.2.2。R2 转发后,将 P 的目的 P 地址改为 Web 服务\n器的内网地址,源地址仍然不变,源 P 地址是 203.10.2.6,.目的 P 地址是 192.168.1.2。

\n\n\n\n\n", "difficulty": 1}, {"id": 565, "year": 2021, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第1题-题目\n\n\n\n

已知头指针 h 指向一个带头结点的非空单循环链表,结点结构为

\n
\n\n\n\n \n 408真题系统\n \n\n
data
next
\n

其中 next 是指向直接后继结点的指针,p 是尾指针,q 是临时指针。现要删除该链表的第一个元素,正确的语句序列是( )。

\n
A.h->next = h->next->next; q = h->next; free(q);
\n
B.q = h->next; h->next = h->next->next; free(q);
\n
C.q = h->next; h->next = q->next; if (p != q) p = h; free(q);
\n
D.q = h->next; h->next = q->next; if (p == q) p = h; free(q);
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第1题-解析\n\n\n\n

删除头结点后一个结点的基本流程为 q = h->next; h->next = q->next; free(q);,即通过指针操作跳过下一个结点后删除该结点。\n由于题目中提到了该链表非空,所以可以确定 q = h->next 一定不为空。\n但是如果链表中只有一个结点的话,我们还需要在删除该结点后,将尾指针指向头结点的位置,即 if (p == q) p = h;
\n\n\n\n\n", "difficulty": 1}, {"id": 566, "year": 2021, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第2题-题目\n\n\n\n

已知初始为空的队列 Q 的一端仅能进行入队操作,另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1, 2, 3, 4, 5 , 则不能得到的出队序列是( )。

\n
A.5,4,3,1,2
\n
B.5,3,1,2,4
\n
C.4,2,1,3,5
\n
D.4,1,3,2,5
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第2题-解析\n\n\n\n

每次入队有两个选择,但是出队只有能一个选择,所以 2 在出队时必然和 1 相邻,3 在出队时必然与 2 相邻,以此类推,可以判断 D 选项是不可能的,因为 1 和 2 没有相邻。
\n\n\n\n\n", "difficulty": 1}, {"id": 567, "year": 2021, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第3题-题目\n\n\n\n

已知二维数组 A 按行优先方式存储,每个元素占用 1 个存储单元。若元素 A[0][0] 的存储地址是 100, A[3][3] 的存储地址是 220 , 则元素 A[5][5] 的存储地址是( )。

\n
A.295
\n
B.300
\n
C.301
\n
D.306
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第3题-解析\n\n\n\n

A[3][3] 和 A[0][0] 相差 3 行 3 列,A[5][5] 和 A[3][3] 相差 2 行 2 列,其在内存中的偏移比值为 3 / 2。\n由此可以计算 &A[5][5]:220 + (220 - 100) / 3 * 2 = 300
\n\n\n\n\n", "difficulty": 1}, {"id": 568, "year": 2021, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第4题-题目\n\n\n\n

某森林 F 对应的二叉树为 T , 若 T 的先序遍历序列是 a, b, d, c, e, g, f , 中序遍历序列是 b, d, a, e, g, c, f , 则 F 中树的棵数是( )。

\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第4题-解析\n\n\n\n

这题考察的是两点,一是 二叉树构建,即根据 先序 和 中序 构建二叉树。二是 森林转二叉树,构建出二叉树后即可反向转化得到对应的森林。\n森林中树的个数 即 二叉树根结点的右结点个数之和。
\n\n\n\n\n", "difficulty": 1}, {"id": 569, "year": 2021, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第5题-题目\n\n\n\n

若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是( )。

\n
A.89
\n
B.200
\n
C.208
\n
D.289
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第5题-解析\n\n\n\n

根据 Huffman 构建过程 来构建得到如下二叉树:

         89\n      /      \\\n     52      37\n   /   \\    /  \\\n  22   30  16  21\n /  \\\n10  12\n

带权路径长度 为:\n(10+12)×3+(30+16+21)×2=200

\n\n\n\n\n", "difficulty": 1}, {"id": 570, "year": 2021, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第6题-题目\n\n\n\n

给定平衡二叉树如下图所示,插入关键字 23 后,根中的关键字是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
20
16
30
25
40
\n
A.16
\n
B.20
\n
C.23
\n
D.25
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第6题-解析\n\n\n\n

根据 AVL 旋转方法 可知,这题采用 RL 型旋转,旋转后树的结构为:

    25\n   /  \\\n  20   30\n /  \\    \\\n16  23    40\n

根结点为 25

\n\n\n\n\n", "difficulty": 2}, {"id": 571, "year": 2021, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第7题-题目\n\n\n\n

给定如下有向图,该图的拓扑有序序列的个数是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
A
B
F
C
E
D
\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第7题-解析\n\n\n\n

依次选择入度为 0 的顶点进行输出,得到 拓扑序列,发现只有一种可能性。
\n\n\n\n\n", "difficulty": 1}, {"id": 572, "year": 2021, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第8题-题目\n\n\n\n

使用 Dijkstra 算法求下图中从顶点 1 到其余各顶点的最短路径,将当前找到的从顶点 1 到顶点 2, 3, 4, 5 的最短路径长保存在数组 dist 中,求出第二条最短路径后,dist 中的内容更新为( )

\n
\n\n\n\n \n 408真题系统\n \n\n
1
5
2
4
3
6
26
15
3
6
1
6
22
8
\n
A.26, 3, 14, 6
\n
B.25, 3, 14, 6
\n
C.21, 3, 14, 6
\n
D.15, 3, 14, 6
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第8题-解析\n\n\n\n

在 dijkstra 算法 中,每次在 dist 数组中选择一个最小值加入顶点集,并从该顶点出发修改 dist 数组。本题中 dist 数组的变化过程如下:\ndist[26, 3, ∞, 6] → [25, 3, ∞, 6] → [21, 3, 14, 6]
\n\n\n\n\n", "difficulty": 1}, {"id": 573, "year": 2021, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第9题-题目\n\n\n\n

在一棵高度为 3 的 3 阶 B 树中,根为第 1 层,若第 2 层中有 4 个关键字,则该树的结点个数最多是( )。

\n
A.11
\n
B.10
\n
C.9
\n
D.8
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第9题-解析\n\n\n\n

保证 特性 中的结点数量尽量多,然后每个结点中元素数量尽量多。\n3 阶 B 树 中个结点最多有两个元素,三个孩子。
\n\n\n\n\n", "difficulty": 1}, {"id": 574, "year": 2021, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第10题-题目\n\n\n\n

设数组 S[] = {93, 946, 372, 9, 146,151, 301, 485, 236, 327, 43, 892}, 采用最低位优先(LSD)基数排序将 S 排列成升序序列。第 1 趟分配、收集后,元素 372 之前、之后紧邻的元素分别是 (  )

\n
A.43,892
\n
B.236,301
\n
C.301,892
\n
D.485,301
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第10题-解析\n\n\n\n

LSD 基数排序 第一趟根据最低位对数组进行排序,得到的结果为 {151, 301, 372, 892, 93, 43, 485, 946, 146, 267, 327}。
\n\n\n\n\n", "difficulty": 1}, {"id": 575, "year": 2021, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第11题-题目\n\n\n\n

将关键字 6, 9, 1, 5, 8, 4, 7 依次插入到初始为空的大根堆 H 中,得到的 H 是(  )。

\n
A.9, 8, 7, 6, 5, 4, 1
\n
B.9, 8, 7, 5, 6, 1, 4
\n
C.9, 8, 7, 5, 6, 4, 1
\n
D.9, 6, 7, 5, 8, 4, 1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第11题-解析\n\n\n\n

参考 构造初始堆 的过程:

\n\n
6
6
9
9
6
9
6
1
9
6
1
5
9
6
1
5
8
9
8
1
5
6
9
8
1
5
6
4
9
8
4
5
6
1
9
8
4
5
6
1
7
9
8
7
5
6
1
4
调整
调整
调整
调整
\n\n\n\n\n", "difficulty": 1}, {"id": 576, "year": 2021, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第12题-题目\n\n\n\n

2017 年公布的全球超级计算机 TOP500 排名中,我国“神威·太湖之光”超级计算机蝉联第一,其浮点运算速度为 93.0146PFLOPS,说明该计算机每秒钟完成的浮点操作次数为( )。

\n
A.9.3×1013\n 次
\n
B.9.3×1015\n 次
\n
C.9.3\n千万亿次
\n
D.9.3\n亿亿次
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第12题-解析\n\n\n\n

PFLOPS =\n1015\nFLOPS,\n93\nPFOPS =\n9.3×1016\nFLOPS,一个亿 =\n108\n,所以\n1016\n为 亿亿。
\n\n\n\n\n", "difficulty": 1}, {"id": 577, "year": 2021, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第13题-题目\n\n\n\n

已知带符号整数用补码表示,变量 x,y,z 的机器数分别为 FFFDH,FFDFH,7FFCH,下列结论中,正确的是( )。

\n
A.若 x、y 和 z 为无符号整数,则 z < x < y
\n
B.若 x、y 和 z 为无符号整数,则 x < y < z
\n
C.若 x、y 和 z 为带符号整数,则 x < y < z
\n
D.若 x、y 和 z 为带符号整数,则 y < x < z
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第13题-解析\n\n\n\n

若 x, y 和 z 均为无符号整数,则 x > y > z,A 和 B 错误。若 x, y 和 z 均为带符号整数,补码的最高位是符号位,0 表示正数,1 表示负数,因此 z 为正数,而 x 和 y 为负数。对于 x 和 y 的比较,数值位取反加一,可知 x = -3H,y = -21H,故 x > y。
\n\n\n\n\n", "difficulty": 1}, {"id": 578, "year": 2021, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第14题-题目\n\n\n\n

下列数值中,不能用 IEEE754 浮点格式精确表示的( )。

\n
A.1.2
\n
B.1.25
\n
C.2.0
\n
D.2.5
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第14题-解析\n\n\n\n

选项 B:\n1.25=1.01B×20\n;

选项 C:\n2.0=1.0B×2\n;

选项 D:\n2.5=1.01B×21\n。

因此,选项 B、C 和 D 均可以用 IEEE 754 浮点数表示 精确表示。选项 A 的十进制小数 1.2 转换成二进制的结果是无限循环小数 1.001100110011…,无法用精度有限的 IEEE 754 格式精确表示。

\n\n\n\n\n", "difficulty": 1}, {"id": 579, "year": 2021, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第15题-题目\n\n\n\n

某计算机的存储器总线中有 24 位地址线和 32 位数据线,按字编址,字长为 32 位。若 000000H~3FFFFFH 为 RAM 区,则需要 512K×8 位的 RAM 芯片数为( )。

\n
A.8
\n
B.16
\n
C.32
\n
D.64
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第15题-解析\n\n\n\n

RAM 区的地址空间为 4FFFFFH =\n222\n,用 22 位可以表示。字长为 32 bit。

参考 主存容量的扩展,如果要用\n219\nx 8bit 的 RAM 芯片覆盖这些存储空间的话,需要的芯片个数为\n(222/219)×(32/8)=8×4=32

\n\n\n\n\n", "difficulty": 2}, {"id": 580, "year": 2021, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第16题-题目\n\n\n\n

若计算机主存地址为 32 位,按字节编址,Cache 数据区大小为 32KB,主存块大小为 32B,采用直接映射方式和回写(Write Back)策略,则 Cache 行的位数至少是( )。

\n
A.275
\n
B.274
\n
C.258
\n
D.257
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第16题-解析\n\n\n\n

由于是 直接映射,所以物理地址的结构分为以下几个部分:

| Tag(17 bits) | Cache 块号(10 bits) | 块内偏移(5 bits) |

Cache 行包含以下几个部分:标记(tag 17bits)、有效位(valid 1bit)、修改位(dirty 1bit)、数据区(32B)

Cache 行的大小为 17 + 1 + 1 + 32 * 8 = 275

\n\n\n\n\n", "difficulty": 1}, {"id": 581, "year": 2021, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第17题-题目\n\n\n\n

下列存储器中,汇编语言程序员可见的是( )。

\n

Ⅰ. 指令寄存器

\n

Ⅱ. 微指令寄存器

\n

Ⅲ. 基址寄存器

\n

Ⅳ. 标志状态寄存器

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、IV
\n
C.仅Ⅱ、Ⅳ
\n
D.仅Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第17题-解析\n\n\n\n

参考 汇编程序员可见寄存器,指令寄存器(IR)和 微指令寄存器 都是 CPU 控制的,程序员无法通过汇编代码直接操作。

基址寄存器、标志状态寄存器(FLAGS)程序员可见。

\n\n\n\n\n", "difficulty": 1}, {"id": 582, "year": 2021, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第18题-题目\n\n\n\n

下列关于数据通路的叙述中,错误的是( )。

\n
A.数据通路包含 ALU 等组合逻辑(操作)元件
\n
B.数据通路包含寄存器等时序逻辑(状态)元件
\n
C.数据通路不包含用于异常事件检测及响应的电路
\n
D.数据通路中的数据流动路径由控制信号进行控制
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第18题-解析\n\n\n\n

指令执行过程中数据所经过的路径,包括路径上的部件,称为数据通路。ALU、通用寄存器、状态寄存器、Cache、MMU、浮点运算逻辑、异常和中断处理逻辑等,都是指令执行过程中数据流经的部件,都属于 数据通路 的一部分。数据通路中的数据流动路径由控制部件控制,控制部件根据每条指令功能的不同,生成对数据通路的控制信号。
\n\n\n\n\n", "difficulty": 1}, {"id": 583, "year": 2021, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第19题-题目\n\n\n\n

下列关于总线的叙述中,错误的是( )。

\n
A.总线是在两个或多个部件之间进行数据交换的传输介质
\n
B.同步总线由时钟信号定时,时钟频率不一定等于工作频率
\n
C.异步总线由握手信号定时,一次握手过程完成一位数据交换
\n
D.突发(Burst)传送总线事务可以在总线上连续传送多个数据
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第19题-解析\n\n\n\n

总线 是在两个或多个设备之间进行通信的传输介质,A 正确。同步总线 是指总线通信的双方采用同一个时钟信号,但是一次总线事务不一定在一个时钟周期内完成,即时钟频率不一定等于工作频率,B 正确。异步总线 采用握手的方式进行通信,每次握手的过程完成一次通信,但一次通信往往会交换多位而非一位数据,C 错误。突发总线传输事务 是指发送方在传输完地址后,连续进行若干次数据的发送,D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 584, "year": 2021, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第20题-题目\n\n\n\n

下列选项中不属于 I/O 接口的是( )。

\n
A.磁盘驱动器
\n
B.打印机适配器
\n
C.网络控制器
\n
D.可编程中断控制器
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第20题-解析\n\n\n\n

I/O 接口 处于计算机与外设之间,其功能是接收主机发送的 I/O 控制信号,实现主机和外设之间的信息交换。

磁盘驱动器并不属于接口,它是磁盘的一部分,它并不处于外设和主机之间。

\n\n\n\n\n", "difficulty": 1}, {"id": 585, "year": 2021, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第21题-题目\n\n\n\n

异常事件在当前指令执行过程中进行检测,中断请求则在当前指令执行后进行检测。下列事件中,相应处理程序执行后,必须回到当前指令重新执行的是( )。

\n
A.系统调用
\n
B.页缺失
\n
C.DMA 传送结束
\n
D.打印机缺纸
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第21题-解析\n\n\n\n

大部分中断都是在一条指令执行完成后(中断周期)才被检测并处理,除了缺页中断和 DMA 请求。DMA 请求只请求总线的使用权,不影响当前指令的执行,不会导致被中断指令的重新执行;而缺页中断发生在取指或间址等指令执行过程之中,并且会阻塞整个指令。当缺页中断发生后,必须回到这条指令重新执行,以便重新访存。选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 586, "year": 2021, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第22题-题目\n\n\n\n

下列是关于多重中断系统中 CPU 响应中断的叙述,其中错误的是( )。

\n
A.仅在用户态(执行用户程序)下,CPU 才能检测和响应中断
\n
B.CPU 只有在检测到中断请求信号后,才会进入中断响应周期
\n
C.进入中断响应周期时,CPU 一定处于中断允许(开中断)状态
\n
D.若 CPU 检测到中断请求信号,则一定存在未被屏蔽的中断源请求信号
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第22题-解析\n\n\n\n

中断服务程序在内核态下执行,但这并不代表在用户态下就无法响应中断。若只能在用户态下检测和响应中断,显然无法实现多重中断(中断嵌套),A 错误。在 多重中断 中,CPU 只有在检测到中断请求信号后(中断处理优先级更低的中断请求信号是检测不到的),才会进入中断响应周期。进入中断响应周期时说明此时 CPU 一定处于中断允许状态,否则无法响应该中断。如果所有中断源都被屏蔽(说明该中断处理优先级最高),则 CPU 不会检测到任何中断请求信号。
\n\n\n\n\n", "difficulty": 1}, {"id": 587, "year": 2021, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第23题-题目\n\n\n\n

下列指令中,只能在内核态执行的是( )。

\n
A.trap 指令
\n
B.I/O 指令
\n
C.数据传送指令
\n
D.设置断点指令
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第23题-解析\n\n\n\n

在 内核态 下,CPU 可执行任何指令,在用户态下 CPU 只能执行非特权指令,而特权指令只能在内核态下执行。常见的 特权指令 有:

  1. 有关对 IO 设备操作的指令;
  2. 有关访问程序状态的指令;
  3. 存取特殊寄存器指令;
  4. 其他指令。

A、C 和 D 都是提供给用户使用的指令,可以在用户态执行,只是可能会使 CPU 从用户态切换到内核态。

\n\n\n\n\n", "difficulty": 1}, {"id": 588, "year": 2021, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第24题-题目\n\n\n\n

下列操作中,操作系统在创建新进程时,必须完成的是( )。

\n

I. 申请空白的进程控制块

\n

II. 初始化进程控制块

\n

III. 设置进程状态为执行态

\n
A.仅 I
\n
B.仅 I、II
\n
C.仅 I、III
\n
D.仅 II、III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第24题-解析\n\n\n\n

操作系统感知进程的唯一方式是通过进程控制块 PCB,所以创建一个新进程时就是为其申请一个空白的进程控制块,并初始化一些必要的进程信息,如初始化进程标志信息、初始化处理机状态信息、设置进程优先级等。I、Ⅱ正确。创建一个进程时,一般会为其分配除 CPU 外的大多数资源,所以一般是将其设置为就绪态,让其等待调度程序的调度。
\n\n\n\n\n", "difficulty": 1}, {"id": 589, "year": 2021, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第25题-题目\n\n\n\n

下列内核的数据结构或程序中,分时系统实现时间片轮转调度需要使用的是( )。

\n

I. 进程控制块

\n

II. 时钟中断处理程序

\n

III. 进程就绪队列

\n

IV. 进程阻塞队列

\n
A.仅 II、III
\n
B.仅 I、IV
\n
C.仅 I、II、III
\n
D.仅 I、II、IV
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第25题-解析\n\n\n\n

在分时系统的 时间片轮转 中,当系统检测到时钟中断时,会引出时钟中断处理程序调度程序从就绪队列中选择一个进程为其分配时间片,并修改该进程的进程控制块中的进程状态等信息,同时将时间片用完的进程放入就绪队列或让其结束运行。I、II、Ⅲ 正确。阻塞队列中的进程只有被唤醒进入就绪队列后,才能参与调度,所以该调度过程不使用阻塞队列。
\n\n\n\n\n", "difficulty": 1}, {"id": 590, "year": 2021, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第26题-题目\n\n\n\n

某系统中磁盘的磁道数为 200 (0~199), 磁头当前在 184 号磁道上。用户进程提出的磁盘访问请求对应的磁道号依次为 184, 187, 176, 182, 199。若采用最短寻道时间优先调度算法 (SSTF) 完成磁盘访问,则磁头移动的距离(磁道数)是( )。

\n
A.37
\n
B.38
\n
C.41
\n
D.42
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第26题-解析\n\n\n\n

最短寻道时间优先算法 总是选择调度与当前磁头所在磁道距离最近的磁道。可以得出访问序列 184,182,187,176,199,从而求出移动距离之和是 0+2+5+11+23=41。
\n\n\n\n\n", "difficulty": 1}, {"id": 591, "year": 2021, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第27题-题目\n\n\n\n

下列事件中,可能引起进程调度程序执行的是( )。

\n

I. 中断处理结束

\n

II. 进程阻塞

\n

III. 进程执行结束

\n

IV. 进程的时间片用完

\n
A.仅 I、III
\n
B.仅 II、IV
\n
C.仅 III、IV
\n
D.I、II、III、 IV
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第27题-解析\n\n\n\n

当进程 状态转化 时,需要由进程调度程序执行。\n。在时间片调度算法中,中断处理结束后,系统检测当前进程的时间片是否用完,如果用完,则将其设为就绪态或让其结束运行,若就绪队列不空,则调度就绪队列的队首进程执行,I 可能。当前进程阻塞时,将其放入阻塞队列,若就绪队列不空,则调度新进程执行,Ⅱ 可能。进程执行结束会导致当前进程释放 CPU,并从就绪队列中选择一个进程获得 CPU,III 可能。进程时间片用完,会导致当前进程让出 CPU,同时选择就绪队列的队首进程获得 CPU,IV 可能。
\n\n\n\n\n", "difficulty": 1}, {"id": 592, "year": 2021, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第28题-题目\n\n\n\n

某请求分页存储系统的页大小为 4KB,按字节编址。系统给进程 P 分配 2 个固定的页框并采用改进型 Clock 置换算法,进程 P 页表的部分内容如下表所示:

\n
\n\n\n\n \n 408真题系统\n \n\n
页框号
存在位

1:存在,0:不存在
访问位

1:访问,0:未访问
修改位

1:修改,0:未修改
· · ·
20H
60H
80H
· · ·
· · ·
0
1
1
· · ·
· · ·
0
1
1
· · ·
· · ·
0
0
1
· · ·
页号
· · ·
· · ·
2
3
4
\n

若 P 访问虚拟地址为 02A01H 的存储单元,则经地址变换后得到的物理地址是()。

\n
A.00A01H
\n
B.20A01H
\n
C.60A01H
\n
D.80A01H
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第28题-解析\n\n\n\n

页面大小为 4KB,低 12 位是页内偏移。虚拟地址为 02A01H,页号为 02H,02H 页对应的页表项中存在位为 0,进程 P 分配的页框固定为 2,且内存中已有两个页面存在。根据 CLOCK 算法,选择将 3 号页换出,将 2 号页放入 60H 页框,经过地址变换后得到的物理地址是 60A01H。
\n\n\n\n\n", "difficulty": 1}, {"id": 593, "year": 2021, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第29题-题目\n\n\n\n

在采用二级页表的分页系统中,CPU 页表基址寄存器中的内容是( )。

\n
A.当前进程的一级页表的起始虚拟地址
\n
B.当前进程的一级页表的起始物理地址
\n
C.当前进程的二级页表的起始虚拟地址
\n
D.当前进程的二级页表的起始物理地址
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第29题-解析\n\n\n\n

页表基址寄存器(PTBR,Page Table Base Register)中存储的是进程一级页表的物理地址。
\n\n\n\n\n", "difficulty": 1}, {"id": 594, "year": 2021, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第30题-题目\n\n\n\n

若目录 dir 下有文件 file1,则为删除该文件内核不必完成的工作是( )。

\n
A.删除 file1 的快捷方式
\n
B.释放 file1 的文件控制块
\n
C.释放 file1 占用的磁盘空间
\n
D.删除目录 dir 中与 file1 对应的目录项
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第30题-解析\n\n\n\n

当你删除某个目录 dir 下的文件 file1 时,操作系统内核必须完成以下几项操作:

首先,内核会在目录 dir 中找到 file1 对应的目录项,并将其删除。目录项是文件名与其 inode(文件控制块)之间的映射。

然后,内核检查这个 inode 是否还有其他硬链接引用。如果 file1 是最后一个链接,那么系统会释放掉该 inode,以及文件占用的磁盘数据块。

也就是说,释放文件控制块(inode)和释放磁盘空间,都是删除文件过程中内核必须做的事情。

但如果有其他“快捷方式”指向 file1,比如 软链接(symbolic link),这些快捷方式本身是独立的文件。删除原文件不会影响这些快捷方式,它们会变成“悬挂链接”(指向一个不存在的文件)。因此,内核在删除文件时不需要去删除这些快捷方式。

所以,正确答案是:A. 删除 file1 的快捷方式 —— 这是内核不必完成的工作。

\n\n\n\n\n", "difficulty": 1}, {"id": 595, "year": 2021, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第31题-题目\n\n\n\n

若系统中有 n (n≥2) 个进程,每个进程均需要使用某类临界资源 2 个,则系统不会发生死锁所需的该类资源总数至少是( )。

\n
A.2
\n
B.n
\n
C.n+1
\n
D.2n
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第31题-解析\n\n\n\n

考虑极端情况,当临界资源数为 n 时,每个进程都拥有 1 个临界资源并等待另一个资源,会发生死锁。当临界资源数为 n+1 时,则 n 个进程中至少有一个进程可以获得 2 个临界资源,顺利运行完后释放自己的临界资源,使得其他进程也能顺利运行,不会产生死锁。
\n\n\n\n\n", "difficulty": 1}, {"id": 596, "year": 2021, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2021-第32题-题目\n\n\n\n

下列选项中,通过系统调用完成的操作是( )。

\n
A.页置换
\n
B.进程调度
\n
C.创建新进程
\n
D.生成随机整数
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第32题-解析\n\n\n\n

系统调用是由用户进程发起的,请求操作系统的服务。对于 A,当内存中的空闲页框不够时,操作系统会将某些页面调出,并将要访问的页面调入,这个过程完全由操作系统完成不涉及系统调用。对于 B,进程调度完全由操作系统完成,无法通过系统调用完成。对于 C,创建新进程可以通过系统调用来完成,如 Linux 中通过 fork 系统调用来创建子进程。对于 D,生成随机数只需要普通的函数调用,不涉及请求操作系统的服务,如 C 语言中 random() 函数。
\n\n\n\n\n", "difficulty": 1}, {"id": 597, "year": 2021, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第33题-题目\n\n\n\n

在 TCP/IP 参考模型中,由传输层相邻的下一层实现的主要功能是( )。 

\n
A.对话管理
\n
B.路由选择
\n
C.端到端报文段传输
\n
D.结点到结点流量控制
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第33题-解析\n\n\n\n

TCP/IP 参考模型中传输层相邻的下一层是网际层。TCP/IP 的网际层使用一种尽力而为的服务,它将分组发往任何网络,并为之独立选择合适的路由,但不保证各个分组有序到达,B 正确。TCP/IP 认为可靠性是端到端的问题(传输层的功能),因此它在网际层仅有无连接、不可靠的通信模式,无法完成结点到结点的流量控制(OSI 参考模型的网络层具有该功能)。对话管理和端到端的报文段传输均为传输层的功能。A、C 和 D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 598, "year": 2021, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第34题-题目\n\n\n\n

若下图为一段差分曼彻斯特编码信号波形,则其编码的二进制位串是( )

\n
\n\n\n\n \n 408真题系统\n \n\n
\n
A.1011 1001
\n
B.1101 0001
\n
C.0010 1110
\n
D.1011 0110
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第34题-解析\n\n\n\n

差分曼彻斯特编码 常用于局域网传输,其规则是:若码元为 1,则前半个码元的电平与上一码元的后半个码元的电平相同;若码元为 0,则情形相反。差分曼彻斯特编码的特点在于,在每个时钟周期的起始处,跳变则说明该比特是 0,不跳变则说明该比特是 1。根据题 34 图,第 1 个码元的信号波形因缺乏上一码元的信号波形,无法判断是 0 还是 1.但根据后面的信号波形,可以求出第 2~8 个码元为 011 1001,因此选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 599, "year": 2021, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第35题-题目\n\n\n\n

现将一个 IP 网络划分为 3 个子网,若其中一个子网是 192.168.9.128/26, 则下列网络中,不可能是另外两个子网之一的是( )

\n
A.192.168.9.0/25
\n
B.192.168.9.0/26
\n
C.192.168.9.192/26
\n
D.192.168.9.192/27
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第35题-解析\n\n\n\n

本题考察的是 子网划分。根据题意,将 IP 网络划分为 3 个子网。其中一个是 192.168.9.128/26。可以简写成 x.x.x.10/26(其中 10 是 128 的二进制 1000 0000 的前两位,因为 26-24=2)。

对于 A 和 C,可以组成 x.x.x.0/25、x.x.x.10/26、x.x.x.11/26 这样 3 个互不重叠的子网对于 D,可以组成 x.x.x.10/26、x.x.x.110/27、x.x.x.111/27 这样 3 个互不重叠的子网。但对于 B,要想将一个 IP 网络划分为几个互不重叠的子网,3 个是不够的,至少需要划分为 4 个子网:x.x.x.00/26、x.x.x.01/26、x.x.x.10/26、x.x.x.11/26。

\n\n\n\n\n", "difficulty": 3}, {"id": 600, "year": 2021, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第36题-题目\n\n\n\n

若路由器向 MTU = 800B 的链路转发一个总长度为 1580B 的 IP 数据报(首部长度为 20B)时,进行了分片,且每个分片尽可能大,则第 2 个分片的总长度字段和 MF 标志位的值分别是(  )

\n
A.796,0
\n
B.796, 1
\n
C.800,0
\n
D.800, 1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第36题-解析\n\n\n\n

本题考察 IP 数据报分片。

链路层 MTU = 800B。IP 分组首部长 20B。片偏移以 8 个字节为偏移单位,因此除最后个分片,其他每个分片的数据部分长度都是 8B 的整数倍。所以,最大 IP 分片的数据部分长度为 776B。总长度 1580B 的卫 P 数据报中,数据部分占 1560B,1560B/776B=2.01…需要分成 3 片。故第 2 个分片的总长度字段为 796,MF 为 1(表示还有后续的分片)。

\n\n\n\n\n", "difficulty": 1}, {"id": 601, "year": 2021, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第37题-题目\n\n\n\n

某网络中的所有路由器均采用距离向量路由算法计算路由。若路由器 E 与邻居路由器 A,B,C 和 D 之间的直接链路距离分别是 8, 10, 12 和 6 , 且 E 收到邻居路由器的距离向量如下表所示,则路由器 E 更新后的到达目的网络 Netl~Net4 的距离分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
A 的距离向量
23
B 的距离向量
20
C 的距离向量
22
D 的距离向量
12
35
30
28
24
18
16
36
36
30
8
24
目的网络
Net1
Net2
Net4
Net3
\n
A.9, 10, 12, 6
\n
B.9, 10, 28, 20
\n
C.9, 20, 12, 20
\n
D.9, 20, 28, 20
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第37题-解析\n\n\n\n

根据 距离向量 算法,E 收到相邻路由器的距离向量后,更新它的路由表:

① 当原路由表中没有目的网络时,把该项目添加到路由表中。

② 发来的路由信息中有一条到达某个目的网络的路由,该路由与当前使用的路由相比,有较短的距离,就用经过发送路由信息的结点的新路由替换。

分析题意可知,E 与邻居路由器 A、B、C 和 D 之间的直接链路距离分别是 8.10.12 和 6.到达 Net1~Net4 没有直接链路,需要通过邻居路由器。从上述算法可知,E 到达目的网络一定是经过 A,B,C 和 D 中距离最小的。根据题中所给的距离信息,计算 E 经邻居路由器到达目的网络 Net1~Net4 的距离,如下表所示,选择到达每个目的网络距离的最短值。

目的网络经过 A 需要的距离经过 B 需要的距离经过 C 需要的距离经过 D 需要的距离
Net19333228
Net220454234
Net332282842
Net444402030
\n\n\n\n\n", "difficulty": 1}, {"id": 602, "year": 2021, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第38题-题目\n\n\n\n

若客户首先向服务器发送 FIN 段请求断开 TCP 连接,则当客户收到服务器发送的 FIN 段并向服务器发送了 ACK 段后,客户的 TCP 状态转换为( )。

\n
A.CLOSE_WAIT
\n
B.TIME_WAIT
\n
C.FIN_WAIT_1
\n
D.FIN_WAIT_2
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第38题-解析\n\n\n\n

本题考察 四次挥手 的状态转换。\n当客户机收到服务器发送的 FIN 段并向服务器发送 ACK 段后,客户机的 TCP 状态变为 TIME_WAIT,此时 TCP 连接还未释放,必须经过时间等待计时器设置的时间 2MSL(最长报文段寿命)后,客户机才进入 CLOSED(连接关闭)状态。
\n\n\n\n\n", "difficulty": 1}, {"id": 603, "year": 2021, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第39题-题目\n\n\n\n

若大小为 12B 的应用层数据分别通过 1 个 UDP 数据报和 1 个 TCP 段传输,则该 UDP 数据报 和 TCP 段实现的有效载荷(应用层数据)最大传输效率分别是( )。

\n
A.37.5%, 16.7%
\n
B.37.5%, 37.5%
\n
C.60.0%, 16.7%
\n
D.60.0%, 37.5%
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第39题-解析\n\n\n\n

应用层数据交给传输层时,放在报文段的数据部分。UDP 首部有 8B,TCP 首部最短有 20B。为了达到最大传输效率,通过 UDP 传输时,总长度为 20B,最大传输效率是 12B/20B=60% 通过 TCP 传输时,总长度为 32B,最大传输效率是 12B/32B=37.5%。
\n\n\n\n\n", "difficulty": 1}, {"id": 604, "year": 2021, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2021-第40题-题目\n\n\n\n

设主机甲通过 TCP 向主机乙发送数据,部分过程如下图所示。甲在\nt0​\n时刻发送一个序号 seq=501、封装 200B 数据的段,在\nt1​\n时刻收到乙发送的序号 seq = 601、确认序号 ack_seq = 501、接收窗口 rcvwnd = 500B 的段,则甲在未收到新的确认段之前,可以继续向乙发送的数据序号范围是( )。

\n
A.501 ~ 1000
\n
B.601 ~ 1100
\n
C.701 ~ 1000
\n
D.801 ~ 1100
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第40题-解析\n\n\n\n

本题考察 TCP 的滑动窗口机制。\n依题意,甲发送完 200B 报文后,继续发送的报文段中序号字段 seq=701。由于乙告知接收窗口为 500,且甲未收到乙对 seq =501 报文段的确认,那么甲还能发送的报文段字节数为 500-200=300B,因此甲在未收到新的确认段之前,还能发送的数据序号范围是 701~1000。
\n\n\n\n\n", "difficulty": 0}, {"id": 605, "year": 2021, "index": 41, "type": 3, "typeName": "算法题", "score": 15, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第41题-题目\n\n\n\n

已知无向连通图 G 由顶点集 V 和边集 E 组成,|E| > 0,当 G 中度为奇数的顶点个数为不大于 2 的偶数时,G 存在包含所有边且长度为|E|的路径(称为 EL 路径)。设图 G 采用邻接矩阵存储,类型定义如下:

\n
typedef struct {                    // 图的定义\n    int numVertices, numEdges;      // 图中实际的顶点数和边数\n    char VerticesList[MAXV];        // 顶点表,MAXV 为已定义常量\n    int Edge[MAXV][MAXV];           // 邻接矩阵\n} MGraph;\n
\n

请设计算法 int IsExistEL(MGraph G),判断 G 是否存在 EL 路径,若存在,则返回 1,否则返回 0。要求:

\n

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

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第41题-解析\n\n\n\n

1)算法的基本设计思想

本算法题属于送分题,题干已经告诉我们算法的思想。对于采用邻接矩阵存储的无向\n图,在邻接矩阵的每一行(列)中,非零元素的个数为本行(列)对应顶点的度。可\n以依次计算连通图 G 中各顶点的度,并记录度为奇数的顶点个数,若个数为 0 或 2,则\n返回 1,否则返回 0。

2)算法实现

int isExistEL(MGraph G) {\n  // 统计度为奇数的定点个数\n  int count = 0;\n  for (int v = 0; v < numVertices; v++) {\n    // 该顶点的度\n    int degree = 0;\n    for (int e = 0; e < numEdges; e++) {\n      if (Edge[v][e] == 1) {\n        degree++;\n      }\n    }\n    if (degree % 2 == 1) {\n      count++;\n    }\n  }\n  if (count == 0 || count == 2) {\n    return 1;\n  }\n  return 0;\n}\n

3)时间和空间复杂度

算法需要遍历整个矩阵,所以时间复杂度为\nO(n2)\n,空间复杂度为\nO(1)\n。

\n\n\n\n\n", "difficulty": 2}, {"id": 606, "year": 2021, "index": 42, "type": 2, "typeName": "应用题", "score": 6, "subject": "computer-network", "question": "\n\n\n\n\n\n2021-第42题-题目\n\n\n\n

已知某排序算法如下:

\n
void cmpCountSort(int a[], int b[], int n)\n{\n    int i, j, *count;\n    count = (int *) malloc(sizeof(int) * n) //C++ 语言:count = new int[n];\n    for (i = 0; i < n; i++) count[i] = 0;\n    for (i = 0; i < n - 1; i++)\n        for (j = i + 1; j < n; j++)\n            if (a[i] < a[j]) count[j]++;\n            else count[i]++;\n    for (i = 0; i < n; i++) b[count[i]]= a[i];\n    free(count); // C++ 语言:delete count;\n}\n
\n

请回答下列问题。

\n

(1) 若有 int a[] = {25, -10, 25, 10, 11, 19}, b[6]; ,则调用 cmpCountSort(a, b, 6) 后数组 b 中的内容是什么?

\n

(2) 若 a 中含有 n 个元素,则算法执行过程中,元素之间的比较次数是多少?

\n

(3) 该算法是稳定的吗?若是,则阐述理由;否则,修改为稳定排序算法。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第42题-解析\n\n\n\n

cmpCountSort 算法基于计数排序的思想,对序列进行排序。cmpCountSort 算法遍历数组\n中的元素,count 数组记录比对应待排序数组元素下标大的元素个数,例如,count[1]=3\n的意思是数组 a 中有 3 个元素比 a[1]大,即 a[1]是第 4 大元素,a[1]的正确位置应是 b[3]。

1)排序结果为 b[6]={-10,10,11,19,25,25}。

2)由代码 for(i=0;i<n-1;i++) 和 for(j=i+1;j<n;j++) 可知,在循环过程中,每\n个元素都与它后面的所有元素比较一次(即所有元素都两两比较一次),比较次数之和\n为\n(n−1)+(n−2)+⋯+1\n,故总的比较次数是\nn(n−1)/2\n。

3)不是。需要将程序中的 if 语句修改如下:

if(a[i]<=a[j]) count[j]++;\nelse count[i]++;\n

如果不加等号,两个相等的元素比较时,前面元素的 count 值会加 1,导致原序列中\n靠前的元素在排序后的序列中处于靠后的位置。

\n\n\n\n\n", "difficulty": 2}, {"id": 607, "year": 2021, "index": 43, "type": 2, "typeName": "应用题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n\n2021-第43题-题目\n\n\n\n

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令字,指令格式及其说明如下:

\n
\n\n\n\n \n 408真题系统\n \n\n
000000
rs
rt
rd
op1
op2
rs
rt
imm
op3
target
R 型
I 型
格式
J 型
6 位
2 位
2 位
2 位
4 位
指令功能或指令类型
R[rd] ← R[rs] op1 R[rt]
含ALU运算、条件转义和访存操作三种指令
PC 的低10位 ← target
\n

其中,op1~op3 为操作码,rs、rt 和 rd 为通用寄存器编号,R[r] 表示寄存器 r 的内容,imm 为立即数,target 为转移目标的形式地址。请回答下列问题。

\n

(1) ALU 的宽度是多少位?可寻址主存空间大小为多少字节?指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)分别应有多少位?

\n

(2) R 型格式最多可定义多少种操作?I 型和 J 型格式总共最多可定义多少种操作?通用寄存器最多有多少个?

\n

(3) 假定 op1 为 0010 和 0011 时,分别表示带符号整数减法和带符号整数乘法指令,则指令 01B2H 的功能是什么(参考上述指令功能说明的格式进行描述)?若 1、2、3 号通用寄存器当前内容分别为 B052H、0008H、0020H,则分别执行指令 01B2H 和 01B3H 后,3 号通用寄存器内容各是什么?各自结果是否溢出?

\n

(4) 若采用 I 型格式的访存指令中 imm(偏移量)为带符号整数,则地址计算时应对 imm 进行零扩展还是符号扩展?

\n

(5) 无条件转移指令可以采用上述哪种指令格式?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第43题-解析\n\n\n\n

1)ALU 的宽度为 16 位,ALU 的宽度即 ALU 运算对象的宽度,通常与字长相同。地址线为 20 位,按字节编址,可寻址主存空间大小为 2²⁰ 字节(或 1MB)。指令寄存器有 16 位,和单条指令长度相同。MAR 有 20 位,和地址线位数相同。MDR 有 8 位,和数据线宽度相同。

2)R 型格式的操作码有 4 位,最多有 2⁴(或 16)种操作。I 型和 J 型格式的操作码有 6 位,因为它们的操作码部分重叠,所以共享这 6 位的操作码空间,且前 6 位全 0 的编码已被 R 型格式占用,因此 I 和 J 型格式最多有 2⁶-1=63 种操作。从 R 型和 I 型格式的寄存器编号部分可知,只用 2 位对寄存器编码,因此通用寄存器最多有 4 个。

3)指令 01B2H=0000000110110010B 为一条 R 型指令,操作码 0010 表示带符号整数减法指令,其功能为 R[3]←R[1]-R[2]。执行指令 01B2H 后,R[3]=B052H-0008H=B04AH,结果未溢出。指令 01B3H=0000000110110011B,操作码 0011 表示带符号整数乘法指令,执行指令 01B3H 后,R[3]=R[1]×R[2]=B052H×0008H=8290H,结果溢出。

4)在进行指令的跳转时,可能向前跳转,也可能向后跳转,偏移量是一个带符号整数,因此在地址计算时,应对 imm 进行符号扩展。

5)无条件转移指令可以采用 J 型格式,将 tagt 部分写入 PC 的低 10 位,完成跳转。

\n\n\n\n\n", "difficulty": 1}, {"id": 608, "year": 2021, "index": 44, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第44题-题目\n\n\n\n

假设计算机 M 的主存地址为 24 位,按字节编址;采用分页存储管理方式,虚拟地址为 30 位,页大小为 4KB;TLB 采用 2 路组相联方式和 LRU 替换策略,共 8 组。请回答下列问题。

\n

(1) 虚拟地址中哪几位表示虚页号?哪几位表示页内地址?

\n

(2) 已知访问 TLB 时虚页号高位部分用作 TLB 标记,低位部分用作 TLB 组号,M 的虚拟地址中哪几位是 TLB 标记?哪几位是 TLB 组号?

\n

(3) 假设 TLB 初始时为空,访问的虚页号依次为 10、12、16、7、26、4、12 和 20,在此过程中,哪一个虚页号对应的 TLB 表项被替换?说明理由。

\n

(4) 若将 M 中的虚拟地址位数增加到 32 位,则 TLB 表项的位数增加几位?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第44题-解析\n\n\n\n

注意:对于本题的 TLB,需要采用处理 Cache 的方式求解。

1)按字节编址,页面大小为 4KB=212B,页内地址为 12 位。虚拟地址中高 30-12=18\n位表示虚页号,虚拟地址中低 12 位表示页内地址。

2)TLB 采用 2 路组相联方式,共 8=2 组,用 3 位来标记组号。虚拟地址(或虚页号)中\n高 18-3=15 位为 TLB 标记,虚拟地址中随后 3 位(或虚页号中低 3 位)为 TLB 组号。

3)虚页号 4 对应的 TLB 表项被替换。因为虚页号与 TLB 组号的映射关系为 TLB 组号 = 虚\n页号 mod TLB 组数 = 虚页号 mod 8,因此,虚页号 10,12,16,7,26,4,12,20 映射到的\nTLB 组号依次为 2,4,0,7,2,4,4,4。TLB 采用 2 路组相联方式,从上述映射到的 TLB 组号\n序列可以看出,只有映射到 4 号组的虚页号数量大于 2,相应虚页号依次是 12,4,12 和 20。\n根据 LRU 替换策略,当访问第 20 页时,虚页号 4 对应的 TLB 表项被替换出来。

4)虚拟地址位数增加到 32 位时,虚页号增加了 32-30=2 位,使得每个 TLB 表项中的标\n记字段增加 2 位,因此,每个 TLB 表项的位数增加 2 位。

\n\n\n\n\n", "difficulty": 0}, {"id": 609, "year": 2021, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第45题-题目\n\n\n\n

下表给出了整型信号量 S 的 wait() 和 signal() 操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

\n

请回答下列问题。

\n

(1) 为什么在 wait() 和 signal() 操作中对信号量 S 的访问必须互斥执行?

\n

(2) 分别说明方法 1 和方法 2 是否正确。若不正确,请说明理由。

\n

(3) 用户程序能否使用开/关中断指令实现临界区互斥?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第45题-解析\n\n\n\n

1)信号量\nS\n是能被多个进程共享的变量,多个进程都可通过 wait() 和 signal() 对\nS\n进行读、写操作。所以,wait() 和 signal() 操作中对 S 的访问必须是互斥的。

2)方法 1 错误。在 wait() 中,当\nS≤0\n时,关中断后,其他进程无法修改 S 的值,while\n语句陷入死循环。方法 2 正确。方法 2 在循环体中有一个开中断操作,这样就可以使\n其他进程修改\nS\n的值,从而避免 while 语句陷入死循环。

3)用户程序不能使用开/关中断指令实现临界区互斥。因为开中断和关中断指令都是特权\n指令,不能在用户态下执行,只能在内核态下执行。

\n\n\n\n\n", "difficulty": 1}, {"id": 610, "year": 2021, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "computer-network", "question": "\n\n\n\n\n\n2021-第46题-题目\n\n\n\n

某计算机用硬盘作为启动盘,硬盘第一个扇区存放主引导记录,其中包含磁盘引导程序和分区表。磁盘引导程序用于选择要引导哪个分区的操作系统,分区表记录硬盘上各分区的位置等描述信息。硬盘被划分成若干个分区,每个分区的第一个扇区存放分区引导程序,用于引导该分区中的操作系统。系统采用多阶段引导方式,除了执行磁盘引导程序和分区引导程序外,还需要执行 ROM 中的引导程序。请回答下列问题。

\n

(1) 系统启动过程中操作系统的初始化程序、分区引导程序、ROM 中的引导程序、磁盘引导程序的执行顺序是什么?

\n

(2) 把硬盘制作为启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这 4 个操作的正确顺序是什么?

\n

(3) 磁盘扇区的划分和文件系统根目录的建立分别是在第 (2) 问的哪个操作中完成的?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第46题-解析\n\n\n\n

1)参考 系统引导流程,执行顺序依次是 ROM 中的引导程序、磁盘引导程序、分区引导程序、操作系统的初始化程序。启动系统时,首先运行 ROM 中的引导代码(bootstrap)。为执行某个分区的\n操作系统的初始化程序,需要先执行磁盘引导程序以指示引导到哪个分区,然后执行\n该分区的引导程序,用于引导该分区的操作系统。

2)4 个操作的执行顺序依次是磁盘的物理格式化、对磁盘进行分区、逻辑格式化、操作系\n统的安装。磁盘只有通过分区和逻辑格式化后才能安装系统和存储信息。物理格式化\n(又称低级格式化,通常出厂时就已完成)的作用是为每个磁道划分扇区,安排扇区在\n磁道中的排列顺序,并对已损坏的磁道和扇区做“坏”标记等。随后将磁盘的整体存\n储空间划分为相互独立的多个分区(如 Windows 中划分 C 盘、D 盘等),这些分区可以\n用作多种用途,如安装不同的操作系统和应用程序、存储文件等。然后进行逻辑格式\n化(又称高级格式化),其作用是对扇区进行逻辑编号、建立逻辑盘的引导记录、文件\n分配表、文件目录表和数据区等。最后才是操作系统的安装。

3)由上述解析可知,磁盘扇区的划分是在磁盘的物理格式化操作中完成的,文件系统根目\n录的建立是在逻辑格式化操作中完成的。

\n\n\n\n\n", "difficulty": 2}, {"id": 611, "year": 2021, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2021-第47题-题目\n\n\n\n

某网络拓扑如题 47 图所示,以太网交换机 S 通过路由器 R 与 Internet 互联。路由器部分接口、本地域名服务器、H1、H2 的 IP 地址和 MAC 地址如图中所示。在 t0 时刻 H1 的 ARP 表和 S 的交换表均为空,H1 在此刻利用浏览器通过域名 www.abc.com 请求访问 Web 服务器,在 t1 时刻(t1→t0)S 第一次收到了封装 HTTP 请求报文的以太网帧,假设从 t0 到 t1 期间网络未发生任何与此次 Web 访问无关的网络通信。

\n
\n\n\n\n \n 408真题系统\n \n\n
www.abc.com
Web 服务器
192.168.1.1/25
00-11-22-33-44-aa
R
本地域名服务器
192.168.1.126/25
00-11-22-33-44-bb
192.168.1.2/25
00-11-22-33-44-cc
H2
192.168.1.3/25
00-11-22-33-44-dd
S
1
2
3
4
H1
Internet
\n

请回答下列问题。

\n

(1) 从 t0 到 t1 期间,H1 除了 HTTP 之外还运行了哪个应用层协议?从应用层到数据链路层,该应用层协议报文是通过哪些协议进行逐层封装的?

\n

(2) 若 S 的交换表结构为 <MAC 地址,端口>,则 t1 时刻 S 交换表的内容是什么?

\n

(3) 从 t0 到 t1 期间,H2 至少会接收到几个与此次 Web 访问相关的帧?接收到的是什么帧?帧的目的 MAC 地址是什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2021-第47题-解析\n\n\n\n

1)从\nt0​\n到\nt1​\n期间,除了 HTTP,H1 还运行了 DNS 应用层协议,以将域名转换为 IP 地址。\nDNS 运行在 UDP 之上,UDP 将应用层交下来的 DNS 报文添加首部后,向下交付给 IP\n层,IP 层使用 IP 数据报进行封装,封装好后,向下交付给数据链路层,数据链路层使\n用 CSMA/CD 帧进行封装。因此,逐层封装关系如下:DNS 报文→ UDP 数据报→ IP 数\n据报 → CSMA/CD 帧。

2)\nt0​\n时刻,H1 的 ARP 表和 S 的交换表为空。H1 利用浏览器通过域名请求访问 Wb 服务器。\n由于要先解析域名,所以会发送 DS 报文到本地域名服务器,查询该域名对应的 P 地址,\n所以要先向本地域名服务器发送请求。ARP 表为空,所以需要先发送 ARP 请求分组,查\n询本地域名服务器对应的 MAC 地址。这些帧的目的 MAC 地址均是 FF-FF-FF-FF-FF-FF。\nS 接收到这个帧,在交换表中记录下 MAC 地址为 00-11-22-33-44-cc,位于端口 4,然后广\n播该帧。当本地域名服务器接收到 ARP 请求后,向 H1 发送响应 ARP 分组。S 接收到这个\n帧,在交换表中记录下 MAC 地址为 00-11-22-33-44-bb 位于端口 1,然后把该帧从端口 4\n发送出去。

得到了域名对应的 P 地址,发现不在本局域网中,需要通过路由表转发。

H1 的 ARP 表中并没有路由器对应的 MAC 地址,因此需要先发送 ARP 请求分组,查\n询路由器对应的 MAC 地址。这些帧的目的 MAC 地址均是 FF-FF-FF-FF-FF-FF。S 接\n收到这个帧,广播该帧。当路由器收到 ARP 请求后,向 H1 发送响应 ARP 分组。S 接\n收到这个帧,在交换表中记录下 MAC 地址为 00-11-22-33-44-aa,位于端口 2,然后把\n该帧从端口 4 发送出去。现在,H1 能把数据发送给路由器了。在整个过程中,并没有\n涉及 H2,H2 没有主动发送数据。所以 S 并不会记录下 H2 的 MAC 地址和端口,所以\nS 在\nt1​\n时刻的交换表如下表所示。

MAC 地址端口
00-11-22-33-44-cc4
00-11-22-33-44-bb1
00-11-22-33-44-aa2

3)H2 至少会接收到 2 个和此次 Web 访问相关的帧。接收到的均是封\n装 ARP 查询报文的以太网帧;这些帧的目的 MAC 地址均是 FF-FF-FF-FF-FF-FF。

\n\n\n\n\n", "difficulty": 0}, {"id": 612, "year": 2022, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第1题-题目\n\n\n\n

下列程序段的时间复杂度是( )。

\n
int sum = 0;\nfor (int i = 1; i < n; i *= 2)\n    for (int j = 0; j < i; j++)\n        sum++;\n
\n
A.O(log2​n)
\n
B.O(n)
\n
C.O(nlog2​n)
\n
D.O(n2)
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第1题-解析\n\n\n\n

当外层循环的变量\ni\n取不同值时,内层循环就执行多少次,因此总循环次数为\n的所有取值之和。假设外层循环共执行\nk\n次,当\ni=1,2,4,8,⋯,2k−1(2k−1<n≤2k)\n时,内层循\n环执行\ni\n次,因此总循环次数\nT=1+2+4+8+⋯+2k−1=2k−1\n即\nn<T<2n\n,时间复杂度为\nO(n)\n。
\n\n\n\n\n", "difficulty": 2}, {"id": 613, "year": 2022, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第2题-题目\n\n\n\n

给定有限符号集 S, in 和 out 均为 S 中所有元素的任意排列。对于初始为空的栈 ST, 下列叙述中,正确的是( )。

\n
A.若 in 是 ST 的入栈序列,则不能判断 out 是否为其可能的出栈序列
\n
B.若 out 是 ST 的出栈序列,则不能判断 in 是否为其可能的入栈序列
\n
C.若 in 是 ST 的入栈序列,out 是对应 in 的出栈序列,则 in 与 out 一定不同
\n
D.若 in 是 ST 的入栈序列,out 是对应 in 的出栈序列,则 in 与 out 可能互为倒序
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第2题-解析\n\n\n\n

参考 入栈出栈序列,如果给定一个入栈序列,我们可以得到其所有可能的出栈序列,所以当给定一个出栈序列时,我们可以判断其是否正确,所以 A、B、C 均为错误选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 614, "year": 2022, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第3题-题目\n\n\n\n

若结点 p 与 q 在二叉树 T 的中序遍历序列中相邻,且 p 在 q 之前,则下列 p 与 q 的关系中,不可能的是( )。

\n

I. q 是 p 的双亲

\n

II. q 是 p 的右孩子

\n

III. q 是 p 的右兄弟

\n

IV. q 是 p 的双亲的双亲

\n
A.仅 I
\n
B.仅 III
\n
C.仅 II、III
\n
D.仅 II、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第3题-解析\n\n\n\n

对于此类题,每种情况只需举出一个反例即可。如图 1 所示,q 是 p 的双亲,中\n序遍历序列为 {p, q},I 可能。如图 2 所示,q 是 p 的右孩子,中序遍历序列为 {p, q},Ⅱ可能。\n如图 4 所示,q 是 p 的双亲的双亲,中序遍历序列为 {x, p, q},IV 可能。如图 3 所示,q 是 p\n的右兄弟,F 是 q 和 p 的父结点,中序遍历要求先遍历左子树,再访问根结点,最后遍历右\n子树,因此一定先访问 p,再访问 F,最后访问 q,p 和 q 不可能相邻出现,II 不可能。

\n\n
p
q
p
q
F
p
q
q
x
p
图 1
图 2
图 3
图 4
\n\n\n\n\n", "difficulty": 1}, {"id": 615, "year": 2022, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第4题-题目\n\n\n\n

若三叉树 T 中有 244 个结点(叶结点的高度为 1),则 T 的高度至少是 ( )。

\n
A.8
\n
B.7
\n
C.6
\n
D.5
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第4题-解析\n\n\n\n

高度为\nn\n的二叉树最多有\n1+2+⋯+2n−1=2n−1\n个结点,高度为\nn\n的三叉树最多有\nf(n)=1+3+⋯+3n−1=3−13n−1​−23n−1​\n。\nf(5)=121\nf(6)=364\n因为\n121<244<364\n,所以高度至少为 6。
\n\n\n\n\n", "difficulty": 2}, {"id": 616, "year": 2022, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第5题-题目\n\n\n\n

对任意给定的含 n (n > 2) 个字符的有限集 S, 用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树 T1 和 T2。下列叙述中,正确的是 ( )。

\n
A.T1 与 T2 的结点数相同
\n
B.T1 的高度大于 T2 的高度
\n
C.出现频次不同的字符在 T1 中处于不同的层
\n
D.出现频次不同的字符在 T2 中处于相同的层
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第5题-解析\n\n\n\n

可以画一个简单的特例来证明。图 1 是满足条件的二叉树 T1,图 2 是满足条件的二叉树 T2,结点中有值表示这个结点是编码字符。T1 和 T2 的结点数不同,A 错误。T1 的高度等于 T2 的高度,B 错误。出现频次不同的字符在 T1 中也可能处于相同的层,C 错误。对于定长编码码集,所有字符一定都在 T2 中处于相同的层,而且都是叶子结点。

\n\n
3
1
2
1
2
3
图1
图2
\n\n\n\n\n", "difficulty": 1}, {"id": 617, "year": 2022, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第6题-题目\n\n\n\n

对于无向图 G=(V,E),下列选项中,正确的是(  )。

\n
A.当 |V| >|E| 时,G 一定是连通的
\n
B.当 |V| < |E| 时,G 一定是连通的
\n
C.当 |V| = |E|-1 时,G 一定是不连通的
\n
D.当 |V| > |E|+1 时,G 一定是不连通的
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第6题-解析\n\n\n\n

注意,E 是图的边数,V 是图的顶点数。A 和 B 明显错误,如图 1 所示,|V| < |E|,但图 G 不连通;如图 2 所示,|V| > |E|,但图 G 不连通。如图 3 所示,在无向图中至少要有 |V| - 1 个顶点才可能连通,顶点数小于 |V| - 1 一定不可能连通,C 错误,D 正确。

\n\n
图 1
图 2
图 3
\n\n\n\n\n", "difficulty": 2}, {"id": 618, "year": 2022, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第7题-题目\n\n\n\n

下图是一个有 10 个活动的 AOE 网,时间余量最大的活动是 ( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
1
2
3
4
5
6
a=2
c=1
b=5
d=3
e=3
f=4
h=1
g=1
j=1
i=4
\n
A.c
\n
B.g
\n
C.h
\n
D.j
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第7题-解析\n\n\n\n

在 AOE 网中,活动的时间余量 = 结束顶点的最迟开始时间 - 开始顶点的最早开始时间 - 该活动的持续时间。根据关键路径算法得到下表:

结点编号123456
最早开始时间 ve(i)0258912
最迟开始时间 vl(i)04581112

时间余量最大的活动是 g。

\n\n\n\n\n", "difficulty": 1}, {"id": 619, "year": 2022, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第8题-题目\n\n\n\n

在下图所示的 5 阶 B 树 T 中,删除关键字 260 之后需要进行必要的调整,得到新的 B 树 T1。下列选项中,不可能是 T1 根结点中关键字序列的是(  )。

\n
\n\n\n\n \n 408真题系统\n \n\n
60         90        260       350
30         50
100        110
280         300
400         500
70    80    85
\n
A.60,90,280
\n
B.60,90,350
\n
C.60,85,110,350
\n
D.60,90,110,350
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第8题-解析\n\n\n\n

参考 B 树插入操作,在 5 阶 B 树中,除根结点外的非叶子结点的关键字数 k 需要满足 2 ≤ k ≤ 4。当被删关键字 x 不在终端结点(最底层非叶子结点)时,可以用 x 的前驱(或后继) 关键字 y 来替代 x,然后在相应结点中删除 y。

情况①:删除 260,将其前驱 110 放入 260 处,删除 110 后的结点 不满足 5 阶 B 树定义,从左兄弟中借 85,将 85 放入根中,将根中的 90 移入结点 变为 <90, 100>。

情况②:删除 260,将其后继 280 放入 260 处,结点 不满足 5 阶 B 树定义且左右兄弟都不够借,结点 可以和左兄弟 <100, 110> 以及关键字 280 合并成一个新的结点 <100, 110, 280, 300>。

情况③:在情况②中,结点 也可以和右兄弟 <400, 500> 以及关键字 350 合并成一个新的结点 <300, 350, 400, 500>。综上,T1 根结点中的关键字序列可能是 <60, 85, 110, 350> 或 <60, 90, 350> 或 <60, 90, 280>,仅 D 不可能。

\n\n\n\n\n", "difficulty": 1}, {"id": 620, "year": 2022, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第9题-题目\n\n\n\n

下列因素中,影响散列(哈希)方法平均查找长度的是( )。

\n

I. 装填因子

\n

II. 散列函数

\n

III. 冲突解决策略

\n
A.仅 I、II
\n
B.仅 I、III
\n
C.仅 II、III
\n
D.I、 II、 III
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第9题-解析\n\n\n\n

三者都会影响:装填因子越大,说明 哈希表 中存储的元素越满,发生冲突的可能性越大,平均查找长度也越大。散列函数、突解决策略会影响发生冲突的可能性。
\n\n\n\n\n", "difficulty": 1}, {"id": 621, "year": 2022, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第10题-题目\n\n\n\n

使用二路归并排序对含 n 个元素的数组 M 进行排序时,二路归并操作的功能是( )。

\n
A.将两个有序表合并为一个新的有序表
\n
B.将 M 划分为两部分,两部分的元素个数大致相等
\n
C.将 M 划分为 n 个部分,每个部分中仅含有一个元素
\n
D.将 M 划分为两部分,一部分元素的值均小于另一部分元素的值
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第10题-解析\n\n\n\n

概念题,归并针对的对象是序列,二路归并就是将两个有序序列合并成一个。
\n\n\n\n\n", "difficulty": 1}, {"id": 622, "year": 2022, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第11题-题目\n\n\n\n

对数据进行排序时,若采用直接插入排序而不采用快速排序,则可能的原因是(  )。

\n

I. 大部分元素已有序

\n

II. 待排序元素数量很少

\n

III. 要求空间复杂度为 O(1)

\n

IV. 要求排序算法是稳定的

\n
A.仅 I、II
\n
B.仅 III、IV
\n
C.仅 I、II、IV
\n
D.I、 II、 III、 IV
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第11题-解析\n\n\n\n

直接插入排序 和 快速排序 的特点如下表所示:

适合初始序列情况适合元素数量空间复杂度稳定性
直接插入排序大部分元素有序较少O(1)稳定
快速排序基本无序较多O(log2​n)不稳定

I. 大部分元素已有序

✅ 正确。\n直接插入排序在序列基本有序的情况下表现非常好,接近 O(n) 的时间复杂度,而快速排序在此场景下仍需要递归处理。因此此项成立。

II. 待排序元素数量很少

✅ 正确。\n当元素数量较少时,插入排序的常数因子小、实现简单,实际运行效率往往优于快速排序,这是实际工程中的常见优化策略(如许多库排序在小规模时使用插入排序)。

III. 要求空间复杂度为 O(1)

✅ 正确。\n插入排序是原地排序,空间复杂度为 O(1);而快速排序虽然通常也是原地排序,但某些实现(尤其是递归调用)存在 O(log n) 的栈空间。若对空间要求极严,插入排序更适合。

IV. 要求排序算法是稳定的

✅ 正确。\n插入排序是稳定排序,而快速排序是不稳定的(原始版本)。如果应用场景要求排序后相等元素的相对顺序不变,选择插入排序是合理的。

综上,所有说法都正确,正确答案选择 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 623, "year": 2022, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第12题-题目\n\n\n\n

某计算机主频为 1GHz,程序 P 运行过程中,共执行了 10000 条指令,其中,80% 的指令执行平均需 1 个时钟周期,20% 的指令执行平均需 10 个时钟周期。程序 P 的平均 CPI 和 CPU 执行时间分别是( )。

\n
A.2.8,28μs
\n
B.28,28μs
\n
C.2.8,28ms
\n
D.28,28ms
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第12题-解析\n\n\n\n

参考 指令执行指标,CPI 指平均每条指令的执行需要多少个时钟周期。由于 80% 的指令执行平均需要\n1 个时钟周期,20% 的指令执行平均需要 10 个时钟周期,因此 CPI =\n80%×1+20%×10=2.8\n。\n计算机主频为 1GHz,程序 P 共执行 10000 条指令,平均每条指令需要 2.8 个时钟周期,因此,\nCPU 执行时间=\n(10000×2.8)/109=2.8×10−5s=28μs\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 624, "year": 2022, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第13题-题目\n\n\n\n

32 位补码所能表示的整数范围是( )。

\n
A.−232∼231−1
\n
B.−231∼231−1
\n
C.−232∼232−1
\n
D.−231∼232−1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第13题-解析\n\n\n\n

32 位 补码 的最大值为 0x7fffffff =\n231−1\n(最高位为 0,其他位为 1),最小值为 0x80000000 =\n−231\n(最高位为 1,其他位为 0)。
\n\n\n\n\n", "difficulty": 1}, {"id": 625, "year": 2022, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第14题-题目\n\n\n\n

-0.4375 的 IEEE754 单精度浮点数表示为( )。

\n
A.BEE0 0000H
\n
B.BF60 0000H
\n
C.BF70 0000H
\n
D.C0E0 0000H
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第14题-解析\n\n\n\n

IEEE754 单精度浮点数格式 中依次为数符 1 位、阶码 8 位(偏置值 127)、尾数\n23 位(隐藏 1 位)。\n−0.4375=−1.75×2−2\n,保证小数点前是 1。根据单精度浮点数格式,数符\n为 1;阶码为移码表示,-2+127=125,写成 8 位二进制数为 01111101;尾数隐藏小数点前\n的 1,剩下的 0.75 写成二进制数为 0.11,所以尾数部分是 1100…0。该浮点数的二进制格式为\n1011111011100000000000000000000,对应的十六进制格式为 BEE00000H。
\n\n\n\n\n", "difficulty": 1}, {"id": 626, "year": 2022, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第15题-题目\n\n\n\n

某计算机主存地址为 24 位,采用分页虚拟存储管理方式,虚拟地址空间大小为 4GB,页大小为 4KB,按字节编址。某进程的页表部分内容如下表所示。当 CPU 访问虚拟地址 00082840H,虚 - 实地址转换的结果是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
024H
0
···
···
180H
1
018H
1
实页号(页框号)
存在位
虚页号
82
129
130
···
\n
A.得到主存地址 02 4840H
\n
B.得到主存地址 18 0840H
\n
C.得到主存地址 01 8840H
\n
D.检测到缺页异常
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第15题-解析\n\n\n\n

本题考察 通过单级页表的地址翻译过程。\n页大小为 4KB =\n212\nB,按字节编址,故页内地址为 12 位。虚拟地址空间大小为\n4GB=23,故虚拟地址共 32 位,其中低 12 位为页内地址,高 20 位为虚页号。题中给出的\n虚拟地址为 00082840H,虚页号为高 20 位即 00082H(页内地址为低 12 位即 840H),82H 对\n应的十进制数为 130(注意题中页表的虚页号部分末尾未写 H,所以是十进制数,故查找时要\n先将虚页号转换为十进制数),查页表命中,且存在位为 1,对应页框号为 018H。将查找到的\n页框号 018H 和页内地址 840H 拼接,得到主存地址为 018840H。
\n\n\n\n\n", "difficulty": 3}, {"id": 627, "year": 2022, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第16题-题目\n\n\n\n

某计算机主存地址为 32 位,按字节编址,某 Cache 的数据区容量为 32KB,主存块大小为 64B,采用 8 路组相联映射方式,该 Cache 中比较器的个数和位数分别为( )。

\n
A.8,20
\n
B.8,23
\n
C.64,20
\n
D.64,23
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第16题-解析\n\n\n\n

Cache 采用 组相联映射,主存地址结构应分为 Tag 标记、组号、块内地址三部分。\n主存块大小 = Cache 块大小 = 64B =\n26\nB,因此块内地址占 6 位。Cache 数据区容量为 32KB,\n每个 Cache 块大小为 64B,则 Cache 总块数 = 32KB/64B =\n29\n,由于采用 8 路组相联映射,即\n每 8 个 Cache 块为一个分组,因此总共被分为\n29/8=26\n组,因此,组号占 6 位。除了块内地\n址和组号,剩余的位为 Tag 标记,占 32-6-6=20 位。地址结构如下所示。

\n\n
Tag 标记
组号
块内地址
20 位
6 位
6 位

Cache 采用 8 路组相联映射,因此在访问一个物理地址时,要先根据组号定位到某一分组,然\n后用物理地址的高 20 位(Tag 标记)与分组中 8 个 Cache 行的 Tag 标记做并行比较(用 8 个\n20 位“比较器”实现),若某个 Cache 行的 Tag 标记与物理地址的高 20 位完全一致,则选\n中该 Cache 行。综上所述,在组相联映射的 Cache 中,“比较器”用于并行地比较分组中所\n有 Cache 行的 Tag 标记位与欲访问物理地址的 Tag 标记位,因此比较器的个数就是分组中的\nCache 行数 8,比较器的位数就是 Tag 标记位数 20。

\n\n\n\n\n", "difficulty": 1}, {"id": 628, "year": 2022, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第17题-题目\n\n\n\n

某内存条包含 8 个 8192×8192×8 位的 DRAM 芯片,按字节编址,支持突发传送方式,对应存储器总线宽度为 64 位,每个 DRAM 芯片内有一个行缓冲区。下列关于该内存条的叙述中,不正确的是( )。

\n
A.内存条的容量为 512MB
\n
B.采用多模块交叉编址方式
\n
C.芯片的地址引脚为 26 位
\n
D.芯片内行缓冲有 8192×8 位
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第17题-解析\n\n\n\n

本题考察 主存容量的扩展。

\n\n\n\n\n", "difficulty": 1}, {"id": 629, "year": 2022, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第18题-题目\n\n\n\n

下列选项中,属于指令集体系结构(ISA)规定的内容是( )。

\n

Ⅰ. 指令字格式和指令类型

\n

Ⅱ. CPU 的时钟周期

\n

Ⅲ. 通用寄存器个数和位数

\n

Ⅳ. 加法器的进位方式

\n
A.仅Ⅰ、Ⅱ
\n
B.仅Ⅰ、Ⅲ
\n
C.仅Ⅱ、Ⅳ
\n
D.仅Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第18题-解析\n\n\n\n

指令集处于软硬件的交界面上。指令字和指令格式、通用寄存器个数和位数都与\n机器指令有关,由 指令体系结构 规定。两个 CPU 可以有不同的时钟周期,但指令集可以相同,CPU 的\n时钟周期不由 ISA 规定。加法器的进位方式涉及电路设计,也不由指令集规定。
\n\n\n\n\n", "difficulty": 1}, {"id": 630, "year": 2022, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第19题-题目\n\n\n\n

设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为 6 位,包含零地址、一地址和二地址 3 种格式的指令。若二地址指令有 12 条,一地址指令有 254 条,则零地址指令的条数最多为( )。

\n
A.0
\n
B.2
\n
C.64
\n
D.128
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第19题-解析\n\n\n\n

本题考察 N 地址指令\n如下图所示:零地址指令的 OP 字段位数相比一地址和二地址指令更短,但是需要注意的是,零地址指令的 OP 字段前缀与一地址和二地址指令的 OP 字段不能相同。

\n\n
OP
ADDR
OP
ADDR
ADDR
OP
16 位
10 位
4 位
6 位
6 位
6 位
零地址指令
一地址指令
二地址指令

所以零地址指令的条数为\n216−254×26−12×212=128\n。

\n\n\n\n\n", "difficulty": 0}, {"id": 631, "year": 2022, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第20题-题目\n\n\n\n

将高级语言源程序转换为可执行目标文件的主要过程是( )。

\n
A.预处理 → 编译 → 汇编 → 链接
\n
B.预处理 → 汇编 → 编译 → 链接
\n
C.预处理 → 编译 → 链接 → 汇编
\n
D.预处理 → 汇编 → 链接 → 编译
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第20题-解析\n\n\n\n

将源程序转换为可执行目标文件的 过程分为预处理、编译、汇编、链接四个阶段
\n\n\n\n\n", "difficulty": 1}, {"id": 632, "year": 2022, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第21题-题目\n\n\n\n

下列关于中断 I/O 方式的叙述中,不正确的是( )。

\n
A.适用于键盘、针式打印机等字符型设备
\n
B.外设和主机之间的数据传送通过软件完成
\n
C.外设准备数据的时间应小于中断处理时间
\n
D.外设为某进程准备数据时 CPU 可运行其他进程
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第21题-解析\n\n\n\n

中断 I/O 方式 适用于字符型设备,此类设备的特点是数据传输速率慢,以字符或\n字为单位进行传输,A 正确。若采用中断 VO 方式,当外设准备好数据后,向 CPU 发出中断\n请求,CPU 暂时中止现行程序,转去运行中断服务程序,由中断服务程序完成数据传送,B\n正确。若外设准备数据的时间小于中断处理时间,则可能导致数据丢失,以输入设备为例,\n设备为进程准备的数据会先写入设备控制器的缓冲区(缓冲区大小有限,通常只能暂存几个\n字节),缓冲区每写满一次,就会向 CPU 发出一次中断请求,CPU 响应并处理中断的过程,\n就是将缓冲区中的数据“取走”的过程,因此若外设准备数据的时间小于中断处理时间,则\n可能导致外设往缓冲区写入数据的速度快于 CPU 从缓冲区取走数据的速度,从而导致缓冲区\n的数据被覆盖,进而导致数据丢失。C 错误。若采用中断 I/O 方式,则外设为某进程准备数据\n时,可令该进程阻塞,CPU 运行其他进程,D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 633, "year": 2022, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第22题-题目\n\n\n\n

下列关于并行处理技术的叙述中,不正确的是( )。

\n
A.多核处理器属于 MIMD 结构
\n
B.向量处理器属于 SIMD 结构
\n
C.硬件多线程技术只可用于多核处理器
\n
D.SMP 中所有处理器共享单一物理地址空间
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第22题-解析\n\n\n\n

本题考察 多处理器,\nMIMD 结构分为多计算机系统和多处理器系统,A 正确。向量处理器是 SIMD 的\n变体,属于 SIMD 结构,B 正确。硬件多线程技术是在一个核中处理多个线程,可用于单核\n处理器,C 错误。共享内存多处理器 (SMP) 具有共享的单一物理地址空间,所有核都可通\n过存取指令来访问同一片主存地址空间,D 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 634, "year": 2022, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第23题-题目\n\n\n\n

下列关于多道程序系统的叙述中,不正确的是( )。

\n
A.支持进程的并发执行
\n
B.不必支持虚拟存储管理
\n
C.需要实现对共享资源的管理
\n
D.进程数越多 CPU 利用率越高
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第23题-解析\n\n\n\n

操作系统的 基本特点:并发、共享、虚拟、异步,其中最基本、一定要实现的是并发和共享,A、C 正确。早期的多道批处理操作系统会将所有进程的数据全部调入主存,再让多道程序并发执行,即使不支持虚拟存储管理,也能实现“多道程序并发”,B 正确。进程多并不意味着 CPU 利用率高,进程数量越多,进程之间的资源竞争越激烈,甚至可能因为资源竞争而出现死锁现象,导致 CPU 利用率低,D 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 635, "year": 2022, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第24题-题目\n\n\n\n

下列选项中,需要在操作系统进行初始化过程中创建的是( )。

\n
A.中断向量表
\n
B.文件系统的根目录
\n
C.硬盘分区表
\n
D.文件系统的索引节点表
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第24题-解析\n\n\n\n

解析:

因此,正确答案是 A。

\n\n\n\n\n", "difficulty": 1}, {"id": 636, "year": 2022, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第25题-题目\n\n\n\n

进程 P0、P1、P2 和 P3 进入就绪队列的时刻、优先级(值越小优先权越高)及 CPU 执行时间如下表所示。

\n
进程进入就绪队列的时刻优先级CPU 执行时间
P00 ms15100 ms
P110 ms2060 ms
P210 ms1020 ms
P315 ms610 ms
\n

若系统采用基于优先权的抢占式进程调度算法,则从 0ms 时刻开始调度,到 4 个进程都运行结束为止,发生进程调度的总次数为( )。

\n
A.4
\n
B.5
\n
C.6
\n
D.7
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2022-第25题-解析\r\n\r\n\r\n\r\n

本题考察 优先级调度:

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 637, "year": 2022, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第26题-题目\n\n\n\n

系统中有三个进程 P0、P1、P2 及三类资源 A. B. C。若某时刻系统分配资源的情况如下表所示,则此时系统中存在的安全序列的个数为( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
A
B
C
A
B
C
已分配资源数
尚需资源数
A
B
C
可用资源数
进程
P0
P1
P2
2
0
1
0
2
0
1
0
1
0
1
0
2
2
1
1
3
3
1
3
2
\n
A.1
\n
B.2
\n
C.3
\n
D.4
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第26题-解析\n\n\n\n

初始时系统中的可用资源数为 <1,3,2>,只能满足 P0 的需求 <0,2,1>,所以 安全分配序列 第一个只能是 P0,\n将资源分配给 P0 后,P0 执行完释放所占资源,可用资源数变为 <1,3,2> + <2,0,1> = <3,3,3>,\n此时可用资源数既能满足 P1,也能满足 P2,可以先分配给 P1,P1 执行完释放资源再分配给 P2,\n也可以先分配给 P2,P2 执行完释放资源再分配给 P1。\n所以安全序列可以是 ①P0、P1、P2 或 ②P0、P2、P1。
\n\n\n\n\n", "difficulty": 1}, {"id": 638, "year": 2022, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第27题-题目\n\n\n\n

下列关于 CPU 模式的叙述中,正确的是( )。

\n
A.CPU 处于用户态时只能执行特权指令
\n
B.CPU 处于内核态时只能执行特权指令
\n
C.CPU 处于用户态时只能执行非特权指令
\n
D.CPU 处于内核态时只能执行非特权指令
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第27题-解析\n\n\n\n

CPU 在 用户态 时只能执行非特权指令,在 内核态 时可以执行特权指令和非特权指令。
\n\n\n\n\n", "difficulty": 1}, {"id": 639, "year": 2022, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第28题-题目\n\n\n\n

下列事件或操作中,可能导致进程 P 由执行态变为阻塞态的是( )。

\n

Ⅰ. 进程 P 读文件

\n

Ⅱ. 进程 P 的时间片用完

\n

Ⅲ. 进程 P 申请外设

\n

Ⅳ. 进程 P 执行信号量的 wait() 操作

\n
A.仅Ⅰ、Ⅳ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅲ、Ⅳ
\n
D.仅Ⅰ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第28题-解析\n\n\n\n

参考 状态转化。\n进程 P 读文件时,进程从执行态进入阻塞态,等待磁盘 I/O 完成,I 正确。进程 P4\n的时间片用完,导致进程从执行态进入就绪态,转入就绪队列等待下次被调度,Ⅱ错误。进\n程 P 申请外设,若外设是独占设备且正在被其他进程使用,则进程 P 从执行态进入阻塞态,\n等待系统分配外设,Ⅲ 正确。进程 P 执行信号量的 wait() 操作,如果信号量的值小于等于\n0,则进程进入阻塞态,等待其他进程用 signal() 操作唤醒,V 正确。
\n\n\n\n\n", "difficulty": 1}, {"id": 640, "year": 2022, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第29题-题目\n\n\n\n

某进程访问的页 b 不在内存中,导致产生缺页异常,该缺页异常处理过程中不一定包含的操作是( )。

\n
A.淘汰内存中的页
\n
B.建立页号与页框号的对应关系
\n
C.将页 b 从外存读入内存
\n
D.修改页表中页 b 对应的存在位
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第29题-解析\n\n\n\n

缺页异常 需要从磁盘调页到内存中,将新调入的页与页框建立对应关系,并修改\n该页的存在位,B、C、D 正确:如果内存中有空闲页框,就不需要淘汰其他页,A 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 641, "year": 2022, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第30题-题目\n\n\n\n

下列选项中,不会影响系统缺页率的是( )。

\n
A.页面置换算法
\n
B.工作集的大小
\n
C.进程的数量
\n
D.页缓冲队列的长度
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第30题-解析\n\n\n\n

页置换算法会影响缺页率,例如,LRU 算法的缺页率通常要比 FIFO 算法的缺页\n率低,排除 A。工作集的大小决定了分配给进程的物理块数,分配给进程的物理块数越多,\n缺页率就越低,排除 B。进程的数量越多,对内存资源的竞争越激烈,每个进程被分配的物\n理块数越少,缺页率也就越高,排除 C。页缓冲队列是将被淘汰的页面缓存下来,暂时不写\n回磁盘,队列长度会影响页面置换的速度,但不会影响缺页率,答案选 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 642, "year": 2022, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第31题-题目\n\n\n\n

执行系统调用的过程涉及下列操作,其中由操作系统完成的是( )。

\n

Ⅰ. 保存断点和程序状态字

\n

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

\n

Ⅲ. 执行系统调用服务程序

\n

Ⅳ. 将 CPU 模式改为内核态

\n
A.仅Ⅰ、Ⅲ
\n
B.仅Ⅱ、Ⅲ
\n
C.仅Ⅱ、Ⅳ
\n
D.仅Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第31题-解析\n\n\n\n

对四个选项进行逐一分析:

Ⅰ. 保存断点和程序状态字 ❌
参考中断处理过程,保存断点由中断隐指令完成,即由硬件完成。

Ⅱ. 保存通用寄存器的内容 ✅
为了防止系统调用覆盖用户程序中的数据,操作系统在进入系统调用处理程序时会保存用户程序的寄存器内容(这属于上下文切换的一部分)。

Ⅲ. 执行系统调用服务程序 ✅
系统调用就是要求操作系统执行某项服务,服务程序是操作系统的一部分,由操作系统调度执行。

Ⅳ. 将 CPU 模式改为内核态 ❌
这一点不是由操作系统主动完成,而是由硬件自动完成的:

当执行陷阱指令(如 int 0x80)或发生中断时,CPU 自动将模式从用户态切换为内核态,然后跳转到操作系统提供的中断向量地址。

所以,这属于硬件响应的一部分,不是由操作系统“显式”控制的。

所以正确答案选择 B。

\n\n\n\n\n", "difficulty": 2}, {"id": 643, "year": 2022, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2022-第32题-题目\n\n\n\n

下列关于驱动程序的叙述中,不正确的是( )。

\n
A.驱动程序与 I/O 控制方式无关
\n
B.初始化设备是由驱动程序控制完成的
\n
C.进程在执行驱动程序时可能进入阻塞态
\n
D.读/写设备的操作是由驱动程序控制完成的
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第32题-解析\n\n\n\n

厂家在设计一个设备时,通常会为该设备编写 设备驱动程序,主机需要先安装驱动程序,才能使用设备。当一个设备被连接到主机时,驱动程序负责初始化设备(如将设备控制器中的寄存器初始化),B 正确。当进程在执行驱动程序时,可能会因为设备忙碌而进入阻塞态,C 正确。设备的读/写操作本质就是在设备控制器和主机之间传送数据,而只有厂家知道\n设备控制器的内部实现,因此也只有厂家提供的驱动程序能控制设备的读/写操作,D 正确。厂家会根据设备特性,在驱动程序中实现一种合适的 I/O 控制方式,A 错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 644, "year": 2022, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第33题-题目\n\n\n\n

在 ISO/OSI 参考模型中,实现两个相邻结点间流量控制功能的是( )。

\n
A.物理层
\n
B.数据链路层
\n
C.网络层
\n
D.传输层
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第33题-解析\n\n\n\n

在 ISO/OSI 模型中,数据链路层、网络层、传输层都具有流量控制功能,数据链路层是相邻结点之间的流量控制,网络层是整个网络中的流量控制,传输层是端到端的流量控制。
\n\n\n\n\n", "difficulty": 1}, {"id": 645, "year": 2022, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第34题-题目\n\n\n\n

在一条带宽为 200kHz 的无噪声信道上,若采用 4 个幅值的 ASK 调制,则该信道的最大数据传输速率是( )。

\n
A.200 kbps
\n
B.400 kbps
\n
C.800 kbps
\n
D.1600 kbps
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第34题-解析\n\n\n\n

根据 奈奎斯特定理,最大数据传输速率=\n2Wlog2​V\n,4 个幅值的 ASK 调制说明有 4 个相位,将 V=4 代入,得 800kbps。
\n\n\n\n\n", "difficulty": 1}, {"id": 646, "year": 2022, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第35题-题目\n\n\n\n

若某主机的 IP 地址是 183.80.72.48, 子网掩码是 255.255.192.0, 则该主机所在网络的网络地址是 (  )。

\n
A.183.80.0.0
\n
B.183.80.64.0
\n
C.183.80.72.0
\n
D.183.80.192.0
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第35题-解析\n\n\n\n

主机所在网络的网络地址可以通过主机的 IP 地址和 子网掩码 逐位相与得到。子网掩码 255.255.192.0 的二进制前 18 位为 1、后 14 位为 0,把主机 P 地址的后 14 位变为 0,得\n到的结果为 183.80.64.0,即为主机所在网络的网络地址。
\n\n\n\n\n", "difficulty": 1}, {"id": 647, "year": 2022, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第36题-题目\n\n\n\n

下图所示网络中的主机 H 的子网掩码与默认网关分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
路由器
交换机
H
192.168.1.60
192.168.1.1/30
192.168.1.62/27
\n
A.255.255.255.192, 192.168.1.1
\n
B.255.255.255.192, 192.168.1.62
\n
C.255.255.255.224, 192.168.1.1
\n
D.255.255.255.224, 192.168.1.62
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第36题-解析\n\n\n\n

默认网关 可以理解为离当前主机最近的路由器的端口地址,所以是 192.168.1.62,\n而该主机的子网掩码和网关的子网掩码也相同,/27 即为 255.255.255.224。
\n\n\n\n\n", "difficulty": 3}, {"id": 648, "year": 2022, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第37题-题目\n\n\n\n

在 SDN 网络体系结构中,SDN 控制器向数据平面的 SDN 交换机下发流表时所使用的接口是( )。

\n
A.东向接口
\n
B.南向接口
\n
C.西向接口
\n
D.北向接口
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第37题-解析\n\n\n\n

SDN 对上层开发者提供的编程接口称为北向接口,而南向接口则负责控制平面和\n数据平面间的通信,所以 SDN 控制器向数据平面的 SDN 交换机下发流表时使用南向接口。
\n\n\n\n\n", "difficulty": 1}, {"id": 649, "year": 2022, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第38题-题目\n\n\n\n

假设主机甲和主机乙已建立一个 TCP 连接,最大段长 MSS = 1 KB,甲一直有数据向乙发送,当甲的拥塞窗口为 16KB 时,计时器发生了超时,则甲的拥塞窗口再次增长到 16KB 所需要的时间至少是( )。

\n
A.4 RTT
\n
B.5 RTT
\n
C.11 RTT
\n
D.16 RTT
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第38题-解析\n\n\n\n

时刻 0 发生了超时,门限值 ssthresh 变为拥塞窗口 cwnd 的一半即 8,同时 cwnd\n置为 1,执行 慢开始 算法,cwnd 指数增长,经过 3 个 RTT,增长到 ssthresh 值:之后执行 拥塞避免 算法,cwmd 线性增长,再经过 8 个 RTT,增长到 16,共花费 11 个 RTT,如下表所示。

时刻01234567891011
拥塞窗口1248910111213141516
\n\n\n\n\n", "difficulty": 0}, {"id": 650, "year": 2022, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第39题-题目\n\n\n\n

假设客户 C 和服务器 S 已建立一个 TCP 连接,通信往返时间 RTT = 50 ms, 最长报文段寿命 MSL= 800ms, 数据传输结束后,C 主动请求断开连接。若从 C 主动向 S 发出 FIN 段时刻算起,则 C 和 S 进入 CLOSED 状态所需的时间至少分别是 ( )。

\n
A.850 ms, 50 ms
\n
B.1650 ms, 50 ms
\n
C.850 ms, 75 ms
\n
D.1650 ms, 75 ms
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第39题-解析\n\n\n\n

TCP 连接的释放过程见 四次挥手。题目问的是最少时间,所以当服务器 S 收到客户 C 发送的 FIN 请求后不再发送数据,而是立马发送 FN 请求(即第②步和第③步同时发生,忽略 FIN-WAIT2 和 CLOSE-WAIT 状态。C 收到 S 发来的 FIN 报文段后,进入 CLOSED 状态还需等到 TIME-WAIT 结束,总用时至少为 1RTT + 2MSL = 50 + 800×2 = 1650ms。S 进入 CLOSED 状态需要经过 3 次报文段的传输时间,即 1.5RTT=75ms。
\n\n\n\n\n", "difficulty": 0}, {"id": 651, "year": 2022, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2022-第40题-题目\n\n\n\n

假设主机 H 通过 HTTP/1.1 请求浏览某 Web 服务器 S 上的 Web 页 news408.html, news408.html 引用了同目录下的 1 幅图像,news408.html 文件大小为 1 MSS(最大段长),图像文件大小为 3 MSS, H 访问 S 的往返时间 RTT = 10 ms, 忽略 HTTP 响应报文的首部开销和 TCP 段传输时延。若 H 已完成域名解析,则从 H 请求与 S 建立 TCP 连接时刻起,到接收到全部内容止,所需的时间至少 是( )。

\n
A.30ms
\n
B.40ms
\n
C.50ms
\n
D.60ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第40题-解析\n\n\n\n

HTTP/1.1 默认使用流水线的 长连接,所有请求都是连续发送的。题目要求最少\n时间,最理想的流程是 TCP 在第三次握手的报文段中捎带 HTTP 请求,以及 TCP 连接后慢开\n始阶段不考虑拥塞情况。假设接收方有足够大的缓存空间,即发送窗口等同于拥塞窗口,总\n共需要经过:第 1 个 RTT,进行 TCP 连接,此时服务器 S 的发送窗口= 1MSS,并在第三次\n握手时捎带 HTTP 请求;第 2 个 RTT,服务器 S 发送大小为 1MSS 的 html 文件,主机 C 确认\n后服务器 S 的发送窗口变为 2MSS;第 3 个 RTT,服务器 S 发送大小为 2MSS 的图像文件,\n主机 C 确认后服务器 S 的发送窗口变为 4MSS;第 4 个 RTT,服务器 S 发送剩下的 1MSS 图\n像文件,完成传输,总共需要 4 个 RTT,即 40ms。
\n\n\n\n\n", "difficulty": 0}, {"id": 652, "year": 2022, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2022-第41题-题目\n\n\n\n

已知非空二叉树 T 的结点值均为正整数,采用顺序存储方式保存,数据结构定义如下:

\n
typedef struct {                    // MAX_SIZE 为已定义常量\n    Elemtype SqBiTNode[MAX_SIZE];   // 保存二叉树结点值的数组\n    int ElemNum;                    // 实际占用的数组元素个数\n}SqBiTree;\n
\n

T 中不存在的结点在数组 SqBiTNode 中用 -1 表示。例如,对于下图所示的两棵非空二叉树 T1 和 T2:

\n
\n\n\n\n \n 408真题系统\n \n\n
40
25
80
30
27
40
50
60
35
30
60
二叉树 T1
二叉树 T2
\n

T1 的存储结果如下:

\n
\n\n
40
25
60
-1
30
-1
80
-1
-1
27
T1.SqlBiTNode 
T1.ElemNum = 10
\n

T2 的存储结果如下:

\n
\n\n
40
50
60
-1
30
-1
-1
-1
-1
-1
T2.SqlBiTNode 
T2.ElemNum = 11
35
\n

请设计一个尽可能高效的算法,判定一棵采用这种方式存储的二叉树是否为二叉搜索树,若是,则返回 true,否则,返回 false,要求:

\n

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

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第41题-解析\n\n\n\n

1)算法的基本设计思想

对于采用顺序存储方式保存的二叉树,根结点保存在 SqBiTNode[0] 中:当某结点保存在 SqBiTNode[i] 中时,若有左孩子,则其值保存在 SqBiTNode[2i+1]中;若有右孩子,则其值保存在 SqBiTNode[2i+2] 中;若有双亲结点,则其值保存在 SqBiTNode[(i-1)/2] 中。

二叉搜索树需要满足的条件是:任一结点值大于其左子树中的全部结点值,小于其右子树中的全部结点值。中序遍历二叉搜索树得到一个升序序列。

使用整型变量 val 记录中序遍历过程中已遍历结点的最大值,初值为一个负整数,对二叉树进行中序遍历。若当前遍历的结点值小于等于 val,则算法返回 false,否则,将 val 的值更新为当前结点的值。

2)算法实现

// val 存储中序遍历中访问到的最大值\n// 返回值:当前子树是否为 BST\nbool solve(SqBiTree *tree, int k, int *val) {\n  if (k >= tree->ElemNum) {\n    // 空结点\n    return true;\n  }\n  // 判断左子树是否为 BST\n  bool ret = solve(tree, 2*k+1, val);\n  if (!ret) {\n    return false;\n  }\n  int cur_val = tree->SqbiTNode[k];\n  if (cur_val == -1) {\n    // 空结点\n    return true;\n  }\n  // 判断中序序列是否递增\n  if (cur_val > *val) {\n    *val = cur_val;\n  } else {\n    return false;\n  }\n  // 判断右子树是否为 BST\n  ret = solve(tree, 2*k+2, val);\n  if (!ret) {\n    return false;\n  }\n  return true;\n}\n
\n\n\n\n\n", "difficulty": 2}, {"id": 653, "year": 2022, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2022-第42题-题目\n\n\n\n

现有 n(n > 100000)个数保存在一维数组 M 中,需要查找 M 中最小的 10 个数,请回答下列问题。

\n

(1) 设计一个完成上述查找任务的算法,要求平均情况下的比较次数尽可能少,简单描述其算法思想,不需要程序实现。

\n

(2) 说明你所设计的算法平均情况下的时间复杂度和空间复杂度。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第42题-解析\n\n\n\n

【答案 1】

定义含 10 个元素的数组 A,初始时元素值均为该数组类型能表示的最大数 MAX。

for M 中的每个元素 s\n    if (s < A[9]) 丢弃 A[9]并将 s 按升序插入到 A 中;\n

当数据全部扫描完毕,数组 A[0]~A[9]保存的即是最小的 10 个数。

【答案 2】

定义含 10 个元素的大根堆 H,元素值均为该堆元素类型能表示的最大数 MAX。

for M 中的每个元素 s\n    if (s < H 的堆顶元素)\n

删除堆顶元素并将 s 插入到 H 中;\n当数据全部扫描完毕,堆 H 中保存的即是最小的 10 个数。

\n\n\n\n\n", "difficulty": 0}, {"id": 654, "year": 2022, "index": 43, "type": 2, "typeName": "应用题", "score": 15, "subject": "computer-network", "question": "\n\n\n\n\n\n2022-第43题-题目\n\n\n\n

某 CPU 中部分数据通路如图所示,其中,GPRs 为通用寄存器组;FR 为标志寄存器,用于存放 ALU 产生的标志信息;带箭头虚线表示控制信号,如控制信号 ReaD. Write 分别表示主存读、主存写,MDRin 表示内部总线上数据写入 MDR,MDRout 表示 MDR 的内容送内部总线。

\n
\n\n\n\n \n 408真题系统\n \n\n
MAR
MARin
MDR
MDRin
MDRout
PC
PCin
PCout
IR
IRin
送 CU 等部件
Read
Write
内部总线
主
存
储
器
Y
ALU
Yin
Z
SF
OF
···
FR
ALUop
Zout
GPRs
rd
GPRin
rs
GPRout
4
4
16
16
16
A
B
F
\n

(1) ALU 的输入端 A. B 及输出端 F 的最高位分别为 A15 、 B15 及 F15 ,FR 中的符号标志和溢出标志分别为 SF 和 OF,则 SF 的逻辑表达式是什么?A 加 B. A 减 B 时 OF 的逻辑表达式分别是什么?要求逻辑表达式的输入变量为 A15、B15 及 F15 。

\n

(2) 为什么要设置暂存器 Y 和 Z?

\n

(3) 若 GPRs 的输入端 rs、rd 分别为所读、写的通用寄存器的编号,则 GPRs 中最多有多少个通用寄存器?rs 和 rd 来自图中的哪个寄存器?已知 GPRs 内部有一个地址译码器和一个多路选择器,rd 应该连接地址译码器还是多路选择器?

\n

(4) 取指令阶段(不考虑 PC 增量操作)的控制信号序列是什么?若从发出主存读命令到主存读出数据并传送到 MDR 共需 5 个时钟周期,则取指令阶段至少需要几个时钟周期?

\n

(5) 图中控制信号由什么部件产生?图中哪些寄存器的输出信号会连到该部件的输入端?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第43题-解析\n\n\n\n

1)符号标志 SF 表示运算结果的正负性,因此\nSF=F15​

对于加法运算\nA+B→F\n,若\nA\n、\nB\n为负,且\nF\n为正,则说明发生溢出:或者,若\nA\n、\nB\n为正,\n且\nF\n为负,也说明发生溢出。因此,加运算时,溢出标志\nOF=A15​​⋅B15​​⋅F15​+A15​⋅B15​⋅F15​​\n。

对于减法运算\nA−B→F\n,若\nA\n为负、\nB\n为正,且\nF\n为正,则说明发生溢出:或者,若\nA\n为正、\nB\n为负,且\nF\n为负,也说明发生溢出。因此,减运算时,溢出标志\nOF=A15​​⋅B15​⋅F15​+A15​⋅B15​​⋅F15​​\n。

2)因为在单总线结构中,每一时刻总线上只有一个数据有效,而 ALU 有两个输入端和一个\n输出端。因此,当 ALU 运算时,需要先用暂存器 Y 缓存其中一个输入端的数据,再通过\n总线传送另一个输入端的数据。与此同时,ALU 的输出端产生运算结果,但由于总线正\n被占用,因此需要暂存器 Z,以缓存 ALU 的输出端数据。

3)由图可知,rs 和 rd 都是 4bit,因此 GPRs 中最多有\n24=16\n个通用寄存器;rs 和 rd 来自指令寄\n存器 IR;rd 表示寄存器编号,应连接地址译码器。

4)取指阶段需要根据程序计数器 PC 取出主存中的指令,并将指令写入指令寄存器 R 中。控制\n信号序列如下:

①PCout,MARin // 将指令的地址写入 MAR

②Read // 读主存,并将读出的数据写入 MDR

③MDRout,Rin // 将 MDR 的内容写入指令寄存器 R

步骤①需要 1 个时钟周期,步骤②需要 5 个时钟周期,步骤③需要 1 个时钟周期,因此取指\n令阶段至少需要 7 个时钟周期。

5)图中控制信号由控制部件(CU)产生。指令寄存器 IR 和标志寄存器 FR 的输出信号会连\n到控制部件的输入端。

\n\n\n\n\n", "difficulty": 1}, {"id": 655, "year": 2022, "index": 44, "type": 2, "typeName": "应用题", "score": 8, "subject": "computer-network", "question": "\n\n\n\n\n\n2022-第44题-题目\n\n\n\n

假设某磁盘驱动器中有 4 个双面盘片,每个盘面有 20000 个磁道,每个磁道有 500 个扇区,每个扇区可记录 512 字节的数据,盘片转速为 7200rpm(转/分),平均寻道时间为 5ms,请回答下列问题。

\n

(1) 每个扇区包含数据及地址信息,地址信息分为 3 个字段,这 3 个字段的名称格式什么?对于该磁盘,各字段至少占多少位?

\n

(2) 一个扇区的平均访问时间约为多少?

\n

(3) 若采用周期挪用 DMA 方式进行磁盘与主机之间的数据传送,磁盘控制器中的数据缓冲区大小为 64 位,则在一个扇区读写过程中,DMA 控制器向 CPU 发送了多少次总线请求?若 CPU 检测到 DMA 控制器的总线请求信号时也需要访问主存,则 DMA 控制器是否可以获得总线使用权?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第44题-解析\n\n\n\n

1)参考 CHS 地址,三个字段的名称为柱面号(或磁道号)、磁头号(或盘面号)、扇区号。
由于每个盘面有 20000 个磁道,因此该磁盘共有 20000 个柱面,柱面号字段至少占\n⌈log2​20000⌉=15\n位。
由于该磁盘共有 4 个盘片,每个盘片有 2 个盘面,因此磁头号字段至少占\nlog2​(4×2)=3\n位。
由于每个磁道有 500 个扇区,因此扇区号字段至少占\n⌈log2​500⌉=9\n位。

2)一个扇区的访问时间由寻道时间、延迟时间、传输时间三部分组成。
平均寻道时间为 5 ms,平均延迟时间等于磁盘转半圈所需要的时间,平均传输时间等于一个扇区划过磁头下方所需要的时间。
该磁盘转一圈的时间为\n60×103/7200≈8.33\nms,因此一个扇区的平均访问时间约为

5+8.33/2+8.33/500≈9.18 ms

3)磁盘控制器中的数据缓冲区每充满一次,DMA 控制器就需要发出一次总线请求,将这 64 bit 数据通过总线传送到主存。
因此,在一个扇区读写过程中,DMA 控制器向 CPU 发送了\n512B/64bit=64\n次总线请求。
由于采用周期挪用 DMA 方式,当 CPU 和 DMA 控制器都需要访问主存时,DMA 控制器可以优先获得总线使用权。
这是因为一旦磁盘开始读写,就必须按时完成数据传送,否则数据缓冲区中的数据会发生丢失。

\n\n\n\n\n", "difficulty": 3}, {"id": 656, "year": 2022, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第45题-题目\n\n\n\n

某文件系统的磁盘块大小为 4KB,目录项由文件名和索引节点号构成,每个索引节点占 256 字节,其中包含直接地址项 10 个,一级、二级和三级间接地址项各 1 个,每个地址项占 4 字节。该文件系统中子目录 stu 的结构如题 45(a) 图所示,stu 包含子目录 course 和文件 doc,course 子目录包含文件 course1 和 course2。各文件的文件名、索引节点号、占用磁盘块的块号如题 45(b) 图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
stu
course
course1
course2
文件名
索引节点号
stu
1
course
2
course1
10
course2
100
doc
磁盘块号
10
20
30
40
doc
10
x
45-(a) 图
45-(b) 图
\n

请回答下列问题。

\n

(1) 目录文件 stu 中每个目录项的内容是什么?

\n

(2) 文件 doc 占用的磁盘块的块号 x 的值是多少?

\n

(3) 若目录文件 course 的内容已在内存,则打开文件 course1 并将其读入内存,需要读几个磁盘块?说明理由。

\n

(4) 若文件 course2 的大小增长到 6MB,为了存取 course2 需要使用该文件索引节点的哪几级间接地址项?说明理由。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第45题-解析\n\n\n\n

1)在该文件系统中,目录项由文件名和索引结点号构成。由图 a 可知,stu 目录下有两个文\n件,分别是 course 和 doc。由图 b 可知,这两个文件分别对应索引结点号 2 和 10。因此,\n目录文件 stu 中两个目录项的内容是

2)由图 b 可知,文件 doc 和文件 course1 对应的索引结点号都是 10。说明 doc 和 course1 两\n个目录项共享同一个索引结点,本质上对应同一个文件。而文件 course1 存储在 30 号磁盘\n块,因此文件 doc 占用的磁盘块的块号 x 为 30。

3)需要读 2 个磁盘块。先读 course1 的索引结点所在的磁盘块,再读 course1 的内容所在的\n磁盘块。目录文件 course 的内容已在内存中,即 coursel、course2 对应的目录项己在内存\n中,根据 coursel 对应的目录项可以知道其索引结点号,即可读入 course1 的索引结点所\n在的磁盘块:根据 course1 的索引结点可知该文件存储在 30 号磁盘块,因此可再读入\ncoursel 的内容所在的磁盘块。

4)存取 course2 需要使用索引结点的一级和二级间接地址项。6MB 大小的文件需要占用\n6MB/4KB=1536 个磁盘块。直接地址项可以记录 10 个磁盘块号,一级间接地址块可以记\n录 4KB/4B=1024 个磁盘块号,二级间接地址块可以记录 1024×1024 个磁盘块号,而\n10+1024<1536<10+1024+1024×1024\n。因此,6MB 大小的文件,需要使用一级间接地址\n项和二级间接地址项(拓展:若文件的总大小超出\n10+1024+1024×1024\n块,则还需使\n用三级间接地址项)。

\n\n\n\n\n", "difficulty": 1}, {"id": 657, "year": 2022, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第46题-题目\n\n\n\n

某进程的两个线程 T1 和 T2 并发执行 A. B. C. D. E 和 F 共 6 个操作,其中 T1 执行 A. E 和 F,T2 执行 B. C 和 D。题 46 图表示上述 6 个操作的执行顺序所必须满足的约束:C 在 A 和 B 完成后执行,D 和 E 在 C 完成后执行,F 在 E 完成后执行。请使用信号量的 wait()、signal() 操作描述 T1 和 T2 之间的同步关系,并说明所用信号量的作用及其初值。

\n
\n\n\n\n \n 408真题系统\n \n\n
A
C
B
D
E
F
\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第46题-解析\n\n\n\n

进程 T1 要依次执行 A、E、F。进程 T2 要执行 B、C、D。由图可知,T2 执行 C 必须在 T1\n执行完 A 之后;T1 执行 E 必须在 T2 执行完 C 之后。因此,有两对同步关系。信号量的定义\n和同步关系的描述如下:

semaphore AC = 0;\nsemaphore CE = 0;\n\nT1() {\n    A;\n    signal(AC);\n    wait(CE);\n    E;\n    F;\n}\n\nT2() {\n    B;\n    wait(AC);\n    C;\n    signal(CE);\n    D;\n}\n
\n\n\n\n\n", "difficulty": 1}, {"id": 658, "year": 2022, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2022-第47题-题目\n\n\n\n

某网络拓扑如题 47 图所示,R 为路由器,S 为以太网交换机,AP 是 802.11 接入点,路由器的 E0 接口和 DHCP 服务器的 IP 地址配置如图中所示;H1 与 H2 属于同一个广播域,但不属于同一个冲突域;H2 和 H3 属于同一个冲突域;H4 和 H5 已经接入网络,并通过 DHCP 动态获取了 IP 地址。现有路由器、100BaseT 以太网交换机和 100BaseT 集线器 (Hub) 三类设备各若干台。

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
设备1
设备2
192.168.0.1/25
00-11-11-11-11-A1
E0
S
AP
00-11-11-11-11-C1
DHCP 服务器
192.168.0.2/25
00-11-11-11-11-B1
192.168.0.3/25
192.168.0.4/25
H4
H5
H1
H2
H3
00-11-11-11-11-D1
00-11-11-11-11-E1
\n

请回答下列问题。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2022-第47题-解析\n\n\n\n

1)设备 1 选择 100 BaseT 以太网交换机,设备 2 选择 100 BaseT 集线器。因为物理层设备既不\n能隔离冲突域也不能隔离广播域,链路层设备可以隔离冲突域但不能隔离广播域。

2)假设 H2 与 H3 之间的最远距离是 D,根据 CSMA/CD 协议的 限制条件:

最短帧长 = 总线传播时延 × 数据传输速率 × 2

本题中由于使用 100 BaseT 局域网标准,所以数据传输速率为 100Mbps,总线传播时延由\n两部分组成,一部分是信号传播时延,另一部分是信号通过设备 2 时产生的额外 1.51μs\n时间延迟。代入公式为 64 B = (1.51 us + D / (2 × 10⁸ m/s)) × 100 Mbps × 2,注意单位换算,最终解得 D = 210m。

3)M 是 DHCP 发现报文(Discover 报文)。路由器 E0 接口能收到封装 M 的以太网帧,由于 H4 发送的 DHCP 发现报文是广播的形式,所以同一个广播域内的所有设备和接口都可\n以收到该以太网帧。由于是广播帧,所以目的 MAC 地址是全 1,S 向 DHCP 服务器转发\n的封装 M 的以太网帧的目的 MAC 地址是 FF-FF-FF-FF-FF-FF。

4)在 H5 收到的帧中,地址 1、地址 2 和地址 3 分别是 00-11-11-11-11-E1、00-11-11-11-11-C1\n和 0011-11-11-11-D1。该帧来自 AP,地址 1 代表接收端的地址,地址 2 代表 AP 的地址,\n地址 3 是发送端的地址。

\n\n\n\n\n", "difficulty": 1}, {"id": 659, "year": 2023, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第1题-题目\n\n\n\n

下列对顺序存储的有序表(长度为 n)实现给定操作的算法中平均时间复杂度为 O(1) 的是( )。

\n
A.查找包含指定值元素的算法
\n
B.插入包含指定值元素的算法
\n
C.删除第 i 个元素的算法
\n
D.获取第 i 个值的算法
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第1题-解析\n\n\n\n

线性表的顺序存储结构采用一组地址连续的存储单元依次存储线性表的数据元素。特点是逻辑上相邻的数据元素在物理位置上相邻。线性表顺序存储结构是一种随机存取的存储结构,设线性表的每个元素占 L 个存储单元,第一个元素\na1​\n的存储地址是 LOC(\na1​\n),则任意元素\nai​\n的 LOC(ai)=LOC(\na1​\n)+(i-1)*L。因此获取第 i 个值的算法为常量阶 O(1)。
\n\n\n\n\n", "difficulty": 1}, {"id": 660, "year": 2023, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第2题-题目\n\n\n\n

现有非空双向链表 L,其结点结构为:

\n
\n\n\n\n \n 408真题系统\n \n\n
prev
data
next
\n

prev 是指向前直接前驱结点的指针,next 是指向直接后继结点的指针。若要在 L 中指针 p 所指向的结点(非尾结点)之后插入指针 s 指向的新结点,则在执行了语句序列: s->next=p->next; p->next=s,后,还要执行( )。

\n
A.s->next->prev=p; s->prev=p;
\n
B.p->next->prev=s; s->prev=p;
\n
C.s->prev=s->next->prev; s->next->prev=s;
\n
D.p->next->prev=s->prev; s->next->prev=p;
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第2题-解析\n\n\n\n

主要考察双链表的插入操作,解决这类问题可在纸上画出具体的双链表进行模拟。因为 s->next 已经赋值为 p 的后一个结点,同时 p->next 指针已经赋值为 s。所以只需要处理s->next->prev 和 s->next->prev 的赋值,s->prev 需要指向 p,s-next->prev 需要指向 s。因为p->next 和 s 指向同一个结点,所以可以用 p->next 代表 s。故本题的正确选项为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 661, "year": 2023, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第3题-题目\n\n\n\n

若采用三元组表存储结构存储系数矩阵 M。则除三元组外,下列数据中还需要保存的是( )。

\n

I. M 的行数

\n

II. M 中包含非零元素的行数

\n

III. M 的列数

\n

IV. M 中包含非零元素的列数

\n
A.仅 I 和 III
\n
B.仅 I 和 IV
\n
C.仅 II 和 IV
\n
D.I, II, III, IV
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第3题-解析\n\n\n\n

存储稀疏矩阵 M,三元组表 的表项存储了行 row、列 col、值 value 三种信息,除此之外,我们还需要知道矩阵 M 的规模 rows × cols,即 M 的行数 rows 和 M 的列数 cols,这个信息应该直接给出。当我们需要某个位置的元素,可以先根据 M 的行数和列数判断是否越界,如果没有越界,在三元组进行查找,如果三元组没有保存对应位置的值代表矩阵中该位置的值为 0。本题答案选 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 662, "year": 2023, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第4题-题目\n\n\n\n

在有 6 个字符组成的字符集 S 中,各个字符出现的频次分别为 3, 4, 5, 6, 8, 10,为 S 构造的哈夫曼树的加权平均长度为( )

\n
A.2.4
\n
B.2.5
\n
C.2.67
\n
D.2.75
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第4题-解析\n\n\n\n

计算字符集 S 构造的 哈夫曼编码 的 加权路径长度,我们需要使用字符的频次来确定每个字符的编码长度,并计算加权平均值。给定字符集 S 中各字符出现的频次为 3,4,5,6,8,10,我们可以按照哈夫曼编码算法构造哈夫曼树。构建的哈夫曼树如图所示。加权平均长度 =(编码长度 1 × 频次 1 + 编码长度 2 × 频次 2 + … + 编码长度 n × 频次 n)/(频次 1 + 频次 2 + … + 频次 n),在本题中,加权平均长度=((3+4+5+6)×3 + (8+10)×2)/(3+4+5+6+8+10)=2.5。本题答案选 B。

\n\n
36
15
21
11
10
7
8
3
4
5
6
\n\n\n\n\n", "difficulty": 1}, {"id": 663, "year": 2023, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第5题-题目\n\n\n\n

已知一棵二叉树的树形如图,若其后序遍历为 f,d,b,e,c,a,则其先序序列为( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
\n
A.aedfbc
\n
B.acebdf
\n
C.cabefd
\n
D.dfebac
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第5题-解析\n\n\n\n

如下图所示。对于后序序列 fdbeca,a 为树节点的根,因此在序号 1 中,a 首先进行绘制。同时,a 节点的左子树有 4 个节点,右子树有 1 个节点,因此 fdbe 属于左子树,c 节点属于右子树,所以我们在序号 2 的树中,填充 c。a 结点左子树的后序遍历序列为 fdbe,代表 e 为左子树的根节点,因此在序号 3 的树中,填充 e。同理 e 节点的左子树有两个节点,右子树有一个节点,因此 fdb 属于左子树,e 属于右子树,在序号 4 的树中,我们填写 b。e 的左子树的后序遍历序列为 fd,则 d 为子树的根节点,因此在序号 5 的树中,我们填充 d,最后在序号 6 的图中,填充 f。先序序列为 a,e,d,f,b,c。本题答案选 A。

\n\n
a
a
c
a
e
c
a
e
b
c
a
e
d
b
c
a
e
d
b
c
f
1
2
3
4
5
6
\n\n\n\n\n", "difficulty": 1}, {"id": 664, "year": 2023, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第6题-题目\n\n\n\n

已知无向连通图 G 中各边的权值均为 1,下列算法中,一定能够求出图 G 中从某顶点到其余各个顶点最短路径的是( )。

\n

I. 普利姆算法

\n

II. 克鲁斯卡尔算法

\n

III. 图的广度优先搜索

\n
A.仅 I
\n
B.仅 III
\n
C.仅 II 和 I
\n
D.I,II,III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第6题-解析\n\n\n\n

普里姆算法和克鲁斯卡尔算法是用于解决最小生成树问题的算法,它们并不直接适用于求解最短路径问题。广度优先遍历 (BFS) 是一种图遍历算法,可以用于求解单源最短路径问题。在权值均为 1 的情况下,BFS 算法从给定的起始顶点开始遍历,按照层级顺序逐步扩展,每次扩展一层。这样,当 BFS 遍历到目标顶点时,它所经过的边数就是从起始顶点到目标顶点的最短路径长度。因此,BFS 算法可以用于求解图 G 中从某个顶点到其余各个顶点的最短路径。本题答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 665, "year": 2023, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第7题-题目\n\n\n\n

下列关于非空 B 树的叙述中,正确的是( )

\n

I. 插入操作可能增加树的高度

\n

II. 删除操作一定会导致叶结点的变化

\n

III. 查找某关键字一定是要查找到叶结点

\n

IV. 插入的新关键字最终位于叶结点中

\n
A.仅 I
\n
B.仅 I、II
\n
C.仅 III、IV
\n
D.仅 I、II、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第7题-解析\n\n\n\n

在 B 树 中,插入 操作可能导致节点分裂。如果根节点已满,插入新键会触发根节点分裂,生成一个新的根节点,从而增加树的高度。因此,插入操作确实可能(但不一定)增加树的高度。选项 I 正确。

删除 操作可能涉及以下情况:

在所有删除场景中,无论是直接删除键还是通过替换、合并、借键,操作最终都会影响叶子结点(键的移除或调整发生在叶子结点)。选项 II 正确。

查找关键字并不一定需要查找到叶子结点。例如,如果目标键位于根节点或中间节点,查找会在这些非叶子结点停止。选项 III 错误。

新关键字在 B 树中开始总是被插入到叶子结点中,但是可能随着分裂上溢到非叶子结点,选项 IV 错误。

\n\n\n\n\n", "difficulty": 1}, {"id": 666, "year": 2023, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第8题-题目\n\n\n\n

对含有 600 个元素的有序顺序表进行折半查找,关键字之间的比较次数最多是( )。

\n
A.9
\n
B.10
\n
C.30
\n
D.300
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第8题-解析\n\n\n\n

在含有 600 个元素的有序表进行折半查找时,其关键字比较次数最多的情况发生在目\n标元素不在表中的情况下。在这种情况下,折半查找会进行到最后一步,直到左边界和右边界\n相遇。因此,关键字比较次数最多的情况是在查找过程中遍历整个表的情况。在进行折半查找\n时,每次比较会将查找范围缩小一半,直到找到目标元素或确定目标元素不在表中。对于 600\n个元素的有序表,因为\nlog2​(600)≈9.22\n,采用 9 次遍历并不能查找完成,因此需要 10 次查找。\n本题答案选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 667, "year": 2023, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第9题-题目\n\n\n\n

现有长度为 5,初始为空的散列表 HT,散列表函数 H(k) = (k+4) % 5 用线性探查再散列法解决冲突。若将关键字序列 2022,12,25 依次插入 HT 中,然后删除关键字 25,则 HT 中查找失败的平均查找长度(  )。

\n
A.1
\n
B.1.6
\n
C.1.8
\n
D.2.2
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第9题-解析\n\n\n\n

线性探测再散列法中删除一个关键字会导致后面的关键字无法通过线性探测找到正确\n的位置。当删除一个关键字时,为了保持散列表的连续性,通常会将后续的关键字向前移动填\n充空缺,这样后续的查找操作才能继续正确地找到它们。然而,如果删除的是一个位于中间位\n置的关键字,后面的关键字需要依次向前移动,这会导致删除操作的时间复杂度较高,因为需\n要移动大量的关键字。为了解决删除操作中的位置依赖性问题,可以使用删除标记来表示一个\n位置上的关键字已被删除。

如下表所示,查找失败的平均查找长度为 (1+3+2+1+2)/5=1.8。本题答案选 C。

地址01234
Key20221225 (delete)
查找失败次数13212
\n\n\n\n\n", "difficulty": 1}, {"id": 668, "year": 2023, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第10题-题目\n\n\n\n

下列排序算法中,不稳定的是( )

\n

I. 希尔排序

\n

II. 归并排序

\n

III. 快速排序

\n

IV. 堆排序

\n

V. 基数排序

\n
A.仅 I 和 II
\n
B.仅 II 和 V
\n
C.仅 I,III,IV
\n
D.仅 III,IV,V
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第10题-解析\n\n\n\n

参考 排序总结,快速排序在每一轮划分时,通常选择一个枢轴元素将序列分成两部分,并且在交换\n元素时可能改变相同关键字元素的相对顺序,因此不是稳定的排序算法。堆排序使用堆数据\n结构进行排序,其中在建堆和调整堆的过程中,元素的交换可能导致相同关键字元素的相对\n顺序发生改变,因此堆排序也不是稳定的排序算法。希尔排序是基于插入排序的一种改进算\n法,它通过将待排序的序列划分成若干个较小的子序列进行插入排序,然后逐步缩小子序列\n的间隔,最终完成整个序列的排序。由于希尔排序是通过跳跃式的插入排序进行排序的,相\n同关键字的元素可能会跨越较大的间隔进行比较和交换。这种跨越较大间隔的比较和交换可\n能导致相同关键字的元素的相对顺序发生改变,因此希尔排序是不稳定的排序算法。因此不\n稳定的排序算法有希尔排序、快速排序、堆排序。本题答案选 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 669, "year": 2023, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第11题-题目\n\n\n\n

使用快速排序算法对数据进行升序排序,若经过一次划分后得到的数据序列是 68, 11, 70, 23, 80, 77, 48, 81, 93, 88,则该次划分的轴枢( )。

\n
A.11
\n
B.70
\n
C.80
\n
D.81
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第11题-解析\n\n\n\n

在 快速排序 中,划分过程通常选择一个枢轴元素来将待排序序列划分为两个子序列。因为是升序排序,所以枢纽元素的前半个子序列的值需要都小于枢轴值,后半个子序列的值需要都大于枢轴值。分别从每个选项来看,A 选项的枢轴值为 11,前半个子序列的值只有68,大于枢轴值 11,不符合。B 选项的枢轴值为 70,前半个子序列都小于 70,但后半个子序列存在 23 和 48 小于 70,不符合。C 选项的枢轴值为 80,前半个子序列的值都小于 80,但是后半个子序列存在 48 小于 80,不符合。D 选项的枢轴值为 81,81 前面的元素都小于 81,81 后面的元素都大于 81,符合。因此本题的正确选项为 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 670, "year": 2023, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第12题-题目\n\n\n\n

若机器 M 的主频为 1.5Ghz,在 M 上执行程序 p 的指令条数为\n5×105\n次方,p 的平均 CPI 为 1.2,则 p 在 M 上的指令执行速度和用户 CPU 时间分别为( )

\n
A.0.8GIPS、0.4ms
\n
B.0.8GIPS、0.4μs
\n
C.1.25GIPS、0.4ms
\n
D.1.25GIPS、0.4μs
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第12题-解析\n\n\n\n

p 每条指令平均需要\n1.2\n个时钟周期,机器 M 的主频为 1.5GHZ 代表每秒共有\n1.5G\n个时钟周期,则每秒能执行 1.5G / 1.2 = 1.25G 条指令。执行 p 程序共需要\n5×105×1.2=6×105\n个时\n钟周期,每秒有\n1.5G\n个时钟周期,则\n6×105\n个时钟周期共需要\n6×105/(1.5G×103)=0.4ms\n。所以\n本题的正确答案为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 671, "year": 2023, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第13题-题目\n\n\n\n

若 short 型变量 x = -8190,则 x 的机器数为( )

\n
A.E002H
\n
B.E001H
\n
C.9FFFH
\n
D.9FFEH
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第13题-解析\n\n\n\n

机器数是计算机内部用来表示和存储数值的二进制形式。对于有符号的 short 型变量,\n通常采用 16 位 补码 表示法。对于给定的 short 型变量 x=-8190,我们需要将其转换为二进制的补码表示。首先,将数值 8190 转换为二进制形式:8190 = 0001 1111 1111 1110B,然后取其二\n进制补码(负数取反后加 1),补码为 1110 0000 0000 0010B,转化为 16 进制为 E002H。因此\n正确选项为 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 672, "year": 2023, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第14题-题目\n\n\n\n

已知 float 型变量用 IEEE754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 8020 0000H,则 x 的值( )

\n
A.−2−128
\n
B.−1.01×2−127
\n
C.−1.01×2−126
\n
D.非数 (NAN)
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第14题-解析\n\n\n\n

本题考查浮点数表示的 异常值,给定的机器数为 8020 0000H,表示一个 32 位的二进制数。我们需要将其转换为 float 型变量的值。8020 0000H = 1000 0000 0010 0000 0000 0000 0000 0000B。根据 IEEE754 单精度\n浮点数格式,首位表示符号位,接下来的 8 位表示指数部分,剩下的 23 位表示尾数部分。拆\n分该二进制表示,我们得到以下部分,符号位:1(表示负数),指数部分:00000000B(十进制值\n为 0)。尾数部分:010 0000 0000 0000 0000 0000B。本题考查的点为 IEEE 754 单精度点数的表\n示,因为指数部分为 0,尾数部分不为 0,所以为非规格化的表示,所以尾数部分的形式为 0.M\n不是 1.M,同时指数部分是 -126,而不是 -127,则真值为\n−0.01×2−126=−2−128\n,正确答案为 A 选项。
\n\n\n\n\n", "difficulty": 2}, {"id": 673, "year": 2023, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第15题-题目\n\n\n\n

某计算机的 CPU 有 30 根地址线,按字节编址,CPU 和主存芯片连接时,要求主存芯片占满所有可能存储地址空间,并且 RAM 区和 ROM 区所分配的容量大小比为 3:1,若 RAM 在连续低地址区,ROM 在连续高地址区,则 ROM 的地址范围( )

\n
A.00000000H ~ 0FFFFFFFH
\n
B.10000000H ~ 2FFFFFFFH
\n
C.30000000H ~ 3FFFFFFFH
\n
D.40000000H ~ 4FFFFFFFH
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第15题-解析\n\n\n\n

由于 CPU 有 30 根地址线,每根地址线可以表示 2 个不同的状态(0 或 1)。因此,CPU\n的地址线共有\n230\n个不同的地址。根据 RAM 和 ROM 的分配比,RAM 区占据整个地址空间的\n3/4,而 ROM 区占据剩下的 1/4,我们可以选取高位的两根地址线,00、01、10 分配给连续低\n地址的 RAM,则高位只剩下 11 可以分配,所以可以分配的地址范围为 110…00(28 个 0)~ 11…1\n(30 个 1),十六进制表示为 300000000H ~ 3FFFFFFFFH。故本题的正确选项为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 674, "year": 2023, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第16题-题目\n\n\n\n

已知 x、y 为 int 类型,当 x=100,y=200 时,执行 x-y 指令的到的溢出标志 OF 和借位标志 CF 分别为 0,1,那么当 x=10,y=-20 时,执行该指令得到的 OF 和 CF 分别是( )

\n
A.0, 0
\n
B.0, 1
\n
C.1, 0
\n
D.1, 1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第16题-解析\n\n\n\n

int 类型在计算机中以补码形式表示,因此,x(10)的二进制表示为 0000 0000 0000 0000 0000 0000 0000 1010B,y(-20)的二进制表示为 11111111 11111111 1111 1111 11101100。

OF 和 CF 是 CPU 中 标志寄存器 的标志位。CF 表示无符号整数运算时的进位/借位,因此计算 CF 的时候,需要把和 x 和 y 当成无符号数进行计算,因为 x 不够减 y,所以 CF = 1。计算 OF 的时候,需要把和 x 和 y 当成有符号数进行计算,x-y=30,不超过 int 的最大值,不会产生溢出,所以 OF=0。所以本题的正确选项为 B。

\n\n\n\n\n", "difficulty": 2}, {"id": 675, "year": 2023, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第17题-题目\n\n\n\n

某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数地址,CPU 区分两者的依据是( )

\n
A.操作数的寻址方式
\n
B.操作数的编码方式
\n
C.通用寄存器编号
\n
D.通用寄存器的内容
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第17题-解析\n\n\n\n

在指令中,使用不同的操作码来区分寄存器中存放的是操作数还是操作数的地址指令会有明确的 寻址方式,指示使用寄存器中的内容作为操作数或操作数地址。当 CPU 在执行指令时会根据指令中的寻址方式字段来正确解析寄存器中的内容,并根据需要进行相应的操作。所以本题的正确选项为 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 676, "year": 2023, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第18题-题目\n\n\n\n

数据通路由组合逻辑元件(操作元件)和时序逻辑元件(状态元件)组成。下列给出的元件中,属于操作元件的是( )。

\n

I. 算术逻辑部件(ALU)

\n

II. 程序计数器(PC)

\n

III. 通用寄存器组(GPRs)

\n

IV. 多路选择题(MUX)

\n
A.仅 I、II
\n
B.仅 I、IV
\n
C.仅 II、III
\n
D.仅 I、II、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第18题-解析\n\n\n\n

组合逻辑元件 是那些仅由组合逻辑电路组成的元件,其输出仅取决于当前的输入,而不受存储器或时钟信号的影响。算术逻辑部件 ALU 和多路选择器 MUX 都属于组合逻辑元件,它们的输出仅由当前输入决定。

程序计数器 PC 和通用寄存器是时序逻辑元件,也称为状态元件。它们的输出不仅取决于当前输入,还受存储器或时钟信号的影响,并且具有状态或存储功能。因此本题选 B。

\n\n\n\n\n", "difficulty": 1}, {"id": 677, "year": 2023, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第19题-题目\n\n\n\n

在采用“取指、译码/取数、执行、访存、写回”5 段流水线的 RISC 处理器中,执行如下指令序列(第一列为指令序号),其中 s0、s1、s2、s3 和 t2 表示寄存器编号。

\n

若采用转发(旁路)技术处理数据冒险,采用硬件阻塞方式处理控制冒险,则在 I1~I4 执行过程中,发生流水线阻塞的指令有( )。

\n
A.仅 I3
\n
B.仅 I2、I4
\n
C.仅 I3、I4
\n
D.仅 I2、I3、I4
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2023-第19题-解析\r\n\r\n\r\n\r\n

在以下指令序列中:

  1. I2 与 I1 之间:写后读数据冒险(RAW Hazard)

指令 I1 将结果写入寄存器 R[s2],但这个值直到 I1 的 写回(WB)阶段 才会更新。而 I2 在其 执行(EX)阶段 就需要用到 R[s2] 来计算访存地址,因此存在写后读的数据冒险。

幸运的是,I1 在 EX阶段末尾 就已生成结果并存储在 EX→M 流水段寄存器中。此时如果使用 旁路转发,可以直接将这个值从流水段寄存器中转发到 I2 的 ALU 输入端,避免等待 WB 阶段,从而解决了这个 RAW 冒险。

  1. I3 与 I2 之间:装入-使用 数据冒险(Load-Use Hazard)

I2 是一条 load 指令,它需要从内存中将数据装入寄存器 R[s3]。而 I3 在它的 EX 阶段就要用到 R[s3] 的值。如果像前面那样尝试用旁路技术从 I2 的 EX→M 寄存器转发数据,会失败——因为此时的数据尚未从内存中读出。

只有等到 I2 的 访存(M)阶段结束,数据才真正从内存中取回,存放在 M→WB 流水段寄存器。因此,仅靠转发线路无法解决装入-使用冒险。

需要采取的办法是:对 I3 硬件阻塞一个周期,等待 I2 的 M 阶段完成,然后通过转发将 R[s3] 的新值从 M→WB 段寄存器送入 I3 的 ALU,以确保其操作正确。

  1. I4 与 I3 之间:控制冒险(Control Hazard)

I3 是一条 beq 分支指令。该指令在 EX 阶段比较寄存器值,在 M 阶段才判断跳转是否成立并更新 PC(程序计数器)。因此,在得知是否跳转前,I4 的取指(IF)阶段必须等待 I3 的 M 阶段完成。

这就导致 I4 的执行被 阻塞 3 个时钟周期,以确保其是否被执行是基于正确的控制流判断。

最终,系统采用 硬件阻塞机制 来处理上述数据和控制冒险,下图展示了指令执行过程中各阶段的具体安排:

\"\"
\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 678, "year": 2023, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第20题-题目\n\n\n\n

某存储器总线宽度为 64 位,总线时钟频率为 1GHZ,在总线上传输一个数据或地址需要一个的时钟周期,不支持突发传送方式,若通过该总线连接 CPU 和主存,主存每次准备一个 64 位数据需要 6ns,主存块大小为 32B,则读取一个主存块需要的时间为( )。

\n
A.8ns
\n
B.11ns
\n
C.26ns
\n
D.32ns
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第20题-解析\n\n\n\n

存储总线的宽度为 64 位,代表每次数据传送可以传送 64bit 的数据。总线时钟频率位\n1GHZ,代表 1s 可以传送 1G 次,即 10⁹ 次/s,所以每个时钟周期为 10⁻⁹s = 1ns。具体步骤为:\nCPU 通过地址线传输地址花费 1ns,主存准备数据 6ns,主存传输数据到 CPU 花费 1ns,共 8ns,\n因为 32B 的数据在总线宽度为 64 位的总线上,需要传输 (32*8bit) / 64bit = 4 次,因此读取一个\n主存块的时间为 4×8ns=32ns。所以本题的正确选项为 D 选项。
\n\n\n\n\n", "difficulty": 2}, {"id": 679, "year": 2023, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第21题-题目\n\n\n\n

下列关于硬件和异常/中断关系的叙述中,错误的是( )。

\n
A.CPU 在执行一条指令过程中检测异常事件
\n
B.CPU 在执行完一条指令时检测中断请求信号
\n
C.开中断中 CPU 检测到中断请求后就进行中断响应
\n
D.外部设备通过中断控制器向 CPU 发中断结束信号
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第21题-解析\n\n\n\n

异常通常指内部中断,是指令执行错误或中断指令产生的内部中断,在指令执行过程\n中被检测,因此选项 A 正确。外部中断指硬件中断,在指令执行完毕后,CPU 会检查中断请\n求信号,如果有中断请求发生,则进行中断响应,暂停当前的任务,保存现场并处理中断,因\n此,选项 B,C 正确。外部设备通过中断控制器向 CPU 发出中断请求信号而不是中断结束信\n号,选项 D 错误。
\n\n\n\n\n", "difficulty": 2}, {"id": 680, "year": 2023, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第22题-题目\n\n\n\n

下列关于 I/O 控制方式的叙述中,错误的是( )。

\n
A.查询方式下,通过 CPU 执行查询程序进行 I/O 操作
\n
B.中断方式下,通过 CPU 执行中断服务程序进行 I/O 操作
\n
C.DMA 方式下,通过 CPU 执行 DMA 传送程序进行 I/O 操作
\n
D.对于 SSD 网络适配器等高速设备,采用 DMA 方式输入/输出
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第22题-解析\n\n\n\n

在 DMA(直接内存访问)方式下,CPU 并不直接执行 DMA 传送程序进行 IO 操作。\nDMA 是一种特殊的 I/O 控制方式,它允许外设设备直接与主存进行数据传输,数据传输过程\n是由硬件(DMA 控制器)完成的,而无需 CPU 的干预,所以 C 选项的描述错误。本题需要选\n择错误的选项,因此本题的答案为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 681, "year": 2023, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第23题-题目\n\n\n\n

与宏内核操作系统相比,下列特征中微内核操作系统具有的是( )。

\n

Ⅰ. 较好的性能

\n

Ⅱ. 较高的可靠性

\n

Ⅲ. 较高的安全性

\n

Ⅳ. 较强的可扩展性

\n
A.Ⅱ、Ⅳ
\n
B.Ⅰ、Ⅱ、Ⅲ
\n
C.Ⅰ、Ⅲ、Ⅳ
\n
D.Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第23题-解析\n\n\n\n

参考微内核和宏内核,\n选项 II 较高的可靠性:微内核操作系统将核心功能模块化,将部分操作系统功能移出\n内核,以减少内核的复杂性和错误的影响范围,从而提高系统的可靠性,由于微内核中只包含\n最基本的功能,因此可以更容易地对其进行验证和测试,减少错误的概率。选项 III 较高的安\n全性:微内核操作系统通过将一些非核心功能移出内核,以降低系统的攻击面,只有核心的、\n必要的功能位于内核中,而其他的服务和驱动程序则在用户空间运行,减少了恶意代码对内核\n的直接访问,这有助于提高系统的安全性,并减少潜在的漏洞。选项 IV 较强的可扩展性:微\n内核操作系统的设计使得新增功能或服务更容易添加到系统中。由于非核心功能运行在用户空\n间,可以通过插件或模块的形式进行扩展,而无需对内核进行大规模的修改,这使得微内核操\n作系统更具有灵活性和可扩展性。微内核操作系统采用模块化设计,将一部分功能移至用户空\n间,这就需要通过进程间通信(IPC)机制来实现内核与用户空间的交互。这种通信会引入额\n外的开销,包括上下文切换、数据拷贝等,从而影响系统的性能。所以选项 I 不是微内核操作\n系统所具有的特点,正确的选项为 II,III,IV,选择 D 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 682, "year": 2023, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第24题-题目\n\n\n\n

在操作系统内核中,中断向量表适合采用的数据结构是( )。

\n
A.数组
\n
B.队列
\n
C.单向链表
\n
D.双向链表
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第24题-解析\n\n\n\n

在操作系统内核中,中断向量表 适合采用的数据结构是数组(选项 A)。中断向量表\n是一种用于存储中断处理程序入口地址的数据结构,它以中断号作为索引,将中断号映射到相\n应的中断处理程序入口地址。由于中断号是一个固定的范围(例如,0~255)采用数组可以实\n现快速的索引和访问,具有较高的效率。使用数组可以直接根据中断号计算出对应的数组索引\n而不需要遍历链表或队列来查找对应的处理程序入口地址,从而提高中断处理的效率。所以本\n题的正确选项为 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 683, "year": 2023, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第25题-题目\n\n\n\n

某系统采用页式存储管理,用位图管理空闲页框。若页大小为 4 KB,物理内存大小为 16 GB,则位图所占空间的大小是( )。

\n
A.128 B
\n
B.128 KB
\n
C.512 KB
\n
D.4 MB
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第25题-解析\n\n\n\n

物理内存大小为\n16GB\n,每页大小为\n4KB\n,因此物理内存总共包含的页框数为\n(16GB)/(4KB)=234/212=222\n。位图需要管理每个页框的空闲状态,因此位图的位数应该等于物理\n内存中页框的数量。每个位表示一个页框的空闲状态,所以位图所占空间大小应为\n(位图所占位数)/8=(222)/8=219bytes=512KB\n,因此,位图所占空间的大小为\n512KB\n,选项\nC\n为正确答案。
\n\n\n\n\n", "difficulty": 1}, {"id": 684, "year": 2023, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第26题-题目\n\n\n\n

下列操作完成时,导致 CPU 从内核态转为用户态的是( )。

\n
A.阻塞过程
\n
B.执行 CPU 调度
\n
C.唤醒进程
\n
D.执行系统调用
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第26题-解析\n\n\n\n

来看每个选项的含义和状态切换:

对于 A 选项,阻塞过程属于进程状态切换,不直接涉及CPU模式转换。

对于 B 选项,执行 CPU 调度属于内核调度器行为,通常保持在内核态。

对于 C 选项,唤醒进程属于进程管理操作,不直接触发模式切换

对于 D 选项,当用户程序需要访问特权指令或执行需要操作系统提供的服务时,它会通过 系统调用 请求进人内核态。在系统调用期间,CPU 会切换到内核态执行相应的内核代码来满足用户程序的需求。一旦系统调用执行完毕,CPU 会从内核态返回到用户态继续执行用户程序。所以,执行系统调用是导致 CPU 从内核态转为用户态的关键操作。所以该题的正确选项为 D 选项。

\n\n\n\n\n", "difficulty": 2}, {"id": 685, "year": 2023, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第27题-题目\n\n\n\n

下列出当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。

\n
A.键盘输入
\n
B.缺页异常
\n
C.主动出让 CPU
\n
D.执行信号量的 wait() 操作
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第27题-解析\n\n\n\n

参考 状态转化,\nB 缺页异常:当线程访问的页面不在内存中时,会触发缺页异常,处理缺页异常时,\n线程可能需要等待操作系统将所需页面加载到内存中,这会导致线程由执行态变为阻塞态。C\n主动让出 CPU:线程可以通过主动让出 CPU 的方式,将自身的执行权限交给其他就绪态的线\n程。这会导致线程由执行态变为就绪态。D 执行信号量的 wait() 操作:在多线程编程中,信\n号量通常用于线程间的同步和互斥。当一个线程执行信号量的 wait() 操作时,如果信号量的\n计数值不满足条件,线程会进入阻塞状态,从执行态变为阻塞态。键盘输入(选项 A)通常不\n会直接导致线程状态变化,它可能触发其他事件或操作,进而影响线程的状态。所以本题的正\n确选项为 C 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 686, "year": 2023, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第28题-题目\n\n\n\n

对于采用虚拟内存管理方式的系统,下列关于进程虚拟地址空间的叙述中,错误的是( )。

\n
A.每个进程都有自己独立的虚拟地址空间
\n
B.C 语言中 malloc() 函数返回的是虚拟地址
\n
C.进程对数据段和代码段可以有不同的访问权限
\n
D.虚拟地址的大小由主存和硬盘的大小决定
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第28题-解析\n\n\n\n

A:虚拟地址空间是一个进程所使用的虚拟内存地址的集合,每个进程都有自己的虚拟\n地址空间,这个空间是独立于其他进程的,每个进程都认为自己在访问整个系统的内存空间,\n但实际上,它们只访问到了被分配给它们的部分内存。B:malloc 返回虚拟地址,当调用 malloc\n时,分配出来的空间,只是在虚拟内存中是连续的,从实际的物理空间到虚拟内存空间还有一\n个映射的关系。C:不同的段访问权限可以是不同的。一般来说,代码段可读可执行,并且只\n能在特权模式下执行,但是不可写;数据段可以读写,不能执行。D:主存和硬盘的大小不直\n接影响虚拟地址的实际大小,虚拟地址的大小由底层的虚拟内存管理机制和操作系统定义决定,\n通常在不同的系统中有所不同。虚拟地址空间的大小可以在操作系统中进行配置和限制,而主\n存和硬盘的大小影响的是实际可用的物理内存和存储容量,而非虚拟地址的大小,虚拟内存管\n理机制通过将虚拟地址映射到物理内存或硬盘上的页面来提供更大的虚拟地址空间。因此,主\n存和硬盘的大小可以影响实际可用的虚拟内存空间的大小,但并不直接决定虚拟地址的大小。\n所以本题的答案为 D 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 687, "year": 2023, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第29题-题目\n\n\n\n

进程 P1、P2 和 P3 进入就绪队列的的时刻,优先值(越大优先权越高)以及 CPU 的执行时间如下表所示。

\n
进程名进入就绪队列的时刻优先级CPU 执行时间
P10 ms160 ms
P220 ms1042 ms
P330 ms10013 ms
\n

系统采用基于优先权的抢占式 CPU 调度算法,从 0ms 时刻开始进行调度,则 P1、P2 和 P3 的平均周转时间为( )。

\n
A.60 ms
\n
B.61 ms
\n
C.70 ms
\n
D.71 ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第29题-解析\n\n\n\n

具体的调度表如下图所示。周转时间 = 完成时间 - 到达时间,进程 1 的周转时间为\n115ms-0ms=115ms,进程 2 的周转时间为 75ms-20ms=55ms,进程 3 的周转时间为 43ms-\n30ms=13ms。平均周转时间为 (115+55+13)/3=61ms。所以该题的答案为 B 选项。

\n\n
P1
P2
P3
P2
P1
0
20
30
43
75
115
\n\n\n\n\n", "difficulty": 1}, {"id": 688, "year": 2023, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第30题-题目\n\n\n\n

进程 R 和 S 共享数据 data,若 data 在 R 和 S 中所在页的页号分别为 p1 和 p2,两个页所对应的页框号分别为 f1 和 f2,则下列叙述中,正确的是( )。

\n
A.p1 和 p2 一定相等,f1 和 f2 一定相等
\n
B.p1 和 p2 一定相等,f1 和 f2 不一定相等
\n
C.p1 和 p2 不一定相等,f1 和 f2 一定相等
\n
D.p1 和 p2 不一定相等,f1 和 f2 不一定相等
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第30题-解析\n\n\n\n

对于进程 R 和 S 共享数据 data 的情况,它们在各自的虚拟地址空间中有自己的页表,\n虚拟地址到物理地址的转换是通过页表完成的。因此,对于同一虚拟地址,R 和 S 的页号 p1\n和 p2 可能不相等,因为它们对应于各自的页表中的不同页项。然而,当数据 data 在内存中时,\n它被映射到物理内存的同一页框中,即 f1 和 f2 是相等的,这是因为共享的数据页被映射到相\n同的物理页框中,不同进程的虚拟地址映射到相同的物理地址。所以本题的正确选项为 C 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 689, "year": 2023, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第31题-题目\n\n\n\n

若文件 F 仅被进程 P 打开并访问,则当进程 P 关闭 F 时,下列操作中,文件系统需要完成的是( )。

\n
A.删除目录中文件 F 的目录项
\n
B.释放 F 的索引节点所占的内存空间
\n
C.释放 F 的索引节点所占的外存空间
\n
D.将文件磁盘索引节点中的链接计数减 1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第31题-解析\n\n\n\n

索引节点是指文件系统中的一种数据结构,每个索引节点保存了文件系统中的一个文\n件系统对象的元信息数据,但不包括数据内容或者文件名。内存索引节点是存放在内存中的索\n引节点,文件被打开时,需要将磁盘索引节点复制到内存索引节点中。因此本题进程 P 关闭 F\n时,需释放 F 的索引节点所占的内存空间。所以该题的正确答案为 B 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 690, "year": 2023, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2023-第32题-题目\n\n\n\n

下列因素中,设备分配需要考虑的是( )。

\n

Ⅰ. 设备的类型

\n

Ⅱ. 设备的访问权限

\n

Ⅲ. 设备的占用状态

\n

Ⅳ. 逻辑设备与物理设备的映射关系

\n
A.Ⅰ、Ⅱ
\n
B.Ⅱ、Ⅲ
\n
C.Ⅲ、Ⅳ
\n
D.Ⅰ、Ⅱ、Ⅲ、Ⅳ
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第32题-解析\n\n\n\n

I.设备类型:不同类型的设备有不同的特性和接口,需要根据设备类型进行适当的分\n配和管理。II.设备使用状态:需要考虑设备的当前使用状态,即设备是否已经被其他进程占用\n或者正在执行某个操作,设备分配时需要避免资源冲突。III.逻辑设备和物理设备的映射:在系\n统中,逻辑设备和物理设备之间存在映射关系。逻辑设备是用户程序或操作系统中对设备的抽\n象表示,而物理设备是实际的硬件设备。设备分配需要确保逻辑设备与物理设备之间的正确映\n射。IV.进程对设备的访问权限:不同的进程可能对设备的访问有不同的权限要求。设备分配时\n需要考虑进程的访问权限,确保只有具有适当权限的进程能够访问和使用设备。因此,正确的\n选项是 I、II、III、IV。本题的正确选项为 D。
\n\n\n\n\n", "difficulty": 1}, {"id": 691, "year": 2023, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第33题-题目\n\n\n\n

如图,2 段链路的数据传输速率为 100Mbps,时延带宽积(即单向传播时延*带宽)均为 1000bit。若 H1 向 H2 发送 1 个大小为 1MB 的文件,分组长度为 1000B,则从 H1 开始发送时刻起到 H2 收到文件全部数据时刻止,所需的时间至少是(注:\nM=106\n)?

\n
\n\n\n\n \n 408真题系统\n \n\n
R
H1
H2
L1
L2
\n
A.80.02ms
\n
B.80.08ms
\n
C.80.09ms
\n
D.80.10ms
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第33题-解析\n\n\n\n

参数计算结果
链路带宽\nR—100 Mbps
时延带宽积\nR Tp​题设给定1000 bit
传播时延\nTp​Tp​=100 Mbps1000 bit​0.01 ms
分组大小\nL—1000 B=8000 bit
发送时延\nTs​Ts​=RL​=100 Mbps8000 bit​0.08 ms
分组数量\nNN=1000 B1 MB​1000

  1. 发送阶段

因此,最后 1 位比特离开 H1 的时刻为\nt1​=80 ms\n。

  1. H1 → R 传播

单向传播时延\nTp​=0.01\nms
t2​=t1​+Tp​=80.01 ms

  1. R 转发(序列化)

路由器必须将该分组重新发送一次,耗时仍为\nTs​=0.08\nms
t3​=t2​+Ts​=80.09 ms

  1. R → H2 传播

再次经过链路传播时延\nTp​=0.01\nms
t4​=t3​+Tp​=80.10 ms

所以答案选择 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 692, "year": 2023, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第34题-题目\n\n\n\n

某无噪声理想信道带宽为 4MHz,采用 QAM 调制,若该信道的最大数据传输率是 48Mbps,则该信道采用的 QAM 调制方案是()

\n
A.QAM-16
\n
B.QAM-32
\n
C.QAM-64
\n
D.QAM-128
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第34题-解析\n\n\n\n

对于无噪声理想信道,信道的最大数据传输率可以通过 奈奎斯特定理 计算,最大数据传输的次数为 2×4MHz=8MHz,代表每秒传输 8M 次,因为最大的数据传输率为 48Mbps,所以每次需要传输的比特数量为 48Mbps/8MHz=6 位,所以每次传输的数据量位 6 比特,那么采用的 QAM 调制方案为 26=64,即采用 QAM-64 的方案。本题的正确选项为 C。
\n\n\n\n\n", "difficulty": 1}, {"id": 693, "year": 2023, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第35题-题目\n\n\n\n

假设通过同一信道,数据链路层分别采用停等协议、GBN 协议和 SR 协议(发送窗口和接收窗口相等)传输数据,三个协议数据帧长相同,忽略确认帧长度,帧序号位数为 3 比特。若对应三个协议的发送方最大信道利用率分别是 U1、U2 和 U3,则 U1、U2 和 U3 满足的关系是( )

\n
A.U1 ≤ U2 ≤ U3
\n
B.U1 ≤ U3 ≤ U2
\n
C.U2 ≤ U3 ≤ U1
\n
D.U3 ≤ U2 ≤ U1
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第35题-解析\n\n\n\n

停等协议的 信道利用率 公式为:

TD​+RTT+TA​TD​​

GBN 协议和 SR 协议的 信道利用率 公式为:

TD​+RTT+TA​WTD​​

观察会发现,\nTD​+RTT+TA​TD​​\n项都是相同的,GBN 协议和 SR 协议的信道利用率需要比停等协议的信道利用率多乘上窗口大小(大于等于 1)。得出结论,停等协议的信道利用率 U1 最小,排除 C、D 选项。GBN 协议和 SR 协议的信道利用率主要看窗口大小谁比较大。题目说了帧序号位数为 3 比特,那 GBN 协议的发送窗口的尺寸\nW\n,应满足:\n1≤W≤2n−1\n。则发送窗口最大为\n23−1=7\n。SR 协议的发送窗口的尺寸\nW\n,应满足:\n1≤W≤2n−1\n,则发送窗口最大为\n23−1\n。因此 GBN 协议的信道利用率 U2 的最大值要大于 SR 协议的信道利用率 U3。综上所述,答案选择 B 选项。

\n\n\n\n\n", "difficulty": 1}, {"id": 694, "year": 2023, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第36题-题目\n\n\n\n

已知 10BaseT 以太网的争用时间片为 51.2us。若网卡在发送某帧时发生了连续 4 次冲突,则基于二进制指数退避算法确定的再次尝试重发该帧前等待的最长时间是( )

\n
A.51.2us
\n
B.204.8us
\n
C.768us
\n
D.819.2us
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第36题-解析\n\n\n\n

基于 指数退避算法,每次发生冲突后,网卡会随机选择一个等待时间,在\n0\n到\n2k−1\n个时间片之间等待,其中\nk\n是当前发生冲突的次数。根据问题描述,发生了连续\n4\n次冲\n突,即\nk=4\n。那么根据二进制指数退避算法,等待时间将在\n0\n到\n24−1\n之间。最长的等待时间即\n为\n15\n个时间片。计算如下:\n24−1=16−1=15\n,每个时间片的时长为\n51.2us\n,因此最长的等待时间\n为\n15×51.2us=768us\n。选择 C 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 695, "year": 2023, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第37题-题目\n\n\n\n

若甲向乙发送数据时采用 CRC 校验,生成多项式为\nG(x)=x4+x+1\n(即 G=10011),则乙接收到下列比特串时,可以断定其在传输过程中未发生错误的是( )

\n
A.101110000
\n
B.101110100
\n
C.101111000
\n
D.101111100
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第37题-解析\n\n\n\n

在 循环冗余码 中:

若接收端将接收到的比特串除以 G(x),余数为 0,则认为“未发生错误”。

即,我们要对每一个选项做模 2 除法(异或除法),看余数是否为 0。

经过计算,可以得到 D 选项余数为 0,所以答案选择 D。

\n\n\n\n\n", "difficulty": 2}, {"id": 696, "year": 2023, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第38题-题目\n\n\n\n

某网络拓扑如下图所示,其中路由器 R2 实现 NAT 功能。若主机 H 向 Inernet 发送一个 IP 分组,则经过 R2 转发后,该 IP 分组的源 IP 地址是( )

\n
\n\n\n\n \n 408真题系统\n \n\n
Internet
R1
NAT  R2
192.168.0.34/30
192.168.0.1
192.168.0.3
H
\n
A.192.168.0.33
\n
B.192.168.0.35
\n
C.192.168.0.1
\n
D.192.168.0.3
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第38题-解析\n\n\n\n

当 IP 分组经过 网络地址转换(Network Address Translation, NAT)转发时,会发生源 IP\n地址转换:NAT 会将源 IP 地址从私有 IP 地址(在局域网内使用的 IP 地址)转换为公共 IP 地\n址(在互联网上可路由的 IP 地址)。这是为了隐藏内部网络的真实 IP 地址,使其在公共网络\n上不可见。同时给定 IP 地址段为 192.168.0.34/30,它表示一个有 30 位网络前缀的子网。根据\nCIDR 表示法,30 表示子网掩码为 255.255.255.252。在这个子网中,可用的 IP 地址如下,网\n络地址:192.168.0.32,第一个可用地址:192.168.0.33,最后一个可用地址:192.168.0.34,广\n播地址:192.168.0.35。可以分配的源地址为 192.168.0.33 和 192.168.0.34,因为选项中只有\n192.163.0.33,所以本题正确答案为选项 A。
\n\n\n\n\n", "difficulty": 1}, {"id": 697, "year": 2023, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第39题-题目\n\n\n\n

主机 168.16.84.24/20 所在子网的最小可分配地址和最大可分配地址分别是( )

\n
A.168.16.80.1,168.16.84.254
\n
B.168.16.80.1,168.16.95.254
\n
C.168.16.84.1,168.16.84.254
\n
D.168.16.84.1,168.16.95.254
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第39题-解析\n\n\n\n

题目给的主机 168.16.84.24/20 用二进制展开可以得到:168.16.0101 0100.24 可以看到,\n网络前缀为前 20 位,主机号为后 12 位。最小可分配地址是主机号为 1 的情况,可以得到最小\n可分配地址为 168.16.0101 0000.1 = 168.16.80.1。最大可分配地址是广播地址减 1 的情况,可以\n得到最大可分配地址为 168.16.0101 1111.254 = 168.16.95.254。答案选择 B 选项。\nIPv4 是 32 位的地址长度,而 IPv6 是 128 位的地址长度,二者相差了 64 位,由于是\n二进制表示,所以地址数量相差了 264 倍。因此 I 错误。IPv4 的基本首部有选项字段,因此长\n度可变;IPv6 将可选字段移除,变成了扩展首部,但是扩展首部被放在了有效载荷中,因此基\n本首部长度是不可变的,II 错误。在完全过渡到 IPv6 之前,IPv4 和 IPv6 并行使用,可以采用\n双协议栈技术和隧道技术进行。III 正确。IPv6 首部的 Hop-Limit 表示跳数限制,代表了 IP 数\n据报在网络中的最大跳数;而 IPv4 首部的 TTL 字段表示最大寿命,也表示了 IP 数据报在网\n络中的最大跳数,如果超出了 TTL,则该 IP 数据报要被丢弃。IV 正确。综上所述,答案选择\nD 选项。
\n\n\n\n\n", "difficulty": 1}, {"id": 698, "year": 2023, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第40题-题目\n\n\n\n

下列关于 ipv6 和 ipv4 的叙述中,正确的是( )

\n

I. ipv6 地址空间是 ipv4 地址空间的 96 倍

\n

II. ipv4 和 ipv6 的基本首部的长度均可变

\n

III.ipv4 向 ipv6 过渡可以采用双协议栈和隧道技术

\n

IV. ipv6 首部的 Hop-Limit 等价于 ipv4 首部的 TTL 字段

\n
A.仅 I、II
\n
B.仅 I、IV
\n
C.仅 II、III
\n
D.仅 III、IV
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第40题-解析\n\n\n\n

IPv4 是 32 位的地址长度,而 IPv6 是 128 位的地址长度,二者相差了 96 位,由于是二进制表示,所以地址数量相差了\n296\n倍。因此 I 错误。

IPv4 的基本首部有选项字段,因此长度可变;\nIPv6 将可选字段移除,变成了扩展首部,但是扩展首部被放在了有效载荷中,因此基本首部长度是不可变的,Ⅱ错误。

在完全过渡到 IPv6 之前,Pv4 和 Pv6 并行使用,可以采用双协议栈技术和隧道技术进行。Ⅲ 正确。

IPv6 首部的 Hop-Limit 表示跳数限制,代表了 IPv6 数据报在网络中的最大跳数;\n而 IPv4 首部的 TTL 字段表示最大寿命,也表示了 IPv4 数据报在网络中的最大跳数,\n如果超出了 TTL,则该 P 数据报要被丢弃。V 正确。

综上所述,答案选择 D 选项。

\n\n\n\n\n", "difficulty": 1}, {"id": 699, "year": 2023, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第41题-题目\n\n\n\n

已知有向图 G 采用邻接矩阵存储,类型定义如下:

\n
typedef struct {                    // 图的类型定义\n    int numVertices, numEdges;      // 图中顶点数和有向边数\n    char VerticesList[MAXV];        // 顶点表,MAXV 为已定义常量\n    int Edge[MAXV][MAXV];           // 邻接矩阵\n} MGraph;\n
\n

将图中出度大于入度的顶点称为 K 顶点。例如在题 41 图中,顶点 a 和 b 都是 K 顶点。

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
d
c
\n

设计算法 int printVertices(MGraph G) 对给定任意非空有向图 G,输出 G 中所有 K 顶点的算法,并返回 K 顶点的个数。

\n

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

\n

(2) 根据算法思想,写出 C/C++ 描述,并注释。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第41题-解析\n\n\n\n

1)采用邻接矩阵表示有向图时,一行中 1 的个数为该行对应顶点的出度,一列中 1 的个数为该列对应顶点的入度。使用一个初值为 0 的计数器记录 K 顶点的个数。对图 G 的每个顶点,根据邻接矩阵计算其出度 outdegree 和入度 indegree。若 outdegree - indegree > 0,则输出该顶点且计数器加 1。最后返回计数器的值。

2)算法实现

int printVertices(MGraph G) {\n    // K 顶点的个数\n    int count = 0;\n    for (int v = 0; v < numVertices; v++) {\n        // v 顶点的入度和出度\n        int indegree = 0;\n        int outdegree = 0;\n        // 统计出度\n        for (int i = 0; i < numVertices; i++) {\n            outdegree += G.Edge[v][i];\n        }\n        // 统计入度\n        for (int i = 0; i < numVertices; i++) {\n            indegree += G.Edge[i][v];\n        }\n        if (outdegree > indegree) {\n            printf(\"%s \", G.VerticesList[v]);\n            count++;\n        }\n    }\n    return count;\n}\n
\n\n\n\n\n", "difficulty": 1}, {"id": 700, "year": 2023, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第42题-题目\n\n\n\n

对含有 n(n > 0)个记录的文件进行外部排序,采用置换 - 选择排序生成初始归并段时需要使用一个工作,工作区中能保存 m 个记录,请回答下列问题,

\n

(1) 如果文件中由 19 个记录,其关键字是 51, 94, 37, 92, 14, 63, 15, 99, 48, 56, 23, 60, 31, 17, 43, 8, 90, 166, 100;当 m=4 时,可以生成几个初始归并段,各是什么?

\n

(2) 对任意的 m 个(n > m > 0),生成的第一个初始归并段的长度最大值和最小值分别是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第42题-解析\n\n\n\n

1)参考 置换选择排序,该题的关键字序列可生成 3 个初始归并段,分别是:

2)最大值为 n,最小值为 m。

\n\n\n\n\n", "difficulty": 1}, {"id": 701, "year": 2023, "index": 43, "type": 2, "typeName": "应用题", "score": 14, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第43题-题目\n\n\n\n

已知计算机 M 字长为 32 位,按字节编址,采用请求调页策略的虚拟存储管理方式,虚拟地址为 32 位,页面大小为 4KB;数据 Cache 采用 4 路组相联映射,数据区大小为 8KB,主存块大小为 32B。现有 C 语言程序段如下:

\n
for (i = 0; i < 24; i++)\n    for (j = 0; j < 64; j++) a[i][j] = 10;\n
\n

已知二维数组 a 按行优先存放,在虚拟地址空间中分配的起始地址为 0042 2000H,sizeof(int)=4,假定在 M 上执行上述程序段之前数组 a 不在主存,且在该程序段执行过程中不会发生页面置换。请回答下列问题。

\n

(1) 数组 a 分为几个页面存储?对于数组 a 的访问,会发生几次缺页异常?页故障地址各是什么?

\n

(2) 不考虑变量 i 和 j,该程序段的数据访问是否具有时间局部性?为什么?

\n

(3) 计算机 M 的虚拟地址(A31~A0)中哪几位用作块内地址?哪几位用作 Cache 组号?a[1][0] 的虚拟地址是多少?其所在主存块对应的 Cache 组号是多少?

\n

(4) 数组 a 占用多少主存块?假设上述程序段执行过程中数组 a 的访问不会和其他数据发生 Cache 访问冲突,则数组 a 的 Cache 命中率是多少?若将循环中 i 和 j 的次序按如下方式调换:

\n
for (j = 0; j < 64; j++)\n    for (i = 0; i < 24; i++) a[i][j] = 10;\n
\n

则数组 a 的 Cache 命中率又是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第43题-解析\n\n\n\n

1)数组 a 分布在 2 个页面中。缺页异常次数为 2。两个页故障地址分别是 0042 2000H、0042\n3000H。

2)该程序段的数据访问没有时间局部性。因为每个数组元素仅访问 1 次。

3)虚拟地址中低 5 位 (A4A0) 用作块内地址;低 11 位虚拟地址中高 6 位 (A10A5) 用作 Cache\n组号。a[1][0]的虚拟地址为 0042 2000H+1×64×4+0×4=0042 2100H。\na[1][0]所在主存块对应的 Cache 组号为 001000B=8。

4)数组 a 占 24×64×4B/32B=192 个主存块。每个主存块存放 32B/4B=8 个数组元素,访问数\n组 a 的 Cache 命中率为 (8-1)/8=87.5%。8 行数组元素占 8×64×4B/32B=64 个主存块,分别映射\n到 64 个 Cache 组的某 Cache 行,数组 a 共有 24 行,因此每个 Cache 组中只有 24/8=3 个 Cache\n行存放数组 a 中的数据,而每个 Cache 组有 4 行,因而不会发生替换,访问数组 a 的 Cache 命\n中率为 7/8=87.5%。

\n\n\n\n\n", "difficulty": 0}, {"id": 702, "year": 2023, "index": 44, "type": 2, "typeName": "应用题", "score": 9, "subject": "computer-network", "question": "\n\n\n\n\n\n2023-第44题-题目\n\n\n\n

上题中 C 程序段在计算机 M 上的部分机器级代码如下,每个机器级代码行中依次包含指令序号、虚拟地址、机器指令和汇编指令。

\n

请回答下列问题。

\n

(1) 第 20 条指令的虚拟地址是多少?

\n

(2) 已知第 2 条 jmp 和第 7 条 jge 都是跳转指令,其操作码分别是 EBH 和 7DH,跳转地址分别为 0040 1084H、0040 10BCH,这两条指令都采用什么寻址方式?给出第 2 条指令 jmp 的跳转目标地址计算过程。

\n

(3) 已知第 19 条 mov 指令的功能是“a[i][j]←10”,其中 ecx 和 edx 为寄存器名,0042 2000H 是数组 a 的首地址,指令中源操作数采用什么寻址方式?已知 edx 中存放的是变量 j,ecx 中存放的是什么?根据该指令的机器码判断计算机 M 采用的是大端还是小端方式。

\n

(4) 第一次执行第 19 条指令时,取指令过程中是否会发生缺页异常?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第44题-解析\n\n\n\n

1)第 20 条指令的虚拟地址为 0040 10B9H。

2)第 2 条 jmp 和第 7 条 jge 指令都采用相对寻址方式。\n第 2 条指令 jmp 的跳转目标地址 = 0040 1079H+2+09H = 0040 1084H。

3)第 19 条指令中源操作数采用立即(数)寻址方式。\n根据汇编指令中给出的计算公式 ecx+edx*4+00422000h 可知,ecx 中存放的是 i×256。M 采\n用小端方式。

4)第一次执行第 19 条指令时,取指令过程中不会发生缺页异常。因为第 19 条指令所在的\n程序段都在页号为 00401H 的同一个页面中,执行第 19 条指令时,该页已在主存,因而取指\n令过程中不会发生缺页异常。

\n\n\n\n\n", "difficulty": 0}, {"id": 703, "year": 2023, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第45题-题目\n\n\n\n

现要求学生使用 swap 指令和布尔型变量 lock 实现临界区互斥。lock 为线程间共享的变量。lock 的值为 TRUE 时线程不能进入临界区,为 FALSE 时线程能够进入临界区。某同学编写的实现临界区互斥的伪代码如题 45(a) 图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
某同学编写的伪代码
newSwap() 代码
{
}
bool lock = FALSE;       // 共享变量
book key = TRUE;
if (key == TRUE)
swap key, lock;     // 交换 key 和 lock 的值
临界区;
···
···
题 45(a) 图
题 45(b) 图
void newSwap(bool *a, bool *b)
bool temp = *a;
*a = *b;
*b = temp;
lock = TRUE;
进入区;
退出区;
\n

(1) 题 45(a) 图中伪代码中哪些语句存在错误?将其改为正确的语句(不增加语句条数)。

\n

(2) 题 45(b) 图中给出了两个变量值的函数 newSwap() 的代码是否可以用函数调用语句“newSwap(&key, &lock)”代替指令“swap key, lock”以实现临界区的互斥?为什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第45题-解析\n\n\n\n

1)进入区中的语句 if (key == TRUE) swap key,lock 存在错误,修改为 while (key ==TRUE) swap key, lock。\n退出区中的语句 lock=TRUE 存在错误,修改为 lock=FALSE。

2)否。因为多个线程可以并发执行 newSwap(),newSwap() 执行时传递给形参 b 的是共享变\n量 lock 的地址,在 newSwap() 中对 lock 既有读操作又有写操作,并发执行时不能保证实现两\n个变量值的原子交换,从而会导致并发执行的线程同时进入临界区。

\n\n\n\n\n", "difficulty": 1}, {"id": 704, "year": 2023, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2023-第46题-题目\n\n\n\n

进程 P 通过执行系统调用从键盘接收一个字符的输入,已知此过程中与进程 P 相关的操作包括:①将进程 P 插入就绪队列;②将进程 P 插入阻塞队列;③将字符从键盘控制器读入系统缓冲区;④启动键盘中断处理程序;⑤进程 P 从系统调用返回;⑥用户在键盘上输入字符。以上编号①~⑥仅用于标记操作,与操作的先后顺序无关。请回答下列问题。

\n

(1) 按照正确的操作顺序,操作①的前一个和后一个操作分别是上述操作中的哪一个?操作⑥的后一个操作上述操作中的哪一个?

\n

(2) 在上述哪个操作之后 CPU 一定从进程 P 切换到其他进程?在上述哪个操作之后 CPU 调度程序才能选择进程 P 执行?

\n

(3) 完成上述哪个操作的代码属于键盘驱动程序?

\n

(4) 键盘中断处理程序执行时,进程 P 处于什么状态?CPU 处于内核态还是用户态?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第46题-解析\n\n\n\n

1)在操作①的前操作是③,后一个操作是⑤。操作⑥的后一个操作是④。

2)在操作②之后 CPU 一定从进程 P 切换到其他进程。在操作①之后 CPU 调度程序才能选中进程 P 执行。

3)完成操作③的代码属于键盘驱动程序。

4)进程 P 处于阻塞状态。CPU 处于内核态。

\n\n\n\n\n", "difficulty": 1}, {"id": 705, "year": 2023, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "operating-system", "question": "\n\n\n\n\n\n2023-第47题-题目\n\n\n\n

如图,主机 H 登录到 FTP 服务器后,向服务器上传一个大小为 18000B 的文件 F,假设 H 传输 F 建立数据链接时,选择的初始序号为 100,MSS=1000B,拥塞控制的初始阈值是 4MSS,RTT=10ms,忽略 TCP 的传输时延,在 F 的传送过程中,H 以 MSS 段向服务器发送数据,且始终没有错误,丢包和乱序。

\n
\n\n\n\n \n 408真题系统\n \n\n
H
路由器
FTP 服务器
Intern%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%26lt%3Bfont%20face%3D%26quot%3BTimes%20New%20Roman%26quot%3B%26gt%3B%26lt%3Bspan%20style%3D%26quot%3Bfont-size%3A%2016px%3B%26quot%3B%26gt%3BNAT%26amp%3Bnbsp%3B%20R2%26lt%3B%2Fspan%26gt%3B%26lt%3B%2Ffont%26gt%3B%22%20style%3D%22text%3Bhtml%3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3Bautosize%3D1%3BstrokeColor%3Dnone%3BfillColor%3Dnone%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22818%22%20y%3D%22461%22%20width%3D%2276%22%20height%3D%2231%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3Eet
交换机
\n

(1) FTP 的控制连接是持久的还是非持久的?FTP 的数据连接是持久的还是非持久的?H 登录服务器时,建立的 FTP 连接是数据连接还是控制连接。

\n

(2) H 通过数据连接发送 F 时,F 的第一个字节序号是多少?在断开数据连接的过程中,FTP 发送的第二次挥手的 ACK 序号是?

\n

(3) F 发送过程中,当 H 收到确认序号为 2101 的确认时,H 的拥塞调整为多少?收到确认序号为 7101 的确认段时,H 的拥窗口调整为多少

\n

(4) H 从请求建立数据连接开始,到确认 F 已被服务全部接收为止,至少要多长时间?期间应用层数平均发送速率是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2023-第47题-解析\n\n\n\n

1)FTP 的控制连接是持久的;数据连接是非持久的;H 登录 FTP 服务器时,建立的 TCP 连接是控制连接。

2)F 的第 1 个字节的序号是 101;第二次挥手 ACK 段的确认序号是 18102。

3)当 H 收到确认序号为 2101 的确认段时,H 的拥塞窗口调整为 3MSS;收到确认序号为 7101 的确认段时,H 的拥塞窗口调整为 5MSS。

4)H 从请求建立数据连接开始,到确认 F 已被服务器全部接收为止,至少需要 6RTT=6*10ms=60ms;期间应用层数据平均发送速率是 18000B/60ms=300*10³B/s=0.3MB/s=2.4Mb/s。

\n\n\n\n\n", "difficulty": 0}, {"id": 706, "year": 2024, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2024-第1题-题目\r\n\r\n\r\n\r\n

已知带头结点的非空单链表 L 的头指针为 h,指针 p 指向 L 中间的一个链表结点(不是第一个和最后一个结点)。q=p->next,p->next=q->next,q->next=h->next,h->next=q。这段代码的功能是()。

\r\n
A.把 q 指向的结点插入到 p 的后面
\r\n
B.把 p 指向的结点插入到 q 的后面
\r\n
C.把 p 指向的结点插入到 h 的后面
\r\n
D.把 q 指向的结点插入到 h 的后面
\r\n\r\n\r\n\r\n\r\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第1题-解析\n\n\n\n

代码分解分析:

q = p->next;\n

现在 q 指向的是 p 的下一个结点。

p->next = q->next;\n

这一步将 q 从链表中“摘除”:原本是 p -> q -> q->next,现在变成了 p -> q->next,也就是说 q 不再出现在链表的原位置。

q->next = h->next;\n

这一步将 q->next 指向当前链表的第一个有效结点(注意是 h->next,即第一个结点,不是头结点)。

h->next = q;\n

把 q 接到头结点之后,也就是插入到链表头部(第一个有效结点之前)。


操作的效果是:

从链表中间删除了 q,然后把它插入到了头结点之后,也就是插入到链表第一个有效结点之前。

所以这段代码的功能是:

把 q 指向的结点插入到 h 的后面

正确答案选择 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 707, "year": 2024, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第2题-题目\n\n\n\n

表达式 x+y*(z-u)/v 的等价后缀是(  )

\n
A.xyzu-*v/+
\n
B.xyzu-v/*+
\n
C.+x/*y-zuv
\n
D.+x*y/-zuv
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第2题-解析\n\n\n\n

本题有两种解法:第一种是使用栈 将中序转后序。\n第二种方式是先将中序表达式转换为二叉树,然后再对二叉树进行后序遍历,得到后续表达式。

这里建议使用第二种方式,对于选择题比较高效。

\n\n\n\n\n", "difficulty": 1}, {"id": 708, "year": 2024, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第3题-题目\n\n\n\n

p、q、v 都是二叉树 T 中的结点,二叉树 T 的中序遍历为 ···, p,v,q,··· ,其中 v 有两个孩子结点,则下列说法正确的是( )。

\n
A.p 没右孩子,q 没左孩子
\n
B.p 没右孩子,q 有左孩子
\n
C.p 有右孩子,q 没左孩子
\n
D.p 有右孩子,q 有左孩子
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第3题-解析\n\n\n\n

根据中序遍历结果和 v 是子树的根节点这些信息,则可以判定 p,q 分别在 v 的的左右子树上,对\n于左子树而言,根据中序遍历结果为…p,则没有右孩子,同理,q 没有左孩子。或者假设 p 有右孩子\n,q 有左孩子,则中序遍历结果中 p,v 之间一定还有序列,v,q 之间也一定还有序列,和题意冲突。
\n\n\n\n\n", "difficulty": 1}, {"id": 709, "year": 2024, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第4题-题目\n\n\n\n

给定无向图的邻接多重表,求顶点 b、d 的度()

\n
\n\n\n\n \n 408真题系统\n \n\n
a
b
c
d
e
0
1
2
3
4
0
1
^
1
3
^
2
0
^
3
2
4
2
^
0
3
4
^
3
^
\n
A.0, 2
\n
B.2, 4
\n
C.3, 2
\n
D.2, 3
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第4题-解析\n\n\n\n

根据邻接多重表还原图,由下图可知,b 的度为 2,d 的图为 4。

\n\n
a
b
e
c
d
\n\n\n\n\n", "difficulty": 2}, {"id": 710, "year": 2024, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第5题-题目\n\n\n\n

下列数据结构中,不适合直接使用折半查找的是()

\n

I 有序链表 II 无序数组 III 有序静态链表 IV 无序静态链表

\n
A.仅 1、II
\n
B.仅 II、IV
\n
C.仅、II、IV
\n
D.I、II、III、IV
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第5题-解析\n\n\n\n

折半查找需要数据结构支持随机访问才能发挥作用,对于链表,无法随机访问其中某个下标的元素。
\n\n\n\n\n", "difficulty": 1}, {"id": 711, "year": 2024, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第6题-题目\n\n\n\n

KMP 算法使用修正后的 next 数组进行模式匹配,模式串 S = “aabaab”,当主串中某字符与 S 中某字符失去配对时,S 将向右滑动的最长距离是(  )

\n
A.5
\n
B.4
\n
C.3
\n
D.2
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第6题-解析\n\n\n\n

本题参考 修正后的 next 数组,传统 KMP 使用 next 数组,不过会存在 j=next[j]的情况,因此采用 next_val[] 来优化,处理\n好 next[] 和 next_val[] 后,举例即可,比如倒数第二个元素 a 匹配失败,会回到 -1 的位置,从 -1 的位\n置走到 4 的位置需要右滑的距离为 5 位。

下标012345
元素aabaab
next-101012
next_val-1-11-1-11
\n\n\n\n\n", "difficulty": 1}, {"id": 712, "year": 2024, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第7题-题目\n\n\n\n

一棵二叉搜索树如下图所示,K1、K2、K3 分别是对应结点中保存的关键字、三角形表示子树。则子树 T 中任一结点中保存的关键字 X 满足的是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
K1
K2
K3
T
\n
A.X<K1​
\n
B.X>K2​
\n
C.K1​<X<K3​
\n
D.K3​<X<K2​
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第7题-解析\n\n\n\n

根据二叉搜索树的性质,\nK2​\n的左子树的节点关键字均小于\nK2​\n,可以得出\nK3​<K2​\n,\nT\n中所有节点小于\nK2​\n,同理也可以得出\nK3​\n的右子树节点均大于\nK3​\n,即\nT\n中所有节点\n>K3​\n,\nX\n是\nT\n中节点,由此可以得出\nK3​<X<K2​\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 713, "year": 2024, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第8题-题目\n\n\n\n

使用快速排序算法对含 N(N ≥ 3) 个元素的数组 M 进行排序,若第一趟排序将除枢轴外的 N-1 个元素划分为 P 和 Q 两个部分,则下列叙述中,正确的是( )。

\n
A.P 和 Q 块间有序
\n
B.P 和 Q 均块内有序
\n
C.P 和 Q 的元素个数大致相等
\n
D.P 和 Q 中均不存在相等的元素
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第8题-解析\n\n\n\n

本题考察快排的原理,快排第一趟找到枢轴之后,枢轴的左边的元素即 P 块都是小于枢轴的,枢轴的右边的元素即 Q 块是大于枢轴的,所以 P 和 Q 块间有序,然而块内未必是有序的,所以还需要继续对 P 和 Q 两块进行递归快排。
\n\n\n\n\n", "difficulty": 1}, {"id": 714, "year": 2024, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第9题-题目\n\n\n\n

已知关键字序列 28, 22, 20, 19, 8, 12, 15, 5 是大根堆(最大堆),对该堆进行两次删除操作后,得到的新堆是( )。

\n
A.20, 19, 15, 12, 8, 5
\n
B.20, 19, 15, 5, 8, 12
\n
C.20, 19, 12, 15, 8, 5
\n
D.20, 19, 8, 12, 15, 5
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第9题-解析\n\n\n\n

本题考察 堆的删除操作,先根据初始序列建堆,然后依次删除堆项元素,过程如下图:

\n\n
28
22
20
19
8
12
15
5
5
22
20
19
8
12
15
22
19
20
5
8
12
15
15
19
20
5
8
12
20
19
15
5
8
12
堆的初始形态
删除 28
调整
删除 22
调整
\n\n\n\n\n", "difficulty": 1}, {"id": 715, "year": 2024, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第10题-题目\n\n\n\n

初始有三个升序序列 (3, 5)、(7, 9)、(6),若按从左至右的次序选择有序序列进行二路归并排序,则关键字之间的总比较次数是()。

\n
A.3
\n
B.4
\n
C.5
\n
D.6
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第10题-解析\n\n\n\n

本题考察 多路归并 的原理,二路归并排序将相邻的有序子序列两两合并,得到合并后有序子序列。重复此过程,直到所有子序列合并为一个有序序列。

第一轮归并:将升序序列两两分组,(3,5) 和 (7,9) 分为一组,(6) 分为一组。(3,5) 和 (7,9) 的归并过程如下:

输入序列比较首个元素输出元素输出序列剩余输入序列
(3,5) 和 (7,9)3 < 733(5) 和 (7,9)
(5) 和 (7,9)5 < 753,5(7,9)
(7,9)73,5,7(9)
(9)93,5,7,9

第二轮归并:将升序序列两两分组,(3,5,7,9) 和 (6) 分为一组。(3,5,7,9) 和 (6) 的归并过程如下:

输入序列比较首个元素输出元素输出序列剩余输入序列
(3,5,7,9) 和 (6)3 < 633(5,7,9) 和 (6)
(5,7,9) 和 (6)5 < 653,5(7,9) 和 (6)
(7,9) 和 (6)7 > 663,5,6(7,9)
(7,9)73,5,6,7(9)
(9)93,5,6,7,9

到此,二路归并排序执行完毕。

上述过程中第一轮归并关键字之间比较 2 次,第二轮归并关键字之间比较 3 次,因此,关键字之间的总比较次数为 2 + 3 = 5。

本题选 C。

\n\n\n\n\n", "difficulty": 2}, {"id": 716, "year": 2024, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第11题-题目\n\n\n\n

在外排序中,利用败者树对初始为升序的归并段进行多路归并,败者树中记录\"冠军\"的结点保存的是( )

\n
A.最大关键字
\n
B.最小关键字
\n
C.最大关键字所在的归并段号
\n
D.最小关键字所在的归并段号
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第11题-解析\n\n\n\n

在外排序的多路归并中,败者树(Loser Tree)是一种优化的数据结构,用于快速找出多个归并段中当前最小的关键字。它是一个完全二叉树,每个非叶子节点保存的是“败者”,而整棵树的根节点保存的是当前“冠军” —— 即:

当前最小关键字所在的归并段号。

所以答案选择 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 717, "year": 2024, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第12题-题目\n\n\n\n

C 语言代码如下:

\n
int i    = 32777;\nshort si = i;\nint j    = si;\n
\n

执行上述代码段后, j 的值为( )。

\n
A.-32777
\n
B.-32759
\n
C.32759
\n
D.32777
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第12题-解析\n\n\n\n

int i=32777,赋值给 short 后,由于 short 只有 16 位,则只会保留 i 的低 16 位,同时,short 的上限为\n215−1\n即 32767,所以 32777 在 short 类型的变量中会出现数据溢出问题,32777=32767+9,则溢出后的二进制补码为 1000000000001001。再将此数转为 int,此时将进行符号扩展,补高 16 位的时候取决于当前 short 的符号位,若符号位为 1,则高 16 位补 16 个 1,若符号位为 0,则高 16 位补 16 个 0,所以本题补 16 个 1,结果为补码 1111 …. 1000 0000 0000 1001,换算成原码再计算,选 B。或者使用排除法,最终通过补码的最高位 1 可以断定该数为负数,A、B 里面选,32777 对于 short 已经溢出,转为 short 再符号扩展,并不只是单纯地改变子符号,故排除 A,选 B。
\n\n\n\n\n", "difficulty": 1}, {"id": 718, "year": 2024, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第13题-题目\n\n\n\n

将汇编语言程序中实现特定功能的指令序列定义成一条伪指令。下列选项中,CPU 能理解并直接执行的是

\n

Ⅰ. 伪指令 Ⅱ. 微指令 Ⅲ. 机器指令 Ⅳ. 汇编指令

\n
A.仅Ⅰ和Ⅳ
\n
B.仅Ⅱ和Ⅲ
\n
C.仅Ⅲ和Ⅳ
\n
D.仅Ⅰ、Ⅲ和Ⅳ
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第13题-解析\n\n\n\n

伪指令:伪指令不是真正的 CPU 指令,而是由汇编器识别和执行的一些特殊指令。

微指令:微指令是计算机硬件级别指令,一条机器指令所完成的操作划分成若干条微指令来完成。

机器指令:CPU 可以直接解析和执行的二进制代码。

汇编指令:低级别的编程语言,与机器指令一一对应,不过需要汇编器转换为机器指令,CPU 才能执行。

这些概念的关系参考 该节。

\n\n\n\n\n", "difficulty": 1}, {"id": 719, "year": 2024, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第14题-题目\n\n\n\n

某科学实验中,需要使用大量的整型参数,为了在保证表数精度的基础上提高运算速度,需要选择合理的数据表示方法。若整型参数\nα\n和\nβ\n的取值范围分别为\n−220∼220\n、\n−240∼240\n,则下列选项中,\nα\n和\nβ\n最适宜采用的数据表示方法分别是 (  )

\n
A.32 位整数、32 位整数
\n
B.单精度浮点数、单精度浮点数
\n
C.32 位整数、双精度浮点数
\n
D.单精度浮点数、双精度浮点数
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第14题-解析\n\n\n\n

a 最适宜采用 32 位整数,32 位整数可以表示\n−231∼231−1\n的范围,对于 a 的取值范围,可以用 32 位整数表示,不会发生溢出或者精度损失,而且整数运算比浮点数运算更快,更省空间,所以优先使用 32 位整数而不是单精度浮点数。排除 B、D,根据 B 的取值范围,可以使用双精度浮点数存储,双精度浮点数存储范围为\n−21023∼21024\n,不会发生溢出问题,双精度浮点的小数精度为 15-16 位,比起单精度浮点,基本上不会发生精度损失。
\n\n\n\n\n", "difficulty": 1}, {"id": 720, "year": 2024, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第15题-题目\n\n\n\n

下列关于整数乘法运算的叙述中,错误的是( )。

\n
A.用阵列乘法器实现乘运算可以在一个时钟周期完成
\n
B.用 ALU 和移位器实现的乘运算无法在一个时钟周期内完成
\n
C.变量与常数的乘运算可编译优化为若干条移位及加/减运算指令
\n
D.两个变量的乘运算无法编译为移位及加法等指令的循环实现
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第15题-解析\n\n\n\n

参考 该节,我们逐项分析:

A. 用阵列乘法器实现乘运算可以在一个时钟周期完成 ✅

阵列乘法器(array multiplier)是一种并行结构,硬件资源充足的情况下,确实可以在一个时钟周期内完成乘法运算(代价是面积大)。因此这个说法是正确的。

B. 用 ALU 和移位器实现的乘运算无法在一个时钟周期内完成 ✅

这种方式对应的是串行乘法器,通过不断地移位与加法模拟乘法过程,至少需要多个时钟周期完成,因此正确。

C. 变量与常数的乘运算可编译优化为若干条移位及加/减运算指令 ✅

例如 x * 10 可编译为 (x << 3) + (x << 1),这是常见的编译器优化技术,因此此项正确。

D. 两个变量的乘运算无法编译为移位及加法等指令的循环实现 ❌

这项是错误的。事实上,若没有硬件乘法器,编译器或低级代码确实可以将变量之间的乘法(如 a * b)转换为循环移位加法实现。比如使用 Booth 算法、加移法(shift-and-add) 等。因此选项 D 的说法是错误的。

\n\n\n\n\n", "difficulty": 1}, {"id": 721, "year": 2024, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第16题-题目\n\n\n\n

对于页式虚拟存储管理系统,下列关于存储器层次结构的叙述中,错误的是( )。

\n
A.Cache-主存层次的交换单位为主存块,主存-外存层次的交换单位为页
\n
B.Cache-主存层次替换算法由硬件实现,主存-外存层次由软件实现
\n
C.Cache-主存层次可采用回写法写策略,主存-外存层次通常采用回写法
\n
D.Cache-主存层次可采用直接映射,主存-外存层次通常采用直接映射
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第16题-解析\n\n\n\n

主存 - 外存层次的映射方式通常采用页式映射,而不是直接映射。页式映射是一种将虚拟地址空间分割为固定大小的单元(页)的映射方式,它将页映射到物理地址的空间的相应单元(页框)中。页式映射的优点是减少了内外存之间的交换次数,提高了空间利用率,缺点是增加了地址转换的开销,需默维护页表。

想一想,如果主存 - 外存页面采用直接映射的话,那么替换算法都直接没用了,所以 D 肯定是错误的。

\n\n\n\n\n", "difficulty": 2}, {"id": 722, "year": 2024, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第17题-题目\n\n\n\n

某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址为 32 位,主存地址为 30 位,页大小为 1 KB。若 TLB 共有 32 个表项,采用 4 路组相联映射方式,则 TLB 表项中标记字段的位数至少是( )。

\n
A.17
\n
B.18
\n
C.19
\n
D.20
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第17题-解析\n\n\n\n

根据题意可知,虚拟地址为 32 位,主存地址为 30 位,页大小为 1KB,因此,虚拟页号为 32-10=22 位,物理页号为 30-10=20 位。TLB 共有 32 个表项,采用 4 路组相联映射方式。因此,TLB 共有 32/4=8 组,每组有 4 路。索引字段为\nlog2​8=3\n位。标记字段位数 = 虚拟页号位数 - 索引字段位数=22-3=19 位。

具体原理可以参考 TLB 一节。

\n\n\n\n\n", "difficulty": 1}, {"id": 723, "year": 2024, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第18题-题目\n\n\n\n

下列事件中,不是在 MMU 地址转换过程检测的是()

\n
A.访问越权
\n
B.Cache 缺失
\n
C.页面缺失
\n
D.TLB 缺失
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第18题-解析\n\n\n\n

MMU 负责将虚拟地址转化为物理地址,所以会检测以下事件:访问越权、页面缺失、TLB 缺失。Cache 缺失不是在 MMU 地址转换过程中检测的,而是在 CPU 访问主存数据检测的,访问主存的前提是有物理地址,所以该过程是在 MMU 完成地址翻译之后。
\n\n\n\n\n", "difficulty": 1}, {"id": 724, "year": 2024, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第19题-题目\n\n\n\n

在采用“取指、译码/取数、执行、访存、写回”5 段流水线的 RISC 处理器中,下列关于指令流水线数据冒险处理的叙述中,错误的是( )。

\n
A.相邻两条指令中的操作数相关可能引起数据冒险
\n
B.在数据相关的指令间插入“气泡”能避免数据冒险
\n
C.所有数据冒险都可以通过加入转发(旁路)电路解决
\n
D.所有数据冒险都能通过调整指令顺序和插入 nop 指令解决
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第19题-解析\n\n\n\n

本题考查 数据冒险。

\n\n\n\n\n", "difficulty": 1}, {"id": 725, "year": 2024, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第20题-题目\n\n\n\n

某存储器总线的时钟频率为 420 MHz,总线宽度为 64 位,每个时钟周期传送 2 次数据;其总线事务支持突发传送方式,最多传送 8 次数据,第 1 个时钟周期传送地址和读/写命令,从第 4 个至第 7 个时钟周期连续传送 8 次数据。该总线的总线带宽(最大传输速率)为( )。

\n
A.3.84GB/s
\n
B.6.72GB/s
\n
C.30.72 GB/s
\n
D.53.76GB/s
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第20题-解析\n\n\n\n

已知:

  1. 瞬时峰值带宽(只看数据线、连续传数据时)\n每秒传输次数\n=420×106×2=840×106\n次/秒, 每次 64 bit。\n带宽(比特)\n=840×106×64=53.76×109 bit/s=53.76 Gb/s\n。\n换算字节:\n53.76/8=6.72 GB/s\n。

所以瞬时峰值:53.76 Gbit/s = 6.72 GB/s。

  1. 按题目给出的事务时序(每次事务第1周期发地址/命令,第4~7周期传 8 次数据)计算的有效/持续带宽\n每次事务传输数据量:\n8×64=512 bit=64 bytes\n。\n每个事务占用时钟周期数为 7 周期(第1~第7周期),周期时长为\n1/420 MHz\n。\n时间\nt=7/(420×106)\ns, 因此有效带宽(字节/s):
7/(420×106) s64 bytes​=3.84×109 bytes/s=3.84 GB/s

比特/s 即\n3.84×8=30.72 Gb/s\n。

所以按该事务时序的平均最大传输速率(持续带宽)为:30.72 Gbit/s = 3.84 GB/s。

结论(按题意的推荐答案):

这题属于是出题人故意埋坑,插入了一堆无用信息,属于很令人无语的一道题,正确答案是 B 而不是 A。

\n\n\n\n\n", "difficulty": 2}, {"id": 726, "year": 2024, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第21题-题目\n\n\n\n

下列关于中断 I/O 方式的叙述中,错误的是( )。

\n
A.中断屏蔽字用于确定中断响应的优先级
\n
B.保存断点和程序状态字在中断响应阶段完成
\n
C.保存通用寄存器和设置新中断屏蔽字由软件实现
\n
D.单重中断方式下,中断处理时 CPU 处于关中断状态
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第21题-解析\n\n\n\n

中断是指外部设备或者程序需要 CPU 的服务时,向 CPU 发出一个信号,请求 CPU 暂停当前的任务,转而处理中断请求的情况。

中断响应顺序是指当同时有多个中断请求时,CPU 按照一定的优先级顺序来选择响应哪个中断的规则。

中断屏蔽字只能控制中断的开关,而不能控制中断的顺序,中断的顺序由中断的优先级决定,优先级高的中断先被响应,优先级低的中断后被响应。

\n\n\n\n\n", "difficulty": 1}, {"id": 727, "year": 2024, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第22题-题目\n\n\n\n

DMA 方式中,DMA 控制器控制的数据传输通路位于( )。

\n
A.CPU 和主存之间
\n
B.CPU 和 DMA 控制器之间
\n
C.设备接口和主存之间
\n
D.设备接口和 DMA 控制器之间
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第22题-解析\n\n\n\n

在 DMA 方式中,DMA 控制器控制的数据传输通路位于设备接口和主存之间。这是因为 DMA(Direct Memory Access,直接存储器访问)的主要功能是在外设和存储器之间或者存储器和存储器之间提供高速数据传输。
\n\n\n\n\n", "difficulty": 1}, {"id": 728, "year": 2024, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第23题-题目\n\n\n\n

下面关于中断和异常的说法中,错误的是( )。

\n
A.中断或异常发生时,CPU 处于内核态
\n
B.每个系统调用都有对应的内核服务例程
\n
C.中断处理程序开始执行时,CPU 处于内核态
\n
D.系统添加新类型设备时,需注册相应的中断服务例程
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第23题-解析\n\n\n\n

本题考查 中断和异常。

\n\n\n\n\n", "difficulty": 1}, {"id": 729, "year": 2024, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第24题-题目\n\n\n\n

下列选项中,操作系统在终止进程时不一定执行的是()。

\n
A.终止子进程
\n
B.回收分配的内存资源
\n
C.撤销进程 PCB
\n
D.回收进程占用的设备
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第24题-解析\n\n\n\n

当用户终止进程时,不一定终止子进程。因为子进程的生命周期并不总是与父进程紧密相关联,在某些情况下,即使父进程被终止,子进程也可以继续运行,如 孤儿进程 和 僵尸进程。
\n\n\n\n\n", "difficulty": 1}, {"id": 730, "year": 2024, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第25题-题目\n\n\n\n

在支持页式存储管理的系统中,进程切换时 OS 要执行()。

\n

I. 更新 PC(程序计数器)值
II. 更新栈基址寄存器值(ebp)
III. 更新页表基址寄存器值

\n
A.仅 III
\n
B.仅 I、II
\n
C.仅 I、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第25题-解析\n\n\n\n

I. 更新程序计数器的值:程序计数器存储了下一条要执行的指令的地址。当进程切换时\n,操作系统需要更新程序计数器的值,以便于新的进程能从正确的位置开始执行。

II. 更新栈基址寄存器的值:栈基址寄存器存储了当前进程栈的基址。当进程切换时,操作系统\n需要更新栈基址寄存器的值,以确保新的进程使用正确的栈。

III. 更新页表基址寄存器值:页基址寄存器存储了当前进程的页表基址。当进程切换时,操作系\n统需要更新页基址寄存器的值,以确保新的进程能正确地访问其内存空间。

\n\n\n\n\n", "difficulty": 1}, {"id": 731, "year": 2024, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第26题-题目\n\n\n\n

文件系统需要额外的外存空间记录空闲块的位置,占用外存空间大小与当前空闲块数量无关的是()。

\n
A.位示图
\n
B.空闲表
\n
C.成组链接
\n
D.空闲链表
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第26题-解析\n\n\n\n

A. 文件系统需要额外的外存空间记录空闲块的位置,占用外存空间大小与当前空闲块数\n量无关的是位示图。位示图是一种常用的记录空闲块位置的方法,它使用一个位来表示一个块是\n否空闲。位示图的大小取决于磁盘的总块数,而与当前的空闲块数量无关。

B. 空闲表:空闲表是一种记录磁盘空闲块位置的方法它使用一个表来记录空闲块的位置。空闲\n表的大小会随着空闲块的数量的变化而变化。

C. 成组链接:成组链接是一种记录该组中其他块的位置。成组链接的大小会随着空闲块数量的变\n化而变化。

D. 空闲链表:空闲链表是一种记录酸盘空闲块位置的方法,它使用一个链表来记录所有空闲块的\n位置。空闲链表的大小会随着空闲块数量的变化而变化。

\n\n\n\n\n", "difficulty": 1}, {"id": 732, "year": 2024, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第27题-题目\n\n\n\n

回收分区时,仅合并大小相等的空闲分区的算法是()。

\n
A.伙伴算法
\n
B.最佳适应算法
\n
C.最坏适应算法
\n
D.首次适应算法
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第27题-解析\n\n\n\n

A. 伙伴算法 是一种特殊的内存分配算法,他在分配和回收内存时,只合并大小相等的空\n闲分区。这种算法的优点是简单且执行速度快,但可能会导致内存碎片:

B. 最佳适应算法:它在分配内存时,会选择大小最接近所需的空闲分区。这种算法的优点是可以\n减少内存的浪费,但可能会导致大量的小碎片。

C. 最坏适应算法:它在分配内存时,会选择最大的空闲分区。这种算法的优点是可以减沙内存的\n碎片,但可能会导致大量的大碎片。

D.首次适应算法:它在分配内存时,会选择第一个满足所需的空闲分区。这种算法的优点是简单\n且执行速度快,但可能会导致内存的碎片。

动态分区分配算法具体参考该节。

\n\n\n\n\n", "difficulty": 1}, {"id": 733, "year": 2024, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第28题-题目\n\n\n\n

若进程 P 中有一个线程 T,打开文件后获得 fd,再创建线程 Ta、Tb,则线程 Ta、Tb 可共享的资源是()。

\n

I. 进程 P 的地址空间
II. 线程 T 的栈
III. fd

\n
A.仅 I
\n
B.仅 I、III
\n
C.仅 II、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第28题-解析\n\n\n\n

I. 进程 P 的地址空间:在同一进程中的所有线程共享该进程的地址空间。这意味着,线程 Ta 和 Tb 可以访问进程 P 的全局变量,因为这些变量存储在进程的地址空间中。此外,如果线程 T 在堆上分配了内存,那么线程 T 和 Tb 也可以访问这些内存,因为堆是存储在进程的地址空间中的。

II. 线程 T 的栈:每个线程都有自己的栈,这是线程的私有资源,不会被其他线程共享。栈用于存储函数调用的局部变量和返回地址。由于每个线程可能有不同的函数调用序列,因此每个线程需要由自己的栈,因此,线程 Ta 和 Tb 不能访问线程 T 的栈。

III. 文件描述符 fd:同进程中的所有线程共享该进程打开的文件描述符。文件描述符是一个整数,用于表示进程打开的文件。当线程打开一个文件时,操作系统会返回一个文件描述符,然后线程 T、T 和 Tb 都可以使用这个文件描述符来读写该文件,这是因为,尽管每个线程有自己的栈,但是它们共享其余的进程资源,包括文件描述符。

\n\n\n\n\n", "difficulty": 1}, {"id": 734, "year": 2024, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第29题-题目\n\n\n\n

以下系统调用中,包含文件按名查找功能的系统调用是()。

\n
A.open()
\n
B.read()
\n
C.write()
\n
D.close()
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第29题-解析\n\n\n\n

A. open() 系统调用用于打开一个文件。它需要一个文件名作为参数,因此它包含了按名\n查找文件的功能。如果文件存在并且进程有足够的权限,open() 会成功打开文件并返回一个文件\n描述符,否则,它会返回一个错误。

B. read() 系统调用用于从已打开的文件中读取数据。

C. write() 系统调用用于向已打开的文件中写入数据。

D. close() 系统调用用于关闭已打开的文件。

\n\n\n\n\n", "difficulty": 1}, {"id": 735, "year": 2024, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第30题-题目\n\n\n\n

假设某系统使用时间片轮转调度算法进行 CPU 调度,时间片大小为 5 ms,系统共有 10 个进程,初始时均处于就绪队列,执行结束前仅处于执行态或就绪态。若队尾的进程 P 所需 CPU 时间最短,时间为 25 ms。在不考虑系统开销的情况下,则进程 P 的周转时间为( )。

\n
A.200ms
\n
B.205ms
\n
C.250ms
\n
D.295ms
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第30题-解析\n\n\n\n

由于使用的是轮转调度算法,进程即在每次执行一个时间片后,都需要重新回到就绪队列的末尾等待下一次的时间片。所以,实际上,进程 P 的每一个时间片之间都有一个完整的轮转周期的等待时间:10×5ms=50ms,进程 P 需要执行 25/5 个时间片,所有中间有 4 个完整的轮转周期再加上 P 的周转时间为,总共需要 5 个轮转周期:5×50ms=250s。
\n\n\n\n\n", "difficulty": 1}, {"id": 736, "year": 2024, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第31题-题目\n\n\n\n

键盘中断服务例程执行结束时,所输入的数据存放位置是() 。

\n
A.用户缓冲区
\n
B.CPU 的通用寄存器
\n
C.内核缓冲区
\n
D.键盘控制器的数据缓冲区
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第31题-解析\n\n\n\n

当键盘输入数据时,首先会将数据发送到键盘控制器的数据寄存器中。当键盘控制器的数据寄存器接收到数据后,它会触发一个中断请求 (IRQ1),通知 CPU 有数据等待处理。CPU 响应中断请求后,会执行键盘中断服务例程。在中断服务例程中,CPU 从键盘控制器的数据寄存器读取输入数据,并将其存放到内核缓冲区中。

A 错误。用户缓冲区通常指的是应用程序为接收输入数据而分配的缓冲区。在键盘中断服务例程执行结束时,输入数据并不会直接存放在用户缓冲区中,而是先存放在内核缓冲区中。应用程序可以通过系统调用或其他机制从内核缓冲区读取输入数据,并将其复制到用户缓冲区中。

B 错误。CPU 中的通用寄存器并不是输入数据的最终存放位置。在键盘中断服务例程执行过程中,输入数据可能会暂时存放在 CPU 的通用寄存器中,但最终会被存放到内核缓冲区中。

C 正确。内核缓冲区是操作系统用于暂存输入数据的内存区域。在键盘中断服务例程执行过程中,输入数据被读取并存入内核缓冲区,以便后续的系统调用或应用程序访问。内核缓冲区通常由操作系统管理,确保数据的正确性和一致性。

D 错误。键盘控制器的数据寄存器是输入数据的初始存放位置,但并不是中断服务例程执行结束时的最终存放位置。

本题选 C。

\n\n\n\n\n", "difficulty": 1}, {"id": 737, "year": 2024, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2024-第32题-题目\n\n\n\n

某磁盘的磁道数为 400(磁道号为 0~399),采用循环扫描算法 (CSCAN) 进行磁盘调度,完成对 200 号磁道的请求后,磁头向磁道号减小的方向移动,若还有 7 个请求,对应的磁道号分别为 300, 120, 110, 0, 160, 210, 399,则完成上述磁盘请求后磁头移动的距离是( )。

\n
A.599
\n
B.619
\n
C.788
\n
D.799
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第32题-解析\n\n\n\n

在 CSCAN 中,磁头会在一个方向上移动,直到达到磁道的一端,然后立即返回到另一端,再次开始扫描。

首先磁头会移动到 160 号磁道,然后依次是 120 号、110 号、0 号,接着磁头移动到开头,然后向磁道号减少的方向移动:依次移动到 399 号、300 号、210 号,完成所有请求后,磁头移动的总距离为:

200-160=40;160-110=50;110-0=110;399-0=399;399-300=90;300-210=90;

磁头移动的总距离为 40+50+110+399+99+90=788

\n\n\n\n\n", "difficulty": 1}, {"id": 738, "year": 2024, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第33题-题目\n\n\n\n

若分组交换网络及每段链路的带宽如下图,则 H1 到 H2 的最大吞吐量约为()。

\n
\n\n\n\n \n 408真题系统\n \n\n
10 Mbps
1000 Mbps
1000 Mbps
100 Mbps
100 Mbps
1 Mbps
10 Mbps
\n
A.1Mbps
\n
B.10Mbps
\n
C.100Mbps
\n
D.1000Mbps
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第33题-解析\n\n\n\n

H1 和 H2 两端的最大传输速率为 10Mbps,虽然中间的路由器最大传输速率为 1000Mbps,\n但是根据网路最大流算法,HI 和 H2 的最大吞吐量等价于最大流,最大流为 1OMbps。
\n\n\n\n\n", "difficulty": 1}, {"id": 739, "year": 2024, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第34题-题目\n\n\n\n

在下列二进制数字调制方法中,需要 2 个不同频率载波的是()。

\n
A.ASP
\n
B.PSK
\n
C.FSK
\n
D.DPSK
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第34题-解析\n\n\n\n

本题考查 调制方法:

选项 A:ASK (Amplitude Shift Keying) 幅移键控,这种调制方式是利用载波幅度的变化来传送数字信息的。因此排除选项 A。

选项 B:PSK (Phase Shift Keying) 相移键控,这种调制方式是利用载波振荡相位的变化来传送数字信息的。因此排除选项 B。

选项 C:FSK (Frequency Shift Keying) 频移键控,这种调制方式是利用载波频率的变化来传送数字信息的。在二进制数字调制中,常见的是二进制 0 和 1 对应不同的频率。因此选项 C 为正确选项。

选项 D:DPSK (Differential Phase Shift Keying) 差分相移键控,它不是利用载波相位的绝对数值传送数字信息,而是用前后码元的相对载波相位值传送数字信息。因此排除选项 D。

本题选 C。

\n\n\n\n\n", "difficulty": 2}, {"id": 740, "year": 2024, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第35题-题目\n\n\n\n

如题 35 图所示的支持 VLAN 划分的交换机,已按端口划分了 3 个 VLAN,部分端口连接主机的 IP 地址和 MAC 地址如图中所示,ARP 表结构为<IP 地址,MAC 地址,TTL> ,下列选项中,不会出现在 H4 的 ARP 表中的是()

\n
\n\n\n\n \n 408真题系统\n \n\n
VLAN 1
VLAN 2
VLAN 3
H1
192.168.3.91
00-3E-C2-39-12-B5
H2
192.168.3.81
00-18-A2-3B-36-21
H3
192.168.3.125
00-E5-78-4A-09-B2
H4
192.168.3.12
00-35-6A-B1-4C-92
H5
192.168.3.251
00-1A-39-5B-E4-45
H7
192.168.3.190
00-51-48-C9-63-A3
H6
192.168.3.129
00-08-6E-05-A7-82
交换机
\n
A.192.168.3.81, 00-18-A2-3B-36-21, 14:32:00
\n
B.192.168.3.91, 00-3E-C2-39-12-B5, 14:37:00
\n
C.192.168.3.125, 00-E5-78-4A-09-B2, 14:35:00
\n
D.192.168.3.129, 00-08-6E-05-A7-82, 14:52:00
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第35题-解析\n\n\n\n

VLAN (Virtual Local Area Network) 虚拟局域网技术可以把同一物理局域网内的不同用户逻辑地划分成不同的广播域。位于同一 VLAN 的主机之间可以相互通信,位于不同 VLAN 的主机之间不能直接通信。

ARP (Address Resolution Protocol) 地址解析协议,是根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以节约资源。

因此,ARP 协议可以在同一 VLAN 中起作用。

由图可知,VLAN1 中包含 H1、H2、H3 和 H4;VLAN2 中包含 H5;VLAN3 中包含 H6 和 H7。

A 和 H2 有关,H2 和 H4 都位于 VLAN1 中,因此该项会出现在 H4 的 ARP 表中。

B 和 H1 有关,H1 和 H4 都位于 VLAN1 中,因此该项会出现在 H4 的 ARP 表中。

C 和 H3 有关,H3 和 H4 都位于 VLAN1 中,因此该项会出现在 H4 的 ARP 表中。

D 和 H6 有关,H6 位于 VLAN3 中,而 H4 都位于 VLAN1 中,两者不在同一个 VLAN 中,因此该项不会出现在 H4 的 ARP 表中。

本题选 D。

\n\n\n\n\n", "difficulty": 0}, {"id": 741, "year": 2024, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第36题-题目\n\n\n\n

在采用 CSMA/CA 的 802.11 无线局域网中,DIFS = 120 μs,SIFS = 28μs,RTS、CTS 和 ACK 帧的传输时延分别是 3 μs、2 μs 和 2 μs,忽略信号传播时延。若主机 A 欲向 AP 发送一个总长度为 1998 B 的数据帧,无线链路带宽为 54 Mb/s,则隐藏站 B 收到 AP 发送的 CTS 帧时,设置的网络分配向量 NAV 的值是()

\n
A.326us
\n
B.354us
\n
C.385us
\n
D.513us
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第36题-解析\n\n\n\n

在 CSMA/CA 的 802.11 无线局域网中,网路分配向量(NAV)是用来告诉其他节点预计要占用无线媒体多长时间的一种机制。在发送 RTS(请求发送)和 CTS(清除发送)帧时,发送节点会在帧头中包含一个持续时间字段,这个字段表示从发送当前帧到接收到最后一个 ACK 帧所需的时间。其他节点在接收到 RTS 或 CTS 帧后,会根据这个持续时间字段设置自己的 NAV,从而避免在这段时间内发送数据,防止发生冲突。

NAV 的时间就是其他节点推迟访问的时间,约等于 SIFS 时间 + 数据发送时间 + SIFS 时间 + ACK 帧传播时延。

根据题目中的信息,我们可以计算出设置 NAV 的值。首先,我们需要计算发送数据顿所需的时间数据帧的总长度为 1998B,无线链路带宽为 54bps,所以发送数据帧所需的时间为:1998B/54Mbps=296μs,则总时间=28μs+296μs+28μs+2μs=354μs

\n\n\n\n\n", "difficulty": 1}, {"id": 742, "year": 2024, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第37题-题目\n\n\n\n

主机甲通过选择重传(SR)滑动窗口协议向主机乙发送帧的部分过程如下图所示。F 为数据帧,ACKx\n为确认帧,x 是位数为比特的序号。乙只对正确接收的数据帧进行独立确认。发送窗口与接收窗口大小相\n同且均为最大值。甲在\nt1​\n时刻和\nt2​\n时刻发送的数据帧分别是 ( )

\n
\n\n\n\n \n 408真题系统\n \n\n
F0
F0
F1
F1
F2
F2
F3
F3
ACK0
ACK0
ACK2
ACK2
ACK3
ACK3
t1
t1
t2
t2
?
?
?
?
主机甲
主机甲
主机乙
主机乙
F1 超时
F1 超时
时间
时间
丢失
丢失
丢失
丢失
\n
A.F1、F3
\n
B.F1、F4
\n
C.F3、F1
\n
D.F4、F1
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第37题-解析\n\n\n\n

在\nt1​\n时刻主机甲接收到了主机乙发送的 ACKO,暂时没有出错的帧,所以继续发送下一\n个数据帧 F4。在\nt2​\n时刻主机甲收到了 F1 超时的错误,根据 选择性重传,发送方只需要重传出错的帧,而不是所有的帧,所以只需要重新发送 F1。
\n\n\n\n\n", "difficulty": 1}, {"id": 743, "year": 2024, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第38题-题目\n\n\n\n

假设主机 H 通过 TCP 向服务器发送长度为 3000B 的报文,往返时间 RTT=10ms,最长报文段寿命\nMSL=30s,最大报文段长度 MSS=1000B,忽略 TCP 段的传输时廷,报文传输结束后 H 首先请求断开连接,\n则从 H 请求建立 TCP 连接时刻起,到 H 进入 CLOSED 状态为止,所需时间至少是( )

\n
A.30.03s
\n
B.30.04s
\n
C.60.03s
\n
D.60.04s
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第38题-解析\n\n\n\n

在 TCP 连接中,从建立连接到关闭连接的过程包括以下步骤:

  1. 建立链接:这个过程通常为称为 三次握手,SYN、SYN-ACK、ACK,需要一个往返时间 RTT。
  2. 数据传输:主机 H 向服务器发送长度为 3000B 的报文。由于最大报文段长度 MSS=1000B,第一\n次拥塞窗口为 1 发送 1000B,第二次拥塞窗口为 2 发送 2000B,所以一共消耗 2 个最长报文段寿\n命,2 个 RTT。
  3. 关闭连接:这个过程通常称为 四次挥手 FIN、ACK、FIN、ACK。

第一次挥手和第三次挥手构成一个 RTT,第二次和第三次是连续发送的,第四次发出去的时候和客户端等待的 2SL 时间重叠,所以需要 1 个 RTT。

所需时间 1RTT+2RTT+1RTT+2MSL=4RTT+2MSL。

将 RTT=10ms=0.01s 和 MSL=30s 代入上式,得到 60.04s。

\n\n\n\n\n", "difficulty": 0}, {"id": 744, "year": 2024, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第39题-题目\n\n\n\n

若 UDP 协议在计算校验和过程中,计算机得到中间结果为 1011 1001 1011 0110 时,还需要加上最后\n一个 16 位数 0110 0101 1100 0101,则最终计算得到的校验和是()

\n
A.0001 1111 0111 1011
\n
B.0001 1111 0111 1100
\n
C.1110 0000 1000 0011
\n
D.1110 0000 1000 0100
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第39题-解析\n\n\n\n

UDP 是一种传输层协议,UDP 校验和 计算的步骤如下:

将 UDP 首部和 UDP 数据字段合并成一个伪首部和一个伪数据字段。伪首部的内容包括源 IP 地址、目\n的 IP 地址、协议类型、UDP 数据长度。伪数据字段的内容 UDP 首部和数据字段本身。

对伪首部和伪数据字段进行 16 位的字节级求和,得到一个结果。

对结果进行反码运算,得到最终的校验和。

  1011 1001 1011 0110\n+ 0110 0101 1100 0101\n---------------------\n 10001 1111 0111 1011\n

最高位产生进位所以需要在末尾加 1,可得:0001111101111100。

取反可得:1110 0000 1000 0011

\n\n\n\n\n", "difficulty": 1}, {"id": 745, "year": 2024, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2024-第40题-题目\n\n\n\n

若浏览器不支持并行 TCP 连接,使用非持久的 HTTP/1.0 协议请求浏览 1 个 web 页,该页中引用同一\n个网站上 7 个小图像文件,则从浏览器传输 web 页请求建立 TCP 连接开始,到接收完所有内容为止,所\n需要的往返时间 RTT 数至少是()

\n
A.4
\n
B.9
\n
C.14
\n
D.16
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第40题-解析\n\n\n\n

参考 长连接和短连接,在 HTTP/1.0 协议中,如果浏览器不支持并行 TCP 连接,那么每个请求(包括主页面和每个图像文件)都需要单独建立一个 TCP 连接。每个 TCP 连接的建立都需要 1 个往返时间 RTT,因此,对于主页面和 7 个图像文件的请求,总共需要 8 个 RTT。此外,每个 TCP 连接在数据传输完成后都需要关闭,每个关闭连接也需要一个 RTT,共 8 个 RTT。所以从浏览器为传输 Web 页请求建立 TCP 连接开始,到接收完所有内容为所需要的往返时间 RTT 数至少是 8(建立连接)+8(关闭连接)= 16。
\n\n\n\n\n", "difficulty": 0}, {"id": 746, "year": 2024, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2024-第41题-题目\n\n\n\n

2023 年 10 月 26 日,神州十七号载人飞船发射取得圆满成功,再次彰显了中国航天事业的辉煌成就。载人航天工程是包含众多子工程的复杂系统工程,为了保证工程的有序开展,需要明确各子工程的前导工程。以协调各子工程的实施。该问题可以简化、抽象为有向图的拓扑序列问题。已如有向图 G 采用邻接矩阵存储,类型定义如下:

\n
typedef struct // 图的类型定义\n{\n    int numVertices, numEdges; // 图的顶点数和有向边数\n    char verticesList[MAXV];   // 项点表,MAXV 为以定义常量\n    int Edge[MAXV][MAXV];      // 邻接矩阵\n} MGraph\n
\n

请设计算法:int uniquely(MGraph G)。判定 G 是否存在唯一的拓扑序列,若是则返回 1,否则返回 0。要求:

\n

(1) 给出算法的基本设计思想(4 分)

\n

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

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第41题-解析\n\n\n\n

1)算法基本设计思想

输出拓扑序列的过程如下:依次从图中选取入度为 0 的点进行输出。

确保拓扑序列唯一需要保证如下条件:在输出拓扑序列时,每一次有且仅有一个入度为 0 的顶点。

所以这题最直观的思路就是进行 numEdges 轮遍历,如果每轮遍历只有一个顶点的入度为 0,则图中存在唯一的拓扑序列;\n否则不存在唯一的拓扑序列。

2)算法实现

int uniquely(MGraph g)\n{\n    int n = g.numVertices;\n    int inDegrees[MAXV];\n\n    /* 计算所有顶点的入度 */\n    for (int v = 0; v < n; v++) {\n        inDegrees[v] = 0;\n        for (int i = 0; i < n; i++) {\n            if (g.Edge[i][v] != 0)\n                inDegrees[v] += g.Edge[i][v];\n        }\n    }\n\n    /* 进行 n 轮拓扑删除 */\n    for (int k = 0; k < n; k++) {\n\n        int count0 = 0;   // 入度为 0 的顶点个数\n        int v0 = -1;      // 本轮唯一可以选择的顶点\n\n        /* 找所有入度为 0 的顶点 */\n        for (int i = 0; i < n; i++) {\n            if (inDegrees[i] == 0) {\n                count0++;\n                v0 = i;\n            }\n        }\n\n        /* 若不是唯一一个,则拓扑序列不唯一 */\n        if (count0 != 1) {\n            return 0;\n        }\n\n        /* “删除”该顶点:将其入度设为 -1,避免重复选取 */\n        inDegrees[v0] = -1;\n\n        /* 更新其所有后继节点的入度 */\n        for (int j = 0; j < n; j++) {\n            if (g.Edge[v0][j] != 0)\n                inDegrees[j]--;\n        }\n    }\n\n    /* 所有步骤都唯一,拓扑序唯一 */\n    return 1;\n}\n
\n\n\n\n\n", "difficulty": 3}, {"id": 747, "year": 2024, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2024-第42题-题目\n\n\n\n

将关键字\n20,3,11,18,9,14,7\n依次存储到长度为\n11\n的散列表\nHT\n中,散列函数为\nH(key)=(key×3)%11\n,\nH0\n为初始散列地址,\nH1​\n、\nH2​\n、\nH3​\n、\n⋯\n、\nHk​\n分别为第\n1\n次冲突、第\n2\n次冲突、第\n3\n次冲突、\n⋯\n、第\nk\n次冲突时探测的地址。\nHk​=(H0​+k2)%11\n。请回答下列问题:

\n

(1) 画出所构造的\nHT\n。并计算\nHT\n的域装因子(6 分)

\n

(2) 给出在\nHT\n中查找关键字 14 的关键字比较序列(2 分)

\n

(3) 在\nHT\n中查找关键字 8,确认查找失败时的散列地址是多少?(2 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第42题-解析\n\n\n\n

1)散列表 HT 如下:

散列地址0123456789101112
关键字11147209318
冲突次数1321211

装填因子等于散列表中已经被填充的位置的数量除以散列表的总长度,因此本题的填装因子是 7/11。

2)查找关键字 14 的比较序列:

  1. 首先,我们计算 14 的散列地址:\nH(14)=(14×3)%11=42%11=9\n。
  2. 我们查看散列表中索引为 9 的位置,发现哪里存储的是关键字 3,此时产生哈希冲突。
  3. 由于我们使用的是二次探查,所以计算下一个散列地址:\nH1​=(H0​+11)%11=(9+1)%11=10\n。\n发现那哪里存储的是关键字 18,再次遇到哈希冲突。
  4. 继续计算下一个散列地址:\nH2​=(H0​+22)%11=(9+4)%11=2\n,找到关键字 14,

3)查找关键字 8 失败时的哈希地址

  1. 计算 8 的散列地址:\nH(8)=(8×3)%11=24%11=2\n,索引为 2 的位置发现关键字 18,遇到冲突。
  2. 使用二次探查,计算下一个散列地址:\nH1​=(H0​+11)%11=(2+1)%11=3\n。索引为 3 的位置\n存储的是关键字 7,遇到冲突。
  3. 我们继续使用一次探查,计算下一个散列地址:\nH2​=(H0​+22)%11=(2+4)%11=6\n,索引为 6 的位置存储的是关键字 9,遇到冲突。
  4. 我们继续使用二次探查,计算下一个散列地址:\nH3​=(H0​+32)%11=(2+9)%11=0\n。索引为 0 的位置存储的是关键字 11,遇到冲突。
  5. 我们继续使用二次探查,计算下一个散列地址:\nH4​=(H0​+42)%11=(2+16)%11=7\n,发现索引为 7 的位置是空的,确认查找失败,散列地址是 7。
\n\n\n\n\n", "difficulty": 1}, {"id": 748, "year": 2024, "index": 43, "type": 2, "typeName": "应用题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2024-第43题-题目\n\n\n\n

假定计算机 M 字长为 32 位。按字节编址,采用 32 位定长指令字,指令 add slli 和 lw 的格式、编码和功能说明如题 43(a) 图所示。

\n
\n\n\n\n \n 408真题系统\n \n\n
000 0000
rs2
rs1
000
rd
011 0011
000 0000
shamt
rs1
010
rd
001 0011
imm
rs1
010
rd
000 0011
add 指令
slli 指令
lw 指令
二进制位序
31 ~ 25
24 ~ 20
19 ~ 15
14 ~ 12
11 ~ 7
6 ~ 0
R[rd] ← R[rs1] + R[rs2]
R[rd] ← R[rs1] << shamt
R[rd] ← M[R[rs1]+imm]
  指令功能说明
\n

其中 R[x] 表示通用寄存器 x 的内容,M[x] 表示地址为 x 的存储单元内容,shamt 为移位位数,imm 为补码表示的偏移量。题 43(b) 图给出了计算机 M 的部分数据通路及其控制信号(用箭头虚线表示),其中,A 和 B 分别表示从通用寄存器 rs1 和 rs2 中读出的内容,IR[31:20] 表示指令寄存器中的高 12 位。控制信号 Ext 为 0、1 时扩展器分别实现零扩展,符写扩展 ALUctr 为 000、001、010 时 ALU 分别实现加、减、逻辑左移运算。

\n
\n\n
ALU
多路选择器
MUX
扩展器
ALUBsrc
  000:加
  001:减
  010:逻辑左移
  · · ·
  0:零扩展
  1:符号扩展
32
32
A
B
ALUctr
32
32
B
12
Ext
IR[31:20]
ZF
OF
SF
CF
F
0
1
32
3
\n

请回答下列问题

\n

(1) 计算机 M 最多有多少个通用寄存器?为什么 shamt 字段占 5 位?(2 分)

\n

(2) 执行 add 指令时,控制信号 ALUBsrc 的取值应该是什么?若 rs1 和 rs2 寄存器内容分别是 8765 4321H 和 9876 5432H,则 add 指令执行后,ALU 输出端 F、OF 和 CF 的结果分别是什么?若设 add 指令处理的是无符号整数,则应根据哪个标志判断是否溢出(3 分)

\n

(3) 执行 slli 指令时,控制信号 Ext 的取值可以是 0 也可以是 1,为什么?(2 分)

\n

(4) 执行 lw 指令时,控制信号 Ext、ALUctr 的取值分别是什么?(2 分)

\n

(5) 若一条指令的机器码是 A040 A103H,则该指令一定是 lw 指令,为什么?(2 分)

\n

(6) 若执行该指令时,R[01H]=FFFF A2D0H,则所读取数据的存储地址是多少?(2 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第43题-解析\n\n\n\n

1)从 43 题 (a) 图可以看到,Y 寄存器 rs1 和 rs2 用 5 位表示,所以计算机 M 最多的是 2⁵=32 个寄存器。根据指令 R[rd] ← [rs1] << shamt 可知,shamt 表示左移。

shamt:计算机的机器字长是 32 位,所以 shamt 表示左移的最大范围不能超过 32,所以只需要\n5bit 就可以表示对应的范围:\nlog2​32=5\n。

2)ALUBsrc = 0,它的作用是支持 lw 指令和 imm 的偏移(R[rd] ← M[R[rs1]+imm])

F 的计算如下:

  8765 4321\n+ 9876 5432\n------------\n 11FDB 9753\n

由于计算机的机器字长是 32 位,所以最高位的 1 舍掉,F = 1FDB 9753H:

OF 是溢出位,我们计算的结果发现确实发生了溢出和进位,所以 OF=1。

CF 是进位位,计算时发现了最高位有进位,所以 CF=1。

溢出的判断方法是,最高位进位(异或)次高位,计算过程发现最高位进位,次高位没有进位,所以 CF 是标志判断是否溢出。

3)slli 代表左移指令,slli 指令的高 12 位(即 IR[31:20])的最高位为 0,因此无论进行零扩展还是符号扩展,都是在高位补 0,效果等价,因此 Ext 可以是 0 也可以是 1。

4)R[rd] ← M[R[rs1]+imm] 这条指令的意思是,rs1 里的内容加上立即数,等于真正要访问的内存地址。

计算偏移地址,偏移地址可正可负,应该使用补码表示。

所以是符号扩展,Ext=1,然后表示加法,所以根据 (b) 图可知 ALUctr=000。

5)A040 A103H = 1010 0000 0100 0000 1010 0001 0000 0011B,60 位 = 0000011,中间的 1412 位 = 010,\n最高的 12 位为 A04H。其他两个指令 add 和 slli 的高 12 位都是 000H,所以该指令一定是 lw 指令。

6)A040 A103H = 1010 0000 0100 0000 1010 0001 0000 0011B,60 位 = 000 0011,中间的 1412 位 = 010,\n最高的 12 位为 A04。imm 是 31~25,也就是 A404 组(注意是符号扩展)

扩展完 1111 1111 1111 1111 1111 1010 0000 0100,十六进制是 FFFF FA04。rs1 里的内容加上立即数,等于真正要访问的内存地址,R[O1H]=FFFF A2DOH,所以 FFFFFA04 + FFFFA2D0 = FFFF9CD4H。

\n\n\n\n\n", "difficulty": 0}, {"id": 749, "year": 2024, "index": 44, "type": 2, "typeName": "应用题", "score": 10, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第44题-题目\n\n\n\n

对于题 43 中的计算机 M,C 语言程序 P 包含的语句 sum+=a[i];,在 M 中对应的指令序列 S 如下:

\n

已知变量 i,sum 和数组 a 都为 int 型,通用寄存器 r1 - r5 的编号为 01H-05H。请回答下列问题。

\n

(1)根据指令序列 s 中每条指令的功能,写出存放数组 a 的首地址、变参 i 和 sum 的通用寄存器编号(3 分)

\n

(2)已知 M 为小端方式,计算机采用页式存储管理方式。页大小为 4KB。若执行到指令序列 s 中第 1 条指令时,i=5 且 r1 和 r3 的内容分别为 0000 1332H 和 0013 DFF0H。从地址 0013 DFF0H 开始存储单元内容如题 44 图所示。则执行 sum+=a[i]; 语句后。a[i] 的地址、a[i] 和 sum 的机器数分别是什么(用十六进制表示)?a[i] 所在页的页号是多少?在此次执行中,数据组 a 至少存放在几页中?(5 分)

\n
\n\n\n\n \n 408真题系统\n \n\n
地址
0013
DFF0
0
1
2
3
4
5
6
7
FF
FF
FF
7C
70
FE
FF
FF
0013
DFF8
00
00
00
0C
3C
02
01
FF
0013
E000
F0
F1
00
00
DC
EC
FF
FF
0013
E008
FF
FF
01
02
00
00
01
02
\n

(3)指令 slli r4, r2, 2 的机器码是什么(用十六进制表示)?若数组 a 改为 short 类型,则指令序列存到 S 中 slli 指令的汇编形式应是什么?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第44题-解析\n\n\n\n

【答案】

1)a 的首地址存放在 r3;i 存放在 r2;sum 存放在 r1。

2)a[i] 的地址为 0013 E004H;a[i] 的机器数为 FFFF ECDCH;sum 的机器数为 0000 000EH;a[i] 所在页的页号是 0013EH;数组 a 至少存放在 2 页中。

3)指令机器码为 0021 2213H。汇编形式是 slli r4, r2, 1。

【解析】

1)add r4,r3,r4:这条指令将寄存器 r3 和 r4 的值相加,结果存储在寄存器 r4 中。这对应于计算数组元素的内存地址(即&a[i])。因此,我们可以推断出寄存器 r3 存储的是数组 a 的首地址,即 a 的寄存器编号为 03H。

slli r4,r2,2:这条指令将寄存器 r2 的值左移 2 位,2 结果存储在寄存器 r4 中。在 C 语言中,这对应于数组索引的计算(即 i*4,因为每个 int 类型占 4 字节)。因此,我们可以推断出寄存器 r2 存储的是变量 i 的值,即的寄存器编号位 02H。

add r1,rl,r5:这条指令将寄存器 r1 和 r5 的值相加,结果存储在寄存器 r1 中。这对应于累加操作(即 sum+=a[i])。因此,我们可以推断出寄存器 r1 存储的是变量 sum 的值,即 sum 的寄存器编号为 01H。

所以,数组 a 的首地址、变量 i 和 sum 的通用寄存器编号分别为 03H、02H 和 01H。

2)执行 sum+=a[i] 语句后,i 保持不变即 i = 5,每个数组元素占用四个字节

所以 a[i] 的地址 = 首地址 + 偏移量 = 0013 E000 + 4 * (5-1) = 0013 E004H。

a[i]的机器数按照小端编址,所以 DC 作为最低位放在最右边,以此类推可得:a[i] 的机器数 = FFFF ECDCH。

sum 的机器数 = 0000 1332H + FFFF ECDCH = (1) 0000 000EH。由于只有 32 位,所以最高位舍掉后答案为 0000 000EH。

页大小为 4KB =\n212\nB,所以页内地址占 12 位,去掉后 12 位剩余的则是 20 位页号,a[i] 所在页页号 = 0013EH。

我们有 20 位页号,根据题目可知数组跨页号了 0013E 和 0013D,所以数组 a 至少存放在 2 页中。

3)slli r4,r2,2 // R[r4]←R[r2]<<2

通用寄存器 r1→r5 的编号位 01H→05H。

机器码 = 0000 0000 0010 0001 0010 0010 0001 0011B = 0021 2213H。

若 a 改为 short 类型,slli 指令的汇编形式应该是 slli r4, r2, 1。

\n\n\n\n\n", "difficulty": 1}, {"id": 750, "year": 2024, "index": 45, "type": 2, "typeName": "应用题", "score": 7, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第45题-题目\n\n\n\n

某计算机按字节编址,采用页式虚拟存储管理方式,虚拟地址和物理地址的长度均为 32 位,页表项的大小为 4 字节,页大小为 4MB,虚拟地址结构如下:

\n
\n\n\n\n \n 408真题系统\n \n\n
页号(10 位)
页内偏移量(22 位)
\n

进程 Р 的页表起始虚拟地址为 B8C0 0000H,被装载到从物理地址 6540 0000H 开始的连续主存空间中。请回答下列问题:

\n

(1)若 CPU 在执行进程 P 的过程中,访问虚拟地址 1234 5678H 时发生了缺页异常,经过缺页异常处理和 MMU 地址转换后得到的物理地址是 BAB4 5678H。在此次缺页异常的处理中,需要为新缺页分配页框并更新相应的页表项,则该页表项的虚拟地址和物理地址分别是什么?该页表项中的页框号更新后的值是什么?(3 分)

\n

(2)进程 P 的页表所在页的页号是什么?该页对应的页表项的虚拟地址是什么?该页表项中的页框号是多少?(4 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第45题-解析\n\n\n\n

1)首先,我们需要确定虚拟地址 12345678H 对应页号。由于页号占 10 位,\n1234 5678H = 0001 0010 0011 0100 0101 0110 0111 1000B。

计算得到:

页内偏移量(22 位)= 11 0100 0101 0110 0111 1000B = 345678H

页号(10 位)= 00 0100 1000B = 048H

然后,我们需要找到这个页号对应的页表项的虚拟地址和物理地址。由于页表项的大小为字节,我们可以通过将页号乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到页表项的虚拟地址和物理地址。进程 P 的页表起始虚拟地址为 B8C0 0000H,物理地址 654 0000H。

计算得到:页表项虚拟地址 = 页表起始虚拟地址 + 页号×4 = B8C00000H + 048H×4 = B8C00120,页表项物理地址 = 页表起始物理地址 + 页号×4 = 65400000H + 048H×4 = 65400120H。

最后,我们需要更新页表项中的页框号。由于经过 U 地址转换后得到的物理地址是 BAB4 5678H,我们可以通过右移 22 位得到页框号。

计算得到:页框号 = 物理地址 BAB45678H 的前 10 位,即 10 1110 1010B = 2EAH。

2)首先,我们需要确定进程即的页表所在页的页号。由于页表起始虚拟地址位 B8C00000H,我们可以通过右移 22 位得到页号。

计算得到:

进程 P 的页表所在页的页号等于 B8C0 0000 的前 10 位,即 10 1110 0011B = 2E3H。\n然后,我们需要找到这个页号对应的页表项的虚拟地址。由于页表项的大小为 4 字节,我们可以通过将页号\n乘以 4 得到页表项的偏移量。然后将这个偏移量加到页表的起始地址上,就可以得到顷表项的虚拟地址。

计算得到:

该页对应的页表项的虚拟地址 = B8C0 0000H + 2E3H*4 = B8C0 0B8CH。

最后,我们需要确定贡表项中的页框号。由于页表被装在到从物理地址 65400000 开始的连续主存空间中,我们可以通过右移 22 位得到页框号。

计算得到:

该页表项中的页框号等于物理地址 6540 0000H 的前 10 位,即 01 1001 0101B = 195H。

\n\n\n\n\n", "difficulty": 1}, {"id": 751, "year": 2024, "index": 46, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2024-第46题-题目\n\n\n\n

计算机系统中的进程之间往往需要相互协作以完成一个任务,在某网络系统中缓冲区 B 用于存放一个数据分组,对 B 的操作有 C1、C2 和 C3。C1 将一个数据分组写入 B 中,C2 从 B 中读出一个数据分组,C3 对 B 中的数据分组进行修改。要求 B 为空时才能执行 C1,B 非空时才能执行 C2 和 C3。请回答下列问题。

\n

(1)假设进程 P1 和 P2 均需执行 C1,实现 C1 的代码是否为临界区?为什么?(2 分)

\n

(2)假设 B 初始为空,进程 P1 执行 C1 一次,进程 P2 执行 C2 一次。请定义尽可能少的信号量。并用 wait(),signal() 操作描述进程 P1、P2 之间的同步或互斥关系,说明所用信号量的作用及初值。(3 分)

\n

(3)假设 B 初始不为空,进程 P1 和 P2 各执行 C3 一次,请定义尽可能少的信号量。并用 wait()、signal() 操作描述进程 P1 和 P2 之间的同步或互斥关系,说明所用信号量的作用及初值。(3 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第46题-解析\n\n\n\n

1)是的,实现 C1 的代码可以被视为临界区。临界区是指在并发编程中,当多个进程同时访问和修改共享数据时,必须进行互斥访问的代码区域。在这个例子中,进程 P1 和 P2 都需要执行 C1,即它们都需要将一个数据分组写入缓冲区 B。如果这两个进程同时执行 C1,那么它们可能会试图同时写入数据分组,这可能会导致数据的不一致性。因此,我们需要确保在任何时刻,只有一个进程可以执行 C1。这就需要将执行 C1 的代码区域定义为临界区,并使用适当的同步机制(如互斥锁或信号量)来保证在同一时刻只有个进程可以进入临界区。所以,实现 C1 的代码是临界区,因为它涉及到对共享资源(在这里是缓冲区 B) 的修改,而这个修改需要被同步,以防止数据的不一致性。

2)在这个问题中,我们可以使用两个信号量:一个用于保护缓使区 B(我们称之为 mutex),另一个用于同步进程 PI 和 P2(我们称之为 full)。mutex 用于确保在同一时刻只有一个进程可以访问缓冲区 B,而 full 用于表示缓冲区 B 是否已满。

初始时,mutex 的值为 1,表示缓冲区 B 是可用的:fu1I 的值为 0,表示缓冲区 B 是空的。

以下是进程 P1 和 P2 的代码:

semaphore mutex = 1;\nsemaphore full = 0;\n\n// 进程 P1\nP1() {\n    wait(mutex);    // 请求访问缓冲区 B\n    执行 C1,将一个数据分组写入 B 中\n    signal(mutex);  // 释放缓冲区 B 的使用权\n    signal(full);   // 表示缓冲区 B 已满\n}\n\n// 进程 P2\nP2() {\n    wait(full);     // 等待缓冲区 B 变满\n    wait(mutex);    // 请求访问缓冲区 B\n    执行 C1,从 B 中读出一个数组分组\n    signal(mutex);  // 释放缓冲区 B 的使用权\n}\n

在这个代码中,wait() 操作表示请求一个信号量,如果信号量的值大于 0,那么就将其减 1:如果信号量的值为 0,那么就阻塞,直到信号量的值大于 0。signal() 操作表示释放一个信号量,将其值加 1。

3)在这个问题中,我们可以使用一个信号量:一个用于保护缓冲区 B(我们称之为 mutex)。mutex 用于确保在同一时刻只有一个进程可以访问缓冲区 B。初始时,mutex 的值为 1,表示缓冲区 B 是可用的。以下是进程 P1 和 P2 的代码:

semaphore mutex=1;\n\n// 进程 P1\nP1() {\n    wait(mutex);     // 请求访问缓冲区 B\n    执行 C3,对 B 中的数据分组进行修改\n    signal(mutex);   // 释放对缓冲区 B 的访问\n}\n// 进程 P2\nP2() {\n    wait(mutex);     // 请求访问缓冲区 B\n    执行 C3,对 B 中的数据分组进行修\n    signal(mutex);   // 释放对缓冲区 B 的访问\n}\n

在这个代码中,wait() 操作表示请求一个信号量,如果信号量的值大于 0,那么就将其减 1;如果信号量的值为 0,那么就阻塞,直到信号量的值大于 0。signal() 操作表示释放一个信号量,将其值加 1。

所以,实现 C3 的代码是临界区,因为它涉及到共享资源(在这里是缓冲区 B)的修改,而这个修改需要被同步,以防止数据的不一致性。

\n\n\n\n\n", "difficulty": 3}, {"id": 752, "year": 2024, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "computer-network", "question": "\n\n\n\n\n\n2024-第47题-题目\n\n\n\n

网络空间是继陆海空地之后的\"第五疆域\",网络技术是网络疆域建设与治理的基础。路由算法与协议是网络核心技术之一。对其准确认知,合理选择与应用,对网络建设十分重要。假设现有互联网中的 4 个自治系统互连拓扑示意图如题 47 图所示。其中,AS1 运行内部网关协议 RIP;AS3 规模较小,自治系统内任意两个主机间通信,经过路由器数不超过 15 个;AS4 规模较大,自治系统内任意两个主机间通信,经过路由器数量可能超过 20 个。

\n
\n\n\n\n \n 408真题系统\n \n\n
R11
R12
R13
R14
R15
R16
R33
AS1
210.2.3.0/24
210.2.4.0/24
R22
R44
AS2
AS3
AS4
内部网关协议:RIP
136.5.16.0/20
\n

请回答下列问题:

\n

(1)若仅有 RIP 和 OSPF 内部网关协议供选择,则 AS4 应选择哪个协议?(1 分)

\n

(2)若 AS3 中的某主机向本自治系统另一主机发送 1 个 IP 分组,为确保该 IP 分组能正常接收,则该 IP 分组的初始 TTL 值应至少设置为多少?(1 分)

\n

(3)设 AS1 中的路由器同一时刻启动,启动后立即构建并交换初始距离向量,之后,每隔 30s 交换一次最新的距离向量。则从交换初始距离向量时刻算起,R11~R16 路由器均获到达网络 210.2.4.0/24 的正确路由,至少需多长时间?(2 分)

\n

(4)R44 向 R13 通告到达网络 136.5.16.0/20 路由时,由 BGP 协议哪类会话完成?通过哪个 BGP 报文通告?R13 通过 BGP 协议的哪类会话将该网络可达性信息通告给 R14 和 R15?(3 分)

\n

(5)若 R14 和 R15 均收到分别由 R11、R12、R13 通告的到达网络 136.5.16.0/20 的可达性信息为:

\n

目的网络:136.5.16.0/20,AS 路径:AS2 AS8 AS19,下一跳:R11

\n

目的网络:136.5.16.0/20,AS 路轻:AS3 AS7 AS11 AS19,下一跳:R12

\n

目的网络:136,5.16.0/20,AS 路径:AS4 AS10 AS19,下一跳:R13

\n

则在无策略约束情况下,R14 和 R15 更新路由表后,各自路由表中到达网络 136.5.16.0/20 路由的下一跳分别是什么(用路由器名称表示)?(2 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2024-第47题-解析\n\n\n\n

1)AS4 应选择 OSPF 协议。理由:

因此,AS4 应选择 OSPF 作为内部网关协议。

2)应该被设置为 16。

AS3 内部任意两个主机之间通信,最多需要经过 15 个路由器。

TTL(Time To Live)值在每经过一个路由器时减 1,若 TTL 变为 0,分组将被丢弃。因此,为了确保 IP 分组能够到达目标主机,初始 TTL 至少应设置为 16,这样即使经过 15 个路由器,TTL 仍剩 1,可以成功到达目标主机。

3)AS1 运行的是 RIP(Routing Information Protocol),采用 距离向量路由算法,每 30 秒 交换一次最新的距离向量,并使用 逐跳扩散(Bellman-Ford 算法)更新路由表。

假设网络 210.2.4.0/24 最初只被某个路由器(如 R1)知道,其他路由器需要逐步学习该路由信息。

每次 RIP 更新,信息只能传播 1 跳,即相邻路由器在下一次交换后获得该路由。

直到 R11~R16 均获得正确路由时,最好情况下至少需要经历 2 跳(从 R14 出发,经过 2 个周期传播至每个路由器)。

每次传播耗时 30 秒,则 2 跳需要 2 × 30 = 60 秒。

4)如果路由器属于不同的自治系统,它们之间运行 eBGP(External BGP)进行路由通告。\n如果路由器属于同一个自治系统,它们之间运行 iBGP(Internal BGP)来传播外部学到的 BGP 路由信息。

在 BGP 中,路由更新信息使用 UPDATE(更新)报文 进行通告,包含 网络前缀(136.5.16.0/20)及其路径属性(如 AS Path、下一跳等)。

R44 → R13:通过 eBGP 会话,使用 UPDATE 报文通告路由信息。

R13 → R14, R15:通过 iBGP 会话,使用 UPDATE 报文通告路由信息。

5)在 BGP(边界网关协议)中,默认情况下,路由选择遵循以下决策过程(无策略约束时):

  1. 最短 AS 路径优先(首要准则):BGP 会优先选择 AS 路径最短 的路由。
  2. 若 AS 路径相同,则选取最小的下一跳路由 ID(RID)或基于其他 BGP 规则。

分析 R14 和 R15 的可选路由:

下一跳AS 路径路径长度
R11AS2 AS8 AS193
R12AS3 AS7 AS11 AS194
R13AS4 AS10 193

R11 和 R13 的 AS 路径长度均为 3,比 R12(路径长度 4)更短,因此 R12 的路由会被排除。

R14 离 R11 更近,R15 离 R13 更近。\n所以 R14 的下一跳为 R11,R15 的下一跳为 R13。

\n\n\n\n\n", "difficulty": 0}, {"id": 753, "year": 2025, "index": 1, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\r\n\r\n\r\n\r\n\r\n\r\n2025-第1题-题目\r\n\r\n\r\n\r\n

以下 C 代码的时间复杂度是( )。

\r\n
int count = 0;\r\nfor (int i=0; i*i<n; i++)\r\n    for (int j=0; j<i; j++)\r\n        count++;\r\n
\r\n
A.O(log2​n)
\r\n
B.O(n)
\r\n
C.O(nlog2​n)
\r\n
D.O(n2)
\r\n\r\n\r\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第1题-解析\n\n\n\n

外层循环的条件是\ni2<n\n,因此 i 的最大值为\nn​\n。内层循环的的次数同样与 i 相同。所以总的循环次数为\nn​n​=n\n,时间复杂度为\nO(n)\n。
\n\n\n\n\n", "difficulty": 1}, {"id": 754, "year": 2025, "index": 2, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第2题-题目\n\n\n\n

对于括号匹配问题,符号栈初始为空,容量为 3,下列表达式不能实现的是( )。

\n
A.(a+[b+(c+d)e]+f)+g-h
\n
B.[a*((b+c)/(d-e)+f/g)]-h
\n
C.[a*(b-(c-d)*e/(f+g))-h]
\n
D.[a-(b+[c*(d+e)-f]+g+h)]
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第2题-解析\n\n\n\n

栈的容量为 3,意味着在任何时候,栈中的元素数量不能超过 3。需要选择一个在某些时刻栈的深度超过 3 的表达式。通过分析各个选项的嵌套深度,可以发现:

\n\n\n\n\n", "difficulty": 1}, {"id": 755, "year": 2025, "index": 3, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第3题-题目\n\n\n\n

若二叉树的节点值均为正整数,采用顺序存储方式保存在数组 R 中,用 -1 表示节点不存在,则下列数组中,不能表示一棵二叉树的是()。

\n
A.R[] = {20, 15, 40, -1, -1, 35}
\n
B.R[] = {15, 40, 10, 18, 35, -1, -1}
\n
C.R[] = {15, 40, 10, -1, -1, -1, 12}
\n
D.R[] = {17, 20, 35, -1, 18, 45, -1, -1, 19, 27}
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2025-第3题-解析\r\n\r\n\r\n\r\n

在二叉树的顺序存储表示中,数组中的每个位置对应二叉树中特定节点。若节点值非负(-1 表示不存在),则非 -1 节点的父节点必须存在(根节点除外)。
对于选项 D,索引 8 处的节点值为 19,其父节点索引为 3(由公式\r\n⌊(8−1)/2⌋=3\r\n计算),但索引 3 处的值为 -1,即父节点不存在,违反了二叉树顺序存储的规则。因此,选项 D 不能表示一棵二叉树。

\"\"

其他选项均满足每个非 -1 节点(除根节点)都有存在的父节点,是有效的二叉树顺序存储表示。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 1}, {"id": 756, "year": 2025, "index": 4, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第4题-题目\n\n\n\n

下列关于二叉树及森林的叙述中,正确的是?( )。

\n
A.完全二叉树不存在度为 1 的结点
\n
B.任意一个森林可以转换为一棵二叉树。
\n
C.二叉树的分支结点个数比叶结点个数少
\n
D.链式树的根中保存的是最先计算的运算符
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第4题-解析\n\n\n\n

完全二叉树中,度为 1 的结点可能存在。比如一颗完全二叉树只有两个结点,那么根结点的度就是 1。A 选项错误。

森林转二叉树 有固定的方法,B 选项正确。

\n\n\n\n\n", "difficulty": 1}, {"id": 757, "year": 2025, "index": 5, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第5题-题目\n\n\n\n

设字符集 S 包含 7 个字符,各字符出现的频次分别是 2, 3, 4, 6, 8, 10, 11。\n为 S 中的各字符构造哈夫曼编码,编码长度不小于 3 的字符个数是( )。

\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第5题-解析\n\n\n\n

按照 哈夫曼树 构造:频次为 2, 3, 4, 6, 8, 10, 11

  1. 合并 2 + 3 = 5
  2. 合并 4 + 5 = 9
  3. 合并 6 + 8 = 14
  4. 合并 9 + 10 = 19
  5. 合并 11 + 14 = 25
  6. 合并 19 + 25 = 44 (根)

可以得到以下二叉树:

        44\n      /    \\\n    19      25\n   /  \\    /  \\\n  9    10 11  14\n / \\          / \\\n4   5        6   8\n   / \\\n  2   3\n

编码长度不小于 3 的字符:2, 3, 4, 6, 8。一共有 5 个字符编码长度不小于 3,正确答案为 D。

\n\n\n\n\n", "difficulty": 1}, {"id": 758, "year": 2025, "index": 6, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第6题-题目\n\n\n\n

下列关于图的叙述中,正确的是( )。

\n
A.有向图必定存在入度为 0 的顶点
\n
B.有向无环图的拓扑排序有序序列存在且唯一
\n
C.各顶点的度均大于等于 2 的无向图必有回路
\n
D.可用 BFS 算法求出带权图中的每一对顶点的最短路径
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第6题-解析\n\n\n\n

逐个选项来看:

\n\n\n\n\n", "difficulty": 1}, {"id": 759, "year": 2025, "index": 7, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第7题-题目\n\n\n\n

已知查找表中有 400 个元素,查找元素概率相同。采用分块查找法且均匀分块。若采用顺序查找法确定元素所在块,且块内也采用顺序查找法,为效率最高,每块包含元素应为( )。

\n
A.8
\n
B.10
\n
C.20
\n
D.25
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第7题-解析\n\n\n\n

设块大小为\nm\n,块数为\nmn​\n。查找复杂度为\nO(n/m+m)\n。

根据高中数学的知识可以得知,\nm=n​=20\n时,查找复杂度最低,所以\nm=20\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 760, "year": 2025, "index": 8, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第8题-题目\n\n\n\n

给 7 个不同的关键字,能够构成不同 4 阶 B 树的个数为( )。

\n
A.7
\n
B.8
\n
C.9
\n
D.10
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第8题-解析\n\n\n\n

综上,共计 9 种可能的结构。

\n\n\n\n\n", "difficulty": 1}, {"id": 761, "year": 2025, "index": 9, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第9题-题目\n\n\n\n

下列关于散列法处理冲突的叙述中,正确的是( )。

\n
A.只要散列表不满,线性探查再散列一定能找到一个空闲位置
\n
B.只要散列表不满,二次探查再散列一定能找到一个空闲位置
\n
C.线性探查再散列处理的冲突,一定是发生在同义词之间
\n
D.二次探查再散列处理的冲突,一定是发生在非同义词之间
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第9题-解析\n\n\n\n

在散列(哈希)方法中,同义词 是指不同的元素通过哈希函数映射到同一个哈希值(或哈希地址)。这意味着这些元素在散列表中会发生冲突,因为它们试图占用相同的位置。

非同义词 指的是通过哈希函数映射到不同哈希值的元素,它们通常不会在初始哈希地址上发生冲突。

对于题目中的选项:

A. 只要散列表不满,线性探查再散列一定能找到一个空闲位置。

线性探查是在发生冲突时,按顺序查找下一个可用位置。例如,如果发生冲突,就逐一检查下一个位置,直到找到空闲位置。只要散列表有空位,线性探查一定能找到一个空闲位置。因此,这个选项是正确的。

B. 只要散列表不满,二次探查再散列一定能找到一个空闲位置。

二次探查是通过二次函数(如平方)来决定下一个检查的位置。虽然理论上在某些情况下可能会更快找到空位,但由于散列表的装填因子和特定的探查序列,可能会有探查不到空闲位置的情况,因此这个选项不一定总是正确。

C. 线性探查再散列处理的冲突,一定是发生在同义词之间。

线性探查处理的冲突可能发生在同义词之间(即初始哈希值相同的元素),但也可能发生在非同义词之间(即由于探查过程而导致的冲突)。因此,这个选项是不正确的。

D. 二次探查再散列处理的冲突,一定是发生在非同义词之间。

二次探查可能会导致同义词和非同义词之间的冲突。因此,这个选项是不正确的。

\n\n\n\n\n", "difficulty": 1}, {"id": 762, "year": 2025, "index": 10, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第10题-题目\n\n\n\n

下列排序算法中,最坏情况下元素移动最少的是( )。

\n
A.冒泡排序
\n
B.直接插入排序
\n
C.快速排序
\n
D.简单选择排序
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第10题-解析\n\n\n\n

排序算法的元素移动次数参考 此节,其中简单选择排序迭代 n 轮,每次确定一个元素的最终位置,元素移动次数平均为\nO(n)\n。
\n\n\n\n\n", "difficulty": 2}, {"id": 763, "year": 2025, "index": 11, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第11题-题目\n\n\n\n

对含 9 个关键字的初始序列进行排序,若序列的变化情况如下表所示,则下列排序算法中,采用的是( )。

\n
初始序列5, 25, 40, 30, 10, 20, 45, 15, 35
第 1 趟排序后的序列5, 10, 20, 30, 15, 35, 45, 25, 40
第 2 趟排序后的序列5, 10, 15, 25, 20, 30, 40, 35, 45
\n
A.希尔排序
\n
B.基数排序
\n
C.归并排序
\n
D.折半插入排序
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第11题-解析\n\n\n\n

第一次排序后,下标相差 3 的子序列有序。第二次排序后,下标相差 2 的子序列有序。由此判断是希尔排序。
\n\n\n\n\n", "difficulty": 1}, {"id": 764, "year": 2025, "index": 12, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第12题-题目\n\n\n\n

在 32 位计算机上执行下列 C 语言代码:

\n
short si = -32767\nunsigned int ui = si;\n
\n

则 ui 的真值为( )。

\n
A.215−1
\n
B.215+1
\n
C.232−215−1
\n
D.232−215+1
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第12题-解析\n\n\n\n

本题考察 无符号数 和 有符号数 的补码表示。

16 位的 short 类型的 -32767 的二进制表示为 1000 0000 0000 0001,将其转化为 32 位的 unsigned 时,需要在最高位扩展 16 位。由于 -32767 (short) 的最高位为 1,所以扩展的高位全部为 1。

由此得到 32 位的 unsigned 的二进制是 1111 1111 1111 1111 1000 0000 0000 0001,其值为\n1+215+216+⋯+231=232−215+1\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 765, "year": 2025, "index": 13, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第13题-题目\n\n\n\n

已知 float 型变量用 IEEE754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 4730 0000H;则 x 的值为( )。

\n
A.0.375×214
\n
B.1.375×214
\n
C.0.375×215
\n
D.1.375×215
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第13题-解析\n\n\n\n

本题考察 IEEE 单精度浮点数表示。首先将十六进制转化为二进制:0100 0111 0011 0000 0000 0000 0000 0000。

然后从中分解符号位、指数位和尾数位:

计算阶码:\n1×27+0×26+0×25+0×24+1×23+1×22+1×21+0×20=128+8+4+2=142\n。

计算尾数:\n1×20+0×2−1+1×2−2+1×2−3=1+0+0.25+0.125=1.375\n。

计算浮点数的值:\n(−1)符号位×尾数×2指数=1×1.375×215

\n\n\n\n\n", "difficulty": 1}, {"id": 766, "year": 2025, "index": 14, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第14题-题目\n\n\n\n

假设 8 位字长的计算机中,两个带符号整数 x 和 y 的补码表示分别为\nx补​=A3H\n,\ny补​=75H\n,则通过补码加减运算器得到的 x-y 的值及 OF 标志分别为( )。

\n
A.24, 0
\n
B.24, 1
\n
C.46, 0
\n
D.46, 1
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第14题-解析\n\n\n\n

x 的补码二进制表示为 1010 0011。y 的补码二进制表示为 0111 0101。

x-y = x+(-y) = 1010 0011 + 1000 1011 = 0010 1110 = 32 + 8 + 4 + 2 = 46.

二进制加法时最高位有进位,所以 OF = 1。

\n\n\n\n\n", "difficulty": 1}, {"id": 767, "year": 2025, "index": 15, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第15题-题目\n\n\n\n

某 32 计算机按字节编址,采用小端方式存放数据,编译器按边界对齐方式为下列 C 语言结构型数组变量 employce 分配储存空间。

\n
struct record {\n    int id;\n    char name[10];\n    int salary;\n} employee[200];\n
\n

数组 employee 的起始地址为 0000A0B0H,employee[1].id 的机器数为 12345678H,问 56H 的地址是多少?( )。

\n
A.0000 A0C3H
\n
B.0000 A0C4H
\n
C.0000 A0C5H
\n
D.0000 A0C6H
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第15题-解析\n\n\n\n

在 小端方式 下,数据的存放顺序是从最低有效字节到最高有效字节。例如,对于一个 4 字节的整数 12345678H,存放顺序为 78H 56H 34H 12H。

首先,我们需要计算 struct record 的大小。根据定义:

总共需要 18 字节。然而,由于编译器按 边界对齐 方式分配存储空间,通常会对齐到最接近的 4 字节边界。因此,struct record 实际上会占用 20 字节(因为 18 需要向上对齐到 20)。

数组 employee 的起始地址为 0000A0B0H。employee[1] 的起始地址为 0000A0B0H + 20 = 0000A0C4H

在 employee[1] 中,id 的值为 12345678H,存储在小端模式下:

因此,56H 的地址是 0000A0C5H。

\n\n\n\n\n", "difficulty": 1}, {"id": 768, "year": 2025, "index": 16, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第16题-题目\n\n\n\n

下列选项中,由指令体系结构(ISA)规定的是( )。

\n
A.是否采用阵列乘法器
\n
B.是否采用定长指令字格式
\n
C.是否采用微程序控制器
\n
D.是否采用单总线数据通路
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第16题-解析\n\n\n\n

指令体系结构主要规定的是计算机系统中硬件和软件之间的接口,即指令的格式、操作码、操作数及寻址方式等。ISA 是软件开发人员和编译器设计者需要了解的部分,而硬件实现的具体细节通常由计算机体系结构的实现部分决定,而不是由 ISA 直接规定。

选项中:

\n\n\n\n\n", "difficulty": 1}, {"id": 769, "year": 2025, "index": 17, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第17题-题目\n\n\n\n

下列关于 RISC 的叙述中,错误的是( )。

\n
A.多采用硬连线方式实现控制器
\n
B.通常采用 Load/Store 型指令设计风格
\n
C.难以采用流水线数据通路实现微架构
\n
D.多采用寄存器传递过程调用时的参数
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第17题-解析\n\n\n\n

RISC 设计的一个显著特点是由于指令定长且比较简单,所以易于采用流水线技术,从而提高指令执行的吞吐量。因此,RISC 体系结构并不难以采用流水线数据通路,因此 C 选项错误。
\n\n\n\n\n", "difficulty": 1}, {"id": 770, "year": 2025, "index": 18, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第18题-题目\n\n\n\n

下列关于 CPI 和 CPU 时钟周期的叙述中,错误的是( )。

\n
A.不同类型指令的 CPI 可能不一样
\n
B.程序的 CPI 与 Cache 缺失率无关
\n
C.单周期 CPU 的时钟周期以最耗时指令所用的时间为准
\n
D.流水线 CPU 的时钟周期以最长流水段所用时间为准
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第18题-解析\n\n\n\n

\n\n\n\n\n", "difficulty": 1}, {"id": 771, "year": 2025, "index": 19, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第19题-题目\n\n\n\n

下列关于 CPU 中的数据通路和控制器的叙述中,错误的是( )。

\n
A.通用寄存器组中应该包含程序计数器
\n
B.控制器中一定包含指令操作码的译码电路
\n
C.单周期 CPU 中的控制器比多周期 CPU 中的更简单
\n
D.流水线 CPU 需解决数据相关和控制相关等冒险问题
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第19题-解析\n\n\n\n

\n\n\n\n\n", "difficulty": 1}, {"id": 772, "year": 2025, "index": 20, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第20题-题目\n\n\n\n

某处理器总线采用同步,并行传输方式,每个总线时钟周期传送 4 次数据(quadpumped 技术),若该总线的工作频率为 1333MHz(实际单位是 MT/s,表示每秒传送 1333M/次),总线宽度为 64 位,则总线带宽约为( )。

\n
A.10.66 GB/s
\n
B.42.66 GB/s
\n
C.85.31 GB/s
\n
D.341.25 GB/s
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\r\n\r\n\r\n\r\n\r\n\r\n2025-第20题-解析\r\n\r\n\r\n\r\n

这一题是一道埋坑题,考查 总线指标 中工作频率和时钟频率的不同,杂货铺本人和多位同学一起确认,最后发现本题的原题中标记为 工作频率 而不是 时钟频率:

\"\"

总线带宽可以通过以下方式计算:

因为题目中给出的是时钟频率,所以总线带宽计算为 1333M * 8B ≈ 10.66GB/s,答案选择 A。


如果 题目中给出的是 时钟频率为 1333MHz,则

总线每秒传输的数据量为 1333M × 8B × 4 ≈ 42.66G,此时答案选 B。

\r\n\r\n\r\n\r\n\r\n", "difficulty": 3}, {"id": 773, "year": 2025, "index": 21, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第21题-题目\n\n\n\n

下列设备中,适合采用 DMA 输入输出的设备是( )。

\n

I. 键盘

\n

II. 网卡

\n

III. 固态硬盘

\n

IV. 针式打印机

\n
A.I、II
\n
B.II、III
\n
C.II、IV
\n
D.III、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第21题-解析\n\n\n\n

网卡和固态硬盘通常适合采用 DMA(直接内存访问)进行输入输出,因为它们需要处理大量的数据传输,DMA 可以有效地提高数据传输效率而不占用 CPU 资源。键盘和针式打印机的数据传输量较小,通常不需要使用 DMA。
\n\n\n\n\n", "difficulty": 1}, {"id": 774, "year": 2025, "index": 22, "type": 1, "typeName": "选择题", "score": 2, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第22题-题目\n\n\n\n

下列选项中,会触发外部中断请求的事件是( )。

\n
A.DMA 传送结束
\n
B.总线事务结束
\n
C.页故障处理结束
\n
D.执行断点指令
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第22题-解析\n\n\n\n

参考中断和异常,外部中断请求通常是由外部设备或硬件事件触发的。DMA 传送结束是由 DMA 控制器发出的中断请求,用于通知 CPU 数据传输已经完成,这属于外部中断。而其他选项通常与内部事件或软件处理相关,不属于外部中断。
\n\n\n\n\n", "difficulty": 1}, {"id": 775, "year": 2025, "index": 23, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第23题-题目\n\n\n\n

在采用页式虚拟存储管理方式的系统中,当发生上下文切换时,下列寄存器中操作系统不需要更新的是( )。

\n
A.通用寄存器
\n
B.页表基址寄存器
\n
C.程序计数器
\n
D.内核中断向量表基址寄存器
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第23题-解析\n\n\n\n

在 上下文切换 时,操作系统需要保存和恢复与当前进程相关的状态信息。通用寄存器、页表基址寄存器和程序计数器通常会在上下文切换时更新,以切换到新进程的上下文。然而,内核 中断向量表 基址寄存器通常是系统级的,通常不会在每次上下文切换时更改,因此操作系统不需要在上下文切换时更新该寄存器。
\n\n\n\n\n", "difficulty": 1}, {"id": 776, "year": 2025, "index": 24, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第24题-题目\n\n\n\n

关于虚拟化技术,下列说法错误的是( )。

\n
A.操作系统可以在虚拟机上运行
\n
B.一台主机可以支持多个虚拟机
\n
C.VMM 与操作系统特权级相同
\n
D.通过虚拟机技术,可以用一台主机上模拟多种 ISA
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第24题-解析\n\n\n\n

A. 操作系统可以在虚拟机上运行 ✅
正确。虚拟机(VM)提供了一个与真实硬件类似的环境,操作系统可以像在物理机上一样运行在虚拟机中。

B. 一台主机可以支持多个虚拟机 ✅
正确。虚拟化的核心能力之一就是在同一物理主机上运行多个虚拟机实例,每个实例看起来像是一台独立的机器。

C. VMM 与操作系统特权级相同 ❌
错误。VMM(虚拟机监控器或 Hypervisor)通常运行在比普通操作系统更高的特权级,因为它需要控制底层硬件资源,并管理多个客户操作系统。例如在 x86 架构中,VMM 通常在Ring -1(即硬件支持的更低层)运行,而操作系统在 Ring 0。\n即使是某些 Type 2 Hypervisor(如 VMware Workstation)运行在宿主操作系统上,也会通过硬件辅助(如 Intel VT-x)获得高特权级访问。

D. 通过虚拟机技术,可以用一台主机上模拟多种 ISA ✅
正确,尽管这项功能涉及更多的是 仿真(emulation) 而非传统虚拟化。例如使用 QEMU 可以在 x86 主机上模拟 ARM、MIPS 等架构。不过现代虚拟化系统也可以部分结合硬件虚拟化技术来提高效率。

所以正确答案是:C。

\n\n\n\n\n", "difficulty": 1}, {"id": 777, "year": 2025, "index": 25, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第25题-题目\n\n\n\n

在优先权调度中,采用单链表保存进程就绪队列,高优先级进程在队头。若就绪队列长度为 n,则插入进程、选出进程的时间复杂度为( )。

\n
A.O(1),O(1)
\n
B.O(1),O(n)
\n
C.O(n),O(1)
\n
D.O(n),O(n)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第25题-解析\n\n\n\n

在 优先级调度 中,如果我们采用单链表来保存进程就绪队列,并且高优先级进程在队头,那么:

\n\n\n\n\n", "difficulty": 1}, {"id": 778, "year": 2025, "index": 26, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第26题-题目\n\n\n\n

现有一 LRU 算法,采用固定分配局部置换的页面置换策略,已为进程分配 3 个页框,页面访问序列为 {0,1,2,0,5,1,4,3,0,2,3,2,0 },其中 0,1,2 已调入内存。则缺页次数是( )。

\n
A.5
\n
B.6
\n
C.7
\n
D.8
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第26题-解析\n\n\n\n

在 LRU 算法中,每当需要访问一个不在当前内存中的页面时,就需要进行置换操作,并选择当前内存中最久未使用的页面进行替换。我们按照给定的页面访问序列进行模拟:

初始状态:内存中页面为 {0, 1, 2},访问序列:

访问页面是否命中/缺页之后的内存页面
0命中{1, 2, 0}
1命中{2, 0, 1}
2命中{0, 1, 2}
0命中{1, 2, 0}
5缺页,替换页面 1{2, 0, 5}
1缺页,替换页面 2{0, 5, 1}
4缺页,替换页面 0{5, 1, 4}
3缺页,替换页面 5{1, 4, 3}
0缺页,替换页面 1{4, 3, 0}
2缺页,替换页面 4{3, 0, 2}
3命中{0, 2, 3}
2命中{0, 3, 2}
0命中{3, 2, 0}

总计缺页次数为 6 次。

\n\n\n\n\n", "difficulty": 1}, {"id": 779, "year": 2025, "index": 27, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第27题-题目\n\n\n\n

确定进程运行所需的最少页框数时,要考虑的指标是( )。

\n
A.代码段长
\n
B.虚拟地址空间大小
\n
C.物理地址空间大小
\n
D.指令系统支持的寻址方式
\n\n\n\n\n", "answer": "D", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第27题-解析\n\n\n\n

确定进程运行所需的最少页框数时,主要需考虑以下指标:

D. 指令系统支持的寻址方式

指令系统的寻址方式直接影响进程执行时可能访问的页框数量。例如,若指令支持间接寻址,则需更多页框以处理跨页访问的情况。

每条指令若仅包含一个内存地址,则至少需1个页框;若涉及跨页访问或间接寻址,则需更多页框(如4个页框)。

其他选项分析

综上,正确答案为 ‌D‌。

\n\n\n\n\n", "difficulty": 2}, {"id": 780, "year": 2025, "index": 28, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第28题-题目\n\n\n\n

关于虚拟文件系统,下列说法正确的是( )。

\n
A.虚拟文件系统是运行在虚拟内存的文件系统
\n
B.VFS 可以加快文件系统的访问速度
\n
C.VFS 定义了可访问不同文件系统的统一接口
\n
D.VFS 只能访问本地文件系统,不能访问网络文件系统
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第28题-解析\n\n\n\n

虚拟文件系统 是一个抽象层,提供了一种统一的接口,使操作系统能够支持不同类型的文件系统。它通过这种抽象,使得上层应用程序可以通过统一的接口访问不同的底层文件系统,而不需要关心底层文件系统的具体实现细节。

\n\n\n\n\n", "difficulty": 1}, {"id": 781, "year": 2025, "index": 29, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第29题-题目\n\n\n\n

某文件系统采用索引节点方式。用户在目录中新建文件 F 时,文件系统不会做的是( )。

\n
A.初始化文件 F 的索引节点
\n
B.在目录文件中写入 F 的索引节点号
\n
C.在目录文件中写入 F 的访问权限信息
\n
D.在目录文件中增加一条文件 F 对应的目录项
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第29题-解析\n\n\n\n

当用户在目录中新建文件 F 时,文件系统通常会执行以下操作:

选项 C 是错误的,因为访问权限信息通常存储在文件的索引节点中,而不是在目录文件中。目录文件只记录文件名及其对应的索引节点号。

\n\n\n\n\n", "difficulty": 1}, {"id": 782, "year": 2025, "index": 30, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第30题-题目\n\n\n\n

关于内存映射文件,下列说法正确的是( )。

\n

I. 可实现进程间通信

\n

II. 实现了页面到磁盘块的映射

\n

III. 将文件映射到进程的虚拟地址空间

\n

IV. 将文件映射到系统的物理地址空间

\n
A.I、III
\n
B.I、IV
\n
C.II、III
\n
D.I、II、III
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第30题-解析\n\n\n\n

本题考察 内存映射文件,现对选项进行逐一分析:

所以正确的是 I、III,选择 A。

【注意】 严格来说,II 的描述是符合现代操作系统的实现的(比如 linux 中的 mmap 接口中如果开启 MAP_SHARED(共享映射),写入页面即写入磁盘,即 页面 和 磁盘块 是双向映射关系)。

估计出卷人的意思是内存映射文件 语义 是 磁盘块 → 页面的映射,而不是 页面 → 磁盘块,所以 II 是错误的,从这种角度来看也说得通。

要是考场上这种题真的错了那就认了吧,毕竟这种概念题有分歧在 408 是很正常的,但是数量也会比较少就是了。

\n\n\n\n\n", "difficulty": 2}, {"id": 783, "year": 2025, "index": 31, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第31题-题目\n\n\n\n

下列选项中,可被文件系统用于外存空间使用情况的是( )。

\n
A.目录
\n
B.系统打开文件表
\n
C.文件分配表(FAT)
\n
D.文件控制块(FCB)
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第31题-解析\n\n\n\n

文件分配表(FAT)是文件系统用来记录磁盘块(簇)使用情况的数据结构。它记录了哪些磁盘块是空闲的,哪些已经被文件占用,因此文件系统可以通过 FAT 来管理空闲空间。

\n\n\n\n\n", "difficulty": 1}, {"id": 784, "year": 2025, "index": 32, "type": 1, "typeName": "选择题", "score": 2, "subject": "computer-organization", "question": "\n\n\n\n\n\n2025-第32题-题目\n\n\n\n

下列选项中,文件系统能为温彻斯特硬盘和固态硬盘提供的功能是( )。

\n
A.划分扇区
\n
B.确定盘块大小
\n
C.降低寻道时间
\n
D.实现均衡磨损
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第32题-解析\n\n\n\n

关于文件系统能为温彻斯特硬盘(HDD)和固态硬盘(SSD)提供的功能,分析如下:

A. 划分扇区‌
扇区是磁盘物理结构的固有属性,由硬盘制造商在出厂时划分,文件系统不参与扇区的物理划分。

B. 确定盘块大小‌
文件系统通过逻辑格式化设定文件存储的基本单位(如 4KB 的块大小),这是文件系统对物理存储的逻辑抽象,适用于 HDD 和 SSD。

C. 降低寻道时间‌
寻道时间是 HDD 特有的机械性能指标,文件系统无法直接优化;而 SSD 无机械部件,不存在寻道时间问题。

D. 实现均衡磨损‌
这是 SSD 特有的功能,由 SSD 控制器通过磨损均衡算法实现,文件系统仅能通过 Trim 指令辅助,并非直接控制。

正确答案:B(确定盘块大小)‌\n文件系统通过逻辑格式化统一管理存储空间,为 HDD 和 SSD 定义逻辑块大小,这是两者共有的功能。

\n\n\n\n\n", "difficulty": 1}, {"id": 785, "year": 2025, "index": 33, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第33题-题目\n\n\n\n

如下图所示,主机 H1 向 H2 发送一个 2MB(1MB =\n106\nB)文件有三种方式:① 电路交换,建立时间为 32us,速度为 10Mbps;② 分组交换,分组长度为 400B,忽略首部;③ 报文交换。电路交换的时间为\nTcs​\n,报文交换的时间为\nTms​\n,分组交换的时间为\nTps​\n,则三者的大小关系是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
H1
H2
R1
R2
10 Mbps
100 Mbps
1000 Mbps
\n
A.Tcs​>Tms​>Tps​
\n
B.Tms​>Tps​>Tcs​
\n
C.Tms​>Tcs​>Tps​
\n
D.Tps​>Tms​>Tcs​
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第33题-解析\n\n\n\n

参考 传输时间计算:

经计算可知\nTms​>Tps​>Tcs​\n。

\n\n\n\n\n", "difficulty": 1}, {"id": 786, "year": 2025, "index": 34, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第34题-题目\n\n\n\n

某差错编码的编码集为 { 10011010,01011100,11110000,00001111 },其检错和纠错能力是( )。

\n
A.可以检测不超过 2 位错,检错率 100%;可纠正不超过 1 位错
\n
B.可以检测不超过 2 位错,检错率 100%;可纠正不超过 2 位错
\n
C.可以检测不超过 3 位错,检错率 100%;可纠正不超过 1 位错
\n
D.可以检测不超过 3 位错,检错率 100%;可纠正不超过 2 位错
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第34题-解析\n\n\n\n

先求这 4 个 8 位码字的两两 海明距离(统计对应位不同的个数):

码字对距离
10011010 – 010111004
10011010 – 111100004
10011010 – 000011114
01011100 – 111100004
01011100 – 000011114
11110000 – 000011118

最小汉明距离\ndmin​=4\n。

因此正确选项为 C:

可以检测不超过 3 位错,检错率 100%;可纠正不超过 1 位错

\n\n\n\n\n", "difficulty": 1}, {"id": 787, "year": 2025, "index": 35, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第35题-题目\n\n\n\n

现有一 10BaseT 以太网,甲乙处于同一个冲突域,连续发生 11 次冲突,甲再次发送的最大时间间隔为( )。

\n
A.0.512ms
\n
B.0.5632ms
\n
C.52.3776ms
\n
D.104.8064ms
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第35题-解析\n\n\n\n

在以太网中,当发生冲突时,发送节点将执行 指数退避算法。在这个算法中,节点在重传之前会等待一个随机的时间间隔,这个时间间隔是以时隙(slot time)为单位计算的。

对于 10BaseT 以太网,时隙时间(slot time)为 51.2 微秒(0.0512 毫秒)。

在指数退避算法中,第 n 次重传时,节点会从\n0\n到\n2n−1\n的范围内随机选择一个整数 k,然后等待 k 个时隙的时间。需要注意的是,当 n 达到 10 或更大时,退避范围的上限固定为 1023(即\n210−1\n)。

在题目中,已经发生了 11 次冲突,意味着这是第 12 次重传尝试。因此,n = 11,但因为\nn≥10\n的时候,k 的范围是 0 到 1023。

因此,甲再次发送的最大时间间隔为 1023 个时隙时间,即:

1023×51.2us=52.4288ms
\n\n\n\n\n", "difficulty": 2}, {"id": 788, "year": 2025, "index": 36, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第36题-题目\n\n\n\n

一台新接入网络的主机 H 通过 DHCP 服务器动态请求 IP 地址过程中,与 DHCP 服务器交换 DHCP 报文过程如下图所示。封装 DHCP 的 REQUEST 报文的 P 数据报的目的 IP 地址和源 IP 地址分别是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
H
DHCP Server
REQUEST
192.168.5.1
192.168.5.9
\n
A.192.168.5.1, 0.0.0.0
\n
B.192.168.5.1, 192.168.5.9
\n
C.255.255.255.255, 0.0.0.0
\n
D.255.255.255.255, 192.168.5.9
\n\n\n\n\n", "answer": "C", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第36题-解析\n\n\n\n

DHCP 的 REQUEST 报文:

目的 IP 地址:DHCP 服务器的 IP 地址或者广播地址(255.255.255.255),因为主机可能不知道 DHCP 服务器的确切 IP 地址,尤其是在初始请求阶段,广播地址确保网络中的所有 DHCP 服务器都能接收到请求。

源 IP 地址:0.0.0.0,因为主机还未获得正式的 IP 地址,在这个阶段它使用 0.0.0.0 作为源地址来表示“没有 IP 地址”。

\n\n\n\n\n", "difficulty": 1}, {"id": 789, "year": 2025, "index": 37, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第37题-题目\n\n\n\n

假设路由器实现 NAT 功能,内网中主机 H 的 IP 地址为 192.168.1.5/24。若 H 运行某应用向 internet 发送一个 UDP 报文段,则路由器在转发封装该 UDP 报文段的 IP 数据报的过程中,UDP 报文的首部字段会被修改的是( )。

\n

I 源端口号

\n

II 目的端口号

\n

III 总长度

\n

IV 校验和

\n
A.仅 I、III
\n
B.仅 I、IV
\n
C.仅 lI、III
\n
D.仅 II、IV
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第37题-解析\n\n\n\n

因此,路由器在转发封装该 UDP 报文段的过程中,可能会修改的字段是源端口号和校验和,答案选 B。

\n\n\n\n\n", "difficulty": 0}, {"id": 790, "year": 2025, "index": 38, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第38题-题目\n\n\n\n

主机甲通过 TCP 向主机乙发送数据的部分过程如下图,seq 为序号,ack-seq 为确认序号,rcwnd 为接收窗口。甲在\nt0​\n时刻的拥塞窗口和发送窗口均为 2000B,拥塞控制阈值为 8000B,MSS=1000B。甲始终以 MSS 发送 TCP 段。若甲在\nt1​\n时刻收到如图所示的确认段,则甲在未收到新的确认段之前,还可以继续向乙发送的 TCP 段数是( )。

\n
\n\n\n\n \n 408真题系统\n \n\n
甲
乙
t0
t1
seq=2001, 1000B 数据
seq=3001, 1000B 数据
seq=4001, ack_seq=3001
rcwnd=4000B
\n
A.2
\n
B.3
\n
C.4
\n
D.5
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第38题-解析\n\n\n\n

发送窗口取拥塞窗口和接收窗口之间的较小值,即 swnd = min(cwnd, rwnd)。

根据 ack_seq = 3001 可知,目前乙已经接收到了 1000B 的数据即一个 1 个 MSS,seq = 3001 的 MSS 仍然在发送中,并且此时乙的接收窗口(swnd)为 4 个 MSS。

此外,由于甲目前仍然在慢开始阶段(发送窗口没有达到阈值),所以接收到乙的确认后,拥塞窗口要 +1,此时 cwnd = 3 MSS。

所以发送窗口 swmd = min(3, 4) = 3 MSS。


另外需要注意这个公式:

发送窗口 的大小(swnd) = 已经发送但还没有确认数据(inflight) + 还没有发送的数据。这一题问的是甲还可以向乙发送多少个 TCP 段,这要减去那些之前已经发送但还没有确认的数据(1 MSS)。

所以还可以发送 3 - 1 = 2 MSS,答案选择 B。

\n\n\n\n\n", "difficulty": 3}, {"id": 791, "year": 2025, "index": 39, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第39题-题目\n\n\n\n

Time 是一个提供时间查询服务的 C/S 架构网络应用,支持客户通过 UDP 和 TCP 向 Time 服务器请求时间。若某客户与 Time 服务器通信往返时间为 8ms,则该客户分别通过 UDP 和 TCP 向该服务器请求服务,所需的最少时间分别是( )。

\n
A.8ms,8ms
\n
B.8ms,16ms
\n
C.16ms,8ms
\n
D.16ms,16ms
\n\n\n\n\n", "answer": "B", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第39题-解析\n\n\n\n

读题可知,RTT = 8ms,使用 UDP 进行传输只需要一个 RTT,而使用 TCP 三次握手需要两个 RTT 共 16ms。
\n\n\n\n\n", "difficulty": 0}, {"id": 792, "year": 2025, "index": 40, "type": 1, "typeName": "选择题", "score": 2, "subject": "operating-system", "question": "\n\n\n\n\n\n2025-第40题-题目\n\n\n\n

关于 POP3,正确的是( )。

\n

I 支持用户代理从邮件服务器读取邮件

\n

II 支持用户代理向邮件服务器发送邮件

\n

III 支持邮件服务器之间发送与接收邮件

\n

IV 支持一条 TCP 连接收取多封邮件

\n
A.I、IV
\n
B.II、III
\n
C.I、II、III
\n
D.I、III、IV
\n\n\n\n\n", "answer": "A", "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第40题-解析\n\n\n\n

本题考察 POP3 协议,对题目提供的选项进行逐一分析:

所以 I、IV 是正确的,本题答案为 A。

\n\n\n\n\n", "difficulty": 1}, {"id": 793, "year": 2025, "index": 41, "type": 3, "typeName": "算法题", "score": 13, "subject": "computer-network", "question": "\n\n\n\n\n\n2025-第41题-题目\n\n\n\n

设有两个长度均为 n 的一维整型数组 A 和 res,对数组 A 中的每个元素 A[i],计算 A[i] 与 A[j](0 ≤ i ≤ j ≤ n-1) 乘积的最大值,并将其保存到 res[i]中。例如,若 A[i] = {1, 4, -9, 6},则得到 res[i] = {6, 24, 81, 36}。现给定数组 A,请设计一个时间和空间上尽可能高效的算法 calMulMax,求 res 中各元素的值。函数原型为:void calMulMax(int A[], int res[], int n),要求:

\n

(1) 给出算法的基本设计思想:(4 分)

\n

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

\n

(3) 说明你所设计算法的时间复杂度和空间复杂度。(2 分)

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第41题-解析\n\n\n\n

1)若 A[i] 为负数的话,则 A[j] 为子数组 A[i:n] 中的最小值时,A[i] * A[j] 为最大值。若 A[i] 为正数的话,则 A[j] 为子数组 A[i:n] 中的最大值时,A[i] * A[j] 为最大值。

因此算法步骤如下:

  1. 从右到左遍历数组 A:
    • 维护一个变量 maxValue 来存储当前从 i 到 n-1 范围内的最大值。
    • 维护一个变量 minValue 来存储当前从 i 到 n-1 范围内的最小值。
    • 在每次迭代中,更新 maxValue 和 minValue。
    • 计算 A[i] * maxValue 和 A[i] * minValue,并将它们的较大值存储在 res[i] 中。
  2. 更新 maxValue 和 minValue:在每次迭代中,maxValue 是当前元素与之前的 maxValue 的较大值,minValue 是当前元素与之前的 minValue 的较小值。

2)算法实现如下:

void calMulMax(int A[], int res[], int n) {\n    int minValue = INT32_MAX;\n    int maxValue = INT32_MIN;\n    for (int i = n-1; i >= 0; i--) {\n        if (A[i] < minValue) {\n            minValue = A[i];\n        }\n        if (A[i] > maxValue) {\n            maxValue = A[i];\n        }\n        if (A[i] > 0) {\n            res[i] = A[i] * maxValue;\n        } else {\n            res[i] = A[i] * minValue;\n        }\n    }\n}\n

3)算法的时间复杂度为 O(n),空间复杂度为 O(1)。

\n\n\n\n\n", "difficulty": 1}, {"id": 794, "year": 2025, "index": 42, "type": 2, "typeName": "应用题", "score": 10, "subject": "computer-network", "question": "\n\n\n\n\n\n2025-第42题-题目\n\n\n\n

AOE 网,描述 12 个工程活动及持续时间

\n
\n\n\n\n \n 408真题系统\n \n\n
3
1
6
4
2
7
5
a = 2
b = 5
d = 3
f = 4
e = 3
j = 1
k = 2
c = 1
g = 1
m = 4
h = 1
n = 3
\n

(1) 完成该工程的最短时间是多少?哪些是关键活动?

\n

(2) 若以最短时间完成工程,则与活动 e 同时进行的活动可能有哪些?

\n

(3) 时间余量最大的活动是哪个?其时间余量是多少?

\n

(4) 假设工程从时刻 0 启动,因某种原因,活动 b 在时刻 6 开始,为保证工程不延期,在其它活动持续时间保持不变的情况下,b 的持续时间最多是多少?若不改变 b 的持续时间,则压缩哪个活动的持续时间也能保证工程不延期?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第42题-解析\n\n\n\n

1)首先计算最早发生时间 ve:

node1234567
ve09251269

然后计算最晚发生时间:

node1234567
vl010251289

ve 和 vl 相同的顶点为 1、3、4、7、5,所以关键活动为 a、e、m、n。

2)e 的执行时间是 2~5,可以与 e 同时执行的活动为 b、d、c。

3)假设有顶点 i→j 的活动(边),则该活动的 时间余量 = vl(j) - ve(i) - 边的长度。

计算所有非关键路径上活动的时间余量,可以得到活动 j 的时间余量是最大的,为 vl(5) - ve(4) - 1 = 6。

4)为保证 1 → 2 → 5 的路径长度不超过关键路径的长度,需要保证 6 + b + k ≤ 12,所以 b ≤ 4,即 b 的持续时间最长为 4。如果想要保证 b 仍然为 5 的话,需要压缩 k 的时间长度,将 k 缩小为 1。

\n\n\n\n\n", "difficulty": 3}, {"id": 795, "year": 2025, "index": 43, "type": 2, "typeName": "应用题", "score": 12, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第43题-题目\n\n\n\n

计算机 M 字长为 32 位,按字节编址,数据 cache 的数据区大小为 32KB,采 8 路组相联,主存块大小为 64B,cache 命中时间为 2 个时钟周期,缺失损失为 200 个时钟周期,采用页式虚拟存储,页大小为 4KB。数组 d 的起始地址为 0180 0020H(VA31~VA0)。

\n

(1) 主存地址中的 Cache 组号,块内地址分别占几位?VA 中哪些位可以作为 Cache 索引。

\n

(2) d[100] 的 VA 是多少?d[100] 所在主存块中对应的 Cache 组号是多少?

\n

(3) 设代码已经在 cache 中,i,x 已装入内存,但不在 cache,则 d[0] 在其主存块内的偏移量是多少?执行 for 的过程中,访问 d 的 Cache 缺失率和数组元素的平均访问时间分别是多少?(缺失率用百分比表示,保留两位小数)

\n

(4) d 分布在几个页中?若代码已在主存,d 不在主存,则执行 for 的过程中,访问 d 所引起的缺页次数是?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第43题-解析\n\n\n\n

1)cache 块大小和主存块大小一致为 64B,所以块内偏移为 6 位(\n26=64\n)。

cache 块的数量为 32KB / 64B = 512,由于采用 8 路组相连,所以总共有 512 / 8 = 64 个组,组号占 6 位(\n26=64\n)。

所以第 6 位到第 11 位可以作为 Cache 索引(用来定位地址可能被哪一组所缓存)。

2)&d[100] = d + 100 * 4 = 0x0180 0020 + 400 = 0x0180 01B0,对应的二进制为 0000 0001 1000 0000 0000 0001 1011 0000,组号为 000110B 即 6。

3)物理地址的结构为:页内偏移 12 位,物理页号 20 位,所以 &d[0] 的页内偏移为 020H = 32。\n数组总共需要用 2048 * 4 / 64 = 128 个完整 cache 块存储,但由于数组第一个元素处于某个 cache 的中间(偏移为 32),所以总共需要 129 个 cache 块存储,在访问每个 cache 块中的第一个元素时会发生 Cache 缺失。

另外需要注意一点,对于指令 d[i] = d[i] / x,实际上是访问了两次:一次读取,一次写入。所以在计算缺失率和平均访问时间的时候需要考虑这两次访问。

缺失率 = 129 / (2048 * 2) ≈ 3.15%。

数组的平均访问时间为 = (129 * 200 + (4096 - 129) * 2) / 4096 ≈ 8.24 个时钟周期。

4)数组 d 需要占用 8KB 的存储空间,占用两个页面。由于数组的起始地址处于页面内部(偏移 32B),所以数组 d 分布在三个页面中,触发的缺页次数为 3。

\n\n\n\n\n", "difficulty": 0}, {"id": 796, "year": 2025, "index": 44, "type": 2, "typeName": "应用题", "score": 9, "subject": "computer-network", "question": "\n\n\n\n\n\n2025-第44题-题目\n\n\n\n

接上题,R0~R4 为通用寄存器,SEXT 表示按符号扩展,M 中补码除法器,逻辑结构图如下:

\n

机器级代码:

\n

(1) 若执行 idiv 指令时,d[i]=0x87654321,x=0xff,则补码除法器中 R、Q、Y 的初始值分别为多少(用十六进制表示)?\n图 b 中哪个部分包含计数器?在补码除法器执行过程中,ALUop 所控制的 ALU 运算有哪几种?

\n

(2) 假设 idiv 执行过程中会检测并触发除法异常,则执行 idiv 指令时,哪些情况下会发生除法异常(要求给出此时 d[i] 和 x 的十六进制机器数)。发生除法异常时,在异常响应过程中,CPU 需要完成哪些操作?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第44题-解析\n\n\n\n

【答案】

1)R 中的值为 0xffffffff,Q 中的值为 0x87654321,Y 中的值为 0x000000ff。b 中的控制逻辑包含计数器,ALUop 所控制的 ALU 运算包含加法和减法。

2)第一种情况除数为 0 异常,d[i] 为任意值,x 为 0x00000000。第二种情况溢出异常,d[i] 为 0x80000000,x 为 0xffffffff,在 d[i] = -2³¹、x = -1 的情况下会发生溢出异常。

在发生除法异常时 CPU 响应的操作:

  1. 关中断,修改 CPU 状态为内核态。
  2. 保存断点(PC 和 PSWR 中的值)。
  3. 跳转到异常处理程序。

【解析】

1)寄存器初始值分析

计数器位置

图中控制逻辑模块包含计数器 C,用于控制除法迭代次数(32 次,对应 32 位前)。

ALU 运算类型

补码除法采用加减交替法,ALU 需支持两种运算:

2) 除法异常的情况

除法异常包括 除以 0 和 商溢出:

异常响应的 CPU 操作

异常响应时,CPU 需完成以下核心步骤:

  1. 保存现场
    • 保存当前程序计数器 PC(下一条指令地址)、通用寄存器(或关键字寄存器)状态、程序状态字 PSW(含标志位)。
  2. 跳转异常处理
    • 从中断向量表加载除法异常对应的服务程序入口地址,更新 PC。
  3. 模式切换与栈处理
    • 若当前为用户态,切换至内核态,使用内核栈执行异常处理(避免用户栈破坏)。
  4. 中断控制
    • 可选设置中断屏蔽位,防止嵌套异常干扰处理流程(视架构而定)。
\n\n\n\n\n", "difficulty": 3}, {"id": 797, "year": 2025, "index": 45, "type": 2, "typeName": "应用题", "score": 8, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第45题-题目\n\n\n\n

三个人一起植树,甲挖坑,乙放树苗入坑并填土,丙负责为新种树苗浇水。步骤依次为:挖树坑,放树苗,填土和浇水。现在有铁锹和水桶各一个,铁锹用于挖树坑,填土。水桶用于浇水。当树坑数量小于 3 时,甲才可以挖树坑。设初始坑 = 0,铁锹水桶均可用,定义尽可能少的信号量,用 wait() 和 signal() 操作描述植树过程中三人的同步互斥关系,并说明所用信号量的作用及其初值。

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第45题-解析\n\n\n\n

这题是一个近似于流水线的结构,其过程为:挖树坑(甲)→ 放树苗、填土(乙)→ 浇水(丙)。不过甲最多可以同时挖三个树苗,也就是说不允许同时存在 4 个未被乙使用的树坑,这是比较复杂的一点。

实现甲和乙之间的同步需要使用到 pits 和 empty 这两个信号量,同时还需要一个 water 信号量来实现乙和丁的同步,代码实现如下:

semaphore mutex = 1;  // 对铁锹的使用需要互斥\nsemaphore pits  = 3;  // 甲还能挖洞的数量\nsempahore empty = 0;  // 可以使用的树坑数量\nsempahore water = 0;  // 需要浇水的水苗数量\n\n甲() {\n    while (1) {\n        wait(pits);     // 最多只能挖三个未被乙使用的坑\n        wait(mutex);    // 占用铁锹\n        挖树坑;\n        signal(mutex);  // 释放铁锹\n        signal(empty);       // 通知乙可以放树苗和填土了\n    }\n}\n\n乙() {\n    while (1) {\n        wait(empty);     // 等待到有树坑为止\n        wait(mutex);     // 占用铁锹\n        放树苗、填土;\n        signal(mutex);   // 释放铁锹\n        signal(pits);    // 通知甲可以继续挖坑了\n        signal(water);  // 通知丙可以浇水了\n    }\n}\n\n丙() {\n    while (1) {\n        wait(water);\n        浇水;\n    }\n}\n
\n\n\n\n\n", "difficulty": 0}, {"id": 798, "year": 2025, "index": 46, "type": 2, "typeName": "应用题", "score": 9, "subject": "data-structure", "question": "\n\n\n\n\n\n2025-第46题-题目\n\n\n\n

某进程的虚拟地址空间如图,阴影部分为未占用区域,有 C 程序:

\n
char * ptr;\nvoid main() {\n    int length;\n    ptr=(char*) malloc(100);\n    scanf(\"%s\", ptr);\n    length = strlen(ptr);\n    printf(\"length=%d\\n\", length);\n    free(ptr) ;\n}\n
\n

(1) 上述程序执行时,PCB 位于哪个区域,执行 scanf () 等待键盘输入时,该进程处于什么状态?

\n

(2) main() 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?

\n

(3) 变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第46题-解析\n\n\n\n

本题考察 进程内存空间,题目中给出的内存结构和标准 linux 进程结构由些许差异,主要不同点在于图中的 读/写代码段 将 .bss 和 .data 融合了,考生看到能够理解就可以。

1)进程管理属于操作系统提供的功能,所以 PCB(进程)位于内核区,执行 scanf() 时,进程在等待键盘 I/O,处于阻塞态。

2)main() 函数的代码位于只读代码段(.text),其直接调用的 scanf() 和 printf() 需要执行驱动程序。

3)ptr 是作为全局变量定义的,所以其位于读/写数据段,length 变量在 main 函数中定义,如果该变量不在寄存器中被分配的话,那么就位于用户栈段,ptr 指针指向的内存单元是使用 malloc 函数动态分配的,位于堆区。

\n\n\n\n\n", "difficulty": 1}, {"id": 799, "year": 2025, "index": 47, "type": 2, "typeName": "应用题", "score": 9, "subject": "computer-network", "question": "\n\n\n\n\n\n2025-第47题-题目\n\n\n\n
\n\n\n\n \n 408真题系统\n \n\n
TR1
作业区子网
生活区子网
管理区子网
S1
H
10.10.10.33/26
TR1
R1
Internet
R2
总部服务器
工程部网络
卫星
轨道高度 36000km,电磁波速度 300000 km/s
TR1 和 TR2 为全双工调制解调设备,
卫星链路为 R1, R2 之间提供对称全双工信号,每个方向数据传输率为 200kbps
\n

(1) 忽略卫星信号中继,TR1,TR2 调制解调开销,则 R1 到 R2 之间的卫星链路单向传播时延是多少?主机 H 向总部服务器传输数据时可达到的最大吞吐量是多少?若忽略各层协议首部开销,以及以太网的传播时延,则 H → server 上传一个 4000B 的文件,至少需要多长时间?

\n

(2) 基于 GBN 为卫星链路设计单向可靠的链路层协议 SLP,支持 R1 → R2 发送数据。SLP 数据帧长 1500B,忽略 ACK 帧长度,要求 SLP 单向信道利用率不低于 80%,则发送窗口至少为?SLP 帧序号至少为多少?

\n

(3) 总部给工程部分配 IP 地址空间 10.10.10.0/24,再划分为 3 个子网:管理区子网、生活区子网、作业区子网。已知管理区子网地址为 10.10.10.33/26,若生活区子网不少于 120 个,作业子网、管理区子网 IP 均不少于 60 个,H 已正确配置 IP。请问作业区子网和生活区子网地址各是多少?

\n\n\n\n\n", "answer": null, "answerHtml": null, "analysisHtml": "\n\n\n\n\n\n2025-第47题-解析\n\n\n\n

1)计算卫星链路的单向传播时延:在忽略卫星信号中继、TR1、TR2 调制解调开销的情况下,R1 到 R2 之间的卫星链路单向传播时延主要取决于电滋波在太空中的传播速度以及卫星与地球之间的距离。卫星到地球表面的距离大约为 36000km。电磁滋波在太空中的传播速度接近光速,即约每秒 300000 公里。

因此,R1 和 R2 之间的卫星链路的 单向传播时延 可以计算为:时延 = 2×距离/速度 = 2×36000km/(300000km/s) = 0.24 秒。

计算传播时延注意需要 × 2,因为需要通过卫星中转,首先地面 → 卫星,然后卫星 → 地面

计算主机 H 向总部服务器可达到的最大传输量:最大吞叶量与链路带宽和传播时延相关。在忽路一些开销的情况下,可以通过链路带宽和传播时延来计计算。一般公式为:

吞吐量=传播时延 +数据帧大小/链路带宽数据帧大小​

当数据帧大小足够大时,即发送足够多的数据时。吞吐量最大,近似于链路带宽,为 200kbps。

H → Server 上传一个 4000B 文件至少需要多长时间:这里需要计算传播时延和传输时间,传播时间刚刚计算了等于 0.24s,传输时间 = 文件大小(比特)/ 带宽(bps) = 4000B / 200kbps = 0.16s。

总时间 = 0.24s + 0.16s = 0.4s。

2)本题考察 GBN 的 连续 ARQ 协议 计算:

U=RTT+Td​+Ta​N⋅Td​​

其中 SLP 数据帧长为 1500B,数据帧传输时间\nTd​\n= 1500B / 200kbps = 0.06s。\nRTT\n= 两倍单向传播时延 = 0.48s。确认帧大小和数据帧一致都为 1500B,所以确认帧传输时间\nTa​\n=\nTd​\n= 0.06s。

如果要求 GBN 的信道利用率不低于 80%,就是要满足这个公式:

0.48+0.06N×0.06​≥80%

计算得到\nN≥7.2\n,这里\nN\n就是发送窗口的大小,所以 发送窗口最小为 8。

在 GBN 中,接收窗口大小为 1,根据 窗口大小限制,假设帧序号比特数为 k,需要满足\n2k≥8+1=9\n,所以\nk=4\n,即 帧序号至少为 4 位。

3)本题考察 变长子网划分,如果主机位长度为 N,那么子网内可用的 IP 地址数(不包括网络地址和广播地址)的个数就是\n2N−2\n。

生活区子网需要不少于 120 个 IP 地址,计算\n2N−2≥120\n,可以得到\nN=7\n,所以子网掩码为 25 位,子网地址为 10.10.10.128/25,范围是 10.10.10.129 到 10.10.10.254(注意主机地址不能为全 0 或者全 1)。

作业区子网需要不少于 60 个 IP 地址,计算\n2N−2≥60\n,可以得到\nN=6\n,所以子网掩码为 32 位,子网地址为 10.10.10.64/26,范围是 10.10.10.65 到 10.10.10.126。

\n\n\n\n\n", "difficulty": 1}];