操作系統(tǒng)課程設(shè)計生產(chǎn)者-消費者問題附代碼_第1頁
操作系統(tǒng)課程設(shè)計生產(chǎn)者-消費者問題附代碼_第2頁
操作系統(tǒng)課程設(shè)計生產(chǎn)者-消費者問題附代碼_第3頁
操作系統(tǒng)課程設(shè)計生產(chǎn)者-消費者問題附代碼_第4頁
操作系統(tǒng)課程設(shè)計生產(chǎn)者-消費者問題附代碼_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)棗 莊 學(xué) 院信息科學(xué)與工程學(xué)院課程設(shè)計任務(wù)書題目: 生產(chǎn)者-消費者問題的實現(xiàn) 姓 名: 學(xué) 號: 專 業(yè): 計算機科學(xué)與技術(shù) 課 程: 操作系統(tǒng) 指導(dǎo)教師: 劉彩霞 職稱: 講師 完成時間: 2012年 5月-2012 年 6月棗莊學(xué)院信息科學(xué)與工程學(xué)院制課程設(shè)計任務(wù)書及成績評定課程設(shè)計的任務(wù)和具體要求1、課程設(shè)計的任務(wù):利用所學(xué)知識模擬并實現(xiàn)生產(chǎn)者消費者問題;2、課程設(shè)計的具體要求:(1)為每個生產(chǎn)者/消費者產(chǎn)生一個線程,設(shè)計正確的同步算法。(2)每個生產(chǎn)者和消費者

2、對有界緩沖區(qū)進(jìn)行操作后,即時顯示有界緩沖區(qū)的當(dāng)前全部內(nèi)容、當(dāng)前指針位置和生產(chǎn)者/消費者線程的自定義標(biāo)識符。(3)生產(chǎn)者和消費者各有兩個以上。(4)多個生產(chǎn)者或多個消費者之間須共享對緩沖區(qū)進(jìn)行操作的函數(shù)代碼。(5)要求所撰寫的課程設(shè)計任務(wù)書的內(nèi)容和格式符合要求。 指導(dǎo)教師簽字: 日期: 指導(dǎo)教師評語成績: 指導(dǎo)教師簽字: 日期: 課程設(shè)計所需軟件、硬件等Windows xp系統(tǒng) VM虛擬機并安裝redhat linux系統(tǒng)軟件:Vi編輯器 GCC4.41設(shè)計語言:C語言課程設(shè)計進(jìn)度計劃起至日期工作內(nèi)容備注2012.5.15.152012.5.166.102012.6.116.152012.6.1

3、66.20確定課題并收集資料整體規(guī)劃并進(jìn)行初步定位編寫程序代碼并進(jìn)行試驗撰寫課程設(shè)計任務(wù)書參考文獻(xiàn)、資料索引序號文獻(xiàn)、資料名稱編著者出版單位1操作系統(tǒng)概念(第六版),(美)Abraham Silberschatz ,Peter Baer Galvin,Greg Gagne著,鄭扣根 譯, 高等教育出版社 2 深入理解LINUX內(nèi)核(第三版) (美) 博韋,西斯特 著,陳莉君,張瓊聲,張宏偉 譯,中國電力出版社 目 錄 TOC o 1-3 h z u 第1章 引言1.1 設(shè)計背景生產(chǎn)者-消費者問題是一個經(jīng)典的進(jìn)程同步問題,該問題最早由Dijkstra提出,用以演示他提出的信號量機制。在同一個進(jìn)程

4、地址空間內(nèi)執(zhí)行的兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū)。當(dāng)消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。1.2 問題分類根據(jù)緩沖區(qū)的個數(shù)、大小以及生產(chǎn)者消費者的個數(shù)可以分為以下幾類: 1.單緩沖區(qū)(適合單或多生產(chǎn)消費者);2.環(huán)行多緩沖區(qū)(或無窮緩沖區(qū))單生產(chǎn)消費者;3.環(huán)行多緩沖區(qū)多生產(chǎn)消費者;1.3 解決方案1.用進(jìn)程通信(信箱通信)的方法解決;2.進(jìn)程消息緩沖通信;

5、3.進(jìn)程信箱通信;第2章 設(shè)計思路及原理設(shè)計了兩個主要函數(shù):生產(chǎn)者函數(shù)、消費者函數(shù);設(shè)計了三個信號量:full信號量 ,判斷緩沖區(qū)是否有值,初值為0;empty信號量,判斷緩沖區(qū)是否有空緩沖區(qū),初值為緩沖區(qū)數(shù);mutex信號量作為互斥信號量,用于互斥的訪問緩沖區(qū)。生產(chǎn)者函數(shù)通過執(zhí)行P操作信號量empty減1,判斷緩沖區(qū)是否有空。有空則互斥的訪問緩沖區(qū)并放入數(shù)據(jù),然后釋放緩沖區(qū),執(zhí)行V操作,信號量full加1。消費者函數(shù)執(zhí)行P操作,信號量full減1,判斷是否有數(shù)據(jù),有則互斥的訪問緩沖區(qū)并取走數(shù)據(jù),然后釋放緩沖區(qū),執(zhí)行V操作,empty信號量加1。第3章 程序詳細(xì)設(shè)計3.1程序模塊設(shè)計該實驗主要

6、分為三大模塊:主程序,創(chuàng)建并控制程序的流程,其中控制線程的活動以及信號量的操作,如圖3-1-1所示;2.生產(chǎn)者模塊:生產(chǎn)者對緩沖區(qū)的操作,如圖3-1-2所示;3.消費者模塊:消費者對緩沖區(qū)的操作,如圖3-1-3所示。程序相關(guān)模塊的流程圖圖3-1-1 主程序 圖3-1-2生產(chǎn)者 圖3-1-3消費者3.2程序代碼結(jié)構(gòu) 通過分析,我們已經(jīng)了解到了可以采用信號量來解決n個進(jìn)程的臨界區(qū)問題,這n個進(jìn)程共享一個信號量mutex(mutual exclusion),并初始化為1。每個進(jìn)程Pi的組織結(jié)構(gòu)如下圖。由于本系統(tǒng)我們研究的是有限緩沖區(qū)(Bounded-Buffer)的生產(chǎn)者消費者問題。而且根據(jù)初始條件

7、可知,該緩沖區(qū)內(nèi)有20個緩沖項,每個緩沖項存儲一個整形數(shù)。信號量mutex提供了對緩沖池訪問的互斥要求,并初始化為1。信號量empty和full分別用來表示空緩沖項和滿緩沖項的數(shù)量。信號量empty初始化為20,而信號量full初始化為0;生產(chǎn)者進(jìn)程和消費者進(jìn)程的代碼如圖。注意生產(chǎn)者和消費者之間的對稱性可以這樣來理解代碼:生產(chǎn)者為消費者生產(chǎn)滿緩沖項,或消費者為生產(chǎn)者生產(chǎn)空緩沖項。第4章 實驗結(jié)果實驗結(jié)果如截圖所示:圖4-1 實驗結(jié)果截圖第5章 實驗總結(jié) 進(jìn)程的同步與互斥是操作系統(tǒng)課程中非常重要的一部分內(nèi)容。通過本次課程設(shè)計,我和我的組員不僅學(xué)會了使用信號量機制解決有限緩沖區(qū)的生產(chǎn)者消費者問題,

8、而且對Linux系統(tǒng)下多線程編程有了更深入的了解。雖然實驗以前我已經(jīng)對信號量機制解決進(jìn)程間同步問題的原理有了很清楚的認(rèn)識,但是此次課程設(shè)計中仍然遇到了很多問題,如Linux系統(tǒng)下各種系統(tǒng)調(diào)用以及函數(shù)的各種參數(shù),都花費了我很多時間去網(wǎng)上看各種資料雖然Linux系統(tǒng)中可以很方便的閱讀源代碼以及使用man命令進(jìn)行相應(yīng)指令的查看,但是全英文的資料讓人看了不免有些發(fā)怵,看來還要多多加強計算機專業(yè)英語的學(xué)習(xí),以后便可以在Linux系統(tǒng)中查看各種幫助文件。另一個問題就是在編譯的時候遇到的,剛開始用gcc o main main.c 進(jìn)行編譯的時候總是提示出錯,后來查了相關(guān)資料才知道pthread 庫不是 L

9、inux 系統(tǒng)默認(rèn)的庫,連接時需要使用靜態(tài)庫 libpthread.a,所以在使用pthread_create()等函數(shù)時,需要鏈接該庫才能編譯通過。以前再用Windows IDE進(jìn)行編程的時候基本上不會遇到這樣的問題,看來的確IDE為我們做了很多工作,隱藏了一些技術(shù)細(xì)節(jié),有時候隱藏這些細(xì)節(jié)雖然可以方便我們,卻讓我們離真相越來越遠(yuǎn)。最近使用Linux進(jìn)行相關(guān)的編程操作,感悟還是挺多的。Windows下的層層封裝的確讓我們感到很方便,但同時也讓我們編程變得越來越不靈活。因為我們不用再去了解底層的東西因此一遇到問題就會束手無策。這段時間一直用Linux進(jìn)行編程,感覺很方便,跟我以前想象地完全不一樣

10、,而且我掌握了不少命令,比我以前用鼠標(biāo)操作的時候快多了,而且在Bash下可以用Ctrl+Z隨時中止正在運行的進(jìn)程或命令,再用fg %id 重新運行。Linux下的編程也很方便,我還了解了Makefile的編寫方法,在多文件編程的時候可以極高地提高效率。 總之,我之后會加強專業(yè)英語的學(xué)習(xí),以便更好的利用Linux操作系統(tǒng)進(jìn)行編程之路的學(xué)習(xí)。附錄:實驗代碼#include#include#include#include#include#include#define num_producer 3 #define num_consumer 3 /由于題目要求生產(chǎn)者和消費者各有兩個以上,故此處均定為3個

11、#define BUFFER_SIZE 20 /定義緩沖區(qū)的大小,按題目要求為20int NUM=1;/題目要求放入/取出的數(shù)據(jù)項按增序設(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;/消費者代碼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(消費者標(biāo)識:%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)識:%dt指針位置:

溫馨提示

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

最新文檔

評論

0/150

提交評論