資料庫之作業系統——筆記
程序
程序的基本概念以及狀態變化
- 程序三態圖
就緒狀態:程序已得到執行所需資源,只等待CPU的排程便可執行;
執行狀態:程序已得到執行所需資源,並且得到了CPU的排程;
等待狀態(阻塞狀態):不具備執行條件、等待時機的狀態。
就緒狀態和等待狀態的區別:就緒狀態只是等待CPU,等待狀態是等CPU以外的其他資源,如印表機。 - 五態圖
活躍就緒:是指程序在主存並且可被排程的狀態。
靜止就緒(掛起就緒):是指程序被對換到輔存時的就緒狀態,是不能被直接排程的狀態,只有當主存中沒有活躍就緒態程序,或者是掛起就緒態程序具有更高的優先順序,系統將把掛起就緒態程序調回主存並轉換為活躍就緒。
活躍阻塞:是指程序已在主存,一旦等待的事件產生便進入活躍就緒狀態。
靜止阻塞:是指程序對換到輔存時的阻塞狀態,一旦等待的事件產生便進入靜止就緒狀態。
掛起,記憶體到外存;啟用,外存到記憶體。
程序死鎖
如果一個程序再等待一個不可能發生的事,則程序就死鎖了。如果一個或多個程序產生死鎖,就會造成系統死鎖。如果一個或多個程序產生死鎖,就會造成系統死鎖。
假設程序A、B、C。這三個程序都需要5個系統資源,則系統最少絕對不會發生死鎖的系統資源數為(5-1)+(5-1)+(5-1)+1=13
死鎖產生的必要條件
- 互斥條件,即每個資源一次只能被一個程序使用。
- 保持和等待條件,當程序已擁有某些資源,但申請其他資源時被阻塞
- 不剝奪條件
- 環路等待條件
解決死鎖的策略
- 死鎖的預防,使用者申請資源時請申請所需的全部資源,這就破壞了保持和等待的條件;將資源分層,得到上一層資源後才能夠申請下一層資源,從而破壞環路等待條件。缺點:預防會降低系統效率。
- 死鎖的避免,即程序在每次申請資源時判斷此操作是否安全。如**“銀行家演算法”**。缺點:這種演算法會增加系統開銷。
- 死鎖的檢測*,判斷系統是否處於死鎖狀態,如果是則執行死鎖解除策略。
- 死鎖的解除*,將資源強行分配給別的程序,與檢測配合使用。
銀行家演算法
我們假設有程序P1,P2,…Pn
則安全序列要求滿足:Pi(1<=i<=n)需要資源<=剩餘資源 + 分配給Pj(1 <= j < i)資源
每設計加入一個程序都要用上面式子檢測一下,是否有安全序列。
程序同步,訊號量,前驅圖,PV原語
前驅圖
前驅圖為有向無迴圈圖,用於描述程序之間執行的前後關係。圖中每個結點用於描述一個程式段或程序,乃至一條語句。結點間的有向邊則用於表示兩個結點之間存在的偏序或前驅關係。
Pi是Pj的直接前驅,Pj是Pi的直接後驅,只有前驅沒有後驅的是終止結點,只有後驅沒有前驅的是初始結點。
PV操作
參考地址
是為了解決互斥同步問題。
P操作:
for(i=s;i>=0;i–)
{
繼續執行本程序
}
掛起本程序或等待本程序
V操作:
for(i=s;i<=0;i++)
{
喚醒s佇列中的等待程序,繼續執行程式
}
不喚醒s佇列中的等待程序
臨界資源,是指程序間互斥共享資源,如印表機。
臨界區,每個程序中訪問臨界資源的那段程式碼稱為臨界區。
訊號量,用於標識共享資源是否在被使用,在被使用用0標識,未被使用用1標識。
例子:生產者->市場->消費者
生產者初值為S1=1,市場有一個空位
消費者初值為S2=0,市場無資源