qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          輕松學(xué)——操作系統(tǒng)

            進(jìn)程

            1、進(jìn)程的狀態(tài):

            這里邊我們主要是要講的內(nèi)容就是這兩個圖:我們通過這兩個圖來介紹一些相關(guān)的知識點:

            三態(tài)圖:

            我們還是來看圖進(jìn)行分析:

            我們就這個圖進(jìn)行分析各個關(guān)鍵部分:這些關(guān)鍵在于理解,很Easy的,或者你把這個圖畫出來也就馬上明白了。

            就緒:就是“萬事俱備只欠東風(fēng)”,就差CPU的調(diào)度了,只要CPU一調(diào)度便可運行。

            運行:就是在就緒狀態(tài)的基礎(chǔ)上得到了CPU的調(diào)度。

            等待(阻塞):還沒具備運行條件,等待時機(jī)的狀態(tài),我們從這個圖也能看的出來,等待狀態(tài)不能直接運行,必須要經(jīng)過就緒這個狀態(tài)的,所以等待狀態(tài)除了等待CPU調(diào)度之外,還缺少某些運行所需的條件。

            五態(tài)圖:

             我們把幾個關(guān)鍵的概括一下:其實這個圖跟咱們上面那個三態(tài)圖是吻合的,只是把三態(tài)圖分的更細(xì)了點我覺得;所以分析五態(tài)圖咱們只需要把三態(tài)圖掌握好就行, 就這么easy;我們再看看幾個關(guān)鍵的:主要是三態(tài)圖的一個動態(tài)的一個表示過程,所以這些概念的東西,結(jié)合前面的三態(tài)圖理解就非常容易了:

            就緒——>運行:就是三態(tài)圖中的,條件被CPU選中了。

            運行——>就緒:運行超時或者是條件被更高優(yōu)先級進(jìn)程剝奪。

            運行——>等待:條件還沒具備運行條件,等待某一事件的發(fā)生。

            等待——>就緒:條件是等待的事件已發(fā)生,具備了運行條件。

            在這里邊,還非常要主要這些箭頭的指向。

            2、進(jìn)程死鎖:

            死鎖是進(jìn)程管理設(shè)計不當(dāng)造成的;進(jìn)程死鎖是一個進(jìn)程在等待一個不可能發(fā)生的事;系統(tǒng)死鎖是一個或多個進(jìn)程產(chǎn)生死鎖。

            其實對于這方面的知識,跟咱們生活是很有聯(lián)系的。比如我們使用過打印機(jī)都知道。所以把生活的場景投進(jìn)去理解,就很簡單了。

            死鎖產(chǎn)生的必要條件:

            互斥條件:即一個資源每次只能被一個進(jìn)程使用。

            保持和等待條件:有一個進(jìn)程已獲得了一些資源,但因請求其他資源被阻塞時,對已獲得的資源保持不放。

            不剝奪條件:有些系統(tǒng)資源是不可剝奪的,當(dāng)某個進(jìn)程已獲得這種資源后,系統(tǒng)不能強行收回,只能由進(jìn)程使用完時自己釋放。

            環(huán)路等待條件:若干個進(jìn)程形成環(huán)形鏈,每個都占用對方要申請的下一個資源。

            解決死鎖的策略

            死鎖預(yù)防:我們要求用戶申請資源時一起申請所需的全部資源,這就破壞了保持和等待條件:將資源分層,得到上一層資源后,才能申請下一層資源,它破壞了環(huán)路等待條件。預(yù)防通常會降低系統(tǒng)的效率。

            死鎖避免:避免是指進(jìn)程在每次申請資源時判斷這些操作是否安全,典型算法是”銀行家算法“。但這種算法會增加系統(tǒng)的開銷。

            死鎖檢測:前兩者是事前措施,而死鎖的檢測則是判斷系統(tǒng)是否處于死鎖狀態(tài),如果是,則執(zhí)行死鎖解除策略。

            死鎖解除:這是與死鎖檢測結(jié)合使用的,它使用的方式就是剝奪。即將資源強行分配給別的進(jìn)程。

            接下來,我們來實戰(zhàn)一下:

            銀行家算法:

            找了這么一個例子跟大家分析分析我的理解過程:

            首先求剩下的資源數(shù):

            R1=9-(1+2+2++1)=2

            R2=8-(2+1+1+2+1)=1

            R3=5-(1+1+3)=0

            我們從這個表中很容易的分析出:還需資源數(shù)=最大需求量-已分配資源數(shù)

            那么需要一個系統(tǒng)是安全的,那么這個進(jìn)程就不能產(chǎn)生死鎖。現(xiàn)在就一目了然了都:

            從我們剩下的資源數(shù)和還需要的資源數(shù),我們剩下的R1=2、R2=1、R3=0這個只能符合P2進(jìn)程的0、1、0;

            那么我們給P1運行完成之后,我們的資源要釋放,所以我們資源=現(xiàn)有資源+已經(jīng)分配的:

            那么我們現(xiàn)在就有了R1、R2、R3的資源分別為:4、2、1;我們再觀察一下看哪個進(jìn)程需要資源符合我們的釋放的資源的:

            那只能是P4了,因為需要的資源為:0、0、1;而我們現(xiàn)在有的資源為:4、2、1,完全能滿足這個進(jìn)程P4的要求;我們看圖:

            那么這兩個進(jìn)程就完成了,接下來我們還繼續(xù)對比著來看:

            我們剩下的資源5、4、1。這時候我們發(fā)現(xiàn)了P5和P1都能滿足他們所需的資源:所以P5和P1就可以隨心所欲了,那我們不如就從需要資源小的開始分配試試;

            這時候我們發(fā)現(xiàn)我們剩余的資源又能滿足到P3和P1進(jìn)程了。所以我們的答案就不止一種了:

            我們要是先分配P1,再分配P5,再到P3.結(jié)果就是:

            雖然進(jìn)程的這個順序有很多種,在都滿足不造成死鎖的情況下,是否有最優(yōu)的排序呢?我覺得應(yīng)該是有的,就是在不發(fā)生死鎖的情況下,我們應(yīng)該是優(yōu)先給予需要資源少的進(jìn)程。

          posted on 2012-04-17 13:33 順其自然EVO 閱讀(212) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿巴嘎旗| 临邑县| 黄大仙区| 遵化市| 准格尔旗| 嘉善县| 巴马| 通辽市| 汕头市| 琼结县| 同心县| 盖州市| 云阳县| 丰都县| 化州市| 武城县| 青阳县| 蓬莱市| 桓台县| 上栗县| 敖汉旗| 青神县| 安义县| 通州市| 图木舒克市| 莱阳市| 佛教| 镇雄县| 永兴县| 石景山区| 南通市| 广汉市| 甘肃省| 石首市| 和平区| 彰武县| 洪泽县| 孟津县| 新津县| 平武县| 波密县|