选择题
数据结构
求整数 阶乘的算法如下,其时间复杂度是( )。
int fact(int n) {
if (n <= 1) return 1;
return n * fact(n - 1);
}
查看答案与解析
正确答案:B
正确答案:B本算法是一个递归运算,即算法中出现了调用自身的情形。递归的边界条件是 ,每调用一次 fact(),传入该层 fact() 的参数值减 1。采用递归式来表示时间复杂度有
则 ,故时间复杂度为 。
整卷阅读
作答方式
阅读模式保留整卷文档,游戏模式按题闯关并即时反馈。
| 1 | B | 2 | A | 3 | A | 4 | B | 5 | C |
| 6 | C | 7 | C | 8 | A | 9 | D | 10 | A |
| 11 | D | 12 | D | 13 | B | 14 | D | 15 | D |
| 16 | A | 17 | C | 18 | C | 19 | C | 20 | D |
| 21 | D | 22 | B | 23 | C | 24 | B | 25 | B |
| 26 | A | 27 | D | 28 | A | 29 | B | 30 | C |
| 31 | A | 32 | B | 33 | B | 34 | C | 35 | A |
| 36 | B | 37 | C | 38 | A | 39 | D | 40 | D |
求整数 阶乘的算法如下,其时间复杂度是( )。
int fact(int n) {
if (n <= 1) return 1;
return n * fact(n - 1);
}
正确答案:B
正确答案:B本算法是一个递归运算,即算法中出现了调用自身的情形。递归的边界条件是 ,每调用一次 fact(),传入该层 fact() 的参数值减 1。采用递归式来表示时间复杂度有
则 ,故时间复杂度为 。
已知操作符包括 +、−、∗、/、( 和 )。将中缀表达式 a+b−a∗((c+d)/e−f)+g 转换为等价的后缀表达式 ab+acd+e/f−∗−g+ 时,用栈来存放暂时还不能确定运算次序的操作符,若栈初始为空,则转换过程中同时保存在栈中的操作符的最大个数是( )。
正确答案:A
正确答案:A若一棵二叉树的前序遍历序列为 a, e, b, d, c,后序遍历序列为 b, c, d, e, a,则根结点的孩子结点( )。
正确答案:A
正确答案:A若平衡二叉树的高度为 6 ,且所有非叶结点的平衡因子均为 1 ,则该平衡二叉树的结点总数为( )。
正确答案:B
正确答案:B所有非叶结点的平衡因子均为 1,即平衡二叉树满足平衡的最少结点情况,如下图所示。
对于高度为 N、左右子树的高度分别为 N-1 和 N-2、所有非叶结点的平衡因子均为 1 的平衡二叉树,总结点数的公式为: , , , ,可推出 。
对有 n 个结点、e 条边且使用邻接表存储的有向图进行广度优先遍历,其算法时间复杂度是()。
正确答案:C
正确答案:C若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是( )。
正确答案:C
正确答案:C对角线以下元素均为零,表明只有顶点 到顶点 ( ) 可能有边,而顶点 到顶点 一定没有边,即有向图是一个无环图,因此一定存在拓扑序列。对于拓扑序列是否唯一,试举一例:设有向图的邻接矩阵
则存在两个拓扑序列,因此该图存在可能不唯一的拓扑序列。
结论:对于任一有向图,如果它的邻接矩阵中对角线以下(或以上)的元素均为零,则存在拓扑序列(可能不唯一)。反正,若图存在拓扑序列,却不一定能满足邻接矩阵中主对角线以下的元素均为零,但是可以通过适当地调整结点编号,使其邻接矩阵满足前述性质。
对如下有向图带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点 a 到其他各顶点的最短路径,则得到的第一条最短路径的目标顶点是 b,第二条最短路径的目标顶点是 c,后续得到的其余最短路径的目标顶点依次是( )。
正确答案:C
正确答案:C从 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。
下列关于最小生成树的叙述中,正确的是()。
Ⅰ.最小生成树的代价唯一
Ⅱ.所有权值最小的边一定会出现在所有的最小生成树中
Ⅲ.使用普里姆(Prim)算法从不同顶点开始得到的最小生成树一定相同
Ⅳ.使用普里姆算法和克鲁斯卡尔(Kruskal)算法得到的最小生成树总不相同
正确答案:A
正确答案:A已知一棵 3 阶 B 树,如下图所示。删除关键字 78 得到一棵新 B 树,其最右叶结点中的关键字是()。
正确答案:D
正确答案:D本题考察 B 树的 删除 操作。对于上图所示的 3 阶 B 树,被删关键字 78 所在结点在删除前的关键字个数 = 1 = ⌈3/2⌉-1,且其左兄弟结点的关键字个数 = 2 ≥ ⌈3/2⌉,属于“兄弟够借”的情况,则需把该结点的左兄弟结点中最大的关键字上移到双亲结点中,同时把双亲结点中大于上移关键字的关键字下移到要删除关键字的结点中,这样就达到了新的平衡,如下图所示。
在内部排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一趟排序。下列排序方法中,每一趟排序结束都至少能够确定一个元素最终位置的方法是( )。
Ⅰ.简单选择排序
Ⅱ.希尔排序
Ⅲ.快速排序
Ⅳ.堆排序
Ⅴ.二路归并排序
正确答案:A
正确答案:A本题考察不同 内部排序 算法的细节:
I、III、IV 正确,本题选择 A。
对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间可能的不同之处是( )。
正确答案:D
正确答案:D假定基准程序 A 在某计算机上的运行时间为 100 秒,其中 90 秒为 CPU 时间,其余为 I/O 时间。若 CPU 速度提高 50%,I/O 速度不变,则运行基准程序 A 所耗费的时间是( )。
正确答案:D
正确答案:D程序 A 的运行时间为 100s,除去 CPU 时间 90s,剩余 10s 为 I/O 时间。CPU 提速后运行基准程序 A 所耗费的时间是 T = 90/1.5 + 10 = 70s。
【误区】CPU速度提高50%,则CPU时间减少一半,而误选A。
假定编译器规定 int 和 short 型长度分别为 32 位和 16 位,执行下列 C 语言语句:
unsigned short x=65530;
unsigned int y=x;
得到 y 的机器数为( )。
正确答案:B
正确答案:Bfloat 类型(即 IEEE754 单精度浮点数格式)能表示的最大正整数是( )。
正确答案:D
正确答案:D某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定 int 型和 short 型长度分别为 32 位和 16 位,并且数据按边界对齐存储。某 C 语言程序段如下:
struct {
int a;
char b;
short c;
} record;
record.a=273;
若 record 变量的首地址为 0xC008,则地址 0xC008 中内容及 record.c 的地址分别为( )。
正确答案:D
正确答案:D尽管 record 大小为 7 个字节(成员 a 有 4 个字节,成员 b 有 1 个字节,成员 c 有 2 个字节), 由于数据按边界对齐方式存储,故 record 共占用 8 个字节。record.a 的十六进制 表示为 0x00000111,由于采用小端方式存放数据,故地址 0xC008 中内容应为低字节 0x11; record.b 只占 1 个字节,后面的一个字节留空;record.c 占 2 个字节,故其地址为 0xC00E。各字 节的存储分配如下图所示。
| 地址 | 0xC008 | 0xC009 | 0xC00A | 0xC00B |
|---|---|---|---|---|
| 内容 | record.a.(0x11) | record.a.(0x01) | record.a.(0x00) | record.a.(0x00) |
| 地址 | 0xC00C | 0xC00D | 0xC00E | 0xC00F |
| 内容 | record.b | - | record.c | record.c |
下列关于闪存(Flash Memory)的叙述中,错误的是( )。
正确答案:A
正确答案:A假设某计算机按字编址,Cache 有 4 个行,Cache 和主存之间交换的块大小为 1 个字。若 Cache 的内容初始为空,采用 2 路组相联映射方式和 LRU 替换策略。访问的主存地址依次为 0,4,8,2,0,6,8,6,4,8 时,命中 Cache 的次数是( )。
正确答案:C
正确答案:C地址映射采用 2 路组相联,则主存地址为 01、45、89 可映射到第 0 组 Cache 中,主存地址为 23、6~7 可映射到第 1 组 Cache 中。Cache 置换过程如下表所示。
| 走向 | 0 | 4 | 8 | 2 | 0 | 6 | 8 | 6 | 4 | 8 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 第0组 | 块0 | 0 | 4 | 4 | 8 | 8 | 0 | 0 | 8 | 4 | |
| 块1 | 0 | 4 | 8 | 8 | 0 | 0 | 8* | 8 | 4 | 8* | |
| 第1组 | 块2 | 2 | 2 | 2 | 2 | 2 | |||||
| 块3 | 2 | 2 | 6 | 6 | 6* | 6 | 6 |
注:“_” 表示当前访问块,“*” 表示本次访问命中。
注意:在不同的《计算机组成原理》教材中,关于组相联映射的介绍并不相同。通常采用唐朔飞教材中的方式,但本题中采用的是蒋本珊教材中的方式。可以推断两次命题的老师应该不是同一位老师,这也给考生答题带来了困扰。
某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法,共有 33 个微命令,构成 5 个互斥类,分别包含 7、3、12、5 和 6 个微命令,则操作控制字段至少有( )。
正确答案:C
正确答案:C某同步总线的时钟频率为 100MHz,宽度为 32 位,地址/数据线复用,每传输一个地址或数据占用一个时钟周期。若该总线支持突发(猝发)传输方式,则一次 “主存写” 总线事务传输 128 位数据所需要的时间至少是( )。
正确答案:C
正确答案:C下列关于 USB 总线特性的描述中,错误的是( )。
正确答案:D
正确答案:D下列选项中,在 I/O 总线的数据线上传输的信息包括( )。
Ⅰ. I/O 接口中的命令字
Ⅱ. I/O 接口中的状态字
Ⅲ. 中断类型号
正确答案:D
正确答案:D响应外部中断的过程中,中断隐指令完成的操作,除保护断点外,还包括( )。
Ⅰ. 关中断
Ⅱ. 保存通用寄存器的内容
Ⅲ. 形成中断服务程序入口地址并送 PC
正确答案:B
正确答案:B下列选项中,不可能在用户态发生的事件是( )。
正确答案:C
正确答案:C本题关键是对 “在用户态 发生”(与上题的 “执行” 区分)的理解。
对于 A,系统调用是操作系统提供给用户程序的接口,系统调用发生在用户态,被调用程序在核心态下执行。
对于 B,外部中断是用户态到核心态的 “门”,也发生在用户态,在核心态完成中断过程。
对于 C,进程切换属于系统调用执行过程中的事件,只能发生在核心态。
对于 D,缺页产生后,在用户态发生缺页中断,然后进入核心态执行缺页中断服务程序。
中断处理和子程序调用都需要压栈以保护现场,中断处理一定会保存而子程序调用不需要保存其内容的是( )。
正确答案:B
正确答案:B下列关于虚拟存储器的叙述中,正确的是( )。
正确答案:B
正确答案:B用户程序发出磁盘 I/O 请求后,系统的正确处理流程是操作系统的 I/O 子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。
假设 5 个进程 、 、 、 、 共享三类资源 、 、 ,这些资源总数分别为 18、6、22。T0 时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。
正确答案:D
正确答案:D首先求得各进程的需求矩阵 Need 与可利用资源矢量 Available:
比较 Need 和 Available 可以发现,初始时进程 与 可满足需求,排除 A、C。尝试给 分配资源,则 完成后 Available 将变为 (6,3,6),无法满足 的需求,排除 B。尝试给 分配资源,则 完成后 Available 将变为 (4,3,7),该向量能满足其他所有进程的需求。所以,以 开头的所有序列都是 安全序列。
若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。
Ⅰ. 若该文件的数据不在内存中,则该进程进入睡眠等待状态
Ⅱ. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
Ⅲ. read 系统调用的参数应包含文件的名称
正确答案:A
正确答案:A一个多道批处理系统中仅有 和 两个作业, 比 晚 5ms 到达,它们的计算和 I/O 操作顺序如下:
:计算 60ms,I/O 80ms,计算 20ms
:计算 120ms,I/O 40ms,计算 40ms
若不考虑调度和切换时间,则完成两个作业需要的时间最少是( )。
正确答案:B
正确答案:B由于 比 晚 5ms 到达, 先占用 CPU, 作业运行的甘特图如下所示。
若某单处理器多进程系统中有多个就绪态进程,则下列关于处理机调度的叙述中,错误的是( )。
正确答案:C
正确答案:C下列关于进程和线程的叙述中,正确的是( )。
正确答案:A
正确答案:A下列选项中,不能改善磁盘设备 I/O 性能的是( )。
正确答案:B
正确答案:B在 TCP/IP 体系结构中,直接为 ICMP 提供服务的协议是( )。
正确答案:B
正确答案:B在物理层接口特性中,用于描述完成每种功能的事件发生顺序的是( )。
以太网的 MAC 协议提供的是( )。
正确答案:A
正确答案:A两台主机之间的数据链路层采用后退 N 帧协议 (GBN) 传输数据,数据传输速率为 16 kbps,单向传播时延为 270 ms,数据帧长度范围是 128~512 字节,接收方总是以与数据帧等长的帧进行确认。为使信道利用率达到最高,帧序号的比特数至少为( )。
正确答案:B
正确答案:B下列关于 IP 路由器功能的描述中,正确的是( )。
I. 运行路由协议,设置路由表
II. 监测到拥塞时,合理丢弃 IP 分组
III. 对收到的 IP 分组头进行差错校验,确保传输的 IP 分组不丢失
IV. 根据收到的 IP 分组的目的 IP 地址,将其转发到合适的输出线路上
正确答案:C
正确答案:CARP 协议的功能是( )。
某主机的 IP 地址为 180.80.77.55,子网掩码为 255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是( )。
正确答案:D
正确答案:D设有 6 个有序表 A、B、C、D、E、F,分别含有 10、35、40、50、60 和 200 个数据元素,各表中元素按升序排列。要求通过 5 次两两合并,将 5 个表最终合并成 1 个升序表,并在最坏情况下比较的总次数达到最小。请回答下列问题。
(1) 给出完整的合并过程,并求出最坏情况下比较的总次数。
(2) 根据你的合并过程,描述 个不等长升序表的合并策略,并说明理由。
1)对于长度分别为 m, n 的两个有序表的合并,最坏情况下是一直比较到两个表尾元素,比较次数为 m +n-1 次。故最坏情况的比较次数依赖于表长,为了缩短总的比较次数,根据哈夫曼树(最佳归并树)思想的启发,可采用如图所示的合并顺序。
根据上图中的 哈夫曼树,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 分。
假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,例如,“loading" 和 “being” 的存储映像如下图所示。
设 str1 和 str2 分别指向两个单词所在单链表的头结点,链表结点结构为 | data | next |,请设计一个时间上尽可能高效的算法,找出由 str1 和 str2 所指向两个链表共同后缀的起始位置(如图中字符 i 所在的结点位置 p)。要求:
1)给出算法的基本设计思想。
2)根据设计思想,采用 C 或 C++ 或 Java 语言描述算法,关键之处给出注释。
3)说明你所设计算法的时间复杂度。
顺序遍历两个链表到尾结点时,并不能保证两个链表同时到达尾结点。这是因为两个链表的长度不同。假设一个链表比另 一个链表长 k 个结点,我们先在长链表上遍历 k 个结点,之后同步遍历两个链表,这样就能够保证它们同时到达最后一个结点。由于两个链表从第一个公共结点到链表的尾结点都是重合的,所以它们肯定同时到达第 一个公共结点。
算法的基本设计思想:
①分别求出 strl 和 str2 所指的两个链表的长度 m 和 n。
②将两个链表以表尾对齐:令指针 p、q 分别指向 strl 和 str2 的头结点,若 ,则使 p 指向链表中的第 m-n+1 个结点;若 ,则使 q 指向链表中的第 n-m+1 个结点,即使指针 p 和 q 所指的结点到表尾的长度相等。
③反复将指针 p 和 q 同步向后移动,并判断它们是否指向同一结点。若 p 和 q 指向同一结点,则该点即为所求的共同后缀的起始位置。
2)算法的 C 语言代码描述:
struct Node {
int data;
Node *next;
};
int getLength(Node *h) {
int length = 0;
Node *p = h->next;
while (p) {
length++;
p = p->next;
}
return length;
}
Node *findCommonSuffix(Node *h1, Node *h2) {
Node *p1 = h1;
Node *p2 = h2;
int m = getLength(h1);
int n = getLength(h2);
if (m > n) {
for (int i = 0; i < m-n; i++) {
p1 = p1->next;
}
} else {
for (int i = 0; i < n-m; i++) {
p2 = p2->next;
}
}
while (p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
【评分说明】 ① 若考生所给算法实现正确,且时间复杂度为 O(m+n),可给 12分;若算法正确,但时间复杂度超过 O(m+n),则最高可给 9 分。
② 若在算法的基本设计思想描述中因文字表达没有非常清晰反映出算法思路,但在算法实现中能够清晰看出算法思想且正确的,可参照①的标准给分。
③ 若算法的基本设计思想描述或算法实现中部分正确,可参照①中各种情况的相应给分标准酌情给分。
③ 时间复杂度为 O(len1+len2) 或 O(max(len1,len2)), 其中 len1、len2 分别为两个链表的长度。
假定某计算机的 CPU 主频为 80MHz,CPI 为 4,平均每条指令访存 1.5 次,主存与 Cache 之间交换的块大小为 16B,Cache 的命中率为 99%,存储器总线宽度为 32 位。请回答下列问题。
(1) 该计算机的 MIPS 数是多少?平均每秒 Cache 缺失的次数是多少?在不考虑 DMA 传送的情况下,主存带宽至少达到多少才能满足 CPU 的访存要求?
(2) 假定在 Cache 缺失的情况下访问主存时,存在 0.0005% 的缺页率,则 CPU 平均每秒产生多少次缺页异常?若页面大小为 4KB,每次缺页都需要访问磁盘,访问磁盘时 DMA 传送采用周期挪用方式,磁盘 I/O 接口的数据缓冲寄存器为 32 位,则磁盘 I/O 接口平均每秒发出的 DMA 请求次数至少是多少?
(3) CPU 和 DMA 控制器同时要求使用存储器总线时,哪个优先级更高?为什么?
(4) 为了提高性能,主存采用四体低位交叉存储模式,工作时每 1/4 个存储周期启动一个体。若每个体的存储周期为 50ns,则该主存能提供的最大带宽是多少?
本题综合涉及多个考点:计算机的性能指标、存储器的性能指标、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 分)
某 16 位计算机中,带符号整数用补码表示,数据 Cache 和指令 Cache 分离。下表给出了指令系统中部分指令格式,其中 Rs 和 Rd 表示寄存器,mem 表示存储单元地址,(x) 表示寄存器 x 或存储单元 x 的内容。
该计算机采用 5 段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用 “按序发射,按序完成” 方式,没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题:
(1) 若 int 型变量 x 的值为 -513,存放在寄存器 R1 中,则执行指令 “SHR R1” 后,R1 的内容是多少(用十六进制表示)?
(2) 若某个时间段中,有连续的 4 条指令进入流水线,在其执行过程中没有发生任何阻塞,则执行这 4 条指令所需的时钟周期数为多少?
(3) 若高级语言程序中某赋值语句为 x=a+b,x、a 和 b 均为 int 型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流水线中的执行过程如下图所示。
则这 4 条指令执行过程中, 的 ID 段和 的 IF 段被阻塞的原因各是什么?
(4) 若高级语言程序中某赋值语句为 x=x*2+a,x 和 a 均为 unsigned int 类型变量,它们的存储单元地址分别表示为[x]、[a],则执行这条语句至少需要多少个时钟周期?要求模仿题 44 图画出这条语句对应的指令序列及其在流水线中的执行过程示意图。
1)x 的机器码为 = 1111 1101 1111 1111B,即指令执行前 (R1)=FDFFH,右移 1 位后为 1111 1110 1111 1111B,即指令执行后 (R1) = FEFFH。(2 分)
2)每个时钟周期只能有一条指令进入流水线,从第 5 个时钟周期开始,每个时钟周期都会有一条指令执行完毕,故至少需要 4+(5-1)=8 个时钟周期。(2 分)
3) 的 ID 段被阻塞的原因:因为 与 和 都存在 数据冒险,需等到 和 将结果写回寄存器后, 才能读寄存器内容,所以 的 ID 段被阻塞(1 分)。 的 IF 段被阻塞的原因:因为 的前一条指令 在 ID 段被阻塞,所以 的 IF 段被阻塞(1 分)。
注意:要求“按序发射,按序完成”,故 2) 中下一条指令的 IF 必须和上一条指令的 ID 并行,以免因上一条指令发生冲突而导致下一条指令先执行完。
4)因 2*x 操作有左移和加法两种实现,故 x=x*2+a 对应的指令序列为:
I1 LOAD R1, [x]
I2 LOAD R2, [a]
I3 SHL R1 // 或者 ADD R1, R1
I4 ADD R1, R2
I5 STORE R2, [x]
这 5 条指令在流水线中的执行过程如下表所示:
故 x=x*2+a 语句最少需要 17 个时钟周期。
某请求分页系统的局部页面置换策略如下:系统从 0 时刻开始扫描,每隔 5 个时间单位扫描一轮驻留集(扫描时间忽略不计),本轮没有被访问过的页框将被系统回收,并放入到空闲页框链尾,其中内容在下一次被分配之前不被清空。当发生缺页时,如果该页曾被使用过且还在空闲页框链表中,则重新放回进程的驻留集中;否则,从空闲页框链表头部取出一个页框。
假设不考虑其他进程的影响和系统开销,初始时进程驻留集为空。目前系统空闲页框链表中页框号依次为 32、15、21、41。进程 P 依次访问的 <虚拟页号,访问时刻> 是:
<1, 1>、<3, 2>、<0, 4>、<0, 6>、<1, 11>、<0, 13>、<2, 14>。请回答下列问题。
(1) 访问<0, 4>时,对应的页框号是什么?
(2) 访问<1, 11>时,对应的页框号是什么?说明理由。
(3) 访问<2, 14>时,对应的页框号是什么?说明理由。
(4) 该策略是否适合于时间局部性好的程序?说明理由。
1)页框号为 21。理由:因为起始 驻留集 为空,因此 0 页对应的页框为空闲链表中的第三个空闲页框 21,其对应的页框号为 21。
2)页框号为 32。理由:因 11>10 故发生第三轮扫描,页号为 1 的页框在第二轮已处于空闲页框链表中,此刻该页又被重新访问,因此应被重新放回驻留集中,其页框号为 32。
3)页框号为 41。理由:因为第 2 页从来没有被访问过,它不在驻留集中,因此从空闲页框链表中取出链表头的页框 41,页框号为 41。
4)合适。理由:如果程序的时间局部性越好,那么从空闲页框链表中重新取回的机会越大,该策略的优势越明显。
某文件系统空间的最大容量为 4TB(1TB= B),以磁盘块为基本分配单位。磁盘块大小为 1KB。文件控制块 (FCB) 包含一个 512B 的索引表区。请回答下列问题。
(1) 假设索引表区仅采用直接索引结构,索引表区存放文件占用的磁盘块号,索引表项中块号最少占多少字节?可支持的单个文件最大长度是多少字节?
(2) 假设索引表区采用如下结构:第 0~7 字节采用 <起始块号,块数> 格式表示文件创建时预分配的连续存储空间,其中起始块号占 6B,块数占 2B;剩余 504 字节采用直接索引结构,一个索引项占 6B,那么可支持的单个文件最大长度是多少字节?为了使单个文件的长度达到最大,请指出起始块号和块数分别所占字节数的合理值并说明理由。
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。
主机 H 通过快速以太网连接 Internet,IP 地址为 192.168.0.8,服务器 S 的 IP 地址为 211.68.71.80。H 与 S 使用 TCP 通信时,在 H 上捕获的其中 5 个 IP 分组如题 47-a 表所示。
请回答下列问题。
(1) 题 47-a 表中的 IP 分组中,哪几个是由 H 发送的?哪几个完成了 TCP 连接建立过程?哪几个在通过快速以太网传输时进行了填充?
(2) 根据题 47-a 表中的 IP 分组,分析 S 已经收到的应用层数据字节数是多少?
(3) 若题 47-a 表中的某个 IP 分组在 S 发出时的前 40 字节如题 47-b 表所示,则该 IP 分组到达 H 时经过了多少个路由器?
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。
关卡模式
每次只看一题,提交后立即显示对错、答案和解析。退出到阅读模式时会自动保留进度。
有 7 题因缺少可判定答案,已自动跳过,不影响当前闯关。
结算结果
本次全对。