




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上精選優質文檔-傾情為你奉上專心-專注-專業專心-專注-專業精選優質文檔-傾情為你奉上專心-專注-專業棗 莊 學 院信息科學與工程學院課程設計任務書題目: 生產者-消費者問題的實現 姓 名: 學 號: 專 業: 計算機科學與技術 課 程: 操作系統 指導教師: 劉彩霞 職稱: 講師 完成時間: 2012年 5月-2012 年 6月棗莊學院信息科學與工程學院制課程設計任務書及成績評定課程設計的任務和具體要求1、課程設計的任務:利用所學知識模擬并實現生產者消費者問題;2、課程設計的具體要求:(1)為每個生產者/消費者產生一個線程,設計正確的同步算法。(2)每個生產者和消費者
2、對有界緩沖區進行操作后,即時顯示有界緩沖區的當前全部內容、當前指針位置和生產者/消費者線程的自定義標識符。(3)生產者和消費者各有兩個以上。(4)多個生產者或多個消費者之間須共享對緩沖區進行操作的函數代碼。(5)要求所撰寫的課程設計任務書的內容和格式符合要求。 指導教師簽字: 日期: 指導教師評語成績: 指導教師簽字: 日期: 課程設計所需軟件、硬件等Windows xp系統 VM虛擬機并安裝redhat linux系統軟件:Vi編輯器 GCC4.41設計語言:C語言課程設計進度計劃起至日期工作內容備注2012.5.15.152012.5.166.102012.6.116.152012.6.1
3、66.20確定課題并收集資料整體規劃并進行初步定位編寫程序代碼并進行試驗撰寫課程設計任務書參考文獻、資料索引序號文獻、資料名稱編著者出版單位1操作系統概念(第六版),(美)Abraham Silberschatz ,Peter Baer Galvin,Greg Gagne著,鄭扣根 譯, 高等教育出版社 2 深入理解LINUX內核(第三版) (美) 博韋,西斯特 著,陳莉君,張瓊聲,張宏偉 譯,中國電力出版社 目 錄 TOC o 1-3 h z u 第1章 引言1.1 設計背景生產者-消費者問題是一個經典的進程同步問題,該問題最早由Dijkstra提出,用以演示他提出的信號量機制。在同一個進程
4、地址空間內執行的兩個線程。生產者線程生產物品,然后將物品放置在一個空緩沖區中供消費者線程消費。消費者線程從緩沖區中獲得物品,然后釋放緩沖區。當生產者線程生產物品時,如果沒有空緩沖區可用,那么生產者線程必須等待消費者線程釋放出一個空緩沖區。當消費者線程消費物品時,如果沒有滿的緩沖區,那么消費者線程將被阻塞,直到新的物品被生產出來。1.2 問題分類根據緩沖區的個數、大小以及生產者消費者的個數可以分為以下幾類: 1.單緩沖區(適合單或多生產消費者);2.環行多緩沖區(或無窮緩沖區)單生產消費者;3.環行多緩沖區多生產消費者;1.3 解決方案1.用進程通信(信箱通信)的方法解決;2.進程消息緩沖通信;
5、3.進程信箱通信;第2章 設計思路及原理設計了兩個主要函數:生產者函數、消費者函數;設計了三個信號量:full信號量 ,判斷緩沖區是否有值,初值為0;empty信號量,判斷緩沖區是否有空緩沖區,初值為緩沖區數;mutex信號量作為互斥信號量,用于互斥的訪問緩沖區。生產者函數通過執行P操作信號量empty減1,判斷緩沖區是否有空。有空則互斥的訪問緩沖區并放入數據,然后釋放緩沖區,執行V操作,信號量full加1。消費者函數執行P操作,信號量full減1,判斷是否有數據,有則互斥的訪問緩沖區并取走數據,然后釋放緩沖區,執行V操作,empty信號量加1。第3章 程序詳細設計3.1程序模塊設計該實驗主要
6、分為三大模塊:主程序,創建并控制程序的流程,其中控制線程的活動以及信號量的操作,如圖3-1-1所示;2.生產者模塊:生產者對緩沖區的操作,如圖3-1-2所示;3.消費者模塊:消費者對緩沖區的操作,如圖3-1-3所示。程序相關模塊的流程圖圖3-1-1 主程序 圖3-1-2生產者 圖3-1-3消費者3.2程序代碼結構 通過分析,我們已經了解到了可以采用信號量來解決n個進程的臨界區問題,這n個進程共享一個信號量mutex(mutual exclusion),并初始化為1。每個進程Pi的組織結構如下圖。由于本系統我們研究的是有限緩沖區(Bounded-Buffer)的生產者消費者問題。而且根據初始條件
7、可知,該緩沖區內有20個緩沖項,每個緩沖項存儲一個整形數。信號量mutex提供了對緩沖池訪問的互斥要求,并初始化為1。信號量empty和full分別用來表示空緩沖項和滿緩沖項的數量。信號量empty初始化為20,而信號量full初始化為0;生產者進程和消費者進程的代碼如圖。注意生產者和消費者之間的對稱性可以這樣來理解代碼:生產者為消費者生產滿緩沖項,或消費者為生產者生產空緩沖項。第4章 實驗結果實驗結果如截圖所示:圖4-1 實驗結果截圖第5章 實驗總結 進程的同步與互斥是操作系統課程中非常重要的一部分內容。通過本次課程設計,我和我的組員不僅學會了使用信號量機制解決有限緩沖區的生產者消費者問題,
8、而且對Linux系統下多線程編程有了更深入的了解。雖然實驗以前我已經對信號量機制解決進程間同步問題的原理有了很清楚的認識,但是此次課程設計中仍然遇到了很多問題,如Linux系統下各種系統調用以及函數的各種參數,都花費了我很多時間去網上看各種資料雖然Linux系統中可以很方便的閱讀源代碼以及使用man命令進行相應指令的查看,但是全英文的資料讓人看了不免有些發怵,看來還要多多加強計算機專業英語的學習,以后便可以在Linux系統中查看各種幫助文件。另一個問題就是在編譯的時候遇到的,剛開始用gcc o main main.c 進行編譯的時候總是提示出錯,后來查了相關資料才知道pthread 庫不是 L
9、inux 系統默認的庫,連接時需要使用靜態庫 libpthread.a,所以在使用pthread_create()等函數時,需要鏈接該庫才能編譯通過。以前再用Windows IDE進行編程的時候基本上不會遇到這樣的問題,看來的確IDE為我們做了很多工作,隱藏了一些技術細節,有時候隱藏這些細節雖然可以方便我們,卻讓我們離真相越來越遠。最近使用Linux進行相關的編程操作,感悟還是挺多的。Windows下的層層封裝的確讓我們感到很方便,但同時也讓我們編程變得越來越不靈活。因為我們不用再去了解底層的東西因此一遇到問題就會束手無策。這段時間一直用Linux進行編程,感覺很方便,跟我以前想象地完全不一樣
10、,而且我掌握了不少命令,比我以前用鼠標操作的時候快多了,而且在Bash下可以用Ctrl+Z隨時中止正在運行的進程或命令,再用fg %id 重新運行。Linux下的編程也很方便,我還了解了Makefile的編寫方法,在多文件編程的時候可以極高地提高效率。 總之,我之后會加強專業英語的學習,以便更好的利用Linux操作系統進行編程之路的學習。附錄:實驗代碼#include#include#include#include#include#include#define num_producer 3 #define num_consumer 3 /由于題目要求生產者和消費者各有兩個以上,故此處均定為3個
11、#define BUFFER_SIZE 20 /定義緩沖區的大小,按題目要求為20int NUM=1;/題目要求放入/取出的數據項按增序設定為1-20,因此定義此全局變量int bufferBUFFER_SIZE; int nextp=0,nextc=0;sem_t empty,full,mutex;/主函數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(消費者標識:%dt指針位置:%dtn,(int)tid,nextc);buffernextc=0;nextc=(nextc+1)%20;printf(緩沖區:);for(i=0;i20) NUM=1;/如果大于20,NUM重新為1buffernextp=(NUM+);nextp=(nextp+1)%20;if(nextp=0) printf(生產者標識:%dt指針位置:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【成都】2025年上半年成都市技師學院(成都工貿職業技術學院)招聘工作人員24人筆試歷年典型考題及考點剖析附帶答案詳解
- 風險管理中的溝通渠道優化試題及答案
- 2025年公司戰略與行業風險趨勢研究試題及答案
- 2025年法學概論考試的法律實務技能與試題及答案
- 2025年生態風險與公司戰略的關系試題及答案
- 2025冷凍鮑魚買賣合同書
- 建立并維護客戶關系的計劃
- 風險管理中的團隊協作與溝通試題及答案
- 公司未來發展的藍圖計劃
- 2025年度物品保管合同示范文本
- 通信工程項目管理流程
- 具身智能項目建議書(參考)
- AI系列培訓課件-人工智能技術及應用課件第1章
- 云南省昆明市盤龍區2024-2025學年八年級上學期期末質量監測英語試題(含答案)
- DBJT13-369-2021 福建省裝配式建筑非砌筑內隔墻技術標準
- 藝術治療在精神康復中的應用-洞察分析
- 低空準備項目申請報告
- XX市路燈照明工程項目可行性研究報告
- 2025電子版房屋租賃合同范本下載
- 施工安全管理體系模板3篇
- 朱玉賢《現代分子生物學》(第5版)配套題庫【考研真題+章節題庫】
評論
0/150
提交評論