操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)報(bào)告_第1頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)報(bào)告_第2頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)報(bào)告_第3頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)報(bào)告_第4頁(yè)
操作系統(tǒng)生產(chǎn)者與消費(fèi)者課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì) 報(bào) 告課程名稱:操作系統(tǒng)課程設(shè)計(jì)設(shè)計(jì)題目:生產(chǎn)者消費(fèi)者問(wèn)題系別:計(jì)算機(jī)系專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)組別:第二組學(xué)生姓名:學(xué)號(hào)起止日期: 2010 年 7 月 18 日 2010 年 7 月 23 日指導(dǎo)教師:1 目錄1.概述. 2 1.1 問(wèn)題描述 . 2 1.2 開(kāi)發(fā)計(jì)劃 . 2 1.3 開(kāi)發(fā)環(huán)境及開(kāi)發(fā)工具 . 2 2.需求分析 . 2 2.1 設(shè)計(jì)任務(wù) . 2 2.2 設(shè)計(jì)思想 . 2 2.3 設(shè)計(jì)要求 . 3 3.概要設(shè)計(jì) . 3 3.1 方法及原理 . 3 3.2 流程圖 . 4 4.詳細(xì)設(shè)計(jì) . 4 4.1 數(shù)據(jù)結(jié)構(gòu)及信號(hào)量說(shuō)明 . 4 4.2 部分代碼 . 5 5.測(cè)試

2、結(jié)果 . 8 6.結(jié)果分析 . 9 7.總結(jié)和體會(huì) . 9 致謝. 9 參考文獻(xiàn) . 10 2 1.概述1.1 問(wèn)題描述以生產(chǎn)者 / 消費(fèi)者模型為依據(jù),在windows xp環(huán)境下創(chuàng)建一個(gè)控制臺(tái)進(jìn)程,在該進(jìn)程中創(chuàng)建 n 個(gè)線程模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程( 線程) 的同步與互斥。1.2 開(kāi)發(fā)計(jì)劃第一天:完成整體的規(guī)劃工作,用什么方法,能完成什么工作,如何設(shè)計(jì)構(gòu)造方法;第二天:完成操作界面的設(shè)計(jì)與編碼,設(shè)計(jì)一個(gè)美觀,易于操作的界面;第三天:完成并發(fā)設(shè)計(jì)內(nèi)核的結(jié)構(gòu)與實(shí)現(xiàn)工作;第四天:基本完成程序設(shè)計(jì)工作;第五天:完成代碼的優(yōu)化工作,添加一些功能;第六天:完成實(shí)驗(yàn)報(bào)告;第七天:交給老師審核。1.3

3、開(kāi)發(fā)環(huán)境及開(kāi)發(fā)工具硬件:普通 pc386以上微機(jī);一張軟盤或u盤。軟件:操作系統(tǒng): windows 2000/xp。開(kāi)發(fā)工具: vc+6.0 。 vc是一個(gè)集成開(kāi)發(fā)環(huán)境,其中包含了windows sdk 所有工具和定義。2.需求分析2.1 設(shè)計(jì)任務(wù)(1) 掌握基本的同步與互斥算法,理解生產(chǎn)者消費(fèi)者模型。(2) 學(xué)習(xí)使用 windows 2000/xp中基本的同步對(duì)象,掌握相關(guān)api 使用方法。(3) 了解 windows 2000/xp中多線程的并發(fā)執(zhí)行機(jī)制,實(shí)現(xiàn)進(jìn)程同步與互斥。2.2 設(shè)計(jì)思想生產(chǎn)者消費(fèi)者問(wèn)題是一種同步問(wèn)題的抽象描述。計(jì)算機(jī)系統(tǒng)中的每個(gè)進(jìn)程都可以消費(fèi)或生產(chǎn)某類資源。當(dāng)系統(tǒng)中某

4、一進(jìn)程使用某一資源時(shí),可以看作是消耗,且該進(jìn)程稱為消費(fèi)者。3 而當(dāng)某個(gè)進(jìn)程釋放資源時(shí),則它就相當(dāng)一個(gè)生產(chǎn)者。在同一時(shí)刻只能有一個(gè)生產(chǎn)者或一個(gè)消費(fèi)者使用緩沖區(qū),有互斥信號(hào)量可以控制各個(gè)生產(chǎn)者和消費(fèi)者之間互斥,使得生產(chǎn)和消費(fèi)的工作能夠有序的進(jìn)行,而不至于發(fā)生死鎖。通過(guò)一個(gè)有界緩沖區(qū) ( 用數(shù)組來(lái)實(shí)現(xiàn),類似循環(huán)隊(duì)列) 把生產(chǎn)者和消費(fèi)者聯(lián)系起來(lái)。假定生產(chǎn)者和消費(fèi)者的優(yōu)先級(jí)是相同的,只要緩沖區(qū)未滿, 生產(chǎn)者就可以生產(chǎn)產(chǎn)品并將產(chǎn)品送入緩沖區(qū)。類似地,只要緩沖區(qū)未空, 消費(fèi)者就可以從緩沖區(qū)中去走產(chǎn)品并消費(fèi)它。 應(yīng)該禁止生產(chǎn)者向滿的緩沖區(qū)送入產(chǎn)品,同時(shí)也應(yīng)該禁止消費(fèi)者從空的緩沖區(qū)中取出產(chǎn)品,這一機(jī)制有生產(chǎn)者線

5、程和消費(fèi)者線程之間的互斥關(guān)系來(lái)實(shí)現(xiàn)。2.3 設(shè)計(jì)要求1)每個(gè)生產(chǎn)者和消費(fèi)者對(duì)有界緩沖區(qū)進(jìn)行操作后,即時(shí)顯示有界緩沖區(qū)的全部?jī)?nèi)容、當(dāng)前指針位置和生產(chǎn)者消費(fèi)者線程的標(biāo)識(shí)符。2)生產(chǎn)者和消費(fèi)者各有兩個(gè)以上。3)多個(gè)生產(chǎn)者或多個(gè)消費(fèi)者之間須共享對(duì)緩沖區(qū)進(jìn)行操作的函數(shù)代碼。3.概要設(shè)計(jì)3.1 方法及原理1閱讀操作系統(tǒng)的進(jìn)程管理章節(jié)內(nèi)容,對(duì)進(jìn)程的同步和互斥,以及信號(hào)量機(jī)制有深入理解。著名的生產(chǎn)者消費(fèi)者問(wèn)題是典型的進(jìn)程同步問(wèn)題,操作系統(tǒng)中實(shí)現(xiàn)進(jìn)程同步的常用機(jī)制有信號(hào)量和pv操作等。除賦初值外,信號(hào)量?jī)H由同步原語(yǔ)p和 v對(duì)其進(jìn)行操作, pv操作的不分割性確保執(zhí)行的原子性及信號(hào)量值的完整性。信號(hào)量按用途分兩種:

6、(1)公用信號(hào)量,用于實(shí)現(xiàn)進(jìn)程互斥;(2)私有信號(hào)量,多用于并發(fā)進(jìn)程同步。按取值又分兩種:(1)兩元信號(hào)量,主要用于解決進(jìn)程互斥問(wèn)題;(2)一般信號(hào)量,主要解決進(jìn)程同步問(wèn)題。4 2掌握 visual c+ 6.0語(yǔ)言的使用。 c+語(yǔ)言是從 c語(yǔ)言發(fā)展演變的一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,主要特點(diǎn)變現(xiàn)在兩方面:一是全面兼容c;二是支持面向?qū)ο蟮姆椒?。面向?qū)ο蟮姆椒▽?shù)據(jù)及對(duì)數(shù)據(jù)的操作方法封裝在一起,作為一個(gè)相互依存、不可分割的整體對(duì)象。對(duì)同類型對(duì)象抽象出共性,形成類。類中的大多數(shù)數(shù)據(jù),只能用本類的方法進(jìn)行處理。類通過(guò)一個(gè)簡(jiǎn)單的外部接口,與外界發(fā)生關(guān)系,對(duì)象與對(duì)象間通過(guò)消息進(jìn)行通信。同時(shí),通過(guò)繼承與多

7、態(tài)性,使程序具有很高的可重用性,使得軟件的開(kāi)發(fā)和維護(hù)都更為方便。3.2 流程圖4.詳細(xì)設(shè)計(jì)4.1 數(shù)據(jù)結(jié)構(gòu)及信號(hào)量說(shuō)明(1)程序中的主要的結(jié)構(gòu)void produce(void *p); 圖 3-1 流程圖輸入數(shù)據(jù)創(chuàng)建“生產(chǎn)者”線程緩沖區(qū)是否阻塞n 創(chuàng)建“消費(fèi)者”線程y “生產(chǎn)者”生產(chǎn)產(chǎn)品后被喚醒n y 緩沖區(qū)是否為空“消費(fèi)者”阻塞“生產(chǎn)者”等待,“消費(fèi)者”取出緩沖區(qū)數(shù)據(jù)5 void consume(void *p); bool ifinotherrequest(int); int findproducepositon(); int findbufferposition(int); int m

8、ain(void) (2)信號(hào)量定義如下:#define max_buffer_num 10 /本程序允許的最大臨界區(qū)數(shù);#define inte_per_sec 1000 /秒到微秒的乘法因子;#define max_thread_num 64 / 本程序允許的生產(chǎn)和消費(fèi)線程的總數(shù);int buffer_criticalmax_buffer_num; /緩沖區(qū)聲明,用于存放產(chǎn)品;handle h_threadmax_thread_num; / 用于存儲(chǔ)每個(gè)線程句柄的數(shù)組;threadinfo thread_infomax_thread_num; /線程信息數(shù)組;handle empty_se

9、maphore; / 一個(gè)信號(hào)量;handle h_mutex; / 一個(gè)互斥量;dword n_thread = 0; /實(shí)際的線程的數(shù)目;dword n_buffer_or_critical; /實(shí)際的緩沖區(qū)或者臨界區(qū)的數(shù)目;handle h_semaphoremax_thread_num; /生產(chǎn)者允許消費(fèi)者開(kāi)始消費(fèi)的信號(hào)量;4.2 部分代碼(1)創(chuàng)建生產(chǎn)者和消費(fèi)者線程for(i =0;iserial; m_delay = (dword)(threadinfo*)(p)-delay *inte_per_sec); sleep(m_delay); /開(kāi)始請(qǐng)求生產(chǎn)printf( 生產(chǎn)者 %d

10、 發(fā)出生產(chǎn)請(qǐng)求 .n,m_serial); /確認(rèn)有空緩沖區(qū)可供生產(chǎn), 同時(shí)將空位置數(shù) empty 減 1;用于生產(chǎn)者和消費(fèi)者的同步;wait_for_semaphore = waitforsingleobject(empty_semaphore,-1); /互斥訪問(wèn)下一個(gè)可用于生產(chǎn)的空臨界區(qū),實(shí)現(xiàn)寫寫互斥;wait_for_mutex = waitforsingleobject(h_mutex,-1); int producepos = findproduceposition(); releasemutex(h_mutex); /生產(chǎn)者在獲得自己的空位置并做上標(biāo)記后,以下的寫操作在生產(chǎn)者之間

11、可以并發(fā);/核心生產(chǎn)步驟中, 程序?qū)⑸a(chǎn)者的id 作為產(chǎn)品編號(hào)放入, 方便消費(fèi)者識(shí)別 ; printf( 生產(chǎn)者 %d 開(kāi)始生產(chǎn),并且把其產(chǎn)品放在位置%2d.n,m_serial, producepos); buffer_criticalproducepos = m_serial; printf( 生產(chǎn)者 %2d 生產(chǎn)完畢 .n ,m_serial); printf( 位置%2d:%3d n ,producepos,buffer_criticalproducepos); /使生產(chǎn)者寫的緩沖區(qū)可以被多個(gè)消費(fèi)者使用,實(shí)現(xiàn)讀寫同步;releasesemaphore(h_semaphorem_seri

12、al,n_thread,null); (3)消費(fèi)者進(jìn)程void consume(void * p) /局部變量聲明;7 dword wait_for_semaphore,m_delay; int m_serial,m_requestnum; /消費(fèi)者的序列號(hào)和請(qǐng)求的數(shù)目;int m_thread_requestmax_thread_num;/ 本消費(fèi)線程的請(qǐng)求隊(duì)列;/提取本線程的信息到本地;m_serial = (threadinfo*)(p)-serial; m_delay = (dword)(threadinfo*)(p)-delay *inte_per_sec); m_requestnu

13、m = (threadinfo *)(p)-n_request; for (int i = 0;ithread_requesti; sleep(m_delay); /循環(huán)進(jìn)行所需產(chǎn)品的消費(fèi)for(i =0;ithread_requesti =-1; if(!ifinotherrequest(m_thread_requesti) buffer_criticalbufferpos = -1;/ 標(biāo)記緩沖區(qū)為空;printf( 消費(fèi)者 %2d消費(fèi)完畢 %2d.n ,m_serial,m_thread_requesti); printf( 位置%2d:%3d n ,bufferpos,buffer_c

14、riticalbufferpos); releasesemaphore(empty_semaphore,1,null); 8 else printf( 消費(fèi)者 %2d消費(fèi)完畢 %2d.n ,m_serial,m_thread_requesti); /離開(kāi)臨界區(qū)leavecriticalsection(&pc_criticalbufferpos); 5.測(cè)試結(jié)果圖 5-1 測(cè)試結(jié)果圖9 其中測(cè)試數(shù)據(jù)是:2 1 p 1 2 p 2 3 p 3 4 c 4 3 2 5 c 5 1 6.結(jié)果分析1、在每個(gè)程序中坐須先做p(mutex) ,后做 v(mutex) ,二者要成對(duì)出現(xiàn)。夾在二者中間的

15、代碼段就是該進(jìn)程的臨界區(qū)。2、對(duì)同步信號(hào)量 full和 empty 的 p,v操作同樣必須成對(duì)出現(xiàn),但它們分別位于不同的程序中。3、無(wú)論在生產(chǎn)者進(jìn)程中還是在消費(fèi)者進(jìn)程中,兩個(gè) p操作的次序不能顛倒 : 應(yīng)先執(zhí)行同 步信號(hào)量的 p操作,然后執(zhí)行互斥信號(hào)量的p操作。否則可能造成進(jìn)程死鎖。7.總結(jié)和體會(huì) . 此系統(tǒng)中使用的是用vc+6.0 實(shí)現(xiàn)的,由于我的經(jīng)驗(yàn)不足及閱歷頗淺,因此,在設(shè)計(jì)方面還有很多不足,比如代碼不夠優(yōu)化等問(wèn)題,我會(huì)在以后的學(xué)習(xí)、工作的過(guò)程中, 根據(jù)工作的具體要求不斷的修改,完善,爭(zhēng)取使該系統(tǒng)慢慢趨向完美。學(xué)習(xí)任何知識(shí),僅從理論上去求知,而不去實(shí)踐、探索是不夠的,所以在學(xué)習(xí)完后進(jìn)行課程設(shè)計(jì)是很及時(shí)、很必要的,這樣不僅能加深我們對(duì)所學(xué)知識(shí)的了解,而且還及時(shí)、真正的做到了學(xué)以致用。在這次課程設(shè)計(jì)過(guò)程中,遇到了很多問(wèn)題。尤其是設(shè)計(jì)方面有些困難,但是通過(guò)上網(wǎng),查書,向別人請(qǐng)教解決了,這次課程設(shè)計(jì)讓我學(xué)到了很多, 不僅是鞏固了先前學(xué)的的理論知識(shí),而且也培養(yǎng)了我的動(dòng)手能力,更令我的創(chuàng)造性思維得到拓展。致謝在本設(shè)計(jì)是我第一次嘗試這方面的軟件編程。在剛開(kāi)發(fā)完畢準(zhǔn)備開(kāi)始寫論文時(shí)我對(duì)論文的寫法是一片空白, 所以只能問(wèn)同學(xué)和上網(wǎng)查資料, 所以首先感謝在程序上幫助我的同學(xué), 再次感謝網(wǎng)上貼出同類資料的友士,最后謝謝王老師對(duì)我10 們的指

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論