進程的同步機制──管程.ppt_第1頁
進程的同步機制──管程.ppt_第2頁
進程的同步機制──管程.ppt_第3頁
進程的同步機制──管程.ppt_第4頁
進程的同步機制──管程.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、4.3.2 進程的同步機制管程,管程的提出 采用PV同步機制來編寫并發(fā)程序,對于共享變量及信號量變量的操作將被分散于各個進程中,缺點: ()易讀性差,因為要了解對于一組共享變量及信號量的操作是否正確,則必須通讀整個系統(tǒng)或者并發(fā)程序,()不利于修改和維護,因為程序的局部性很差,所以任一組變量或一段代碼的修改都可能影響全局,()正確性難以保證,因為操作系統(tǒng)或并發(fā)程序通常很大,要保證這樣一個復(fù)雜的系統(tǒng)沒有邏輯錯誤是很難的,管程:一種同步機制 (管程-類程-進程) 管程定義: 指關(guān)于共享資源的數(shù)據(jù)及在其上操作的一組過程或共享數(shù)據(jù)結(jié)構(gòu)及其規(guī)定的所有操作,系統(tǒng)按資源管理的觀點分解成若干模塊,用數(shù)據(jù)表示抽象

2、系統(tǒng)資源,同時分析了共享資源和專用資源在管理上的差別,按不同的管理方式定義模塊的類型和結(jié)構(gòu),使同步操作相對集中,從而增加了模塊的相對獨立性,管程:集中式同步機制,它的基本思想是將共享變量以及對共享變量能夠進行的所有操作集中在一個模塊中,一個操作系統(tǒng)或并發(fā)程序由若干個這樣的模塊所構(gòu)成,由于一個模塊通常較短,模塊之間關(guān)系清晰,提高了可讀性,便于修改和維護,正確性易于保證,管程的形式 TYPE monitor_name = MONITOR; 共享變量說明 define 本管程內(nèi)所定義、本管程外可調(diào)用的過程(函數(shù))名字表 use 本管程外所定義、本管程內(nèi)將調(diào)用的過程(函數(shù))名字表,PROCEDURE

3、過程名(形參表); 過程局部變量說明; BEGIN 語句序列; END; .,FUNCTION 函數(shù)名(形參表):值類型; 函數(shù)局部變量說明; BEGIN 語句序列; END; . BEGIN 共享變量初始化語句序列; END;,管程的三個主要的特性: (一)模塊化,一個管程是一個基本程序單位,可以單獨編譯,(二)抽象數(shù)據(jù)類型,管程是一種特殊的數(shù)據(jù)類型,其中不僅有數(shù)據(jù),而且有對數(shù)據(jù)進行操作的代碼,(三)信息掩蔽,管程是半透明的,管程中的外部過程(函數(shù))實現(xiàn)了某些功能,管程中的外部過程(函數(shù))實現(xiàn)了某些功能,至于這些功能是怎樣實現(xiàn)的,在其外部則是不可見的,管程有如下幾個要素: (一)管程中的共享

4、變量在管程外部是不可見的,外部只能通過調(diào)用管程中所說明的外部過程(函數(shù))來間接地訪問管程中的共享變量,(二)為了保證管程共享變量的數(shù)據(jù)完整性,規(guī)定管程互斥進入,(三)管程通常是用來管理資源的,因而在管程中應(yīng)當(dāng)設(shè)有進程等待隊以及相應(yīng)的等待及喚醒操作,問題:多個進程出現(xiàn)在管程中 當(dāng)一個進入管程的進程執(zhí)行等待操作時,它應(yīng)當(dāng)釋放管程的互斥權(quán);當(dāng)一個進入管程的進程執(zhí)行喚醒操作時(如喚醒),管程中便存在兩個同時處于活動狀態(tài)的進程,處理方法有三種: 等待繼續(xù),直到退出或等待 等待繼續(xù),直到等待或退出 規(guī)定喚醒為管程中最后一個可執(zhí)行的 操作,因為管程是互斥進入的,所以當(dāng)一個進程試圖進入一個巳被占用的管程時它應(yīng)

5、當(dāng)在管程的入口處等待,因而在管程的入口處應(yīng)當(dāng)有一個進程等待隊列,稱作入口等待隊列,如果進程喚醒進程,則等待繼續(xù),如果進程在執(zhí)行又喚醒進程,則等待繼續(xù),如此,在管程內(nèi)部,由于執(zhí)行喚醒操作,可能會出現(xiàn)多個等待進程,因而還需要有一個進程等待隊列,這個等待隊列被稱為緊急等待隊列。它的優(yōu)先級應(yīng)當(dāng)高于入口等待隊列的優(yōu)先級,由于管程通常是用于管理資源的,因而在管程內(nèi)部,應(yīng)當(dāng)存在某種等待機制。當(dāng)進入管程的進程因資源被占用等原因不能繼續(xù)運行時使其等待。為此在管程內(nèi)部可以說明和使用一種特殊類型的變量,稱作條件變量: VAR C:condition;,對于條件型變量,可以執(zhí)行wait和signal操作: wait(

6、c):如果緊急等待隊列非空,則喚醒第一個等待者;否則釋放管程的互斥權(quán),執(zhí)行此操作的進程的PCB入c鏈尾部,signal(c):如果c鏈為空,則相當(dāng)于空操作,執(zhí)行此操作的進程繼續(xù);否則喚醒第一個等待者,執(zhí)行此操作的進程的PCB入緊急等待隊列的尾部,管程的實現(xiàn) 兩個主要途徑: * 直接構(gòu)造 * 間接構(gòu)造,即用某種已經(jīng)實現(xiàn)的同步機制去構(gòu)造 前者效率高 例子:用PV操作構(gòu)造管程,管程的四個組成部分: 名稱 數(shù)據(jù)結(jié)構(gòu)說明 對該數(shù)據(jù)結(jié)構(gòu)進行操作的一組過程/函數(shù) 初始化語句,TYPE one_instance=RECORD mutex:semaphore;(初值1) urgent:semaphore;(初值

7、0) urgent_count:integer;(初值0) END; TYPE monitor_elements=MODULE; define enter,leave,wait,signal;,mutex(入口互斥隊列) urgent(緊急等待隊列) urgent_count(緊急等待計數(shù)),PROCEDURE enter(VAR instance:one_instance);,BEGIN P(instance.mutex) END;,PROCEDURE leave(VAR instance:one_instance);,BEGIN IF instance.urgent_count 0 THE

8、N BEGIN instance.urgent-; V(instance.urgent) END ELSE V(instance.mutex) END;,PROCEDURE wait(VAR instance:one_instance;VAR s:semephore;VAR count:integer); BEGIN count+; IF instance.urgent_count0 THEN BEGIN instance.urgent_count-; V(instance.urgent) END ELSE V(instance. mutex); P(s); END;,PROCEDURE si

9、gnal(VAR instance:one_instance;VAR s:semaphore;VAR count:integer); BEGIN IF count0 THEN BEGIN count-; instance.urgent_count+; V(s); P(instance.urgent) END END;,例子:一個信息緩沖區(qū)是一個共享資源 抽象成一個數(shù)據(jù)結(jié)構(gòu):數(shù)組 構(gòu)造一些操作(過程或函數(shù)) 發(fā)送:向緩沖區(qū)發(fā)消息 接收:從緩沖區(qū)取消息 隱藏了內(nèi)部的數(shù)據(jù)結(jié)構(gòu)和實現(xiàn)細節(jié),例子:讀者-寫者問題,TYPE r_and_w=MODULE; VAR instance:one_instance

10、; rq,wq:semaphore; r_count,w_count:integer; reading_count,write_count:integer; define start_r,finish_r,start_w,finish_w; use monitor_elements.enter, monitor_elements.leave, monitor_elements.wait, monitor_elements.signal;,PROCEDURE start_r; BEGIN monitor_elements.enter(instance); IF write_count0 THEN

11、 monitor_elements.wait (instance,rq,r_count); reading_count+; monitor_elements.signal (instance,rq,r_count); monitor_elements.leave(instance); END;,PROCEDURE finish_r; BEGIN monitor_elements.enter(instance); reading_count-; IF reading_count=0 THEN monitor_elements.signal (instance,wq,w_count); monitor_elements.leave(instance); END;,PROCEDURE start_w; BEGIN monitor_elements.enter(instance); write_count+; IF (write_count1) OR(reading_count0) THEN monitor_elements.wait (instance,wq,w_count); monitor_elements.leave(instance); END;,BEGIN reading_count:=0; write_count:=0; r_count:=0; w_count:=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論