操作系統知識整理4:進程通信,信號量,死鎖

一、基本概念

1.同步與互斥

   同步:兩個或兩個以上進程要協作完成一個任務。

   互斥:兩個或兩個以上進程競爭一個資源。

2.臨界段

   臨界資源:一段時間內只允許一個進程訪問的資源。

   臨界段:進程訪問臨界資源的程序段

二、信號量

1.操作

(1)初始化操作,信號量能初始化爲非負的值。

(2)semWait操作,能減小信號量的值,如結果值爲負,執行semWait操作的進程就被封鎖。

(3)semSignal操作,能增加信號量的值,如果結果值非正,那麼原先因執行semWait操作而阻塞的進程被解除阻塞。

2.信號量實現互斥

       semWait(s)

       臨界段

       semSignal(s)

3.信號量實現同步

       由進程A semWait,進程BsemSignal

4.生產消費者問題

       buffers:緩衝區的大小

       mutex:互斥信號量

       product:有無產品

       生產者:

              while(){

                     produce new product;

                     semWait(buffers);

                     semWait(mutex);

                     put product into buffers;

                     semSignal(mutex);

                     semSignal(products);

}

消費者:

       while(){

              semWait(products);

                     semWait(mutex);

              getproduct from buffers;

                     semSignal(mutex);

              semSignal(buffers);

              consumeproduct;

}

5.讀者/寫者問題

讀者進程之間不需要互斥,但寫進程必須與其他所有寫進程和讀進程互斥。

信號量:mutex(互斥信號量),wrt,count(計數器)

寫進程:

       while(){         

              semWait(wrt);

              write information;

              semSignal(wrt);

}

讀進程:

       while(){

              semWait(mutex);

              if (++count == 1)

                     semWait(wrt);

              semWait(mutex)

              read information;

              semSignal(mutex);

              if ( --count == 0)

                     semSignal(wrt);

              semSignal(mutex);

}

三、進程間數據通信

1.消息通信

       一個進程要向另一個進程發送消息,先要向系統申請一個緩衝區,填寫了消息正文和其他有關消息的特徵、控制信息後,通過消息通信機構將該消息送到接收其他消息隊列中。

       接收進程在一個適當時機從消息隊列中移出一個消息,讀取所有的信息後,再釋放消息緩衝區。

2.共享存儲區

3.管道

四、死鎖

1.死鎖產生原因

       幾個進程各自佔了對方要的資源

2.產生死鎖的條件

(1)互斥執行

       每次只能允許一個進程佔有和使用一個資源,其他申請該資源的進程被阻塞。

(2)保持並等待

       當進程等待分配給它新的資源時,保持佔有已分配的資源。

(3)不可剝奪

       不能強迫移去進程佔有的未使用完的資源。

(4)循環等待

       存在一個閉合的進程──資源鏈,以致每一個進程至少佔有鏈中下一個進程所需要的一個資源。

3.死鎖的預防

(1)互斥執行

       無法預防。

(2)保持並等待

       進程一次申請它所有需要的資源。

(3)不可剝奪

       如果進程不能獲得進一步的資源,要求其釋放原先佔有的資源。

(4)循環等待

       資源排序,如果一個進程已經佔有了資源A,那麼它接下來只能申請排在A後面的資源。

       此外還有銀行家算法用於死鎖避免,Coffman算法用於死鎖檢測。

4.死鎖解除

(1)強迫撤銷所有死鎖進程

(2)逐個撤銷死鎖進程

(3)相繼剝奪進程所佔資源

       

發佈了35 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章