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

2021-08-14 06:05:46 字數 1441 閱讀 2110

在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個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中 消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非...