2017-03-09 39 views
2

我正在準備通過過去考試進行有關操作系統的考試。它主要是關於Unix系統,C編程語言,它提到了很多POSIX,所以最好在這裏提出這個問題。信號量是否需要系統調用?

的問題是:

提供簡單的自旋鎖和/或信號三個缺點。解釋相應的其他機制如何改善問題。

給出一個解釋+ 3個的缺點是:

信號燈需要一個系統調用即使線程可以立即進行。 (0.5 P)另一方面,Spinlocks可以在用戶空間中完全實現,並且不需要系統調用。它們對於短暫的等待時間非常有效。 (0.5 P)

爲什麼信號需要系統調用?他們必須在內核空間嗎?他們是否需要執行特權指令?

需要考慮單處理器和多處理器系統。

+0

我會給你一個提示:什麼是信號量以及如何實現?我建議在一些問題上試圖理解它們,而不是記住答案,至少如果你對這個問題有興趣的話。 –

+0

@RuiFRibeiro我對這個主題感興趣,並且可以考慮在用戶空間中實現它的方式以及在內核空間中實現它的方式。我明白,系統調用是必需的**如果**在信號量上調用'wait()'的進程必須等待(例如信號量被完全使用)並且**如果**一對一線程模型是用於屈服。然而,除此之外,我不明白爲什麼操作系統將不得不介入。該解決方案字面上說:「即使線程可能立即進行,信號也需要系統調用。」 **考試是明天**,所以我會很感激一個快速的答案。 –

+0

你有特殊的系統調用信號量http://www.tldp.org/LDP/lpg/node51.html或作爲一個窮人信號量你甚至可以有一個文件,甚至在共享內存中的變量例如。 ..我會建議一些疑問要與教授澄清,因爲他們經常對這個問題有他們特別的解釋,並給予他們更多的意見。 –

回答

2

有些歷史背景會使事情更加清晰。 POSIX IPC之前,信號量最初是System V進程間通信包(System V IPC)的一部分。這些名字可能會讓你知道事情的走向;原始用例被合作進程鎖定。 (我在99.99%的百分比確定IPC早於線程相當長一段時間。)

POSIX信號量與進程或線程一起工作,因此涉及操作系統。上下文很重要,因爲答案顯然是關於標準信號量的實現,而不是信號量的抽象概念。

0

是的,信號量需要系統調用,除非在特殊情況下。信號量必須能夠等待其他競爭者釋放資源。等待需要系統調用。

如果鎖上的競爭者可以訪問共享內存空間,並且他們彼此信任以遵守信號量協議,這種情況主要是當鎖在同一進程的線程之間時,則鎖不會總是需要系統調用:它可以使用無特權的處理器指令來檢查和更改鎖定狀態。這允許獲得鎖,如果它是空閒的,並且釋放鎖,但等待鎖釋放是另一回事。

自旋鎖保持忙碌(「旋轉」)直到鎖定變爲空閒。如果競爭鎖的線程已知可以在不同的CPU上運行,這可能是一種有效的策略。如果這些線程可能在同一個CPU上運行,那麼等待該鎖的線程需要允許另一個線程運行,因此它需要屈服。通過用戶空間線程,這可以在沒有系統調用的情況下完成。

信號量應該睡眠,直到鎖定準備就緒。在現實世界中,通過旋轉睡覺很難接受。休眠幾乎總是需要系統調用:內核將等待線程從調度程序的就緒列表中移出,並移到信號量對象的等待列表中。

相關問題