1. 程式人生 > >程序同步(一)——程序同步相關概念

程序同步(一)——程序同步相關概念

程序同步的原因

在OS中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數、表格、連結串列時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。

有關程序同步的一些概念

1. 兩種形式的制約關係

在多道程式環境下,當程式併發執行時,由於資源共享和程序合作,使得同一個系統的多個程序之間可能存在兩種形式的制約關係:

(1) 間接相互制約關係

同處於一個系統中的程序,通常都共享著某種系統資源,如共享CPU、I/O裝置等。間接相互制約源於這種資源共享。如印表機資源,一個程序佔用時,另一個程序只能阻塞等待。

(2) 直接相互制約關係

這種制約關係主要源於程序間的合作。比如程序B處理資料,程序A通過單緩衝向程序B提供資料。當緩衝空或者已滿時,就會分別對程序B和程序A造成影響。

2. 臨界資源

比如許多硬體資源,如印表機等都屬於臨界資源。程序間應該採取互斥方式實現對這種資源的共享。如生產者—消費者問題中兩者之間設定的緩衝池就應該使用互斥方式實現共享。

3. 臨界區

無論是硬體臨界資源還是軟體臨界資源,多個程序必須互斥地對它進行訪問。每個程序中訪問臨界資源的那段程式碼稱為臨界區。臨界區前有一段檢查是否能夠進入臨界區的程式碼,成為進入區,相應地,在臨界區後面也要加一個退出區。除了臨界區、進入區和退出區之外的其他程式碼相應地被成為剩餘區

可以把一個訪問臨界資源的迴圈這樣描述:

repeat
    entry section;
    critical section;
    exit section;
    remainder section;
until false;

4. 同步機制應該遵循的原則

(1) 空閒讓進。當無程序處於臨界區時,表明臨界資源處於空閒狀態。這用情況下,應該允許一個請求進入臨界區的程序立即進入自己的臨界區,以有效地利用臨街資源。

(2) 忙則等待。當已有程序進入臨界區時,表明臨界資源正在被訪問。此時其他試圖進入臨界區的程序必須等待,以保證對臨界資源的互斥訪問。

(3) 有限等待。要求訪問臨界資源的程序應該保證在有限時間內

進入自己的臨界區,以免進入“死等”狀態。
(4) 讓權等待。當程序不能進入自己的臨界區時,應該立即釋放處理機,以免陷入“忙等”狀態。