信號量機制


1、整形信號量

信號量定義為一個整型量;
根據初始情況賦相應的值;
僅能通過兩個原子操作來訪問。
P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;

同步機制為什么叫PV操作
信號量機制發明者狄克斯特拉用荷蘭文定義的,因為在荷蘭文中,“通過”叫passeren,
“釋放”叫vrijgeven,PV操作因此得名。這是在計算機術語中不是用英語表達的極少數的例子之一。 

2、記錄型信號量

整型信號量符合“有限等待”原則
但整型信號量不符合“讓權等待”原則

不僅要有值的處理,還有隊列的處理。
形成記錄型數據結構,包括兩部分
整型變量value(代表資源數目)
進程鏈表L(鏈接所有等待進程):

Value>0,表示當前可用資源的數量;
Value≤0,其絕對值表示等待使用該資源的進程數,即在該信號量隊列上排隊的PCB的個數。

3、信號量的基本應用

 1、實現多個進程的互斥

1、互斥信號量mutex初值為1;
2、每個進程中將臨界區代碼置於P(mutex)和V(mutex)原語之間
3、必須成對使用P和V原語(在同一進程中),不能次序錯誤、重復或遺漏:
遺漏P原語則不能保證互斥訪問
遺漏V原語則不能在使用臨界資源之后將其釋放(給其他等待的進程)

 2、實現有序

前趨關系:
並發執行的進程P1和P2中,分別有代碼C1和C2,要求C1要在C2開始前完成;
為每對前趨關系設置一個同步信號量S12,並賦初值為0。則只有V操作所在進程獲得cpu時能運行

信號量值為0的點是限制的關鍵所在;
成對使用P和V原語(在有先后關系的兩個進程中),不能次序錯誤、重復或遺漏,否則同步順序出錯。

信號量操作原語是機械規定的,一方的申請操作只單一關心是否能申請到該信號量對應資源。
所以,不能用一個信號量解決供着、用者兩方面的問題。應從兩個人各自關心資源的角度設置兩個信號量。

4、AND信號量

出現原因:
一些應用往往需要兩個或多個共享資源,而不是前述的一個資源。
進程同時要求的共享資源越多,發生死鎖可能性越大。
解決思想:
一次性分配給進程所需資源,用完一起釋放。Wait操作時對它所有需要的資源都要判斷,
有AND條件,故稱“AND同步”、“同時wait”。

5、信號量集

引入原因:
每次只能獲得或釋放一個單位的資源,低效;
某些時候資源分配有下限的限制;
修改:在大於可分配設置的下界值t前提下,每次可分配d個。

只有一個信號量S的幾種特殊情況:
Swait(S, d, d),,允許每次申請d個資源,若現有資源數少於d,不予分配。
Swait(S, 1, 1),蛻化為一般的記錄型信號量,一次申請一個,至多分配一個(S>1時可計數,或S=1時可控制互斥)。
Swait(S, 1, 0),當S>=1時,允許多個進程進入某特定區,當S變為0后,阻止任何進程進入特定區,相當於可控開關。
並不對S資源的數量產生影響。

信號量題目做題一般方法:

分析問題,找出同步、互斥關系
根據資源設置信號量變量
寫出代碼過程,並注意P、V操作的位置
檢查代碼,模擬機器運行,體驗信號量的變化和程序運行過程是否正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM