進(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)程。