1. 程式人生 > >2.3程序同步

2.3程序同步

2.3 程序同步

程序間有什麼相互影響?

兩種制約關係:

間接相互制約關係:主要源於資源共享,表現為

程序A---印表機資源---程序B(互斥)

直接相互制約關係:主要源於程序合作,表現為

程序A寫緩衝---程序B讀緩衝(有序)

1.程序同步的基本概念

1)程序同步的主要任務:使併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。

2)臨界資源:一次僅允許一個程序使用的資源2

理解同步

互斥:在作業系統中,當一個程序進入臨界區使用臨界資源時,另一個程序必須等待,直到佔用臨界資源的程序退出臨界區,我們稱程序之間的這種相互制約關係為“互斥”

同步:多個相互合作的程序,在一些關鍵點上可能需要互相等待或互相交換資訊,這種相互制約關係稱為程序同步關係。可理解為“有序”

3)臨界區

每個程序中訪問臨界資源的那段程式碼叫臨界區

為了正確同步,對臨界區的程式碼要增加控制

進入區:對欲訪問的臨界資源進行檢,若此刻未被訪問,設正在訪問的標誌

臨界區:訪問臨界資源的程式碼

退出區:將正在訪問的標誌恢復為未被訪問的標誌

剩餘區:其餘部分

“進入”和“退出”臨界區的處理對實現互斥尤其重要

4)同步機制應遵循的規則

實現互斥的方法應符合如下每條原則

空閒讓進:資源使用最基本原則

忙則等待:保證互斥

有限等待:合適時被喚醒防止死等

讓權等待:能主動釋放CPU防止忙等

 

硬體同步機制

許多計算機提供一些特殊的硬體指令,允許對一個字中的內容進行檢測和修正,或對兩個字的內容進行交換。利用這些特殊指令解決臨界區問題。

進入臨界區往往跟其標誌有關,可將標誌看作一個鎖,“鎖開”進入並關鎖,“鎖關”必須等待,初始時鎖是開啟的。

硬體指令機械操作可保證鎖開、關操作不被打斷;適用於任意數目的程序。但等待要耗費CPU時間,不能實現“讓權等待”,從等待程序中隨機選擇一個進入臨界區,有的程序可能一直選不上,難以實現較為複雜的程序同步問題。

2.訊號量機制

1)整型訊號量

最初的訊號量機制,兩個原子操作對一個共享整型量進行操作。

訊號量定義為一個整型量;

根據初始情況賦相應的值;

僅能通過兩個原子操作來訪問。

P操作  wait(S): 

              While S<=0 do no-op;

              S:=S-1;

V操作  signal(S):       

              S:=S+1;

2)記錄型訊號量

整型訊號量符合“有限等待”原則

signal釋放資源後,當CPU被分配給等待程序後,等待程序仍可繼續執行,可以符合“有限等待”

但整型訊號量不符合“讓權等待”原則

整型訊號量的wait操作,當s ≤0時,當前程序會佔著CPU不斷測試

訊號量原語不能被打斷,這個佔有CPU的程序會一直不斷的佔據CPU迴圈下去,陷入忙等

改進:條件不符時應能夠主動放棄CPU
新問題:放棄CPU的程序進入阻塞佇列:因等待某訊號量而放棄CPU的等待程序會有“若干”個,需將它們組織管理起來,並在合適的時候喚醒

訊號量結構資訊發生變化

不僅要有值的處理,還有佇列的處理

此時形成記錄型資料結構,包括兩部分:

整型變數value(代表資源數目) 程序連結串列L(連結所有等待程序)

程式碼描述:

type  Semaphore=record

       value:integer;

       L:list  of  PCB;

end;

操作:S.Value,S.L

Value>0,表示當前可用資源的數量

Value≤0,其絕對值表示等待使用該資源的程序數,即在該訊號量佇列上排隊的PCB的個數

不僅修改資源數,還要處理程序的阻塞、喚醒等操作。先修改資源數,再判斷處理。

定義訊號量semaphore代表可用資源實體的數量。又叫訊號燈。當≥0,代表可供併發程序使用的資源實體數當<0,表示正在等待使用該資源的程序數。建立一個訊號量必須經過說明,包括訊號量所代表的意義 賦初值 建立相應的資料結構,以便指向等待使用臨界區的程序。除初值外,訊號量的值僅能由標準原子操作P、V操作來改變。PV操作是荷蘭語通過和釋放的意思。

3)訊號量的基本應用

實現程序互斥

實現程序間的前趨關係(有序)

互斥訊號量注意點:

互斥訊號量mutex初值為1;

每個程序中將臨界區程式碼置於P(mutex)和V(mutex)原語之間

必須成對使用P和V原語(在同一程序中),不能次序錯誤、重複或遺漏

遺漏P原語則不能保證互斥訪問

遺漏V原語則不能在使用臨界資源之後將其釋放(給其他等待的程序)

控制同步順序的注意點

訊號量值為0的點是限制的關鍵所在

成對使用P和V原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯

 

4)AND型訊號量

出現原因:

一些應用往往需要兩個或多個共享資源,而不是前述的一個資源,程序同時要求的共享資源越多,發生死鎖可能性越大

解決思想:

一次性分配給程序所需資源,用完一起釋放,Wait操作時對它所有需要的資源都要判斷,有AND條件,故稱“AND同步”、“同時wait”

5)訊號量集

引入原因:每次只能獲得或釋放一個單位的資源,低效;

某些時候資源分配有下限的限制;

修改:在大於可分配設定的下界值t前提下,每次可分配d個