选择题
数据结构
设 n 是描述问题规模的非负整数,下面程序片段的时间复杂度是( )。
x = 2;
while (x < n / 2)
x = 2 * x;
查看答案与解析
正确答案:A
正确答案:A在程序中,执行频率最高的语句为
x = x * 2,设该语句总共执行了 T(n) 次,则
,故
,得
。
整卷阅读
作答方式
阅读模式保留整卷文档,游戏模式按题闯关并即时反馈。
| 1 | A | 2 | B | 3 | B | 4 | C | 5 | C |
| 6 | D | 7 | A | 8 | C | 9 | D | 10 | A |
| 11 | B | 12 | D | 13 | A | 14 | B | 15 | D |
| 16 | A | 17 | C | 18 | D | 19 | C | 20 | C |
| 21 | D | 22 | C | 23 | B | 24 | A | 25 | D |
| 26 | B | 27 | D | 28 | D | 29 | A | 30 | C |
| 31 | B | 32 | C | 33 | A | 34 | B | 35 | B |
| 36 | D | 37 | D | 38 | C | 39 | C | 40 | B |
设 n 是描述问题规模的非负整数,下面程序片段的时间复杂度是( )。
x = 2;
while (x < n / 2)
x = 2 * x;
正确答案:A
正确答案:Ax = x * 2,设该语句总共执行了 T(n) 次,则
,故
,得
。
元素 a,b,c,d,e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,知道所有元素都出栈,则在所有可能的出现序列中,以元素 d 开头的序列个数是( )。
正确答案:B
正确答案:B已知循环队列存储在一维数组 A[0..n-1]中,且队列非空时 front 和 rear 分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在 A[0]处,则初始时 front 和 rear 的值分别是( )。
正确答案:B
正确答案:BA[0] 处,此时 front 和 rear 值都为 0。入队时由于要执行 (rear+1) % n 操作,所以如果入队后指针指向 0, 则 rear 初值为 n-1,而由于第一个元素在 A[0] 中,插入操作只改变 rear 指针,所以 front 为 0 不变。
若一棵完全二叉树有 768 个结点,则该二叉树中叶结点的个数是()
若一棵二叉树的前序遍历序列和后序遍历序列分别为 1,2,3,4 和 4,3,2,1,则该二叉树的中序遍历序列不会是()
正确答案:C
正确答案:C已知一棵有 2011 个结点的树,其叶结点个数为 116,该树对应的二叉树中无右孩子的结点个数是( )。
正确答案:D
正确答案:D对于下列关键字序列,不可能构成某二叉排序树中一条查找路径的序列是( )。
正确答案:A
正确答案:A下列关于图的叙述中,正确的是( )。
I. 回路是简单路径
II. 存储稀疏图,用邻接矩阵比邻接表更省空间
III. 若有向图中存在拓扑序列,则该图不存在回路
为提高哈希(Hash)表的查找效率,可以采取的正确措施是( )。
I. 增大装填因子
II. 设计冲突少的哈希函数
III. 处理冲突时避免产生堆积现象
正确答案:D
正确答案:D为实现快速排序算法,待排序序列宜采用的存储方式是()
已知序列 25,13,10,12,9 是大根堆,在序列尾部插入新元素 18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是()
正确答案:B
正确答案:B插入 18 后,首先将 18 与 10 比较,交换位置,再将 18 与 25 比较,不交换位置。共比较了 2 次,调整的过程如下图所示。
float 型数据通常用 IEEE754 单精度浮点数格式表示。若编译器将 float 型变量 x 分配在一个 32 位浮点寄存器 FR1 中,且 x=-8.25,则 FR1 的内容是( )。
正确答案:A
正确答案:A本题题意即考查 IEEE 754 单精度浮点数 的表示。先将 x 转换成二进制为 ,其次计算阶码 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。
下列各类存储器中,不采用随机存取方式的是( )。
正确答案:B
正确答案:B某计算机存储器按字节编址,主存地址空间大小为 64MB,现用 4M×8 位的 RAM 芯片组成 32MB 的主存储器,则存储器地址寄存器 MAR 的位数至少是( )。
正确答案:D
正确答案:D偏移寻址将某个寄存器内容与一个形式地址相加而生成有效地址。下列寻址方式中,不属于偏移寻址方式的是( )。
正确答案:A
正确答案:A某机器有一个标志寄存器,其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF,条件转移指令 bgt(无符号整数比较大于时转移)的转移条件是 ( )
正确答案:C
正确答案:C下列给出的指令系统特点中,有利于实现指令流水线的是( )。
Ⅰ. 指令格式规整且长度一致
Ⅱ. 指令和数据按边界对齐存放
Ⅲ. 只有 Load/Store 指令才能对操作数进行存储访问
正确答案:D
正确答案:D假定不采用 Cache 和指令预取技术,且机器处于“开中断”状态,则在下列有关指令执行的叙述中,错误的是( )。
正确答案:C
正确答案:C在系统总线的数据线上,不可能传输的是( )。
正确答案:C
正确答案:C某计算机有五级中断 ,中断屏蔽字为 , ( )表示对 级中断进行屏蔽。若中断响应优先级从高到低的顺序是 ,且要求中断处理优先级从高到低的顺序是 ,则 的中断处理程序中设置的中断屏蔽字是( )。
某计算机处理器主频为 50MHz,采用定时查询方式控制设备 A 的 I/O,查询程序运行一次所用的时钟周期数至少为 500。在设备 A 工作期间,为数据不丢失,每秒需对其查询至少 200 次,则 CPU 用于设备 A 的 I/O 的时间占整个 CPU 时间的百分比至少是( )。
正确答案:C
正确答案:C下列选项中,满足短任务优先且不会发生饥饿现象的调度算法是( )。
正确答案:B
正确答案:B在支持多线程的系统中,进程 P 创建的若干线程不能共享的是( )。
正确答案:D
正确答案:D用户程序发出磁盘 I/O 请求后,系统的正确处理流程是( )。
正确答案:B
正确答案:BI/O 软件 一般从上到下分为四个层次:用户层、与设备无关的软件层、设备驱动程序以及中断处理程序。与设备无关的软件层也就是系统调用的处理程序。
当用户使用设备时,首先在用户程序中发起一次系统调用,操作系统的内核接到该调用请求后请求调用处理程序进行处理,再转到相应的设备驱动程序,当设备准备好或所需数据到达后设备硬件发出中断,将数据按上述调用顺序逆向回传到用户程序中。
某时刻进程的资源使用情况如下表所示。
此时的安全序列是( )。
正确答案:D
正确答案:D在缺页处理过程中,操作系统执行的操作可能是()。
I、修改页表
II、磁盘 I/O
III、分配页框
正确答案:D
正确答案:D当系统发生抖动 (thrashing) 时,可以采取的有效措施是( )。
I. 撤销部分进程
II. 增加磁盘交换区的容量
III. 提高用户进程的优先级
正确答案:A
正确答案:A在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是()。
正确答案:C
正确答案:C编译后的模块需要经过链接才能装载,而链接后形成的地址才是整个程序的完整逻辑地址空间。以 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。
某文件占 10 个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为 100μs,将缓冲区的数据传送到用户区的时间是 50μs,CPU 对一块数据进行分析的时间为 50μs。在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是( )。
有两个并发执行的进程 P1 和 P2,共享初值为 1 的变量 x。P1 对 x 加 1,P2 对 x 减 1。加 1 和减 1 操作的指令序列分别如下所示。
P1 // 加 1 操作
load R1, x // 取 x 到寄存器 R1 中
inc R1
store x, R1 // 将 R1 的内容存入 x
P2 // 减 1 操作
load R2, x // 取 x 到寄存器 R2 中
dec R2
store x, R2 // 将 R2 的内容存入 x
两个操作完成后,x 的值( )。
正确答案:C
正确答案:CTCP/IP 参考模型的网络层提供的是( )。
正确答案:A
正确答案:A若某通信链路的数据传输速率为 2400 bps,采用 4 相位调制,则该链路的波特率是( )。
正确答案:B
正确答案:B数据链路层采用选择重传协议 (SR) 传输数据,发送方已发送了 0~3 号数据帧,现已收到 1 号帧的确认,而 0、2 号帧依次超时,则此时需要重传的帧数是( )。
正确答案:B
正确答案:B下列选项中,对正确接收到的数据帧进行确认的 MAC 协议是( )。
正确答案:D
正确答案:D某网络拓扑如下图所示,路由器 R1 只有到达子网 192.168.1.0/24 的路由。为使 R1 可以将 IP 分组正确地路由到图中所有子网,则在 R1 中需要增加的一条路由(目的网络,子网掩码,下一跳)是( )。
正确答案:D
正确答案:D要使 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。
在子网 192.168.4.0/30 中,能接收目的地址为 192.168.4.3 的 IP 分组的最大主机数是( )。
正确答案:C
正确答案:C主机甲向主机乙发送一个 (SYN=1, seq=11220) 的 TCP 段,期望与主机乙建立 TCP 连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的 TCP 段可能是
正确答案:C
正确答案:C主机甲与主机乙之间已建立一个 TCP 连接,主机甲向主机乙发送了 3 个连续的 TCP 段,分别包含 300 字节、400 字节和 500 字节的有效载荷,第 3 个段的序号为 900。若主机乙仅正确接收到第 1 和第 3 个段,则主机乙发送给主机甲的确认序号是
正确答案:B
正确答案:B已知有 6 个顶点(顶点编号为 0~5)的有向带权图 G ,其邻接矩阵 A 为上三角矩阵,按行为主序(行优先)保存在如下的一维数组中。
要求:
(1) 写出图 G 的邻接矩阵 A 。
(2) 画出有向带权图 G 。
(3) 求图 G 的关键路径,并计算该关键路径的长度。
1)上三角矩阵 A[6][6] 中,第 1 行至第 5 行主对角线上方的元素个数分别为 5, 4, 3, 2, 1, 由此可以画出压缩存储数组中的元素所属行的情况,如下图所示。
用“平移”的思想,将前 5 个、后 4 个、后 3 个、后 2 个、后 1 个元素,分别移动到矩阵对 角线 (“0”) 右边的行上。图 G 的邻接矩阵 A 如下所示。
2)据上面的邻接矩阵,画出有向带权图 G, 如下图所示。
(3) 按照算法,先计算各个事件的最早发生时间,计算过程如下:
;
;
;
;
;
;
接下来求各个时间的最迟发生时间,计算过程如下:
;
;
;
;
;
;
即 ve() 和 vl() 数组如下表所示。
| i | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| ve(i) | 0 | 4 | 9 | 13 | 12 | 16 |
| vl(i) | 0 | 4 | 9 | 13 | 13 | 16 |
接下来计算所有活动的最早和最迟发生时间 e() 和 l():
;
;
;
;
;
;
;
;
;
;
;
;
e() 和 l() 数组与它们的差值如下表所示。
| e() | 0 | 0 | 4 | 9 | 9 | 13 | 12 |
| l() | 0 | 3 | 4 | 9 | 10 | 13 | 13 |
| l-e | 0 | 3 | 0 | 0 | 1 | 0 | 1 |
满足 l() - e() = 0 的路径就是关键路径,所以关键路径为 、 、 、 ,如下图所示(粗线表示),长度为 。
一个长度为 L(L ≥ 1) 的升序序列 S ,处在第 个位置的数称为 S 的中位数。例如,若序列 S1 = (11,13,15,17,19),则 S1 的中位数是 15 。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列 S2 = (2,4,6,8,20),则 S1 和 S2 的中位数是 11 。现有两个等长的升序序列 A 和 B ,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列 A 和 B 的中位数。要求:
(1) 给出算法的基本设计思想。
(2) 根据设计思想,采用 C 或 C++ 或 Java 语言描述,关键之处给出注释。
(3) 说明你所设计算法的时间复杂度和空间复杂度。
(1) 求两个序列 A 和 B 的中位数最简单的办法就是将两个升序序列进行归并排序,然后求其中位数。这种解法虽可求解,但在时间和空间两方面都不大符合高效的要求,但也能获得部分分值。
根据题目分析,分别求两个升序序列 A 和 B 的中位数,设为 a 和 b。
① 若 ,则 或 即为所求的中位数。
原因:容易验证,如果将两个序列归并排序,则最终序列中,排在子序列 b 前边的元素为先前两个序列中排在 a 和 b 前边的元素;排在子序列 ab 后边的元素为先前两个序列中排在 a 和 b后边的元素。所以子序列 ab 一定位于最终序列的中间,又因为 a=b,显然 a 就是中位数。
②否则(假设 ),中位数只能出现 (a,b) 范围内。
原因:同样可以用归并排序后的序列来验证,归并排序后必然有形如 的序列出现,中位数必出现在 (a,b) 之间。因此可以做如下处理:舍弃 a 所在序列 A 的较小一半,同时舍弃 b 所在序列 B 的较大一半。在保留两个升序序列中求出新的中位数 a 和 b,重复上述过程,直到两个序列中只含一个元素时为止,则较小者即为所求的中位数。每次总的元素个数变为原来的一半。
算法的基本设计思想如下。
分别求出序列 A 和 B 的中位数,设为 a 和 b,求序列 A 和 B 的中位数过程如下:
① 若 ,则 a 或 b 即为所求中位数,算法结束。
② 若 ,则舍弃序列 A 中较小的一半,同时舍弃序列 B 中较大的一半,要求舍弃的长度 相等。
③ 若 ,则舍弃序列 A 中较大的一半,同时舍弃序列 B 中较小的一半,要求舍弃的长度 相等。
在保留的两个升序序列中,重复过程①、②、③,直到两个序列中只含一个元素时为止,较小者即为所求的中位数。
2)算法实现
int M_Search(int A[], int B[], int n) {
int s1 = 0, d1 = n - 1, m1, s2 = 1, d2 = n - 1, m2;
// 分别表示序列 A 和 B 的首位、末位和中位数
while (s1 != d1 || s2 != d2) {
m1 = (s1 + d1) / 2;
m2 = (s2 + d2) / 2;
if (A[m1] == B[m2])
return A[m1]; // 满足条件 1
if (A[m1] < B[m2]) { // 满足条件 2
if ((s1 + d1) % 2 == 0) {
// 若元素个数为奇数
s1 = m1; // 舍弃 A 中间点以后的部分,且保留中间点
d2 = m2; // 舍弃 B 中间点以前的部分,且保留中间点
} else {
// 元素个数为偶数
s1 = m1 + 1; // 舍弃 A 中间点及中间点以后的部分
d2 = m2; // 舍弃 B 中间点以前部分,且保留中间点
}
} else { // 满足条件 3
if ((s1 + d1) % 2 == 0) {
// 若元素个数为奇数
d1 = m1; // 舍弃 A 中间点以前的部分,且保留中间点
s2 = m2; // 舍弃 B 中间点以后的部分,且保留中间点
} else {
// 元素个数为偶数
d1 = m1 + 1; // 舍弃 A 中间点及中间点以前部分
s2 = m2; // 舍弃 B 中间点以后的部分,且保留中间点
}
}
}
return A[s1] < B[s2] ? A[s1] : B[s2];
}
3)时间复杂度 O(n),空间复杂度 O(1)。
假定在一个 8 位字长的计算机中运行如下 C 程序段:
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
若编译器编译时将 8 个 8 位寄存器 R1~R8 分别分配给变量 x、y、m、n、z1、z2、k1 和 k2。请回答下列问题。(提示:带符号整数用补码表示)
(1) 执行上述程序段后,寄存器 R1、R5 和 R6 的内容分别是什么(用十六进制表示)?
(2) 执行上述程序段后,变量 m 和 k1 的值分别是多少(用十进制表示)?
(3) 上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4) 计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
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(用补码 表示)时,其值为 -1111010B = -122。
m-n 的机器数与 x-y 的机器数相同,皆为 90H=1001 0000B,解释为带符号整数 k1(用 补码表示)时,其值为 -1110000B = -112。
3)能。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 位二进制所能表示的最小负数。
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为 16MB,主存(物理)地址空间大小为 1MB,页面大小为 4KB:Cache 采用直接映射方式,共 8 行:主存与 Cache 之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和 Cache 的部分内容分别如题 44-a 图、题 44-b 图所示,图中页框号及标记字段的内容为十六进制形式。
请回答下列问题∶
(1) 虚拟地址共有几位,哪几位表示虚页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2) 使用物理地址访问 Cache 时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3) 虚拟地址 001C60H 所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
(4) 假定为该机配置一个 4 路组相连的 TLB,该 TLB 共可存放 8 个页表项,若其当前内容(十六进制)如题 44-c 图所示,则此时虚拟地址 024BACH 所在的页面是否在主存中?要求说明理由。
1)存储器按字节编址,虚拟地址空间大小为 16B=24B,故虚拟地址为 24 位;页面大小为 ,故高 12 位为虚页号。主存地址空间大小为 ,故物理地址为 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 所在的页面在主存中。
某银行提供 1 个服务窗口和 10 个顾客等待座位。顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:
cobegin
{
process 顾客 i
{
从取号机获得一个号码;
等待叫号;
获得服务;
}
process 营业员
{
while (TRUE) {
叫号;
为顾客服务;
}
}
}coend
请添加必要的信号量和 P、V(或 wait()、signal())操作实现上述过程的互斥和同步。要求写出完整的过程,说明信号量的含义并赋初值。
1)互斥资源:取号机(一次只一位顾客领号),因此设一个互斥信号量 mutex。
2)同步问题:顾客需要获得空座位等待叫号,当营业员空闲时,将选取一位顾客并为其服务。空座位的有、无影响等待顾客数量,顾客的有、无决定了营业员是否能开始服务,故分别设置信号量 empty 和 full 来实现这一同步关系。另外,顾客获得空座位后,需要等待叫号和被服务。这样,顾客与营业员就服务何时开始又构成了一个同步关系,定义信号量 service 来完成这一同步过程。
semaphore empty = 10; // 空座位的数量
semaphore mutex = 1; // 互斥使用取号机
semaphore full = 0; // 已占座位的数量
semaphore service = 0; // 等待叫号
process 顾客 i {
P(empty); // 等空位
P(mutex); // 申请使用取号机
从取号机上取号;
V(mutex); // 取号完毕
V(fu11); // 通知营业员有新顾客
P(service); // 等待营业员叫号
接受服务;
}
process 营业员 {
while(True) (
P(fu11); // 没有顾客则休息
叫号;
V(empty); // 离开座位
V(service); // 叫号
为顾客服务;
}
}
某文件系统为一级目录结构,文件的数据一次性写入磁盘,已写入的文件不可修改,但可多次创建新文件。请回答如下问题∶
(1) 在连续、链式、索引二种文件的数据块组织方式中。哪种更合适?要求说明理由。为定位文件数据块,需要在 FCB 中设计哪些相关描述字段?
(2) 为快速找到文件,对于 FCB,是集中存储好,还是与对应的文件数据块连续存储好?要求说明理由。
1)在磁盘中连续存放(采取连续结构),磁盘寻道时间更短,文件随机访问效率更高;在 FCB 中加入的字段为:<起始块号,块数> 或者 <起始块号,结束块号>。
2)将所有的 FCB 集中存放,文件数据集中存放。这样在随机查找文件名时,只需访问 FCB 对应的块,可减少磁头移动和磁盘 I/O 访问次数。
某主机的 MAC 地址为 00-15-C5-C1-5E-28,IP 地址为 10.2.128.100(私有地址)。题 47-a 图是网络拓扑,题 47-b 图是该主机进行 Web 请求的 1 个以太网数据帧前 80 个字节的十六进制及 ASCII 码内容。
请参考图中的数据回答以下问题。
(1) Web 服务器的 IP 地址是什么?该主机的默认网关的 MAC 地址是什么?
(2) 该主机在构造题 47-b 图的数据帧时,使用什么协议确定目的 MAC 地址?封装该协议请求报文的以太网帧的目的 MAC 地址是什么?
(3) 假设 HTTP/1.1 协议以持续的非流水线方式工作,一次请求 - 响应时间为 RTT,rfc.html 页面引用了 5 个 JPEG 小图像,则从发出题 47-b 图中的 Web 请求开始到浏览器收到全部内容为止,需要多少个 RTT?
(4) 该帧所封装的 IP 分组经过路由器 R 转发时,需修改 IP 分组头中的哪些字段?
注意:以太网数据帧结构和 IP 分组头结构分别如题 47-c 图、题 47-d 图所示。
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 头中的字段进行罗列,不给分,其他情况的情给分。
关卡模式
每次只看一题,提交后立即显示对错、答案和解析。退出到阅读模式时会自动保留进度。
有 7 题因缺少可判定答案,已自动跳过,不影响当前闯关。
结算结果
本次全对。