【Operating System Concepts 9th】对第五章内容的一点困惑和解答

在Chapter 5 Process Synchronization的5.6.2中有这样一段话:

> It is important to admit that we have not completely eliminated busy waiting with this definition of the wait() and signal() operations. Rather, we have moved busy waiting from the entry section to the critical sections of application programs. Furthermore, we have limited busy waiting to the critical sections of the wait() and signal() operations, and these sections are short.

起初一直没有理解为什么作者说信号量的实现方式只是将忙等从临界区入口转移到了用户应用的临界区内部。于是在网上搜索相关内容,发现在stackoverflow等论坛上果然有人和笔者有相同的疑惑,参考了几篇回答后总结了一下自己的答案:

其实要理解这段话还需要结合作者之前段落中的内容:

> It is critical that semaphore operations be executed atomically. We must guarantee that no two processes can execute wait() and signal() operations on the same semaphore at the same time. This is a critical-section problem;

也就是说信号量机制的实现本身也绕不开临界区的问题,而如何处理wait()signal()函数内部的临界区冲突问题则需要根据不同的硬件环境做出调整。

所以这段话的正确理解应该是信号量机制将忙等这一环节转移到了wait()signal()函数内部的临界区问题中(想要实现互斥访问绕不开禁用中断或使用自旋锁)。

其实作者在后续的段落中也给出了补充说明,只是笔者当时没有很好的把这二者联系在一起理解,而是拘泥于Application Programs这一表述的意义,始终认为是将忙等转移到了wait()后的临界区代码中。

后续的段落原文如下:

> Furthermore, we have limited busy waiting to the critical sections of the wait() and signal() operations, and these sections are short.

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。