進程間的同步和互斥

信號量與P、V操作

操作系統中是利用信號量來對資源和進程進行控制的,分爲公用信號量與私有信號量,其中公有信號量一般用於進程間的互斥,私有信號量一般用於進程間的同步。
這裏先對P、V操作進行大概的解釋。
P、V操作都是對臨界區資源進行管理的原語。

P操作

自己的大白話來說:看資源S有沒有,如果缺少資源S的話,就把調用P操作的進程給鎖住,等到有資源S爲止。
書上的定義:

P(S):1.S:=S-1;
	  2.若S>=0,則調用P(S)的進程繼續執行;
	  3.若S<0,則調用P(S)的進程被阻塞,並把它插入到等待信號量S的阻塞隊列中。

V操作

自己的大白話來說:看資源S有沒有,沒有的話釋放一個資源S,然後繼續執行調用V操作的進程。
書上的定義:

V(S):1.S:=S+1;
	  2.若S>0,則調用V(S)的進程繼續執行;
	  3.若S<=0,從等待信號量S的阻塞隊列中喚醒頭一個進程,然後調用V(S)的進程繼續執行。

同步

進程之間存在着大量的同步操作,但同步是怎麼一個概念呢。
用自己的話來說,相當於就是一個進程的執行時依賴於另一個進程的。這裏舉個栗子。
公交車的栗子!有兩個資源S1和S2,S1表示司機的私有信號量,S2表示售票員的信號量。初值都是0。
司機到站後停車,要等待售票員的進程結束後才能繼續開車,售票員等到司機停車後,賣完票開門關門後才能讓司機繼續開車。這裏司機依賴售票員進程結束後才能繼續開車,而售票員也依賴司機到站停車後才能繼續執行自己的進程。
在這裏插入圖片描述

互斥

互斥的理解比較簡單一點,就是有多個進程要去爭一個資源,如果一個進程搶到後,那麼其他進程就得等待那個進程釋放資源後纔可以繼續去搶這個資源。
這裏就不舉實際例子了。。因爲比較容易理解,這裏設S爲公有信號量,初值爲1,表示有1個資源且未被佔用。

進程P1			進程P2
P(S)			P(s)
S1				S2
V(S)			V(S)

也就比較容易用P、V操作寫出來了。

生產者-消費者問題

經常聽到生產者消費者問題,因爲這是計算機中經常遇到的,實際生活中也有這樣的例子。
生產者消費者P、V操作實例:設S爲公有信號量,初值爲1,表示進程進入臨界區,實現進程間的互斥。設S0爲私有信號量,初值爲0,表示產品數目。設Sn爲私有信號量,表示可用緩衝區數目,初值爲n。
在這裏插入圖片描述

死鎖

死鎖是由於在進程執行中需要多個資源,只有滿足時進程才能執行完成,但由於某些資源被其他進程所佔用,故造成死鎖。當兩個或者兩個以上的進程同時對多個互斥資源提出使用要求時,纔有可能導致死鎖。
這裏舉個例子,比如進程一需要的資源被進程二佔用,進程二需要的資源被進程三佔用,進程三需要的資源被進程一佔用,且互相之間又不釋放資源。就形成了一個有向圖環路。

產生死鎖的四個條件

1.互斥控制。進程對其所要求的資源進行排他控制,一個資源僅能被一個進程獨佔。
2.非剝奪控制。進程所獲得的資源在未被釋放之前,不能被其他進程剝奪。
3.逐次請求。進程以隨意的零星方式逐次獲得資源,而不是集中性的一次請求,這樣有利於提高資源的利用率。
4.環路條件。在發生死鎖時,其有向圖比構成環路,即前一進程保持着後一進程所要求的資源。

對死鎖的對策

1.鴕鳥策略。就是不管死鎖= =。讓他就鎖下去。。
2.預防策略。破壞產生死鎖四條件之一。
3.避免策略。精心的分配資源,動態的迴避死鎖。(銀行家算法)
4.檢測和解除。系統來檢測出並採取措施解除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章