操作系统
2021-45
下表给出了整型信号量 S 的 wait() 和 signal() 操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

请回答下列问题。
1)为什么在 wait() 和 signal() 操作中对信号量 S 的访问必须互斥执行?
2)分别说明方法 1 和方法 2 是否正确。若不正确,请说明理由。
3)用户程序能否使用开/关中断指令实现临界区互斥?为什么?
答案
(1)wait() 和 signal() 对共享信号量 S 的读、改、写必须作为原子操作执行,否则并发访问会造成 S 的值错误。
(2)方法 1 错误,方法 2 正确。方法 1 在 wait() 的忙等期间始终关闭中断,当 S≤ 0 时,能够执行 signal() 的进程得不到运行机会,可能陷入死循环;方法 2 在等待期间重新开中断,并在修改 S 前再次关中断。
(3)不能。开/关中断指令是特权指令,只能在内核态执行。