qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          輕松學——操作系統

            進程

            1、進程的狀態:

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

            三態圖:

            我們還是來看圖進行分析:

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

            就緒:就是“萬事俱備只欠東風”,就差CPU的調度了,只要CPU一調度便可運行。

            運行:就是在就緒狀態的基礎上得到了CPU的調度。

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

            五態圖:

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

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

            運行——>就緒:運行超時或者是條件被更高優先級進程剝奪。

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

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

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

            2、進程死鎖:

            死鎖是進程管理設計不當造成的;進程死鎖是一個進程在等待一個不可能發生的事;系統死鎖是一個或多個進程產生死鎖。

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

            死鎖產生的必要條件:

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

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

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

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

            解決死鎖的策略

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

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

            死鎖檢測:前兩者是事前措施,而死鎖的檢測則是判斷系統是否處于死鎖狀態,如果是,則執行死鎖解除策略。

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

            接下來,我們來實戰一下:

            銀行家算法:

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

            首先求剩下的資源數:

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

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

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

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

            那么需要一個系統是安全的,那么這個進程就不能產生死鎖。現在就一目了然了都:

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

            那么我們給P1運行完成之后,我們的資源要釋放,所以我們資源=現有資源+已經分配的:

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

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

            那么這兩個進程就完成了,接下來我們還繼續對比著來看:

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

            這時候我們發現我們剩余的資源又能滿足到P3和P1進程了。所以我們的答案就不止一種了:

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

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

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

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

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 右玉县| 潍坊市| 长治市| 双峰县| 灵台县| 上饶县| 剑川县| 平陆县| 靖安县| 绵竹市| 道真| 电白县| 上蔡县| 蒙山县| 镇沅| 资阳市| 安乡县| 洛扎县| 景东| 沅陵县| 长乐市| 融水| 霸州市| 容城县| 陇川县| 漳平市| 昌吉市| 林芝县| 河池市| 沙湾县| 慈溪市| 公主岭市| 阜康市| 舒兰市| 昂仁县| 呼图壁县| 景德镇市| 东平县| 高淳县| 凤山县| 赤壁市|