在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)讓權等待。當程序不能進入自己的臨界區時,應該立即釋放處理機,以免陷入「忙等」狀態。
Linux程序同步
linux程序同步 概述 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是...
程序同步問題
有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...
程序同步控制
生產者 消費者問題描述的是 有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能夠併發執行,在兩者之間設定了乙個具有n個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中 消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非...