同步關係(直接制約):為了完成乙個共同任務,相互協作的幾個程序需要在某些確定點上協調他們的工作,等待來自其它程序的資訊,以調整它們的推進速度,方可順利執行完畢。
互斥關係(間接制約):把併發程序間存在的因相互競爭使用獨佔資源(共享資源)而產生的制約關係。
例如:印表機,共享記憶體;
臨界資源:一次僅允許乙個程序使用的硬體或軟體資源。
注意:對於臨界資源,必須互斥訪問,否則會導致執行結果的不確定性。
臨界段(區):指在程序中訪問臨界資源的那段**。
訪問過程:
1)在進入臨界段之前,寫一段**以檢查可否進入臨界段,通常把這段**稱為進入區(申請,判斷)。
2)在退出臨界段後,必須有一段**來清除「正在訪問臨界段」標誌,或發出本程序已經退出臨界段的資訊,把這段**稱為退出區(釋放)。
同步機構:指能實現程序同步的機制,該機制能把其它程序需要的資訊傳送出去,也能測試自己需要的資訊是否到達。
同步機構應遵循4個準則:
空閒讓進;2、忙則等待;3、有限等待;4、讓權等待;
實現臨界段的硬體方法(低階方法)(了解)
遮蔽中斷法,如程序1的程式:
disableinterrupt();// 不准中斷
balance=balance+amount; //執行指令
enableinterrupt(); //允許中斷
「test_and_set」指令
如果機器支援test_and_set,可用下列方法解決:(lock=false)
dowhile(1);
3、「swap」指令
該指令功能描述為:
void swap(boolean &a, boolean &b)
pv操作的實現
1. 訊號量定義
typedef struct semaphore
semaphore s;
2. p操作
p(s): s.value=s.value-1;
if s.value<0 then 儲存現場,
將本程序掛入s.l佇列,等待重新排程。
3. v操作
v(s): s.value:=value+1
if s.value≤0 then 從s.l佇列
取一程序,掛入就緒佇列。
4. p,v操作的優點:同步能力強
5. p,v操作的缺點:程式結構差,易產生死鎖。
訊號量的物理意義
p(s)操作:
①請求分配乙個s代表的資源,執行s.value-1;
②若s.value<0,表示系統已無該類資源,申請者阻塞。此時,|s.value|表示該訊號量上阻塞的程序數;
v(s)操作:
①程序釋放乙個s代表的資源,執行s.value+1;
②若s.value<=0,表示尚有程序因等待s代表的資源而處於阻塞狀態,所以應喚醒其中之一。
使用pv 操作的幾個經典案例,比如哲學家就餐問題
程序的同步與通訊
於文章,表示十分古老的文章了 進入sleep過程後,核心首先儲存進入睡眠時的處理機執行級,再提高處理機的執行優先順序,來遮蔽所有的中斷,接著將該程序置為 睡眠 狀態,將睡眠位址儲存在程序表項中,並將該程序放入睡眠佇列中。如果程序的睡眠是不可中斷的,做了程序上下文的切換後,程序便可安穩地睡眠。當程序被...
程序通訊與程序同步
多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...
程序的同步與通訊2
二 讀者寫者問題 個資料檔案或記錄可被多個程序共享,我們把只要求讀該檔案的程序稱為 reader 程序 其他程序則稱為 writer程序 允許多個程序同時讀乙個共享物件,因為讀操 作不會使資料檔案混亂。但不允許乙個writer程序和其他reader程序或writer程序同時訪 問共享物件。因為這種訪...