![操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者-消費(fèi)者問(wèn)題附代碼_第1頁(yè)](http://file4.renrendoc.com/view/b064ef50b245d98ec8878bb08514e96d/b064ef50b245d98ec8878bb08514e96d1.gif)
![操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者-消費(fèi)者問(wèn)題附代碼_第2頁(yè)](http://file4.renrendoc.com/view/b064ef50b245d98ec8878bb08514e96d/b064ef50b245d98ec8878bb08514e96d2.gif)
![操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者-消費(fèi)者問(wèn)題附代碼_第3頁(yè)](http://file4.renrendoc.com/view/b064ef50b245d98ec8878bb08514e96d/b064ef50b245d98ec8878bb08514e96d3.gif)
![操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者-消費(fèi)者問(wèn)題附代碼_第4頁(yè)](http://file4.renrendoc.com/view/b064ef50b245d98ec8878bb08514e96d/b064ef50b245d98ec8878bb08514e96d4.gif)
![操作系統(tǒng)課程設(shè)計(jì)生產(chǎn)者-消費(fèi)者問(wèn)題附代碼_第5頁(yè)](http://file4.renrendoc.com/view/b064ef50b245d98ec8878bb08514e96d/b064ef50b245d98ec8878bb08514e96d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)棗 莊 學(xué) 院信息科學(xué)與工程學(xué)院課程設(shè)計(jì)任務(wù)書(shū)題目: 生產(chǎn)者-消費(fèi)者問(wèn)題的實(shí)現(xiàn) 姓 名: 學(xué) 號(hào): 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 課 程: 操作系統(tǒng) 指導(dǎo)教師: 劉彩霞 職稱: 講師 完成時(shí)間: 2012年 5月-2012 年 6月棗莊學(xué)院信息科學(xué)與工程學(xué)院制課程設(shè)計(jì)任務(wù)書(shū)及成績(jī)?cè)u(píng)定課程設(shè)計(jì)的任務(wù)和具體要求1、課程設(shè)計(jì)的任務(wù):利用所學(xué)知識(shí)模擬并實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題;2、課程設(shè)計(jì)的具體要求:(1)為每個(gè)生產(chǎn)者/消費(fèi)者產(chǎn)生一個(gè)線程,設(shè)計(jì)正確的同步算法。(2)每個(gè)生產(chǎn)者和消費(fèi)者
2、對(duì)有界緩沖區(qū)進(jìn)行操作后,即時(shí)顯示有界緩沖區(qū)的當(dāng)前全部?jī)?nèi)容、當(dāng)前指針位置和生產(chǎn)者/消費(fèi)者線程的自定義標(biāo)識(shí)符。(3)生產(chǎn)者和消費(fèi)者各有兩個(gè)以上。(4)多個(gè)生產(chǎn)者或多個(gè)消費(fèi)者之間須共享對(duì)緩沖區(qū)進(jìn)行操作的函數(shù)代碼。(5)要求所撰寫(xiě)的課程設(shè)計(jì)任務(wù)書(shū)的內(nèi)容和格式符合要求。 指導(dǎo)教師簽字: 日期: 指導(dǎo)教師評(píng)語(yǔ)成績(jī): 指導(dǎo)教師簽字: 日期: 課程設(shè)計(jì)所需軟件、硬件等Windows xp系統(tǒng) VM虛擬機(jī)并安裝redhat linux系統(tǒng)軟件:Vi編輯器 GCC4.41設(shè)計(jì)語(yǔ)言:C語(yǔ)言課程設(shè)計(jì)進(jìn)度計(jì)劃起至日期工作內(nèi)容備注2012.5.15.152012.5.166.102012.6.116.152012.6.1
3、66.20確定課題并收集資料整體規(guī)劃并進(jìn)行初步定位編寫(xiě)程序代碼并進(jìn)行試驗(yàn)撰寫(xiě)課程設(shè)計(jì)任務(wù)書(shū)參考文獻(xiàn)、資料索引序號(hào)文獻(xiàn)、資料名稱編著者出版單位1操作系統(tǒng)概念(第六版),(美)Abraham Silberschatz ,Peter Baer Galvin,Greg Gagne著,鄭扣根 譯, 高等教育出版社 2 深入理解LINUX內(nèi)核(第三版) (美) 博韋,西斯特 著,陳莉君,張瓊聲,張宏偉 譯,中國(guó)電力出版社 目 錄 TOC o 1-3 h z u 第1章 引言1.1 設(shè)計(jì)背景生產(chǎn)者-消費(fèi)者問(wèn)題是一個(gè)經(jīng)典的進(jìn)程同步問(wèn)題,該問(wèn)題最早由Dijkstra提出,用以演示他提出的信號(hào)量機(jī)制。在同一個(gè)進(jìn)程
4、地址空間內(nèi)執(zhí)行的兩個(gè)線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個(gè)空緩沖區(qū)中供消費(fèi)者線程消費(fèi)。消費(fèi)者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時(shí),如果沒(méi)有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費(fèi)者線程釋放出一個(gè)空緩沖區(qū)。當(dāng)消費(fèi)者線程消費(fèi)物品時(shí),如果沒(méi)有滿的緩沖區(qū),那么消費(fèi)者線程將被阻塞,直到新的物品被生產(chǎn)出來(lái)。1.2 問(wèn)題分類根據(jù)緩沖區(qū)的個(gè)數(shù)、大小以及生產(chǎn)者消費(fèi)者的個(gè)數(shù)可以分為以下幾類: 1.單緩沖區(qū)(適合單或多生產(chǎn)消費(fèi)者);2.環(huán)行多緩沖區(qū)(或無(wú)窮緩沖區(qū))單生產(chǎn)消費(fèi)者;3.環(huán)行多緩沖區(qū)多生產(chǎn)消費(fèi)者;1.3 解決方案1.用進(jìn)程通信(信箱通信)的方法解決;2.進(jìn)程消息緩沖通信;
5、3.進(jìn)程信箱通信;第2章 設(shè)計(jì)思路及原理設(shè)計(jì)了兩個(gè)主要函數(shù):生產(chǎn)者函數(shù)、消費(fèi)者函數(shù);設(shè)計(jì)了三個(gè)信號(hào)量:full信號(hào)量 ,判斷緩沖區(qū)是否有值,初值為0;empty信號(hào)量,判斷緩沖區(qū)是否有空緩沖區(qū),初值為緩沖區(qū)數(shù);mutex信號(hào)量作為互斥信號(hào)量,用于互斥的訪問(wèn)緩沖區(qū)。生產(chǎn)者函數(shù)通過(guò)執(zhí)行P操作信號(hào)量empty減1,判斷緩沖區(qū)是否有空。有空則互斥的訪問(wèn)緩沖區(qū)并放入數(shù)據(jù),然后釋放緩沖區(qū),執(zhí)行V操作,信號(hào)量full加1。消費(fèi)者函數(shù)執(zhí)行P操作,信號(hào)量full減1,判斷是否有數(shù)據(jù),有則互斥的訪問(wèn)緩沖區(qū)并取走數(shù)據(jù),然后釋放緩沖區(qū),執(zhí)行V操作,empty信號(hào)量加1。第3章 程序詳細(xì)設(shè)計(jì)3.1程序模塊設(shè)計(jì)該實(shí)驗(yàn)主要
6、分為三大模塊:主程序,創(chuàng)建并控制程序的流程,其中控制線程的活動(dòng)以及信號(hào)量的操作,如圖3-1-1所示;2.生產(chǎn)者模塊:生產(chǎn)者對(duì)緩沖區(qū)的操作,如圖3-1-2所示;3.消費(fèi)者模塊:消費(fèi)者對(duì)緩沖區(qū)的操作,如圖3-1-3所示。程序相關(guān)模塊的流程圖圖3-1-1 主程序 圖3-1-2生產(chǎn)者 圖3-1-3消費(fèi)者3.2程序代碼結(jié)構(gòu) 通過(guò)分析,我們已經(jīng)了解到了可以采用信號(hào)量來(lái)解決n個(gè)進(jìn)程的臨界區(qū)問(wèn)題,這n個(gè)進(jìn)程共享一個(gè)信號(hào)量mutex(mutual exclusion),并初始化為1。每個(gè)進(jìn)程Pi的組織結(jié)構(gòu)如下圖。由于本系統(tǒng)我們研究的是有限緩沖區(qū)(Bounded-Buffer)的生產(chǎn)者消費(fèi)者問(wèn)題。而且根據(jù)初始條件
7、可知,該緩沖區(qū)內(nèi)有20個(gè)緩沖項(xiàng),每個(gè)緩沖項(xiàng)存儲(chǔ)一個(gè)整形數(shù)。信號(hào)量mutex提供了對(duì)緩沖池訪問(wèn)的互斥要求,并初始化為1。信號(hào)量empty和full分別用來(lái)表示空緩沖項(xiàng)和滿緩沖項(xiàng)的數(shù)量。信號(hào)量empty初始化為20,而信號(hào)量full初始化為0;生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程的代碼如圖。注意生產(chǎn)者和消費(fèi)者之間的對(duì)稱性可以這樣來(lái)理解代碼:生產(chǎn)者為消費(fèi)者生產(chǎn)滿緩沖項(xiàng),或消費(fèi)者為生產(chǎn)者生產(chǎn)空緩沖項(xiàng)。第4章 實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果如截圖所示:圖4-1 實(shí)驗(yàn)結(jié)果截圖第5章 實(shí)驗(yàn)總結(jié) 進(jìn)程的同步與互斥是操作系統(tǒng)課程中非常重要的一部分內(nèi)容。通過(guò)本次課程設(shè)計(jì),我和我的組員不僅學(xué)會(huì)了使用信號(hào)量機(jī)制解決有限緩沖區(qū)的生產(chǎn)者消費(fèi)者問(wèn)題,
8、而且對(duì)Linux系統(tǒng)下多線程編程有了更深入的了解。雖然實(shí)驗(yàn)以前我已經(jīng)對(duì)信號(hào)量機(jī)制解決進(jìn)程間同步問(wèn)題的原理有了很清楚的認(rèn)識(shí),但是此次課程設(shè)計(jì)中仍然遇到了很多問(wèn)題,如Linux系統(tǒng)下各種系統(tǒng)調(diào)用以及函數(shù)的各種參數(shù),都花費(fèi)了我很多時(shí)間去網(wǎng)上看各種資料雖然Linux系統(tǒng)中可以很方便的閱讀源代碼以及使用man命令進(jìn)行相應(yīng)指令的查看,但是全英文的資料讓人看了不免有些發(fā)怵,看來(lái)還要多多加強(qiáng)計(jì)算機(jī)專業(yè)英語(yǔ)的學(xué)習(xí),以后便可以在Linux系統(tǒng)中查看各種幫助文件。另一個(gè)問(wèn)題就是在編譯的時(shí)候遇到的,剛開(kāi)始用gcc o main main.c 進(jìn)行編譯的時(shí)候總是提示出錯(cuò),后來(lái)查了相關(guān)資料才知道pthread 庫(kù)不是 L
9、inux 系統(tǒng)默認(rèn)的庫(kù),連接時(shí)需要使用靜態(tài)庫(kù) libpthread.a,所以在使用pthread_create()等函數(shù)時(shí),需要鏈接該庫(kù)才能編譯通過(guò)。以前再用Windows IDE進(jìn)行編程的時(shí)候基本上不會(huì)遇到這樣的問(wèn)題,看來(lái)的確IDE為我們做了很多工作,隱藏了一些技術(shù)細(xì)節(jié),有時(shí)候隱藏這些細(xì)節(jié)雖然可以方便我們,卻讓我們離真相越來(lái)越遠(yuǎn)。最近使用Linux進(jìn)行相關(guān)的編程操作,感悟還是挺多的。Windows下的層層封裝的確讓我們感到很方便,但同時(shí)也讓我們編程變得越來(lái)越不靈活。因?yàn)槲覀儾挥迷偃チ私獾讓拥臇|西因此一遇到問(wèn)題就會(huì)束手無(wú)策。這段時(shí)間一直用Linux進(jìn)行編程,感覺(jué)很方便,跟我以前想象地完全不一樣
10、,而且我掌握了不少命令,比我以前用鼠標(biāo)操作的時(shí)候快多了,而且在Bash下可以用Ctrl+Z隨時(shí)中止正在運(yùn)行的進(jìn)程或命令,再用fg %id 重新運(yùn)行。Linux下的編程也很方便,我還了解了Makefile的編寫(xiě)方法,在多文件編程的時(shí)候可以極高地提高效率。 總之,我之后會(huì)加強(qiáng)專業(yè)英語(yǔ)的學(xué)習(xí),以便更好的利用Linux操作系統(tǒng)進(jìn)行編程之路的學(xué)習(xí)。附錄:實(shí)驗(yàn)代碼#include#include#include#include#include#include#define num_producer 3 #define num_consumer 3 /由于題目要求生產(chǎn)者和消費(fèi)者各有兩個(gè)以上,故此處均定為3個(gè)
11、#define BUFFER_SIZE 20 /定義緩沖區(qū)的大小,按題目要求為20int NUM=1;/題目要求放入/取出的數(shù)據(jù)項(xiàng)按增序設(shè)定為1-20,因此定義此全局變量int bufferBUFFER_SIZE; int nextp=0,nextc=0;sem_t empty,full,mutex;/主函數(shù)int main()int i;signal(SIGALRM,handler);sem_init(&empty,0,BUFFER_SIZE); sem_init(&full,0,0);sem_init(&mutex,0,1);for(i=0;iBUFFER_SIZE;i+) bufferi
12、=0;for(i=0;inum_producer;i+) pthread_create(&threads_pi,NULL,(void*)producer_thread,(void*)(i+1);for(i=0;inum_consumer;i+) pthread_create(&threads_ci,NULL,(void*)consumer_thread,(void *)(i+1);for(i=0;inum_producer;i+) pthread_join(threads_pi,NULL);for(i=0;inum_consumer;i+) pthread_join(threads_ci,NU
13、LL);sem_destroy(&empty); sem_destroy(&full);sem_destroy(&mutex);return 0;/消費(fèi)者代碼void *consumer_thread(void *tid)int i;pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);while(1)sem_wait(&full);srand(int)time(NULL)*(int)tid);sem_wait(&mutex);printf(消費(fèi)者標(biāo)識(shí):%dt指針位置:%dtn,(int)tid,nextc);buffernextc=0;nextc=(nextc+1)%20;printf(緩沖區(qū):);for(i=0;i20) NUM=1;/如果大于20,NUM重新為1buffernextp=(NUM+);nextp=(nextp+1)%20;if(nextp=0) printf(生產(chǎn)者標(biāo)識(shí):%dt指針位置:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度攪拌車混凝土運(yùn)輸車輛管理合同范本
- 2025年五金制品五金電鍍行業(yè)深度研究分析報(bào)告
- 2025年度企業(yè)車輛租賃及管理服務(wù)合同
- 2025年度金融科技產(chǎn)品開(kāi)發(fā)合伙協(xié)議書(shū)
- 改姓的申請(qǐng)書(shū)
- 2025年度體育產(chǎn)業(yè)合伙協(xié)議及執(zhí)行合同
- 發(fā)展對(duì)象申請(qǐng)書(shū)模板
- 兼職申請(qǐng)書(shū)范文
- 2025年檸檬水項(xiàng)目投資可行性研究分析報(bào)告
- 2025年中國(guó)獸用抗生素市場(chǎng)競(jìng)爭(zhēng)策略及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 項(xiàng)目獎(jiǎng)金分配獎(jiǎng)勵(lì)制度和方案完整版
- 上海中學(xué)國(guó)際部幼升小面試真題
- 贏在團(tuán)隊(duì)執(zhí)行力課件
- 慢性胰腺炎課件
- 北京理工大學(xué)應(yīng)用光學(xué)課件第四章
- 陰道鏡幻燈課件
- PCB行業(yè)安全生產(chǎn)常見(jiàn)隱患及防范措施課件
- DB32∕T 186-2015 建筑消防設(shè)施檢測(cè)技術(shù)規(guī)程
- 2022年福建泉州中考英語(yǔ)真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(共23頁(yè))
- 露天礦山職業(yè)危害預(yù)先危險(xiǎn)分析表
評(píng)論
0/150
提交評(píng)論