作業系統中的訊號量
訊號量是用於解決臨界區問題的整型變數,它使用兩個原子操作(wait 和 signal)來實現程序同步。
wait 和 signal 的定義如下:
- Wait
如果 wait 操作的引數 S 為正,則將其值減 1。如果 S 為負或零,則不執行任何操作。
wait(S) { while (S<=0); S--; }
- Signal
signal 操作將引數 S 的值加 1。
signal(S) { S++; }
訊號量的型別
訊號量主要有兩種型別:計數訊號量和二元訊號量。詳情如下:
- 計數訊號量
這些是整數值訊號量,具有不受限制的值域。這些訊號量用於協調資源訪問,其中訊號量計數是可用資源的數量。如果添加了資源,訊號量計數會自動遞增;如果刪除了資源,計數會遞減。
- 二元訊號量
二元訊號量類似於計數訊號量,但其值限制為 0 和 1。只有當訊號量為 1 時,wait 操作才有效;只有當訊號量為 0 時,signal 操作才成功。有時,實現二元訊號量比實現計數訊號量更容易。
訊號量的優點
訊號量的一些優點如下:
- 訊號量只允許一個程序進入臨界區。它們嚴格遵循互斥原則,並且比其他一些同步方法效率更高。
- 由於訊號量中沒有忙等待,因此不會浪費資源,因為處理器時間不會被不必要地浪費在檢查條件是否滿足以允許程序訪問臨界區。
- 訊號量在微核心的機器無關程式碼中實現。因此,它們是機器無關的。
訊號量的缺點
訊號量的一些缺點如下:
- 訊號量很複雜,因此必須以正確的順序實現 wait 和 signal 操作以防止死鎖。
- 訊號量不適用於大規模使用,因為它們的用途會導致模組化丟失。這是因為 wait 和 signal 操作阻止了為系統建立結構化佈局。
- 訊號量可能導致優先順序反轉,其中低優先順序程序可能首先訪問臨界區,而高優先順序程序稍後訪問。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP