以下问题已在 GATE CS 2005 考试中提出。
1) 通常,用户程序中的 I/O 指令会阻止用户程序直接处理 I/O。对于具有显式 I/O 指令的 CPU,通过赋予 I/O 指令特权来确保这种 I/O 保护。在具有内存映射 I/O 的 CPU 中,没有明确的 I/O 指令。对于具有内存映射 I/O 的 CPU,以下哪一项是正确的?
(a) 操作系统例程确保 I/O 保护
(b) I/O 保护由硬件陷阱确保
(c) 在系统配置期间确保 I/O 保护
(d) 无法进行 I/O 保护
答案(一)
内存映射 I/O 意味着通过通用内存访问而不是专门的 IO 指令来访问 I/O。一个例子,
unsigned int volatile const *pMappedAddress const = (unsigned int *)0x100;
因此,程序员可以直接访问任何内存位置。为了防止这种访问,操作系统(内核)会将地址空间划分为内核空间和用户空间。用户应用程序可以轻松访问用户应用程序。要访问内核空间,我们需要系统调用(陷阱)。
感谢 Venki 提供上述解释。
2)磁盘中的交换空间是做什么用的?
(a) 保存临时 html 页面
(b) 保存过程数据
(c) 存储超级块
(d) 存储设备驱动程序
答案(二)
交换空间通常用于存储过程数据。有关更多详细信息,请参阅此内容。
3) 增加计算机的 RAM 通常会提高性能,因为:
(a) 虚拟内存增加
(b) 更大的 RAM 更快
(c) 更少的页面错误发生
(d) 出现较少的分段错误
答案 (c)
4) 假设有 n 个进程,P1,……。 Pn 共享 m 个相同的资源单元,可以一次保留和释放一个。进程Pi的最大资源需求为Si,其中Si>0。下列哪一项是保证不发生死锁的充分条件?
答案 (c)
在极端情况下,所有进程都获得了 Si-1 资源并需要 1 个更多的资源。因此,以下条件必须为真,以确保不会发生死锁。
< m 上面的表达式可以写成如下。 < (m + n) 5) 考虑以下代码片段:
if (fork() == 0)
{ a = a + 5; printf(“%d,%d\n”, a, &a); }
else { a = a –5; printf(“%d, %d\n”, a, &a); }
设 u, v 是父进程打印的值,x, y 是子进程打印的值。以下哪一项是正确的?
(a) u = x + 10 和 v = y
(b) u = x + 10 和 v != y
(c) u + 10 = x 和 v = y
(d) u + 10 = x 和 v != y
答案 (c)
fork() 在子进程中返回 0,在父进程中返回子进程的进程 ID。
在子 (x) 中,a = a + 5
在父 (u) 中,a = a – 5;
因此 x = u + 10。
parent 和 child 中 ‘a’ 的物理地址必须不同。但是我们的程序访问虚拟地址(假设我们在使用虚拟内存的操作系统上运行)。子进程获得父进程的精确副本,并且“a”的虚拟地址在子进程中不会改变。因此,我们在父级和子级中获得相同的地址。例如,请参阅此运行。
感谢 Smart Pointer 提供上述解释。
请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。