生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)_第1頁
生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)_第2頁
生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)_第3頁
生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)_第4頁
生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、生產(chǎn)者消費(fèi)者問題模擬實(shí)現(xiàn)(z)-標(biāo))隹化文件發(fā)布號:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII生產(chǎn)者7消費(fèi)者實(shí)驗(yàn)1.1實(shí)驗(yàn)?zāi)康暮鸵?.1.1實(shí)驗(yàn)?zāi)康牟僮飨到y(tǒng)的基本控制和管理控制都圍繞著進(jìn)程展開,其中的復(fù)雜性是由于 支持并發(fā)和并發(fā)機(jī)制而引起的。自從操作系統(tǒng)中引入并發(fā)程序設(shè)計(jì)后,程序的 執(zhí)行不再是順序的,一個(gè)程序未執(zhí)行完而另一個(gè)程序便已開始執(zhí)行,程序外部 的順序特性消失,程序與計(jì)算不再一一對應(yīng)。并發(fā)進(jìn)程可能是無關(guān)的,也可能 是交互的。然而,交互的進(jìn)程共享某些變量,一個(gè)進(jìn)程的執(zhí)行可能會影響其他 進(jìn)程的執(zhí)行結(jié)果,交互的并發(fā)進(jìn)程之間具有制約關(guān)系、同步關(guān)系。其中典型模

2、型便是生產(chǎn)者消費(fèi)者模型。本實(shí)驗(yàn)通過編寫和調(diào)試生產(chǎn)者消費(fèi)者模擬程序,進(jìn)一步認(rèn)識進(jìn)程并發(fā)執(zhí)行 的實(shí)質(zhì),加深對進(jìn)程競爭關(guān)系,協(xié)作關(guān)系的理解,掌握使用信號量機(jī)制與P、V 操作來實(shí)現(xiàn)進(jìn)程的同步與互斥。1.1.2實(shí)驗(yàn)要求1.用高級語言編寫一個(gè)程序,模擬多個(gè)生產(chǎn)者進(jìn)程和多個(gè)消費(fèi)者進(jìn)程并發(fā) 執(zhí)行,并采用信號量機(jī)制與P、V操作實(shí)現(xiàn)進(jìn)程間同步與互斥。2.撰寫實(shí)驗(yàn)報(bào)告,報(bào)告應(yīng)包含以下內(nèi)容:(1)實(shí)驗(yàn)?zāi)康模?2)實(shí)驗(yàn)內(nèi)容;(3)設(shè)計(jì)思路;(4)程序流程圖;(5)程序中主要數(shù)據(jù)結(jié)構(gòu)和函數(shù)說明;(6)帶注釋的源程序代碼;(7)程序運(yùn)行結(jié)果及分析;(8)實(shí)驗(yàn)收獲與體會。1.2預(yù)備知識1.2.1生產(chǎn)者一消費(fèi)者問題生產(chǎn)者一消費(fèi)

3、者問題表述如下:如圖所示,有n個(gè)生產(chǎn)者和m個(gè)消費(fèi)者, 連接在具有k個(gè)單位緩沖區(qū)的有界環(huán)狀緩沖上,故又稱有界緩沖問題。生產(chǎn)者 不斷生成產(chǎn)品,只要緩沖區(qū)未滿,生產(chǎn)者進(jìn)程pi所生產(chǎn)的產(chǎn)品就可投入緩沖 區(qū);類似的,只要緩沖區(qū)非空,消費(fèi)者進(jìn)程cj就可以從緩沖區(qū)取走并消耗產(chǎn) 品。圖生產(chǎn)者一消費(fèi)者問題示意圖著名的生產(chǎn)者一消費(fèi)者問題(producer-consumer problem)是計(jì)算機(jī)操作 系統(tǒng)中并發(fā)進(jìn)程內(nèi)在關(guān)系的一種抽象,是典型的進(jìn)程同步問題。在操作系統(tǒng) 中,生產(chǎn)者進(jìn)程可以是計(jì)算進(jìn)程、發(fā)送進(jìn)程,而消費(fèi)者進(jìn)程可以是打印進(jìn)程、 接收進(jìn)程等,解決好生產(chǎn)者一消費(fèi)者問題就解決了一類并發(fā)進(jìn)程的同步問題。操作系統(tǒng)

4、實(shí)現(xiàn)進(jìn)程同步的機(jī)制稱為同步機(jī)制,它通常由同步原語組成。不 同的同步機(jī)制采用不同的同步方法,迄今已設(shè)計(jì)出多種同步機(jī)制,本實(shí)驗(yàn)采用 最常用的同步機(jī)制:信號量及PV操作。1.2.2信號量與PV操作1965年,荷蘭計(jì)算機(jī)科學(xué)家提出新的同步工具一一信號量和PV操作,他 將交通管制中多種顏色的信號燈管理方法引入操作系統(tǒng),讓多個(gè)進(jìn)程通過特殊 變量展開交互。一個(gè)進(jìn)程在某一關(guān)鍵點(diǎn)上被迫停止直至接收到對應(yīng)的特殊變量 值,通過這一措施任何復(fù)雜的進(jìn)程交互要求均可得到滿足,這種特殊變量就是 信號量(semaphore)。為了通過信號量傳送信號,進(jìn)程可利用P和V兩個(gè)特 殊操作來發(fā)送和接收信號,如果協(xié)作進(jìn)程的相應(yīng)信號仍未到

5、達(dá),則進(jìn)程被掛起 直至信號到達(dá)為止。在操作系統(tǒng)中用信號量表示物理資源的實(shí)體,它是一個(gè)與隊(duì)列有關(guān)的整型 變量。具體實(shí)現(xiàn)時(shí),信號量是一種變量類型,用一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu)表示,有 兩個(gè)分量:一個(gè)是信號量的值,另一個(gè)是信號量隊(duì)列的指針。信號量在操作系 統(tǒng)中主要用于封鎖臨界區(qū)、進(jìn)程同步及維護(hù)資源計(jì)數(shù)。除了賦初值之外,信號 量僅能由同步原語PV對其操作,不存在其他方法可以檢查或操作信號量,PV 操作的不可分割性確保執(zhí)行的原子性及信號量值的完整性。利用信號量和PV操 作即可解決并發(fā)進(jìn)程競爭問題,又可解決并發(fā)進(jìn)程協(xié)作問題。信號量按其用途可分為兩種:公用信號量,聯(lián)系一組并發(fā)進(jìn)程,相關(guān)進(jìn)程 均可在此信號量上執(zhí)行PV

6、操作,用于實(shí)現(xiàn)進(jìn)程互斥;私有信號量,聯(lián)系一組并 發(fā)進(jìn)程,僅允許此信號量所擁有的進(jìn)程執(zhí)行P操作,而其他相關(guān)進(jìn)程可在其上 執(zhí)行V操作,初值往往為0或正整數(shù),多用于并發(fā)進(jìn)程同步。信號量的定義為如下數(shù)據(jù)結(jié)構(gòu):typedef struct semaphoreint value;oleFlag = rand()%2;oleFlag = rand()%2;oleFlag)strcpy(,”生產(chǎn)者);elsestrcpy(,消費(fèi)者);strcat(, itoa(i+1, digitTemp, 10);processi.current

7、State = 1;processi.currentStep = 1; processi.code = i + 1;producerCongestionQueuei = 0;consumerCongestionQueuei = 0;shareCongestionQueuei = 0;void wakeup(int *pcq) urrentState = 1;oleFlag = 1) urrentStep = 2) printf(%20s:該進(jìn)程被喚醒!申請空緩沖區(qū)成功!n, ); else if (processcode.currentStep = 3) pri

8、ntf(%20s:該進(jìn)程被喚醒!申請?jiān)L問緩沖區(qū)成功!n”,); else if (processcode.roleFlag = 0) urrentStep = 1) processcode.data = pop();printf(%20s:該進(jìn)程被喚醒!申請取產(chǎn)品d成功!n, , processcode.data); else if (processcode.currentStep = 2) printf(%20s:該進(jìn)程被喚醒!申請?jiān)L問緩沖區(qū)成功!n, );processcode.currentS

9、tep+;for (int i = 1; (i processNum) & (pcqi != 0); i+) urrentState = 0;行結(jié)果程序經(jīng)編譯運(yùn)行后,輸出如下結(jié)果:生產(chǎn)者消費(fèi)者算法模擬消費(fèi)者2:無產(chǎn)品可取,該進(jìn)程被阻塞!生產(chǎn)者3:生產(chǎn)一個(gè)產(chǎn)品344!生產(chǎn)者3:申請空緩沖區(qū)成功!生產(chǎn)者1:生產(chǎn)一個(gè)產(chǎn)品723!生產(chǎn)者1:申請空緩沖區(qū)成功!生產(chǎn)者3:申請?jiān)L問緩沖區(qū)成功!生產(chǎn)者3:將產(chǎn)品344正送入緩沖區(qū)!生產(chǎn)者3:釋放緩沖區(qū)訪問權(quán)!生產(chǎn)者1:申請?jiān)L問緩沖區(qū)成功!生產(chǎn)者1:將產(chǎn)品723正送入緩沖區(qū)!生產(chǎn)者3:產(chǎn)品已送入緩沖區(qū),產(chǎn)品數(shù)量增加!消費(fèi)者2:該進(jìn)程被喚醒!申請取產(chǎn)品344成功!

10、消費(fèi)者4:無產(chǎn)品可取,該進(jìn)程被阻塞!生產(chǎn)者1:釋放緩沖區(qū)訪問權(quán)!消費(fèi)者2:申請?jiān)L問緩沖區(qū)成功!消費(fèi)者2:從緩沖區(qū)中正取出產(chǎn)品723!生產(chǎn)者3:生產(chǎn)一個(gè)產(chǎn)品924!消費(fèi)者2:釋放緩沖區(qū)訪問權(quán)!生產(chǎn)者1:產(chǎn)品已送入緩沖區(qū),產(chǎn)品數(shù)量增加!消費(fèi)者4:該進(jìn)程被喚醒!申請取產(chǎn)品723成功!生產(chǎn)者1:生產(chǎn)一個(gè)產(chǎn)品510!生產(chǎn)者1:無空緩沖區(qū),該進(jìn)程被阻塞!消費(fèi)者2:產(chǎn)品已取出,空緩沖區(qū)數(shù)量增加!生產(chǎn)者1:該進(jìn)程被喚醒!申請空緩沖區(qū)成功!生產(chǎn)者1:申請?jiān)L問緩沖區(qū)成功!消費(fèi)者4:其他進(jìn)程正在訪問緩沖區(qū),該進(jìn)程被阻塞!生產(chǎn)者3:無空緩沖區(qū),該進(jìn)程被阻塞!生產(chǎn)者1:將產(chǎn)品510正送入緩沖區(qū)!生產(chǎn)者1:釋放緩沖區(qū)訪問

11、權(quán)!消費(fèi)者4:該進(jìn)程被喚醒!申請?jiān)L問緩沖區(qū)成功!消費(fèi)者4:從緩沖區(qū)中正取出產(chǎn)品723!消費(fèi)者4:釋放緩沖區(qū)訪問權(quán)!消費(fèi)者4:產(chǎn)品已取出,空緩沖區(qū)數(shù)量增加!生產(chǎn)者3:該進(jìn)程被喚醒!申請空緩沖區(qū)成功!生產(chǎn)者1:產(chǎn)品已送入緩沖區(qū),產(chǎn)品數(shù)量增加!生產(chǎn)者1:生產(chǎn)一個(gè)產(chǎn)品450!消費(fèi)者2:消費(fèi)產(chǎn)品723!生產(chǎn)者1:無空緩沖區(qū),該進(jìn)程被阻塞!消費(fèi)者2:申請取出產(chǎn)品成功!消費(fèi)者2:申請?jiān)L問緩沖區(qū)成功!消費(fèi)者2:從緩沖區(qū)中正取出產(chǎn)品723!消費(fèi)者4:消費(fèi)產(chǎn)品723!消費(fèi)者4:無產(chǎn)品可取,該進(jìn)程被阻塞!消費(fèi)者2:釋放緩沖區(qū)訪問權(quán)!消費(fèi)者2:產(chǎn)品已取出,空緩沖區(qū)數(shù)量增加!生產(chǎn)者1:該進(jìn)程被喚醒!申請空緩沖區(qū)成功!生

12、產(chǎn)者3:申請?jiān)L問緩沖區(qū)成功!生產(chǎn)者1:其他進(jìn)程正在訪問緩沖區(qū),該進(jìn)程被阻塞!生產(chǎn)者3:將產(chǎn)品924正送入緩沖區(qū)!消費(fèi)者2:消費(fèi)產(chǎn)品723!生產(chǎn)者3:釋放緩沖區(qū)訪問權(quán)!生產(chǎn)者1:該進(jìn)程被喚醒!申請?jiān)L問緩沖區(qū)成功!生產(chǎn)者1:將產(chǎn)品450正送入緩沖區(qū)!生產(chǎn)者3:產(chǎn)品已送入緩沖區(qū),產(chǎn)品數(shù)量增加!消費(fèi)者4:該進(jìn)程被喚醒!申請取產(chǎn)品723成功!生產(chǎn)者1:釋放緩沖區(qū)訪問權(quán)!生產(chǎn)者1:產(chǎn)品已送入緩沖區(qū),產(chǎn)品數(shù)量增加!消費(fèi)者4:申請?jiān)L問緩沖區(qū)成功!消費(fèi)者4:從緩沖區(qū)中正取出產(chǎn)品723!消費(fèi)者4:釋放緩沖區(qū)訪問權(quán)!生產(chǎn)者3:生產(chǎn)一個(gè)產(chǎn)品138!消費(fèi)者4:產(chǎn)品已取出,空緩沖區(qū)數(shù)量增加!生產(chǎn)者1:生產(chǎn)一個(gè)產(chǎn)品881!

13、生產(chǎn)者1:申請空緩沖區(qū)成功!生產(chǎn)者3:無空緩沖區(qū),該進(jìn)程被阻塞!消費(fèi)者4:消費(fèi)產(chǎn)品723!2.簡要分析在本次程序運(yùn)行時(shí),創(chuàng)建了兩個(gè)生產(chǎn)者進(jìn)程和兩個(gè)消費(fèi)者進(jìn)程,生產(chǎn)者進(jìn) 程編號為1、3,消費(fèi)者進(jìn)程編號為2、4。緩沖區(qū)數(shù)目是2個(gè)。從本次運(yùn)行情況來看,消費(fèi)者2先請求取產(chǎn)品,因緩沖區(qū)內(nèi)無產(chǎn)品,此時(shí) 消費(fèi)者2被阻塞;生產(chǎn)者3和生產(chǎn)者1各生產(chǎn)一個(gè)產(chǎn)品,生產(chǎn)者3先將產(chǎn)品送 入緩沖區(qū)后,喚醒了消費(fèi)者2去取產(chǎn)品;此時(shí)消費(fèi)者4也請求取產(chǎn)品,因無產(chǎn) 品可取而被阻塞;然后生產(chǎn)者1將產(chǎn)品送入了緩沖區(qū),消費(fèi)者4被喚醒;生產(chǎn) 者1又生產(chǎn)了一個(gè)產(chǎn)品,由于此時(shí)消費(fèi)者2和消費(fèi)者4還未將產(chǎn)品取出,已無 空緩沖區(qū),所以生產(chǎn)者1被阻塞,只能等待;等到消費(fèi)者2取出產(chǎn)品后,生產(chǎn) 者1被喚醒;但由于此時(shí)消費(fèi)者4正在緩沖區(qū)取產(chǎn)品,生產(chǎn)者1由于不能訪問 緩沖區(qū)而被阻塞;等消費(fèi)者4完成

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論