以下问题已在 GATE CS 2006 考试中提出。
1) 考虑三个进程(进程 id 分别为 0、1、2),计算时间突发为 2、4 和 8 个时间单位。所有进程都在零时间到达。考虑最长剩余时间优先(LRTF)调度算法。在 LRTF 中,通过优先处理具有最低进程 ID 的进程来打破联系。平均周转时间为:
(一) 13个单位
(B) 14 台
(C) 15 台
(D) 16 台
答案 (A)
设进程为 p0、p1 和 p2。这些过程将按以下顺序执行。
p2 p1 p2 p1 p2 p0 p1 p2 p0 p1 p2
0 4 5 6 7 8 9 10 11 12 13 14
流程的周转时间是流程提交和完成之间的总时间。
p0 = 12 (12-0) 的周转时间
p1 = 13 (13-0) 的周转时间
p2 = 14 (14-0) 的转身时间
平均周转时间为 (12+13+14)/3 = 13。
2) 考虑三个进程,都在时间 0 到达,总执行时间分别为 10、20 和 30 个单位。每个进程将前 20% 的执行时间用于 I/O,接下来的 70% 的时间用于计算,最后 10% 的时间再次用于 I/O。操作系统使用最短剩余计算时间优先调度算法,并在运行进程被 I/O 阻塞或运行进程完成其计算突发时调度新进程。假设所有 I/O 操作都可以尽可能地重叠。 CPU 保持空闲的时间百分比是多少? (A) 0%
(B) 10.6%
(C) 30.0%
(四) 89.4%
答案 (B)
设三个进程为 p0、p1 和 p2。它们的执行时间分别为 10、20 和 30。 p0 在 I/O 上花费了前 2 个时间单位,7 个 CPU 时间单位,最后在 I/O 上花费了 1 个单位。 p1 在 I/O 上花费了前 4 个单位,在 CPU 时间上花费了 14 个单位,最后在 I/O 上花费了 2 个单位。 p2 在 I/O 上花费了前 6 个单位,21 个 CPU 时间单位,最后在 I/O 上花费了 3 个单位。
idle p0 p1 p2 idle
0 2 9 23 44 47
Total time spent = 47
Idle time = 2 + 3 = 5
Percentage of idle time = (5/47)*100 = 10.6 %
3) 原子取回并设置 x, y指令无条件地将内存位置 x 设置为 1 并在 y 中获取 x 的旧值,而不允许对内存位置 x 进行任何干预访问。考虑以下二进制信号量上 P 和 V 函数的实现。
void P (binary_semaphore *s) {
unsigned y;
unsigned *x = &(s->value);
do {
fetch-and-set x, y;
} while (y);
}
void V (binary_semaphore *s) {
S->value = 0;
}
以下哪一项是正确的?
(A) 如果在 P 中禁用了上下文切换,则实现可能无法工作。
(B) 可以使用一对正常的加载/存储来代替使用 fetch-and-set
(C) V的执行有误
(D) 代码没有实现二进制信号量
答案 (A)
让我们来谈谈操作 P()。它将 s 的值存储在 x 中,然后获取 x 的旧值,将其存储在 y 中并将 x 设置为 1。如果其他进程不执行 V() 并设置,则进程的 while 循环将永远继续s 的值为 0。如果在 P 中禁用上下文切换,while 循环将永远运行,因为没有其他进程能够执行 V()。
4) 考虑以下运行 n 个进程的系统的快照。进程 i 持有资源 R 的 Xi 实例,1 <= i <= n。目前,R 的所有实例都已被占用。此外,对于所有 i,进程 i 已请求额外的 Yi 实例,同时持有它已有的 Xi 实例。正好有两个进程 p 和 q 使得 Yp = Yq = 0。以下哪一项可以作为保证系统不会接近死锁的必要条件?
(A) min (Xp, Xq) < max (Yk) 其中 k != p and k != q (B) Xp + Xq >= min (Yk) 其中 k != p and k != q
(C) 最大 (Xp, Xq) > 1
(D) 最小 (Xp, Xq) > 1
答案 (B)
由于 p 和 q 都不需要额外的资源,它们都可以完成并释放 Xp + Xq 资源,而无需请求任何额外的资源。如果 p 和 q 释放的资源足够另一个进程等待 Yk 资源,那么系统不会接近死锁。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。