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

下載本文檔

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

文檔簡介

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

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

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

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

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

6、操作,用于實現(xiàn)進程互斥;私有信號量,聯(lián)系一組并 發(fā)進程,僅允許此信號量所擁有的進程執(zhí)行P操作,而其他相關(guān)進程可在其上 執(zhí)行V操作,初值往往為0或正整數(shù),多用于并發(fā)進程同步。信號量的定義為如下數(shù)據(jù)結(jié)構(gòu):typedef struct semaphoreint value;oleFlag = rand()%2;oleFlag = rand()%2;oleFlag)strcpy(,”生產(chǎn)者);elsestrcpy(,消費者);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:該進程被喚醒!申請空緩沖區(qū)成功!n, ); else if (processcode.currentStep = 3) pri

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論