第2章進程同步與通信-3_第1頁
第2章進程同步與通信-3_第2頁
第2章進程同步與通信-3_第3頁
第2章進程同步與通信-3_第4頁
第2章進程同步與通信-3_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2.6進程通信進程通信是指進程之間的信息交換交換的信息量一個狀態或數值上千個字節2.6.1進程通信分類(1)低級通信:進程的互斥和同步。(2)高級通信:指用戶可直接利用os提供的一組通信命令,高效地傳送大量數據的一種通信方式,對用戶透明。(2)高級通信分類1、共享存儲器系統

(1)共享數據結構的通信方式進程之間通過某種數據結構,如緩沖池進行通信屬于低級通信方式;(2)共享存儲區通信方式為了傳送大量信息,在存儲器中劃出一塊共享存儲區,進程可通過對共享存儲區進行讀或寫來實現通信,屬于高級通信方式。2、管道通信管道通信方式建立在文件系統的基礎上,利用共享文件來連接兩個相互通信的進程,此共享文件稱為管道(Pipe)。管道是指用于連接一個讀進程和一個寫進程,以實現它們之間通信的共享文件寫進程讀進程管道管道通信

必需的協調能力(1)互斥當一個進程正在對管道進行讀/寫操作時,另一進程必須等待。(2)同步當寫(輸入)進程把一定量的數據(如4K)寫入管道后,便去睡眠等待,直到讀(輸出)進程取走數據后再把它喚醒。當讀進程發現管道空時也應睡眠等待,直至寫進程將消息寫入管道后,才將它喚醒.(3)判別對方是否存在,只有確定了對方存在時,方能進行通信。3、消息傳遞系統信息交換的單位是消息或報文,分成兩種:直接通信方式間接通信方式計算機網絡中將消息稱為報文。

2.6.2消息傳遞通信的實現方式

1、直接通信方式發送進程直接把消息發送給目標進程發送進程和接收進程都以顯式方式分別提供對方的標識符。系統提供兩條通信原語

Send(Receiver,message);Receive(Sender,message);例如:Send(P2,m1);Receive(P1,m1);解決生產者一消費者問題repeat…produceaniteminnextp;…

Send(consumer,nextp);untilfalse;

repeat

Receive(producer,nextp);…Consumertheiteminnextc;untilfalse;2、間接通信方式進程之間的通信需要通過某種中間實體,該實體用來暫存發送進程發送給目標進程的消息;接收進程則從該實體中取出對方發送給自己的消息。這種中間實體稱為信箱。消息在信箱中可以安全地保存,只允許核準的目標用戶隨時讀取,故可實現非實時通信。信箱的創建和撤消進程用信箱創建原語來建立一個新信箱。創建者進程應給出信箱名字、信箱屬性(公用、私用或共享);對于共享信箱,還應給出共享者的名字。用信箱撤消原語來撤消。消息的發送與接收Send(mailbox,message):將一個消息發送到指定信箱;Receive(mailbox,message)從指定信箱中接收一個消息信箱分類私用信箱。公用信箱。共享信箱。私用信箱用戶進程建立,作為該進程的一部分。擁有者有權讀消息,其他用戶只能發送。采用單向通信鏈路。進程結束時信箱也消失。公用信箱它由OS創建。提供給系統中的所有核準進程使用。進程既發送也可取出。采用雙向通信鏈路的信箱來實現。系統運行期間始終存在。共享信箱由某進程創建,創建時提供共享進程(用戶)的名字。信箱的擁有者和共享者,都有權從信箱中取走發送給自己的消息。信箱通信時,發送進程和接收進程的關系:一對一關系。建立一條專用的通信鏈路。多對一關系。服務進程與多個用戶進程之間進行交互,又稱客戶/服務器交互。一對多關系。一個發送進程與多個接收進程進行交互,使發送進程可用廣播形式,向接收者發送消息。多對多關系。建立一個公用信箱,多個進程投遞并取走自己的消息。消息緩沖隊列-示意圖2、消息傳遞系統的實現消息緩沖隊列-數據結構定義//消息緩沖區定義structmessage_buffer{charsender[30]; /*發送者進程標識符*/intsize; /*消息長度*/chartext[200]; /*消息正文*/structmessage_buffer*next; //指向下一個消息緩沖區的指針}//PCB中有關通信的數據項structprocess_control{structmessage_buffer*mq;/*消息隊列隊首指針*/

semaphoremutex=1; /*消息隊列互斥信號量,初值為1*/

semaphoresm=0;/*消息隊列同步信號量,記錄消息的個數.初值為0*/}charreceiver[30];structmessage_buffera;voidsend(receiver,a)//receiver為接收進程標識符,a為發送區首址{structmessage_bufferi;structprocess_controlj;getbuf(a.size,i);/*根據發送區消息a的長度申請一緩沖區i*/i.sender=a.sender;//將發送區a的內容復制到消息緩沖區i;i.size=a.size;copy(i.text,a.text);i.next=0;getid(PCB_set,receiver,j);/*獲得接收進程的進程標識符j*/P(j.mutex);Insert(j.mq,i);/*將消息緩沖區i掛到的消息隊列j.mq上*/

V(j.mutex);V(j.sm);//喚醒接收進程,通知它可以接收消息了}消息緩沖隊列-發送原語消息緩沖隊列-接收原語

接收進程調用接收原語receive(b),從自己的消息緩沖隊列mq中摘下第一個消息緩沖區i,并將其中的數據復制到以b為首址的指定消息接收區內。接收原語描述如下:

structmessage_bufferb;voidreceive(b){structmessage_bufferi;structprocess_controlj;j=internal_name();/*接收進程的內部標識符*/P(j.sm);P(j.mutex);remove(j.mq,i);/*從消息隊列中摘下第一個消息緩沖區*/

V(j.mutex);b.sender=i.sender;//將消息緩沖區i中信息復制到接收區bb.size=i.size;copy(b.text,i.text);releasebuf(i);釋放消息緩沖區}2.4.5管程機制引入的原因:

●信號量機制雖然既方便又有效地解決了進程同步問題,但要求訪問臨界資源的進程自備同步操作wait(s)、signal(s),使得大量的同步操作分散在各個進程中,給進程的管理帶來不便,并會因同步操作使用不當導致死鎖。●Hoare和Hanson提出了管程的概念把分散在各個進程中的與同一共享資源有關的同步處理從各進程中抽出并集中起來。見書P57●Hansan為管程所下的定義是:一個管程定義了一個數據結構和能為并發進程所執行(在該數據結構上)的一組操作,這組操作能同步進程和改變管程中的數據。●管程=數據結構+操作+對數據結構中變量的初始化●1、管程的定義圖2-15管程的示意圖管程相當于圍墻,它把共享變量和對它進行操作的若干過程圍了起來,所有進程要訪問臨界資源時,都必須經過管程(相當于通過圍墻的門)才能進入,而管程每次只準許一個進程進入管程,從而實現了進程互斥。管程的基本特性:(1)局部于管程的數據只能被局部于管程內的過程所訪問。(2)一個進程只有通過調用管程內的過程才能進入管程訪問共享數據。(3)每次僅允許一個進程在管程內執行某個內部過程。管程是一個語言成分,所以管程的互斥訪問完全由編譯程序在編譯時自動添加,無需程序員關注,而且保證正確。打磕睡的理發師問題

理發店有一名理發師,一把理發椅,還有N把供等候理發的顧客坐的普通椅子。如果沒有顧客到來,理發師就坐在理發椅上打磕睡。當顧客到來時,就喚醒理發師。如果顧客到來時理發師正在理發,顧客就坐下來等待。如果N把椅子都坐滿了,顧客就離開該理發店去別處理發。waiting:對占用沙發的顧客計數,該變量將被多個顧客進程互斥地訪問并修改,設mutex信號量。同步關系:1、如果沒有顧客,理發師就打磕睡,有顧客等待,喚醒理發師。2、理發師理發,顧客等待。理發師理完發,下一個顧客可以去。用信號量解決打磕睡的理發師問題voidcustomer() //顧客進程{P(mutex);if(waiting<CHAIRS)//如果有空位,顧客等待 {waiting++;

V(customers); //喚醒理發師

V(mutex);

P(barners);//如果理發師正在理發,則顧客等待 get_haircut(); }else //如果沒有空位,則顧客離開

V(mutex); }#defineCHAIRS5 //為等候的顧客準備的座椅數

semaphorecustomers=0;

semaphorebarners=0;

semaphoremutex=1;

intwaiting;//對占用沙發的顧客計數voidbarber() //理發師進程{while(true){P(customers);//如果沒有顧客,理發師就打磕睡

P(mutex);//互斥進入臨界區

waiting--;V(barners);//理發師準備理發了

V(mutex);cut_hair();//理發}}第二章總結進程同步與通信1、進程同步的基本概念(1)臨界資源與臨界區(2)同步:同步是進程間共同完成一項任務時直接發生相互作用的關系。(3)互斥:互斥是并發執行的多個進程由于競爭同一資源而產生的相互排斥的關系。(4)同步機制遵循的準則。2.實現臨界區互斥的基本方法軟件實現方法;硬件實現方法。3.信號量(1)整型信號量(2)記錄型信號量:利用信號量實現同步與互斥(3)And型信號量4.經典同步問題(1)生產者-消費者問題;(2)讀者-寫者問題;(3)哲學家進餐問題。5.進程通信PV操作是低級通信方式;高級通信:共享存儲系統;消息傳遞系統;管道通信。6.管程(1)基本概念(2)組成(3)基本特性

練習題1、如果有三個進程共享同一程序段,而且每次最多允許兩個進程進入該程序段,則信號量的初值應設置為多少?3 B.2 C.1 D.02、設有四個進程共享一個資源,如果每次只允許一個進程使用該資源,則用P、V操作管理時信號量S的可能取值是多少?

A.3,2,1,0,-1 B.2,1,0,-1,-2 C.1,0,-1,-2,-3 D.4,3,2,1,03、臨界區是? A.一個緩沖區 B.一段數據區 C.一段程序

D.棧BCC4、在單處理機上,如果系統中有n個進程,則就緒隊列中的進程個數最多是多少個?

A.1個 B.n+1個 C.n個 D.n-1個5、在單處理機上,如果系統中有n個進程,則等待隊列中的進程個數最多是多

溫馨提示

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

評論

0/150

提交評論