以下问题已在 GATE 2008 CS 考试中提出。
1)一个进程执行以下代码
for (i = 0; i < n; i++) fork();
创建的子进程总数为
(一个
(B) 2^n – 1
(C) 2^n
(D) 2^(n+1) – 1;
答案 (B)
F0 // There will be 1 child process created by first fork
/ \
F1 F1 // There will be 2 child processes created by second fork
/ \ / \
F2 F2 F2 F2 // There will be 4 child processes created by third fork
/ \ / \ / \ / \
............... // and so on
如果我们对 i = 0 到 n-1 的上述树的所有级别求和,我们得到 2^n – 1。因此将有 2^n – 1 个子进程。另请参阅此帖子以获取更多详细信息。
2) 以下哪一项不符合死锁预防和死锁避免方案?
(A) 在死锁预防中,如果结果状态是安全的,则总是准许对资源的请求
(B) 在死锁避免中,如果结果状态是安全的,则总是准许对资源的请求
(C) 死锁避免比死锁预防的限制更少
(D) 避免死锁需要先验的资源需求知识
答案 (A)
死锁预防方案通过确保四个必要条件之一不发生来处理死锁。在死锁预防中,即使结果状态是安全的,对资源的请求也可能不被批准。 (有关更多详细信息,请参阅 Galvin 书籍幻灯片)
3) 处理器使用 36 位物理地址和 32 位虚拟地址,页框大小为 4 KB。每个页表条目的大小为 4 个字节。一个三级页表用于虚拟到物理地址的转换,其中虚拟地址的使用如下
• 位 30-31 用于索引到第一级页表
• 位 21-29 用于索引到二级页表
• 位 12-20 用于索引到第三级页表,以及
• 位 0-11 用作页面内的偏移量
一级、二级、三级页表的页表项中寻址下一级页表(或页框)所需的位数分别为
(A) 20、20 和 20
(B) 24、24 和 24
(C) 24、24 和 20
(D) 25、25 和 24
答案 (D)
虚拟地址大小 = 32 位
物理地址大小 = 36 位
物理内存大小 = 2^36 字节
页框大小 = 4K 字节 = 2^12 字节
访问物理内存帧所需的位数 = 36 – 12 = 24
所以在第三级页表中,访问一个条目需要 24 位。
9 位虚拟地址用于访问二级页表条目,二级页的大小为 4 个字节。所以二级页表的大小是 (2^9)*4 = 2^11 字节。这意味着有 (2^36)/(2^11) 个可能的位置来存储这个页表。因此,第二个页表需要 25 位来寻址。同样,第三个页表需要 25 位来寻址。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。