二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)
一、什么是進程同步?
二、什么是進程互斥?
臨界資源:一個時間段內只允許一個進程使用的資源
為了實現對臨界資源的互斥訪問,同時保證系統整體性能,需要遵循以下原則:
注意:
5. 進程同步也可以說是進程之間的直接制約(合作)關系:因為進程之間是有直接的合作的,需要進程之間進行相互配合,各進程的工作推進需要遵循一定的先后順序
6. 進程互斥也可以說是進程之間的互斥制約(合作)關系:因為進程之間并沒有直接的合作關系,他們之間只是想要互斥的使用某種系統的臨界資源,所以才會產生這種制約關系
三、信號量機制
用戶進程可以通過使用操作系統提供的一對原語來對信號量進行操作,從而很方便的實現了進程互斥、進程同步。
wait、signal原語常簡稱為P、V操作(來自荷蘭語proberen和verhogen)。因此,做題的時候常把wait(S)、signal(S)兩個操作分別寫為P(S)、V(S)
1)整型信號量
2)記錄型信號量
進入wait原語時:
S.value 先進行了-1操作,如果S.value的值在經過-1操作之后 < 0,則說明原本的S.value的值是<=0的,而S.value的數值其實就代表著資源的數量,所以資源的數量是 <= 0, 則需要使用block原語來使該進程由運行態進入阻塞態,并掛到信號量S的等待(阻塞)隊列中。
進入signal原語時:
S.value 先進行了+1操作,如果S.value的值在經過+1操作之后 <= 0,則說明原本的S.value的值是<= -1的,而此時的S.value的數值的絕對值可以理解為等待隊列中的進程數量,所以等待隊列中的進程數量是 >= 1的, 則需要使用wakeup原語來喚醒等待隊列中的一個進程(即位于隊頭的進程),讓該進程從阻塞態變為就緒態。
四、用信號量機制實現進程互斥
為什么要把互斥信號量mutex的初值設置為1?
答:信號量的初值其實表示的是系統中某種資源的數量,而臨界區在一個時間段內也只能運行一個進程對它進行訪問,所以我們可以把臨界區也理解成一種特殊的資源,并且這個資源只有一個,也就是說臨界區只能被分配給一個進程使用。只有這個進程釋放了這個臨界區資源之后,才能被其他進程訪問。
在臨界區之前執行P(mutex)
在臨界區之后執行V(mutex)
P、V操作必須成對出現。缺少P(mutex)就不能保證臨界資源的互斥訪問。缺少V(mutex)會導致資源永不被釋放,等待進程永不被喚醒。
五、用信號量機制實現進程同步
六、用信號量機制實現前驅關系
對于前驅圖的理解:只有S1執行完之后,才能執行S2、S3。而只有S2執行完之后,才能執行S4、S5。剩下的以此類推。。。
其實,前驅關系可以看作是多層的同步關系
記住:
總結
以上是生活随笔為你收集整理的二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python找不到文件怎么办_pytho
- 下一篇: python数据库连接池_Python实