操作系統學習筆記(4)——進程聯系和臨界區管理




1、順序環境和順序程序

  • 順序環境
    • 程序的指令或語句序列是順序的;
    • 在計算機系統中只有一個程序在運行;
    • 一個程序獨占系統中所有資源;
    • 一個程序執行不受外界影響。
  • 順序特征
    • 順序性執行;
    • 封閉獨占資源;
    • 確定可再現性。


2、並發環境和並發進程

  • 並發環境
    • 在一定時間內物理機器上有兩個或兩個以上的程序;
    • 程序處於開始運行但尚未結束的狀態;
    • 程序執行次序不是事先確定的。
  • 並發特征
    • 程序結果是不可再現性的;
    • 程序的執行呈現間斷性;
    • 系統中各類資源共享;
    • 獨立性和制約性;
    • 程序和計算不再對應。


3、相交進程和無關進程

  • 間接式和直接式制約
    • 直接作用:也稱"合作關系",是指一個進程執行完后,另一個進程才能開始,否則不能開始;
    • 間接作用:也稱“競爭關系”,是指一個進程訪問共享資源時,其他需訪問此資源的進程必須等待。
  • 相交和無關進程
    • 相交進程:邏輯上的有某種聯系的並發進程;
    • 無關進程:邏輯上無任何聯系的並發進程;
    • 直接作用只發生在相交進程之間;
    • 間接作用可以發生再相交進程或無關進程之間。


4、進程同步和進程互斥

  • 進程同步(直接制約)
    • 根據一定的時序關系合作完成一項任務;
    • 並發進程因直接制約而互相等待,彼此相互發送消息進行合作,使得個進程按一定的速度執行。進程間的直接制約關系來源於合作;
    • 進程建的互相聯系式有意識安排的,直接作用只發生再相交的進程間。
  • 進程互斥(間接制約)
    • 各進程競爭使用臨界資源;
    • 臨界資源:在操作系統中,進程是占有資源的最小單位(線程可以訪問其所在進程內的所有資源,但線程本身並不占有資源或僅僅占有一點必須資源)。但對於某些資源來說,其在同一時間只能被一個進程所占用。這些一次只能被一個進程所占用的資源就是所謂的臨界資源。典型的臨界資源比如物理上的打印機,或是存在硬盤或內存中被多個進程所共享的一些變量和數據等(如果這類資源不被看成臨界資源加以保護,那么很有可能造成丟數據的問題);
    • 進程間通過中介發生聯系,是無意識安排的;
    • 可發生在相交進程間,也可發生再無關進程間。
  • 進程同步和互斥的關系
    • 互斥反映了進程間的競爭關系,而同步則反映了進程間的合作關系;
    • 進程互斥是進程同步的一種特殊情況;
    • 互斥所涉及的進程之間沒有固定的必然的聯系,它們只是競爭獲得共享資源的使用權;而同步所涉及的並發進程之間有一鍾必然的聯系,即使資源可用,若沒有獲得同步消息,進程也不能去使用。
  • eg.
    • 若干同學去圖書館借書(互斥)
    • 輸入進程和計算進程(同步)
    • 流水線生產的各道工序(同步)
    • 若干進程使用一台打印機(互斥)
    • 商品生產和社會消費(同步)


 

5、訪問臨界資源

  • 對於臨界資源的訪問,必須是互斥進行。也就是當臨界資源被占用時,另一個申請臨界資源的進程會被阻塞,直到其所申請的臨界資源被釋放。而進程內訪問臨界資源的代碼被成為臨界區。對於臨界區的訪問過程分為四個部分:
    • 進入區:查看臨界區是否可訪問,如果可以訪問,則轉到步驟二,否則進程會被阻塞
    • 臨界區:在臨界區做操作
    • 退出區:清除臨界區被占用的標志
    • 剩余區:進程與臨界區不相關部分的代碼


6、臨界區及其使用原則

  • 臨界區
    • 進程中涉及臨界資源的程序段
    • 多個進程的臨界區為相關臨界區
  • 使用原則
    • 有空讓進
    • 無空等待
    • 多中擇一(讓權等待)
    • 有限等待


7、臨界區管理軟件方法

  • Dekker算法
    • Dekker算法用指示器turn來指示應該哪個進程進入臨界區
1 var inside: array[1..2] of Boolean;
2 inside[1] = false;
3 inside[2] = false;
4 turn: interger;
5 turn := 1 or 2;
    • 進程1
 1 process P1
 2 begin
 3     inside[1] = true;
 4     while inside[2] do if turn = 2 then
 5         begin
 6             inside[1]:= false;
 7             while turn = 2 do begin end;
 8             inside[1]:= true;
 9         end
10     臨界區;
11     turn := 2;
12     inside[1]:= false;
13 end;
    • 進程2
 1 process P2
 2 begin
 3     inside[2] = true;
 4     while inside[1] do if turn = 1 then
 5         begin
 6             inside[2]:= false;
 7             while turn = 1 do begin end;
 8             inside[2]:= true;
 9         end;
10     臨界區;
11     turn:= 1;
12     inside[2]:= false;
13 end;


8、臨界區管理的硬件方法

  • 測試並建立指令TS
 1 /* s代表臨界資源狀態,由TS指令控制 */
 2 s : boolean;
 3 s := true;
 4 process Pi  /* i = 1,2,...,n */
 5     pi : boolean;
 6 begin
 7     repeat pi := TS(s) until pi;
 8         臨界區;
 9     s := true;
10 end;
  • 交換指令SWAP
    • 交換指令將交換兩個字的內容
    • 公共變量lock決定臨界區是否上鎖
    • 每個進程的私有變量key用於與lock交換
 1 /* 交換函數 */
 2 void SWAP(int* a, int* b) {
 3     int temp;
 4     temp = *a;
 5     *a = *b;
 6     *b = temp;
 7 }
 8 
 9 key = true;
10 do {SWAP(&lock, key);}
11 while(key);
12 臨界區;
13 lock := flase;
  • 開關中斷指令
    • 進入臨界區前執行“關中斷”指令
    • 離開臨界區后,執行“開中斷”指令
    • 控制進程互斥進入臨界區


9、軟硬件方法的優缺點

  • 軟硬件方法都采用了忙等待方式
  • 軟件方法實現復雜,需要編程技巧
  • 硬件指令方法代碼簡潔有效
  • 硬件中斷屏蔽方法代價較高


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM