操作系統相關知識點總結(進程通信和死鎖)

幾種進程間的通信方式

管道( pipe ):

管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。

有名管道 (named pipe) :

有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。

信號量( semophore ) :

信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。

消息隊列( message queue ) :

消息隊列是由消息的鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩沖區大小受限等缺點。

信號 ( signal ) :

信號是一種比較復雜的通信方式,用于通知接收進程某個事件已經發生。

共享內存( shared memory ) :

共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。

套接字( socket ) :

套接字也是一種進程間通信機制,與其他通信機制不同的是,它可用于不同主機的進程通信。

死鎖

死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

產生條件

雖然進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個[必要條件]
1****)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。
2****)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
3****)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4****)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

只要打破四個必要條件之一就能有效預防死鎖的發生:
①打破互斥條件:改造獨占性資源為虛擬資源,大部分資源已無法改造。
②打破不可搶占條件:當一進程占有一獨占性資源后又申請一獨占性資源而無法滿足,則退出原占有的資源。
③打破占有且申請條件:采用資源預先分配策略,即進程運行前申請全部資源,滿足則運行,不然就等待,這樣就不會占有且申請。
④打破循環等待條件:實現資源有序分配策略,對所有設備實現分類編號,所有進程只能采用按序號遞增的形式申請資源。即破壞了環路

銀行家算法(適用于每種資源類型有多個實例)

為了實現銀行家算法,必須要有幾個數據結構:

注:設n為系統進程的個數,m為在資源類型的種類。

Available:長度為m的向量。表示每種資源的現有實例的數量。如果Available[j]=k,那么資源Rj有k個實例有效。

Max:n * m矩陣。定義每種進程的最大需求。如果Max[i][j]=k,那么進程Pi可以最多請求資源Rj的k個實例。

Allocation:n * m矩陣。定義每個進程現在所分配的各種資源類型的實例數量。如果Allocation[I,j]=k,那么進程Pj當前分配了k個資源Rj的實例。

Need:n * m矩陣。表示每個進程還需要的剩余的資源。如果Need[i][j]=k,那么進程Pj還需要資源Rj的k個實例。
注:Need[i][j] = Max[i][j] – Allocation [i][j]

為了描述方便,我們采用一些簡化的表示方法:

設X和Y為長度為n的向量,則X <= Y當且僅當對所有i = 1,2,...,n,X[i] <= Y[i]。例如,如果X = (1,7,2,3)而Y = (0,3,2,1),那么Y <= X。如果Y <= X且Y != X,那么Y < X。

可以將Allocation和Need的每行作為向量,并分別用Allocation i和Need i來表示,向量Allocation i表示分配給進程Pi的資源;向量Need i表示進程為完成其任務可能仍然需要申請的額外資源。

銀行家算法可整體分成兩個部分:

1.安全性算法

確認計算機系統是否處于安全狀態的算法分為如下幾步:

(1)設Work和Finish分別為長度為m和n的向量。按如下方式進行初始化,Work = Avaliable且對于i = 0,1,...,n - 1,Finish[i] =    false。

(2)查找這樣的i使其滿足

·Finish[i] = false

·Need i <= Work

如果沒有這樣的i,那么就轉到第(4)步。

(3)Work = Work + Allocation i

Finish[i] = true

返回第(2)步

(4)如果對所有i,Finish[i] = true,那么系統則處于安全狀態。

該算法可能需要m * n^2數量級的操作以確定系統是否處于安全狀態。

2.資源請求算法

現在,描述如何判斷是否可安全允許請求的算法。

設Request i為進程Pi的請求向量。如果Request i[j] == k,那么進程Pi需要資源類型Rj的實例數量為k。當進程Pi作出資源請求時,采取如下動作:

(1)如果Request i <= Need i,那么轉到第(2)步。否則,產生出錯條件,這是因為進程Pi已超過了其最大請求。

(2)如果Request i <= Available,那么轉到第(3)步。否則,Pi必須等待,這是因為沒有可用資源。

(3)假定系統可以分配給進程Pi所請求的資源,并按如下方式修改狀態:

Available = Available - Request i;

Allocation i = Allocation i + Request i;

Need i = Need i - Request i;

如果所產生的資源分配狀態是安全的(通過上面的安全性算法),那么Pi可分配到它所請求的資源。但是,如果新狀態不安全,則進程Pi必須等待Request i并恢復到原來的資源分配狀態。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • 處理機調度與死鎖 處理機調度的層次 高級調度/作業調度/長程調度 作用:將外存后備隊列中的作業調入內存 對象:作業...
    顏洛濱閱讀 849評論 0 1
  • 系統安全狀態的定義 1.安全狀態 在避免死鎖的方法中,允許進程動態地申請資源,但系統在進行資源分配之前,應先計算此...
    haifengmay閱讀 3,756評論 1 8
  • 進程間通信有哪些方法? (1)管道(Pipe):管道可用于具有親緣關系進程間的通信,允許一個進程和另一個與它有共同...
    檸檬烏冬面閱讀 831評論 0 1
  • 20.1死鎖概念 由于競爭資源或者通信關系,兩個或更多線程在執行中出現,永遠相互等待只能由其他進程引發的事件 進程...
    龜龜51閱讀 652評論 0 1
  • 今天學習的5分鐘商學院我可能理解的方向不同,所以詮釋的也不太一樣。 在我認為“我不忙,只是時間不夠”這句標...
    人情往事閱讀 113評論 0 0