一、 程序同步的基本概念:
間接相互制約關係
多個程式在併發執行時,由於共享系統資源,如cpu、i/o裝置等,致使在這些併發執行的程式之間形成相互制約的關係。對於像印表機、磁帶機這樣的臨界資源,必須保證多個程序對之只能互斥地訪問,由此,在這些程序間形成了源於對該類資源共享的所謂間接相互制約關係。為了保證這些程序能有序地執行,對於系統中的這類資源,必須由系統實施統一分配,即使用者在要使用之前,應先提岀申請,而不允許使用者程序直接使用。
直接相互制約關係
某些應用程式,為了完成某任務而建立了兩個或多個程序。這些程序將為完成同一項任務而相互合作。程序間的直接制約關係就是源於它們之間的相互合作。例如,有兩個相互合作的程序——輸入程序a和計算程序b,它們之間共享乙個緩衝區。程序a通過緩衝向程序b提供資料。程序b從緩衝中取出資料,並對資料進行處理。但如果該緩衝空時,計算程序因不能獲得所需資料而被阻塞。一旦程序a把資料輸入緩衝區後便將程序b喚醒; 反之,當緩衝區已滿時,程序a因不能再向緩衝區投放資料而被阻塞,當程序b將緩衝區資料取走後便可喚醒a。
二、所有同步機制都應遵循下述四條準則:
空閒讓進。當無程序處於臨界區時,表明臨界資源處於空閒狀態,應允許乙個請求進入臨界區的程序立即進入自己的臨界區,以有效地利用臨界資源。
忙則等待。當已有程序進入臨界區時,表明臨界資源正在被訪問,因而其它試圖進入臨界區的程序必須等待,以保證對臨界資源的互斥訪問。
有限等待。對要求訪問臨界資源的程序,應保證在有限時間內能進入自己的臨界區,以免陷入"死等」狀態。
讓權等待。當程序不能進入自己的臨界區時,應立即釋放處理機,以免程序陷入 「忙等」狀態。
三、硬體同步機制
背景:雖然可以利用軟體方法解決諸程序互斥進入臨界區的問題,但有一定難度,並且存在很大的侷限性,因而現在已很少採用。相應地,目前許多計算機已提供了一些特殊的硬體指令,允許對乙個字中的內容進行檢測和修正,或者是對兩個字的內容進行交換等。可利用這些特殊的指令來解決臨界區問題。
實現互斥的方法:
四、訊號量機制
整型訊號量
最初由dijkstra把整型訊號量定義為乙個用於表示資源數目的整型量s,它與一般整型量不同,除初始化外,僅能通過兩個標準的原子操作(atomic operation) wait(s)和signal(s)來訪問。很長時間以來,這兩個操作一直被分別稱為p、v操作。wait和signal操作可描述如下:
記錄型訊號量
在整型訊號量機制中的wait操作,只要是訊號量s≤0,就會不斷地測試。因此,該機制並未遵循「讓權等待」的準則,而是使程序處於「忙等」的狀態。記錄型訊號量機制則是一種不存在「忙等」現象的程序同步機制。但在釆取了 「讓權等待」的策略後,又會出現多個程序等待訪問同一臨界資源的情況。為此,在訊號量機制中,除了需要乙個用於代表資源數目的整型變數value外,還應增加乙個程序鍊錶指標list,用於鏈結上述的所有等待程序。記錄型訊號量是由於它釆用了記錄型的資料結構而得名的。它所包含的上述兩個資料項可描述如下:
typedef
struct
semaphore;
wait
(semaphore *s)
signal
(semaphore *s)
and型訊號量前面所述的程序互斥問題針對的是多個併發程序僅共享乙個臨界資源的情況。在有些應用場合,是乙個程序往往需要獲得兩個或更多的共享資源後方能執行其任務。假定現有兩個程序a和b,它們都要求訪問共享資料d和e,當然,共享資料都應作為臨界資源。 為此,可為這兩個資料分別設定用於互斥的訊號量dmutex和emutex,並令它們的初值都是1。相應地,在兩個程序中都要包含兩個對dmutex和emutex的操作,即
若程序a和b按下述次序交替執行wait操作:
最後,程序a和b就將處於僵持狀態。在無外力作用下,兩者都將無法從僵持狀態中解脫 出來。我們稱此時的程序a和b已進入死鎖狀態。顯然,當程序同時要求的共享資源愈多 時,發生程序死鎖的可能性也就愈大。
and同步機制的基本思想是:將程序在整個執行過程中需要的所有資源,一次性全部地分配給程序,待程序使用完後再一起釋放。只要尚有乙個資源未能分配給程序,其它所 有可能為之分配的資源也不分配給它。亦即,對若干個臨界資源的分配採取原子操作方式: 要麼把它所請求的資源全部分配到程序,要麼乙個也不分配。由死鎖理論可知,這樣就可避免上述死鎖情況的發生。為此,在wait操作中增加了乙個「and」條件,故稱為and 同步,或稱為同時wait操作,即swait(simultaneous wait)定義如下:
swait
(sl, s2, sn)
else}}
ssignal
(sl, s2, sn)
}}
訊號量集在前面所述的記錄型訊號量機制中,wait(s)或signal(s)操作僅能對訊號量施以加1或減1操作,意味著每次只能對某類臨界資源進行乙個單位的申請或釋放。當一次需要n個單位時,便要進行n次wait(s)操作,這顯然是低效的,甚至會增加死鎖的概率。此外,在 有些情況下,為確保系統的安全性,當所申請的資源數量低於某一下限值時,還必須進行管制,不予以分配。因此,當程序申請某類臨界資源時,在每次分配之前,都必須測試資源的數量,判斷是否大於可分配的下限值,決定是否予以分配。基於上述兩點,可以對and訊號量機制加以擴充,對程序所申請的所有資源以及每類資源不同的資源需求量,在一次p、v原語操作中完成申請或釋放。程序對訊號量si的測試值不再是1,而是該資源的分配下限值ti,即要求si>=ti,否則不予分配。一旦允許分 配,程序對該資源的需求值為di,即表示資源佔用量,進行si= si-di操作,而不是簡單 的si=si-1。由此形成一般化的「訊號量集」機制。對應的swait和ssignal格式為:
五、管制機制
雖然訊號量機制是一種既方便、又有效的程序同步機制,但每個要訪問臨界資源的進 程都必須自備同步操作wait(s)和signal(s)。這就使大量的同步操作分散在各個程序中。這 不僅給系統的管理帶來了麻煩,而且還會因同步操作的使用不當而導致系統死鎖。這樣, 在解決上述問題的過程中,便產生了一種新的程序同步工具——管程(monitors)。
作業系統 程序同步
臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...
作業系統 程序同步
引入程序 提高了資源的利用率和系統的吞吐量 程序的非同步性 會給系統造成混亂 程序同步基本概念 1,兩種形式的制約關係 a 間接相互制約 ab兩程序爭用一台印表機 b 直接相互制約 a程序放資料 緩衝區 b程序從緩衝區取資料 2,臨界資源 硬體臨界資源 軟體臨界資源 印表機,磁帶機,緩衝區。3,臨界...
作業系統 程序同步
ipc.件 include include include include include include include define bufsz 256 建立或獲取 ipc 的一組函式的原型說明 int get ipc id char proc file,key t key char set s...