第2章進(jìn)程同步與通信-3_第1頁(yè)
第2章進(jìn)程同步與通信-3_第2頁(yè)
第2章進(jìn)程同步與通信-3_第3頁(yè)
第2章進(jìn)程同步與通信-3_第4頁(yè)
第2章進(jìn)程同步與通信-3_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

(1)共享數(shù)據(jù)結(jié)構(gòu)的通信方式進(jìn)程之間通過某種數(shù)據(jù)結(jié)構(gòu),如緩沖池進(jìn)行通信屬于低級(jí)通信方式;(2)共享存儲(chǔ)區(qū)通信方式為了傳送大量信息,在存儲(chǔ)器中劃出一塊共享存儲(chǔ)區(qū),進(jìn)程可通過對(duì)共享存儲(chǔ)區(qū)進(jìn)行讀或?qū)憗韺?shí)現(xiàn)通信,屬于高級(jí)通信方式。2、管道通信管道通信方式建立在文件系統(tǒng)的基礎(chǔ)上,利用共享文件來連接兩個(gè)相互通信的進(jìn)程,此共享文件稱為管道(Pipe)。管道是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程,以實(shí)現(xiàn)它們之間通信的共享文件寫進(jìn)程讀進(jìn)程管道管道通信

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

2.6.2消息傳遞通信的實(shí)現(xiàn)方式

1、直接通信方式發(fā)送進(jìn)程直接把消息發(fā)送給目標(biāo)進(jìn)程發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式分別提供對(duì)方的標(biāo)識(shí)符。系統(tǒng)提供兩條通信原語(yǔ)

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

Send(consumer,nextp);untilfalse;

repeat

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

semaphoremutex=1; /*消息隊(duì)列互斥信號(hào)量,初值為1*/

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

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

接收進(jìn)程調(diào)用接收原語(yǔ)receive(b),從自己的消息緩沖隊(duì)列mq中摘下第一個(gè)消息緩沖區(qū)i,并將其中的數(shù)據(jù)復(fù)制到以b為首址的指定消息接收區(qū)內(nèi)。接收原語(yǔ)描述如下:

structmessage_bufferb;voidreceive(b){structmessage_bufferi;structprocess_controlj;j=internal_name();/*接收進(jìn)程的內(nèi)部標(biāo)識(shí)符*/P(j.sm);P(j.mutex);remove(j.mq,i);/*從消息隊(duì)列中摘下第一個(gè)消息緩沖區(qū)*/

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

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

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

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

V(mutex);

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

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

semaphorecustomers=0;

semaphorebarners=0;

semaphoremutex=1;

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

P(mutex);//互斥進(jìn)入臨界區(qū)

waiting--;V(barners);//理發(fā)師準(zhǔn)備理發(fā)了

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

練習(xí)題1、如果有三個(gè)進(jìn)程共享同一程序段,而且每次最多允許兩個(gè)進(jìn)程進(jìn)入該程序段,則信號(hào)量的初值應(yīng)設(shè)置為多少?3 B.2 C.1 D.02、設(shè)有四個(gè)進(jìn)程共享一個(gè)資源,如果每次只允許一個(gè)進(jìn)程使用該資源,則用P、V操作管理時(shí)信號(hào)量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、臨界區(qū)是? A.一個(gè)緩沖區(qū) B.一段數(shù)據(jù)區(qū) C.一段程序

D.棧BCC4、在單處理機(jī)上,如果系統(tǒng)中有n個(gè)進(jìn)程,則就緒隊(duì)列中的進(jìn)程個(gè)數(shù)最多是多少個(gè)?

A.1個(gè) B.n+1個(gè) C.n個(gè) D.n-1個(gè)5、在單處理機(jī)上,如果系統(tǒng)中有n個(gè)進(jìn)程,則等待隊(duì)列中的進(jìn)程個(gè)數(shù)最多是多

溫馨提示

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

評(píng)論

0/150

提交評(píng)論