進程
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.結果就是:

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