【发布时间】:2017-07-31 15:03:12
【问题描述】:
我正在通过过去的考试来准备有关操作系统的考试。它主要是关于 Unix 系统,C 编程语言,它提到了很多 POSIX,所以最好在这里问这个问题。
问题是:
给出简单自旋锁和/或信号量的三个缺点。解释相应的其他机制如何改进该问题。
给出的 3 个缺点之一 + 解释如下:
即使线程可以立即继续,信号量也需要系统调用。 (0.5 P) 另一方面,自旋锁可以完全在用户空间中实现,不需要系统调用。它们对于较短的等待时间非常有效。 (0.5P)
为什么信号量需要系统调用?它们必须在内核空间中吗?它们是否需要执行特权指令?
单处理器和多处理器系统都需要考虑。
【问题讨论】:
-
我给你一个提示:什么是信号量,它是如何实现的?我建议在一些问题中尝试理解它们,而不是记住答案,至少如果您对该主题感兴趣的话。
-
@RuiFRibeiro 我对这个主题很感兴趣,并且可以考虑在用户空间实现它的方法和在内核空间实现它的方法。我确实理解需要系统调用 if 在信号量上调用
wait()的进程必须等待(例如,信号量已完全使用)并且 if 一对一一种线程模型用于屈服。但是,除此之外,我不明白为什么操作系统必须参与其中。该解决方案的字面意思是:“即使线程可以立即继续,信号量也需要系统调用。” 明天就要考试了,希望能尽快回答。 -
你有特殊的系统调用信号量tldp.org/LDP/lpg/node51.html 或者作为一个穷人信号量你甚至可以有一个文件,甚至是共享内存中的一个变量......我会建议一些与教授一起澄清的疑问,因为他们通常对主题有自己的特殊解释,并给他们的意见更多的点。
-
请注意,该解决方案在客观上是错误的。 futexes 旨在支持信号量,并且这样做不需要在非竞争情况下需要系统调用。
-
我对信号量在任何情况下都需要系统调用的答案提出异议。只有当您处理相互不信任的进程时,您才需要内核来监督信号量。在这种情况下,使用信号量需要一个系统调用。如果您有“遵守规则”的进程,则可以在用户空间中实现和使用信号量。
标签: kernel cpu privileges system-calls semaphore