系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux系統(tǒng)進(jìn)程管理

Linux系統(tǒng)進(jìn)程管理介紹(4)

時(shí)間:2015-09-09 15:05:32 作者:zhijie 來源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150909/57286.html 手機(jī)查看 評(píng)論

  死鎖的避免

  死鎖出現(xiàn)有4個(gè)必要條件:

  1.互斥: 資源只能同時(shí)被一個(gè)進(jìn)程使用

  2.占有且等待: 一個(gè)進(jìn)程在等待別的資源的時(shí)候, 將繼續(xù)占有其擁有的資源

  3.非搶占: 不能強(qiáng)行搶占別人占有的資源

  4.循環(huán)等待: 在滿足如上3個(gè)條件的情況下, 出現(xiàn)循環(huán)等待即出現(xiàn)死鎖

  要避免死鎖也是從這4個(gè)條件上下手:

  1.互斥: 這個(gè)是為了資源功能正常運(yùn)轉(zhuǎn), 無法避免

  2.占有且等待: 讓進(jìn)程一開始就申請(qǐng)所有資源才能運(yùn)行。問題是效率低下, 進(jìn)程可能要等待很長(zhǎng)時(shí)間, 資源可能被控制很長(zhǎng)時(shí)間, 程序也需要最開始就知道需要使用哪些資源;

  3.非搶占: 根據(jù)進(jìn)程優(yōu)先級(jí)讓申請(qǐng)資源的進(jìn)程釋放自己之前擁有的資源或者搶占別的進(jìn)程的資源, 靠譜, 唯一的問題在于資源的使用不一定有那么容易的保存和恢復(fù)(很多硬件不像處理器那樣可以隨意切換使用進(jìn)程的)

  4.循環(huán)等待: 給資源定義一個(gè)序列, 進(jìn)程只能按照序列申請(qǐng)資源, 會(huì)導(dǎo)致進(jìn)程執(zhí)行效率大大降低, 所以主流做法是如下兩種

  如上幾種避免辦法都有各種各樣的問題, 所以一般不采用, 現(xiàn)在采用最多的方案還是從第4點(diǎn)出發(fā), 只不過不預(yù)先避免, 而是動(dòng)態(tài)探測(cè):

  1.如果一個(gè)進(jìn)程啟動(dòng)或者新增資源需求會(huì)導(dǎo)致死鎖, 則不允許此分配

  典型的算法如銀行家算法, 此方法的弊端是需要知道一個(gè)進(jìn)程將來所需要占用的資源

  2.允許所有請(qǐng)求, 周期性的進(jìn)行檢測(cè)死鎖

  動(dòng)態(tài)檢測(cè), 運(yùn)行效率高, 但是如果出現(xiàn)死鎖頻率比較高, 則系統(tǒng)運(yùn)行效率會(huì)比較低。

  綜合所有的死鎖避免的方法的對(duì)比如下:

Linux系統(tǒng)進(jìn)程管理介紹

  編程界面

  多進(jìn)程之間的互斥與同步方案有了如上提到的系列硬件支持之后, 就需要考慮操作系統(tǒng)對(duì)有并發(fā)編程的程序員們提供的編程界面了。

  信號(hào)量

  信號(hào)量是在內(nèi)存中維護(hù)了一個(gè)int, 每次操作對(duì)該int進(jìn)行++或者--。

  對(duì)操作者提供了兩個(gè)接口:

  1.semWait

  該接口檢查int值, 如果該值大于0, 就將該值--, 并進(jìn)入臨界區(qū); 否則就阻塞檢測(cè)該值知道大于0;

  2.semSignal

  該接口將int值++, 并通知受阻的所有進(jìn)程。通知哪個(gè)進(jìn)程有的采用FIFO策略, 有的采用隨機(jī)策略。

  管程

  信號(hào)量的方式比較靈活, 讓程序員可以任意控制臨界區(qū)以及交互設(shè)計(jì), 大部分現(xiàn)在程序也都采用了類似的方案, 這是一個(gè)相對(duì)底層但是功能強(qiáng)大的方案。

  但是有人提出了信號(hào)量的操作分散, 在模塊中任何位置都可能出現(xiàn), 造成程序編寫和維護(hù)困難, 也容易出bug, 所以在70年代, 有人提出了管程的概念, 筆者在實(shí)際工作中尚未使用管程來實(shí)現(xiàn)進(jìn)程間互斥和同步。

  管程底層跟信號(hào)量類似, 只是他把所有加鎖解鎖的邏輯全部封裝在一個(gè)類里面, 所有關(guān)于該臨界資源的操作都在這個(gè)類中以函數(shù)的方式呈現(xiàn), 除了這個(gè)類之外其他任何地方都看不到鎖。這樣就實(shí)現(xiàn)了鎖相關(guān)邏輯集中在一個(gè)地方。

  在一個(gè)類里面可以有多把鎖, 跟信號(hào)量類似, 針對(duì)每把鎖, 在該類的函數(shù)里可以用類似semWait和semSignal的接口等待該鎖或者釋放該鎖。

標(biāo)簽 進(jìn)程管理

發(fā)表評(píng)論

0

沒有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄