1. 程式人生 > >資料庫之作業系統——筆記

資料庫之作業系統——筆記

程序

程序的基本概念以及狀態變化

  • 程序三態圖
    在這裡插入圖片描述
    就緒狀態:程序已得到執行所需資源,只等待CPU的排程便可執行;
    執行狀態:程序已得到執行所需資源,並且得到了CPU的排程;
    等待狀態(阻塞狀態):不具備執行條件、等待時機的狀態。
    就緒狀態和等待狀態的區別:就緒狀態只是等待CPU,等待狀態是等CPU以外的其他資源,如印表機。
  • 五態圖
    在這裡插入圖片描述

活躍就緒:是指程序在主存並且可被排程的狀態。
靜止就緒(掛起就緒):是指程序被對換到輔存時的就緒狀態,是不能被直接排程的狀態,只有當主存中沒有活躍就緒態程序,或者是掛起就緒態程序具有更高的優先順序,系統將把掛起就緒態程序調回主存並轉換為活躍就緒。
活躍阻塞:是指程序已在主存,一旦等待的事件產生便進入活躍就緒狀態。
靜止阻塞:是指程序對換到輔存時的阻塞狀態,一旦等待的事件產生便進入靜止就緒狀態。
掛起,記憶體到外存;啟用,外存到記憶體。

程序死鎖

如果一個程序再等待一個不可能發生的事,則程序就死鎖了。如果一個或多個程序產生死鎖,就會造成系統死鎖。如果一個或多個程序產生死鎖,就會造成系統死鎖。
假設程序A、B、C。這三個程序都需要5個系統資源,則系統最少絕對不會發生死鎖的系統資源數為(5-1)+(5-1)+(5-1)+1=13

死鎖產生的必要條件

  1. 互斥條件,即每個資源一次只能被一個程序使用。
  2. 保持和等待條件,當程序已擁有某些資源,但申請其他資源時被阻塞
  3. 不剝奪條件
  4. 環路等待條件

解決死鎖的策略

  1. 死鎖的預防,使用者申請資源時請申請所需的全部資源,這就破壞了保持和等待的條件;將資源分層,得到上一層資源後才能夠申請下一層資源,從而破壞環路等待條件。缺點:預防會降低系統效率。
  2. 死鎖的避免,即程序在每次申請資源時判斷此操作是否安全。如**“銀行家演算法”**。缺點:這種演算法會增加系統開銷。
  3. 死鎖的檢測*,判斷系統是否處於死鎖狀態,如果是則執行死鎖解除策略。
  4. 死鎖的解除*,將資源強行分配給別的程序,與檢測配合使用。

銀行家演算法

我們假設有程序P1,P2,…Pn
則安全序列要求滿足:Pi(1<=i<=n)需要資源<=剩餘資源 + 分配給Pj(1 <= j < i)資源
每設計加入一個程序都要用上面式子檢測一下,是否有安全序列。

程序同步,訊號量,前驅圖,PV原語

前驅圖

前驅圖為有向無迴圈圖,用於描述程序之間執行的前後關係。圖中每個結點用於描述一個程式段或程序,乃至一條語句。結點間的有向邊則用於表示兩個結點之間存在的偏序或前驅關係。
P

i P j P_{i}\rightarrow P_{j}
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,市場無資源

儲存

作業管理*

目錄和spooling*