小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[zz]死鎖與饑餓

 Frank Library 2010-09-16

       在多道程序系統中,同時有多個進程并發(fā)運行,共享系統資源,從而提高了系統資源利用率,提高了系統的處理能力。但是,若對資源的管理、分配和使用不當,則會產生死鎖或是饑餓。所謂死鎖是指在多道程序系統中,一組進程中的每一個進程軍無限期等待被該組進程中的另一個進程所占有且永遠不會釋放的資源。饑餓是指系統不能保證某個進程的等待時間上界,從而使該進程長時間等待,當等待時間給進程推進和響應帶來明顯影響時,稱發(fā)生了進程饑餓。當饑餓到一定程度的進程所賦予的任務即使完成也不再具有實際意義時稱該進程被餓死。下面我們就來分別討論一下死鎖與饑餓各自的特點。

     首先是死鎖。

產生死鎖的原因主要有兩個,一是競爭資源,系統提供的資源數量有限,不能滿足每個進程的需求;二是多道程序運行時,進程推進順序不合理。由此可見,發(fā)生死鎖時死鎖進程的個數至少是兩個。我們可以舉一個最簡單的例子來了解一下死鎖:

 

P1

P2

...

...

Request(A)

Request(B)

Request(B)

Request(A)

Request(B)

Request(A)

Request(A)

Request(B)

 

假如雙方都擁有部分資源(P1擁有A,P2擁有B,且AB均只有一個),但這時P1還需要B,P2還需要A,于是P1P2都會處在無限等待狀態(tài),發(fā)生了死鎖。

由這個例子,我們可以歸納分析出產生死鎖的必要條件:

(1)   互斥條件

資源是獨占的且排他使用。即任意時刻一個資源只能給一個進程使用,其他申請者只有等待,直到資源被占有者釋放。如例子中的A,B資源。

(2)   不可剝奪條件

進程所獲得的資源在未使用完畢之前,不能被其他進程強行剝奪,而只能由擁有該資源的進程自愿釋放。如例子中P2 不能強占P1擁有的A資源,而P1也不能強占P2擁有的B資源。

(3)   請求和保持條件

進程每次申請他所需要的一部分資源,在申請新的資源的同時,繼續(xù)占用已分配到的資源。如例子中P1申請B資源時繼續(xù)占有A資源,P2申請A資源時繼續(xù)占有B資源。

(4)   循環(huán)等待條件

在發(fā)生死鎖時,必然存在一個進程等待環(huán)路,環(huán)路中的每一個進程已占有的資源同時被另一個進程所申請。如例子中的P1P2就是一個簡單的等待環(huán)路。

系統發(fā)生死鎖不僅浪費了大量的系統資源,甚至會導致整個系統的崩潰,因此如何解決死鎖問題是操作系統設計中的一個重點。目前主要有兩類方法,一類是不讓死鎖發(fā)生;另一類是讓死鎖發(fā)生,再加以解決。

死鎖預防就是力圖不讓死鎖發(fā)生,它采用破壞“不可剝奪”條件,或破壞“請求保持”條件,或破壞“循環(huán)等待”條件來達到目的,但這種方法給系統加上了較強的限制條件,嚴重的影響了系統性能。死鎖避免則是不破壞死鎖的必要條件,而是系統對進程發(fā)出的每一個系統能夠滿足的資源申請進行動態(tài)檢驗,并根據檢驗結果決定是否分配資源,如果分配后系統可能發(fā)生死鎖,則不分配,否則分配。

這種方法算法復雜,會消耗很多的系統時間。

       死鎖的檢測與解除則屬于讓死鎖發(fā)生,再加以解決的方法。操作系統不斷的監(jiān)督進程的進展路徑,一旦檢測到死鎖的發(fā)生,則采用專門的措施解除死鎖,并以最小的代價使整個系統恢復正常。

       以上大概介紹了死鎖的特點和一些關于死鎖的處理方法。下面看一下饑餓:

       產生饑餓的主要原因是:在一個動態(tài)系統中,對于每類系統資源,操作系統需要確定一個分配策略,當多個進程同時申請某類資源時,由分配策略確定資源分配給進程的次序。有時資源分配策略可能是不公平的,即不能保證等待時間上界的存在。在這種情況下,即使系統沒有發(fā)生死鎖,某些進程也可能會長時間等待.當等待時間給進程推進和響應帶來明顯影響時,稱發(fā)生了進程饑餓,當饑餓到一定程度的進程所賦予的任務即使完成也不再具有實際意義時稱該進程被餓死。舉個例子,當有多個進程需要打印文件時,如果系統分配打印機的策略是最短文件優(yōu)先,那么長文件的打印任務將由于短文件的源源不斷到來而被無限期推遲,導致最終的饑餓甚至餓死。

     饑餓沒有其產生的必要條件,隨機性很強。并且饑餓可以被消除,因此也將忙式等待時發(fā)生的饑餓稱為活鎖。

由于饑餓和餓死與資源分配策略有關,因而解決饑餓與餓死問題可從資源分配策略的公平性考慮,確保所有進程不被忽視。如時間片輪轉算法(RR)。它將CPU的處理時間分成一個個時間片,就緒隊列中的諸進程輪流運行一個時間片,當時間片結束時,就強迫運行程序讓出CPU,該進程進入就緒隊列,等待下一次調度。同時,進程調度又去選擇就緒隊列中的一個進程,分配給它一個時間片,以投入運行。如此方式輪流調度。這樣就可以在不考慮其他系統開銷的情況下解決饑餓的問題。

最后,我們來比較的看一下死鎖與饑餓。

死鎖與餓死有一定相同點:二者都是由于競爭資源而引起的。但又有明顯差別:

(1) 從進程狀態(tài)考慮,死鎖進程都處于等待狀態(tài),忙式等待(處于運行或就緒狀態(tài))的進程并非處于等待狀態(tài),但卻可能被餓死;

(2) 死鎖進程等待永遠不會被釋放的資源,餓死進程等待會被釋放但卻不會分配給自己的資源,表現為等待時限沒有上界(排隊等待或忙式等待);

(3) 死鎖一定發(fā)生了循環(huán)等待,而餓死則不然。這也表明通過資源分配圖可以檢測死鎖存在與否,但卻不能檢測是否有進程餓死;

(4) 死鎖一定涉及多個進程,而饑餓或被餓死的進程可能只有一個。

    (5)在饑餓的情形下,系統中有至少一個進程能正常運行,只是饑餓進程得不到執(zhí)行機會。而死鎖則可能會最終使整個系統陷入死鎖并崩潰。

    總之,死鎖和饑餓是操作系統中亟待解決的重要問題,發(fā)明出一個令人滿意的完善的解決方法是一個誘人的且永遠不會過時的課題。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多