选择题
数据结构
为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。
查看答案与解析
正确答案:B
正确答案:B缓冲区 的概念出现在操作系统的设备管理中,其特点是先进先出。缓冲区的作用是解决主机与打印机之间速度不匹配的问题,而不应改变打印数据的顺序。若用栈,先进入缓冲区的数据则要排队到最后才能打印,显然不符题意,故选 B。
整卷阅读
作答方式
阅读模式保留整卷文档,游戏模式按题闯关并即时反馈。
| 1 | B | 2 | C | 3 | D | 4 | B | 5 | C |
| 6 | B | 7 | A | 8 | D | 9 | A | 10 | B |
| 11 | C | 12 | D | 13 | D | 14 | C | 15 | D |
| 16 | C | 17 | A | 18 | A | 19 | D | 20 | B |
| 21 | D | 22 | A | 23 | D | 24 | D | 25 | C |
| 26 | A | 27 | C | 28 | B | 29 | A | 30 | A |
| 31 | B | 32 | A | 33 | B | 34 | B | 35 | C |
| 36 | A | 37 | D | 38 | D | 39 | C | 40 | A |
为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。
正确答案:B
正确答案:B设栈 S 和队列 Q 的初始状态均为空,元素 a, b, c, d, e, f, g 依次进入栈 S 。若每个元素出栈后立即进入队列 Q,且 7 个元素出队的顺序是 b, d, c, f, e, a, g,则栈 S 的容量至少是( )。
正确答案:C
正确答案:C由于队列的特点是先进先出,即栈 S 的出栈顺序就是队 Q 的出队顺序。故本题只需注意栈的特点是先进后出。出入栈的详细过程见下表。
| 序号 | 说明 | 栈内 | 栈外 | 序号 | 说明 | 栈内 | 栈外 |
|---|---|---|---|---|---|---|---|
| 1 | a 入栈 | A | 8 | e 入栈 | ae | bdc | |
| 2 | b 入栈 | Ab | 9 | f 入栈 | aef | bdc | |
| 3 | b 出栈 | A | b | 10 | f 出栈 | ae | bdcf |
| 4 | c 入栈 | Ac | b | 11 | e 出栈 | a | bdcfe |
| 5 | d 入栈 | Acd | b | 12 | a 出栈 | bdcfea | |
| 6 | d 出栈 | Ac | bd | 13 | g 入栈 | g | bdcfea |
| 7 | c 出栈 | A | bdc | 14 | g 出栈 | 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 代表二叉树的根,L 代表根结点的左子树,R 代表根结点的右子树。若遍历后的结点序列是 3,1,7,5,6,2,4,则其遍历方式是()。
正确答案:D
正确答案:D下列二叉排序树中,满足平衡二叉树定义的是( )。
正确答案:B
正确答案:B已知一棵完全二叉树的第 6 层(设根为第 1 层)有 8 个叶结点,则该完全二叉树的结点个数最多是()。
正确答案:C
正确答案:C将森林转换为对应的二叉树,若在二叉树中,结点 u 是结点 v 的父结点的父结点,则在原来的森林中,u 和 v 可能具有的关系是( )。
I. 父子关系
II. 兄弟关系
III. u 的父结点与 v 的父结点是兄弟关系
正确答案:B
正确答案:B森林与二叉树的 转换规则 为“左孩子右兄弟”。在最后生成的二叉树中,父子关系在对应森林关系中可能是兄弟关系或原本就是父子关系。
情形 I:若结点 V 是结点 u 的第二个孩子结点,在转换时,结点 V 就变成结点 u 第一个孩子的右孩子,符合要求。
情形 II:结点 u 和 V 是兄弟结点的关系,但二者之中还有一个兄弟结点 k, 则转换后,结点 V 就变为结点 k 的右孩子,而结点 k 则是结点 u 的右孩子,符合要求。
情形 III: 若结点 u 的父结点与 v 的父结点是兄弟关系,则转换后,结点 u 和 v 分别在两者最左父结点的两棵子树中,不可能出现在同 一条路径中。
【逆向法】由题意可知 u 是 v 的父结点的父结点,如下图所示有 4 种情况:
根据树与二叉树的转换规则,将这 4 种情况转换成树种结点的关系。(1) 在原来的树中 u 是 v 的父结点的父结点; (2) 在树中 u 是 v 的父结点; (3) 在树中 u 是 v 的父结点的兄弟; (4) 在树中 u 与 v 是兄弟关系。由此可知 I 和 II 正确。
下列关于无向连通图特性的叙述中,正确的是()。
I. 所有顶点的度之和为偶数
II. 边数大于顶点个数减 1
III. 至少有一个顶点的度为 1
正确答案:A
正确答案:A下列叙述中,不符合 m 阶 B 树定义要求的是()。
正确答案:D
正确答案:D已知关键字序列 5,8,12,19,28,20,15,22 是小根堆(最小堆),插入关键字 3,调整后得到的小根堆是()。
正确答案:A
正确答案:A根据关键字序列得到的 小根堆 的二叉树形式如下图所示。
插入关键字 3 时,先将其放在小顶堆的末端,如图 (2) 所示。再将该关键字向上进行调整,得到的结果如图 (3) 所示。所以,调整后的小顶堆序列为 3, 5, 12, 8, 28, 20, 15, 22, 19。
若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是()。
正确答案:B
正确答案:B冯•诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是( )。
正确答案:C
正确答案:C一个 C 语言程序在一台 32 位机器上运行。程序中定义了三个变量 x,y 和 z,其中 x 和 z 是 int 型,y 为 short 型。当 x=127,y=-9 时,执行赋值语句 z=x+y 后,x、y 和 z 的值分别是:
正确答案:D
正确答案:DC 语言中的整型数据为 补码表示,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。
【提示】解题时,应先排除明显错误的选项,然后再推敲剩下的选项。
浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示,且位数分别为 5 位和 7 位(均含 2 位符号位)。若有两个数 X=2⁷×29/32,Y=2⁵×5/8,则用浮点加法计算 X+Y 的最终结果是( )。
正确答案:D
正确答案:D本题考查 浮点数加减。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 = ,阶码用补码表示,数值位 3 位,最大只能表示 7,即 X+Y 的结果的阶码 8 超出了该浮点数的表示范围,故溢出。
某计算机的 Cache 共有 16 块,采用 2 路组相联映射方式(即每组 2 块)。每个主存块大小为 32 字节,按字节编址。主存 129 号单元所在主存块应装入到的 Cache 组号是( )。
正确答案:C
正确答案:C某计算机主存容量为 64KB,其中 ROM 区为 4KB,其余为 RAM 区,按字节编址。现要用 2K×8 位的 ROM 芯片和 4K×4 位的 RAM 芯片来设计该存储器,则需要上述规格的 ROM 芯片数和 RAM 芯片数分别是()。
正确答案:D
正确答案:D某机器字长 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为 06H,则该转移指令成功转移后的目标地址是()。
正确答案:C
正确答案:C相对寻址 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”。
某计算机的指令流水线由四个功能段组成,指令流经各功能段的时间(忽略各功能段之间的缓存时间)分别为 90 ns、80 ns、70 ns、和 60 ns,则该计算机的 CPU 时钟周期至少是()。
正确答案:A
正确答案:A假设某系统总线在一个总线周期中并行传输 4 字节信息,一个总线周期占用 2 个时钟周期,总线时钟频率为 10MHz,则总线带宽是()。
正确答案:B
正确答案:B假设某计算机的存储系统由 Cache 和主存组成,某程序执行过程中访存 1000 次,其中访问 Cache 缺失(未命中)50 次,则 Cache 的命中率是()。
正确答案:D
正确答案:D下列选项中,能引起外部中断的事件是()。
正确答案:A
正确答案:A单处理机系统中,可并行的是()。
Ⅰ. 进程与进程 Ⅱ. 处理机与设备 Ⅲ. 处理机与通道 Ⅳ. 设备与设备
正确答案:D
正确答案:D下列进程调度算法中,综合考虑进程等待时间和执行时间的是()。
正确答案:D
正确答案:D某计算机系统中有 8 台打印机,由 K 个进程竞争使用,每个进程最多需要 3 台打印机。该系统可能会发生死锁的 K 的最小值是()。
正确答案:C
正确答案:C分区分配内存管理方式的主要保护措施是()。
正确答案:A
正确答案:A一个分段存储管理系统中,地址长度为 32 位,其中段号占 8 位,则最大段长是()。
下列文件物理结构中,适合随机访问且易于文件扩展的是()。
正确答案:B
正确答案:B假设磁头当前位于第 105 道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为 35,45,12,68,110,180,170,195,采用 SCAN 调度(电梯调度)算法得到的磁道访问序列是()。
正确答案:A
正确答案:A文件系统中,文件访问控制信息存储的合理位置是()。
正确答案:A
正确答案:A设文件 F1 的当前引用计数值为 1,先建立 F1 的符号链接(软链接)文件 F2,再建立 F1 的硬链接文件 F3,然后删除 F1。此时,F2 和 F3 的引用计数值分别是()。
在 OSI 参考模型中,自下而上第一个提供端到端服务的层次是()。
正确答案:B
正确答案:B在无噪声情况下,若某低通通信链路的带宽为 3kHz,采用 4 个相位,每个相位具有 4 种振幅的 QAM 调制技术,则该通信链路的最大数据传输速率是()。
正确答案:B
正确答案:B数据链路层采用后退 N 帧(GBN)协议,发送方已经发送了编号为 0~7 的帧。当计时器超时时,若发送方只收到 0、2、3 号帧的确认,则发送方需要重发的帧数是()。
正确答案:C
正确答案:C以太网交换机进行转发决策时使用的 PDU 地址是()。
在一个采用 CSMA/CD 协议的网络中,传输介质是一根完整的电缆,传输速率为 1Gbps,电缆中的信号传播速度是 200 000km/s。若最小数据帧长度减少 800 比特,则最远的两个站点之间的距离至少需要()。
正确答案:D
正确答案:D本题考查 CSMA/CD 的限制条件。若最短帧长减少,而数据传输速率不变,则需要使冲突域的最大距离变短来实现碰撞窗口的减少。碰撞窗口是指网络中收发结点间的往返时延,因此假设需要减少的最小距离为 S, 则可以得到如下公式(注意单位的转换):
减少的往返时延=减少的发送时延,即 。即,由于帧长减少而缩短的发送时延,应等于由于距离减少而缩短的传播时延的 2 倍。
可得 s=80, 即最远的两个站点之间的距离最少需要减少 80m。
【注意】CSMA/CD 的碰撞窗口 = 2 倍传播时延,报文发送时间 » 碰撞窗口。
主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了两个连续的 TCP 段,分别包含 300 字节和 500 字节的有效载荷,第一个段的序列号为 200,主机乙正确接收到两个段后,发送给主机甲的确认序列号是()。
正确答案:D
正确答案:D一个 TCP 连接总是以 1KB 的最大段长发送 TCP 段,发送方有足够多的数据要发送。当拥塞窗口为 16KB 时发生了超时,如果接下来的 4 个 RTT(往返时间)时间内的 TCP 段的传输都是成功的,那么当第 4 个 RTT 时间内发送的所有 TCP 段都得到肯定应答时,拥塞窗口大小是()。
FTP 客户和服务器间传递 FTP 命令时,使用的连接是()。
带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。假设从初始顶点到目标顶点之间存在路径,现有一种解决该问题的方法:
① 设最短路径初始时仅包含初始顶点,令当前顶点 u 为初始顶点;
② 选择离 u 最近且尚未在最短路径中的一个顶点 v,加入到最短路径中,修改当前顶点 u=v;
③ 重复步骤②,直到 u 是目标顶点时为止。
请问上述方法能否求得最短路径?若该方法可行,请证明之;否则,请举例说明。
该方法不一定能(或不能)求得最短路径。(4 分)
举例说明:(6 分)
图 (1) 中,设初始顶点为 1,目标顶点为 4,欲求从顶点 1 到顶点 4 之间的最短路径,显然这两点之间的最短路径长度为 2。利用给定方法求得的路径长度为 3,但这条路径并不是这两点之间的最短路径。
图 (2) 中,设初始顶点为 1,目标顶点为 3,欲求从顶点 1 到顶点 3 之间的最短路径。利用给定的方法,无法求出顶点 1 到顶点 3 的路径。
【评分说明】①若考生回答“能求得最短路径”,无论给出何种证明,均不给分。②考生只要举出类似上述的一个反例说明“不能求得最短路径”或答案中体现了“局部最优不等于全局最优”的思想,均可给 6 分;若举例说明不完全正确,可酌情给分。
已知一个带有表头结点的单链表,结点结构为:| data | link |
假设该链表只给出了头指针 list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第 k 个位置上的结点(k 为正整数)。若查找成功,算法输出该结点的 data 域的值,并返回 1;否则,只返回 0。要求:
(1) 描述算法的基本设计思想;
(2) 描述算法的详细实现步骤;
(3) 根据设计思想和实现步骤,采用程序设计语言描述算法(使用 C、C++ 或 Java 语言实现),关键之处请给出简要注释。
1)算法的基本设计思想:
问题的关键是设计一个尽可能高效的算法,通过链表的一趟遍历,找到倒数第 k 个结点的位置。算法的基本设计思想:定义两个指针变量 p 和 q,初始时均指向头结点的下一个结点(链表的第一个结点)。p 指针沿链表移动,当 p 指针移动到第 k 个结点时,q 指针开始与 p 指针同步移动;当 p 指针移动到最后一个结点时,q 指针所指示结点为倒数第 k 个结点。以上过程对链表仅进行一遍扫描。
2)算法的详细实现步骤:
3)算法实现
int FindElement(Node *head, int k) {
Node *p1 = head;
Node *p2 = head;
for (int i = 0; i < k; i++) {
p1 = p1->link;
if (p1 == NULL) {
return 0;
}
}
// p1 != NULL
while (p1 != NULL) {
p1 = p1->link;
p2 = p2->link;
}
printf("%d\n", p2->data);
return 1;
}
提示:算法程序题,如果能够写出数据结构类型定义,正确的算法思想都会至少给一半以上分数,如果能用伪代码写出自然更好,比较复杂的地方可以直接用文字表达。
【评分说明】① 若所给出的算法采用一遍扫描方式就能得到止确结果,可给满分 15 分:若采用两遍或多遍扫描才能得到正确结果的,最高给 10 分;若采用递归算法得到正确结果的,最高给 10 分;若实现算法的空间复杂度过高(使用了大小与 k 有关的辅助数组),但结果正确,最高给 10 分;若实现的算法的空间复杂度过高(使用了大小与 k 有关的辅助数组),但结果正确,最高给 10 分。
②若在算法基本思想描述和算法步骤描述中因文学表达没有非常清晰地反映出算法的思路,但在算法实现中能够清晰看出算法思想和步骤且正确,按照 () 的标准给分。
③若考生的答案中算法基本思想描述、算法步骤描述或算法实现中部分正确,可酌情给分。
某计算机的 CPU 主频为 500MHz,CPI 为 5(即执行每条指令平均需 5 个时钟周期)。假定某外设的数据传输率为 0.5MB/s,采用中断方式与主机进行数据传送,以 32 位为传输单位,对应的中断服务程序包含 18 条指令,中断服务的其他开销相当于 2 条指令的执行时间。请回答下列问题,要求给出计算过程。
(1) 在中断方式下,CPU 用于该外设 I/ O 的时间占整个 CPU 时间的百分比是多少?
(2) 当该外设的数据传输率达到 5M B/s 时,改用 DMA 方式传送数据。假定每次 DMA 传送块大小为 5000B,且 DMA 预处理和后处理的总开销为 500 个时钟周期,则 CPU 用于该外设 I/ O 的时间占整个 CPU 时间的百分比是多少?(假设 DMA 与 CPU 之间没有访存冲突)
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 分。
某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如下图所示,图中所有控制信号为 1 时表示有效、为 0 时表示无效。例如控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从内总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法指令“ADD (R1),R0”的功能为 (R0)+((R1)) → (R1),即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存。
下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C1 | MAR ← (PC) | PCout, MARin |
| C2 | MDR ← M(MAR) PC ← (PC) + 1 | MemR, MDRinE, PC+1 |
| C3 | IR ← (MDR) | MDRout, IRin |
| C4 | 指令译码 | 无 |
题干已给出取值和译码阶段每个节拍的功能和有效控制信号,我们应以弄清楚取指阶段中数据通路的信息流动作为突破口,读懂每个节拍的功能和有效控制信号。然后应用到解题思路中,包括划分执行步骤、确定完成的功能、需要的控制信号。
先分析题干中提供的示例(本部分解题时不做要求):
取指令的功能是根据 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 等。
于是得到参考答案如下:
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C5 | MAR ← (R1) | R1out, MARin |
| C6 | MDR ← M(MAR) | MemR, MDRinE |
| C7 | A ← (MDR) | MDRout, Ain |
| C8 | AC ← (A) + (R0) | R0out, Add, ACin |
| C9 | MDR ← (AC) | ACout, MDRin |
| C10 | M(MAR) ← (MDR) | MDRoutE, MemW |
本题答案不唯一,如果在 C6 执行 M(MAR)→MDR 的同时,完成 (R0) → A(即选择将 (R0) 写入 A),并不会发生总线冲突,这种方案可节省 1 个节拍,见下表:
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C5 | MAR ← (R1) | R1out, MARin |
| C6 | MDR ← M(MAR), A ← (R0) | MemR, MDRinE, R0out, Ain |
| C7 | AC ← (MDR) + (A) | MDRout, Add, ACin |
| C8 | MDR ← (AC) | ACout, MDRin |
| C9 | M(MAR) ← (MDR) | MDRoutE, MemW |
三个进程
、
、
互斥使用一个包含
个单元的缓冲区。
每次用 produce() 生成一个正整数并用 put() 送入缓冲区某一空单元中;
每次用 getodd() 从该缓冲区中取出一个奇数并用 countodd() 统计奇数个数;
每次用 geteven() 从该缓冲区中取出一个偶数并用 counteven() 统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义信号量的含义。要求用伪代码描述。
互斥资源:缓冲区只能互斥访问,因此设置互斥信号量 mutex。
同步问题: 、 因为奇数的放置与取用而同步,设同步信号量 odd; 、 因为偶数的放置与取用而同步,设置同步信号量 even; 、 、 因为共享缓冲区,设同步信号量 empty, 初值为 N。程序如下:
semaphore mutex=1;
semaphore odd=0, even=0;
semaphore empty=N;
P1() {
while (true) {
x = produce(); // 生成一个数
P(empty); // 判断缓冲区是否有空单元
P(mutex); // 缓冲区是否被占用
put();
V(mutex); // 释放缓冲区
if (x % 2 == 0)
V(even); // 如果是偶数,向 P3 发出信号
else
V(odd); // 如果是奇数,向 P2 发出信号
}
}
P2() {
while (true) {
P(odd); // 收到 P1 发来的信号,已产生一个奇数
P(mutex); // 缓冲区是否被占用
getodd();
V(mutex); // 释放缓冲区
V(empty); // 向 P1 发信号,多出一个空单元
countodd();
}
}
P3() {
while (true) {
P(even); // 收到 P1 发来的信号,已产生一个偶数
P(mutex); // 缓冲区是否被占用
geteven();
V(mutex); // 释放缓冲区
V(empty); // 向 P1 发信号,多出一个空单元
counteven();
}
}
请求分页管理系统中,假设某进程的页表内容如下表所示:
| 页号 | 页框(Page Frame)号 | 有效位(存在位) |
|---|---|---|
| 0 | 101H | 1 |
| 1 | 0 | |
| 2 | 254H | 1 |
页面大小为 4KB,一次内存的访问时间是 100ns,一次快表(TLB)的访问时间是 10ns,处理一次缺页的平均时间 10⁸ ns(已含更新 TLB 和页表的时间),进程的驻留集大小固定为 2,采用最近最少使用置换算法 (LRU) 和局部淘汰策略。假设
① TLB 初始为空;
② 地址转换时先访问 TLB,若 TLB 未命中,再访问页表(忽略访问页表之后的 TLB 更新时间);
③ 有效位为 0 表示页面不在内存,产生缺页中断,缺页中断处理后,返回到产生缺页中断的指令处重新执行。
设有虚地址访问序列 2362H、1565H、25A5H,请问:
(1) 依次访问上述三个虚地址,各需多少时间?给出计算过程。
(2) 基于上述访问序列,虚地址 1565H 的物理地址是多少?请说明理由。
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。
某网络拓扑如下图所示,路由器 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。
R1 和 R2 的路由表结构为:
(1) 将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,分别分配给局域网 1、局域网 2,每个局域网需分配的 IP 地址数不少于 120 个。请给出子网划分结果,说明理由或给出必要的计算过程。
(2) 请给出 R1 的路由表,使其明确包括到局域网 1 的路由、局域网 2 的路由、域名服务器的主机路由和互联网的路由。
(3) 请采用路由聚合技术,给出 R2 到局域网 1 和局域网 2 的路由。
(1) CIDR 中的子网号可以全 0 或全 1,但主机号不能全 0 或全 1。
因此若将 IP 地址空间 202.118.1.0/24 划分为 2 个子网,且每个局域网需分配的 IP 地址个数不少于 120 个,子网号至少要占用一位。
由 可知,主机号至少要占用 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.0 | 255.255.255.128 | E1 | |
| 202.118.1.128 | 255.255.255.128 | E2 | |
| 202.118.3.2 | 255.255.255.255 | 202.118.2.2 | L0 |
| 0.0.0.0 | 0.0.0.0 | 202.118.2.2 | L0 |
若子网 1 分配给局域网 2, 子网 2 分配给局域网 1, 见下表。
| 目的网络 IP 地址 | 子网掩码 | 下一跳 IP 地址 | 接口 |
|---|---|---|---|
| 202.118.1.128 | 255.255.255.128 | E1 | |
| 202.118.1.0 | 255.255.255.128 | E2 | |
| 202.118.3.2 | 255.255.255.255 | 202.118.2.2 | L0 |
| 0.0.0.0 | 0.0.0.0 | 202.118.2.2 | L0 |
(3) 局域网 1 和局域网 2 的地址可以聚合为 202.118.1.0/24,而对于路由器 R2 来说,通往局域网 1 和局域网 2 的转发路径都是从 L0 接口转发,因此采用路由聚合后,路由器 R2 到局域网 1 和局域网 2 的路由,见下表:
| 目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
|---|---|---|---|
| 202.118.1.0 | 255.255.255.0 | 202.118.2.1 | L0 |
关卡模式
每次只看一题,提交后立即显示对错、答案和解析。退出到阅读模式时会自动保留进度。
有 8 题因缺少可判定答案,已自动跳过,不影响当前闯关。
结算结果
本次全对。