操作系統(tǒng)相關(guān)知識(shí)點(diǎn)總結(jié)(進(jìn)程通信和死鎖)

幾種進(jìn)程間的通信方式

管道( pipe ):

管道是一種半雙工的通信方式豺撑,數(shù)據(jù)只能單向流動(dòng)纸兔,而且只能在具有親緣關(guān)系的進(jìn)程間使用录平。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系盆偿。

有名管道 (named pipe) :

有名管道也是半雙工的通信方式讯私,但是它允許無親緣關(guān)系進(jìn)程間的通信热押。

信號(hào)量( semophore ) :

信號(hào)量是一個(gè)計(jì)數(shù)器西傀,可以用來控制多個(gè)進(jìn)程對(duì)共享資源的訪問。它常作為一種鎖機(jī)制桶癣,防止某進(jìn)程正在訪問共享資源時(shí)拥褂,其他進(jìn)程也訪問該資源。因此牙寞,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段饺鹃。

消息隊(duì)列( message queue ) :

消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)间雀。消息隊(duì)列克服了信號(hào)傳遞信息少悔详、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。

信號(hào) ( signal ) :

信號(hào)是一種比較復(fù)雜的通信方式惹挟,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生茄螃。

共享內(nèi)存( shared memory ) :

共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建连锯,但多個(gè)進(jìn)程都可以訪問归苍。共享內(nèi)存是最快的 IPC 方式,它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的萎庭。它往往與其他通信機(jī)制霜医,如信號(hào)兩,配合使用驳规,來實(shí)現(xiàn)進(jìn)程間的同步和通信肴敛。

套接字( socket ) :

套接字也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是吗购,它可用于不同主機(jī)的進(jìn)程通信医男。

死鎖

死鎖是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象捻勉,若無外力作用镀梭,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖踱启,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程报账。

產(chǎn)生條件

雖然進(jìn)程在運(yùn)行過程中,可能發(fā)生死鎖埠偿,但死鎖的發(fā)生也必須具備一定的條件透罢,死鎖的發(fā)生必須具備以下四個(gè)[必要條件]
1****)互斥條件:指進(jìn)程對(duì)所分配到的資源進(jìn)行排它性使用,即在一段時(shí)間內(nèi)某資源只由一個(gè)進(jìn)程占用冠蒋。如果此時(shí)還有其它進(jìn)程請(qǐng)求資源羽圃,則請(qǐng)求者只能等待,直至占有資源的進(jìn)程用畢釋放抖剿。
2****)請(qǐng)求和保持條件:指進(jìn)程已經(jīng)保持至少一個(gè)資源朽寞,但又提出了新的資源請(qǐng)求识窿,而該資源已被其它進(jìn)程占有,此時(shí)請(qǐng)求進(jìn)程阻塞脑融,但又對(duì)自己已獲得的其它資源保持不放喻频。
3****)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前吨掌,不能被剝奪半抱,只能在使用完時(shí)由自己釋放脓恕。
4****)環(huán)路等待條件:指在發(fā)生死鎖時(shí)膜宋,必然存在一個(gè)進(jìn)程——資源的環(huán)形鏈,即進(jìn)程集合{P0炼幔,P1秋茫,P2,···乃秀,Pn}中的P0正在等待一個(gè)P1占用的資源肛著;P1正在等待P2占用的資源,……跺讯,Pn正在等待已被P0占用的資源枢贿。

只要打破四個(gè)必要條件之一就能有效預(yù)防死鎖的發(fā)生:
①打破互斥條件:改造獨(dú)占性資源為虛擬資源,大部分資源已無法改造刀脏。
②打破不可搶占條件:當(dāng)一進(jìn)程占有一獨(dú)占性資源后又申請(qǐng)一獨(dú)占性資源而無法滿足局荚,則退出原占有的資源。
③打破占有且申請(qǐng)條件:采用資源預(yù)先分配策略愈污,即進(jìn)程運(yùn)行前申請(qǐng)全部資源耀态,滿足則運(yùn)行,不然就等待暂雹,這樣就不會(huì)占有且申請(qǐng)首装。
④打破循環(huán)等待條件:實(shí)現(xiàn)資源有序分配策略,對(duì)所有設(shè)備實(shí)現(xiàn)分類編號(hào)杭跪,所有進(jìn)程只能采用按序號(hào)遞增的形式申請(qǐng)資源仙逻。即破壞了環(huán)路

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

為了實(shí)現(xiàn)銀行家算法,必須要有幾個(gè)數(shù)據(jù)結(jié)構(gòu):

注:設(shè)n為系統(tǒng)進(jìn)程的個(gè)數(shù)涧尿,m為在資源類型的種類系奉。

Available:長度為m的向量。表示每種資源的現(xiàn)有實(shí)例的數(shù)量现斋。如果Available[j]=k喜最,那么資源Rj有k個(gè)實(shí)例有效。

Max:n * m矩陣庄蹋。定義每種進(jìn)程的最大需求瞬内。如果Max[i][j]=k,那么進(jìn)程Pi可以最多請(qǐng)求資源Rj的k個(gè)實(shí)例迷雪。

Allocation:n * m矩陣。定義每個(gè)進(jìn)程現(xiàn)在所分配的各種資源類型的實(shí)例數(shù)量虫蝶。如果Allocation[I,j]=k,那么進(jìn)程Pj當(dāng)前分配了k個(gè)資源Rj的實(shí)例章咧。

Need:n * m矩陣。表示每個(gè)進(jìn)程還需要的剩余的資源能真。如果Need[i][j]=k,那么進(jìn)程Pj還需要資源Rj的k個(gè)實(shí)例赁严。
注:Need[i][j] = Max[i][j] – Allocation [i][j]

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

設(shè)X和Y為長度為n的向量粉铐,則X <= Y當(dāng)且僅當(dāng)對(duì)所有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表示分配給進(jìn)程Pi的資源瀑踢;向量Need i表示進(jìn)程為完成其任務(wù)可能仍然需要申請(qǐng)的額外資源。

銀行家算法可整體分成兩個(gè)部分:

1.安全性算法

確認(rèn)計(jì)算機(jī)系統(tǒng)是否處于安全狀態(tài)的算法分為如下幾步:

(1)設(shè)Work和Finish分別為長度為m和n的向量懒熙。按如下方式進(jìn)行初始化丘损,Work = Avaliable且對(duì)于i = 0,1,...工扎,n - 1徘钥,F(xiàn)inish[i] =    false。

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

·Finish[i] = false

·Need i <= Work

如果沒有這樣的i肢娘,那么就轉(zhuǎn)到第(4)步呈础。

(3)Work = Work + Allocation i

Finish[i] = true

返回第(2)步

(4)如果對(duì)所有i,F(xiàn)inish[i] = true橱健,那么系統(tǒng)則處于安全狀態(tài)而钞。

該算法可能需要m * n^2數(shù)量級(jí)的操作以確定系統(tǒng)是否處于安全狀態(tài)。

2.資源請(qǐng)求算法

現(xiàn)在拘荡,描述如何判斷是否可安全允許請(qǐng)求的算法臼节。

設(shè)Request i為進(jìn)程Pi的請(qǐng)求向量。如果Request i[j] == k,那么進(jìn)程Pi需要資源類型Rj的實(shí)例數(shù)量為k网缝。當(dāng)進(jìn)程Pi作出資源請(qǐng)求時(shí)巨税,采取如下動(dòng)作:

(1)如果Request i <= Need i,那么轉(zhuǎn)到第(2)步粉臊。否則草添,產(chǎn)生出錯(cuò)條件,這是因?yàn)檫M(jìn)程Pi已超過了其最大請(qǐng)求扼仲。

(2)如果Request i <= Available远寸,那么轉(zhuǎn)到第(3)步。否則屠凶,Pi必須等待驰后,這是因?yàn)闆]有可用資源。

(3)假定系統(tǒng)可以分配給進(jìn)程Pi所請(qǐng)求的資源阅畴,并按如下方式修改狀態(tài):

Available = Available - Request i;

Allocation i = Allocation i + Request i;

Need i = Need i - Request i;

如果所產(chǎn)生的資源分配狀態(tài)是安全的(通過上面的安全性算法)倡怎,那么Pi可分配到它所請(qǐng)求的資源。但是贱枣,如果新狀態(tài)不安全,則進(jìn)程Pi必須等待Request i并恢復(fù)到原來的資源分配狀態(tài)颤专。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纽哥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子栖秕,更是在濱河造成了極大的恐慌春塌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件簇捍,死亡現(xiàn)場離奇詭異只壳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)暑塑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門吼句,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人事格,你說我怎么就攤上這事惕艳。” “怎么了驹愚?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵远搪,是天一觀的道長。 經(jīng)常有香客問我逢捺,道長谁鳍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮倘潜,結(jié)果婚禮上余佛,老公的妹妹穿的比我還像新娘。我一直安慰自己窍荧,他們只是感情好辉巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕊退,像睡著了一般郊楣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓤荔,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天净蚤,我揣著相機(jī)與錄音,去河邊找鬼输硝。 笑死今瀑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的点把。 我是一名探鬼主播橘荠,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼郎逃!你這毒婦竟也來了哥童?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤褒翰,失蹤者是張志新(化名)和其女友劉穎贮懈,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體优训,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朵你,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揣非。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡医。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妆兑,靈堂內(nèi)的尸體忽然破棺而出魂拦,到底是詐尸還是另有隱情,我是刑警寧澤搁嗓,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布芯勘,位于F島的核電站,受9級(jí)特大地震影響腺逛,放射性物質(zhì)發(fā)生泄漏荷愕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望安疗。 院中可真熱鬧抛杨,春花似錦、人聲如沸荐类。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玉罐。三九已至屈嗤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吊输,已是汗流浹背饶号。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留季蚂,地道東北人茫船。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像扭屁,于是被迫代替她去往敵國和親算谈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 處理機(jī)調(diào)度與死鎖 處理機(jī)調(diào)度的層次 高級(jí)調(diào)度/作業(yè)調(diào)度/長程調(diào)度 作用:將外存后備隊(duì)列中的作業(yè)調(diào)入內(nèi)存 對(duì)象:作業(yè)...
    顏洛濱閱讀 835評(píng)論 0 1
  • 系統(tǒng)安全狀態(tài)的定義 1.安全狀態(tài) 在避免死鎖的方法中疯搅,允許進(jìn)程動(dòng)態(tài)地申請(qǐng)資源濒生,但系統(tǒng)在進(jìn)行資源分配之前,應(yīng)先計(jì)算此...
    haifengmay閱讀 3,725評(píng)論 1 8
  • 進(jìn)程間通信有哪些方法幔欧? (1)管道(Pipe):管道可用于具有親緣關(guān)系進(jìn)程間的通信,允許一個(gè)進(jìn)程和另一個(gè)與它有共同...
    檸檬烏冬面閱讀 809評(píng)論 0 1
  • 20.1死鎖概念 由于競爭資源或者通信關(guān)系丽声,兩個(gè)或更多線程在執(zhí)行中出現(xiàn)礁蔗,永遠(yuǎn)相互等待只能由其他進(jìn)程引發(fā)的事件 進(jìn)程...
    龜龜51閱讀 633評(píng)論 0 1
  • 今天學(xué)習(xí)的5分鐘商學(xué)院我可能理解的方向不同,所以詮釋的也不太一樣。 在我認(rèn)為“我不忙,只是時(shí)間不夠”這句標(biāo)...
    人情往事閱讀 109評(píng)論 0 0