大連理工大學(xué)操作系統(tǒng)大作業(yè)離線作業(yè)答案_第1頁
大連理工大學(xué)操作系統(tǒng)大作業(yè)離線作業(yè)答案_第2頁
大連理工大學(xué)操作系統(tǒng)大作業(yè)離線作業(yè)答案_第3頁
大連理工大學(xué)操作系統(tǒng)大作業(yè)離線作業(yè)答案_第4頁
大連理工大學(xué)操作系統(tǒng)大作業(yè)離線作業(yè)答案_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、學(xué)習(xí)中心:專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)年級(jí):18 年秋季學(xué)號(hào):學(xué)生:題目:進(jìn)程同步與互斥生產(chǎn)者與消費(fèi)者問題1.談?wù)勀銓?duì)本課程學(xué)習(xí)過程中的心得體會(huì)與建議:在學(xué)習(xí)操作系統(tǒng)之前,我只是很膚淺地認(rèn)為操作系統(tǒng)只是單純地講一些關(guān)于計(jì)算機(jī)方面的操作應(yīng)用,并不了解其中的具體操作過程和實(shí)用性。通過這一學(xué)期的學(xué)習(xí),我才知道操作系統(tǒng)(OperatingSystem,簡稱 OS)是管理計(jì)算機(jī)系統(tǒng)的全部硬件資源包括軟件資源及數(shù)據(jù)資源;控制程序運(yùn)行;改善人機(jī)界面;為其它應(yīng)用軟件提供支持等,使計(jì)算機(jī)系統(tǒng)所有資源最大限度地發(fā)揮作用,為用戶提供方便的、有效的、友善的服務(wù)界面。經(jīng)過一個(gè)學(xué)期的學(xué)習(xí),我也知道了計(jì)算機(jī)操作系統(tǒng)是鋪設(shè)在計(jì)算機(jī)

2、硬件上的多層系統(tǒng)軟件,不僅增強(qiáng)了系統(tǒng)的功能,而且還隱藏了對(duì)硬件操作的細(xì)節(jié),由它實(shí)現(xiàn)了對(duì)計(jì)算機(jī)硬件操作的多層次的抽象。操作系統(tǒng)的一些原理在生活中也有所應(yīng)用本次課程設(shè)計(jì)中、完成本題我覺得還可以用其他語言來做,也讓我更加熟悉掌握學(xué)習(xí)過的編程語言。為實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題、使用的是 C+語言、自我感覺比較好的是運(yùn)用到了線程、將緩沖區(qū)作為一個(gè)循環(huán)隊(duì)列,簡單模擬了生產(chǎn)者和消費(fèi)者對(duì)于緩沖區(qū)的輸入輸出,結(jié)果是比較成功的。2.操作系統(tǒng)課程設(shè)計(jì),從以下5個(gè)題目中任選其一作答。操作系統(tǒng)課程設(shè)計(jì)題目四:進(jìn)程同步與互斥生產(chǎn)者與消費(fèi)者問題要求:(1)撰寫一份word文檔,里面包括(設(shè)計(jì)思路、流程(原理)圖、源代碼)章節(jié)。

3、(2)設(shè)計(jì)思路:簡單描述生產(chǎn)者與消費(fèi)者問題??稍O(shè)計(jì)生產(chǎn)者進(jìn)程主要計(jì)算進(jìn)程, 消費(fèi)者進(jìn)程輸出打印進(jìn)程, 二者彼此獨(dú)立,運(yùn)行速度不確定,可能會(huì)產(chǎn)生還未生產(chǎn)就需要消費(fèi)這種情況, 此時(shí)引用一個(gè)或若干個(gè)緩沖區(qū), 存放生產(chǎn)者生產(chǎn)的信息,解決速度不確定帶來的問題。(3)流程(原理)圖:繪制流程圖或原理圖。(4)源代碼:列出源代碼,也可以僅列出偽代碼。1 .需求分析1.1 問題描述:一組生產(chǎn)者向一組消費(fèi)者提供消息,它們共享一個(gè)有界緩沖區(qū) n,生產(chǎn)者向其中投放消息,消費(fèi)者從中取得消息。1.2 規(guī)則:對(duì)于生產(chǎn)者進(jìn)程:產(chǎn)生一個(gè)數(shù)據(jù),當(dāng)要送入緩沖區(qū)時(shí),要檢查緩沖區(qū)是否已滿,若未滿,則可將數(shù)據(jù)送入緩沖區(qū),并通知消費(fèi)者進(jìn)

4、程;否則,等待;對(duì)于消費(fèi)者進(jìn)程:當(dāng)它去取數(shù)據(jù)時(shí),要看緩沖區(qū)中是否有數(shù)據(jù)可取,若有則取走一個(gè)數(shù)據(jù),并通知生產(chǎn)者進(jìn)程,否則,等待。緩沖區(qū)是個(gè)臨界資源,因此,諸進(jìn)程對(duì)緩沖區(qū)的操作程序是一個(gè)共享臨界區(qū),所以,還有個(gè)互斥的問題。1.3 信號(hào)燈設(shè)置:兩個(gè)同步信號(hào)燈-empty:表示空緩沖區(qū)的數(shù)目,初值為有界緩沖區(qū)的大小 n;full:表示滿緩沖區(qū)(即信息)的數(shù)目,其初值為 0;一個(gè)互斥信號(hào)燈-mutex:互斥信號(hào)燈,初值為 1。1.4 程序描述:main()(intfull=0;/*滿緩沖區(qū)的數(shù)目*/intempty=n;/*空緩沖區(qū)的數(shù)目*/intmutex=1;/*對(duì)有界緩沖區(qū)進(jìn)行操作的互斥信號(hào)燈co

5、beginpl();p2();coend)p1()(while(生產(chǎn)未完成)(?生產(chǎn)一個(gè)產(chǎn)品;p(empty);p(mutex);送一個(gè)產(chǎn)品到有界緩沖區(qū)v(mutex);v(full);)p2()(while(還要繼續(xù)消費(fèi))(p(full);p(mutex);從有界緩沖區(qū)中取產(chǎn)品;*/v(mutex);v(empty);?消費(fèi)一個(gè)產(chǎn)品;)1.5C+叫言程序模擬用信號(hào)量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題:本次課程設(shè)計(jì)主要通過 C+徽擬信號(hào)量制中各個(gè)進(jìn)程,及各進(jìn)程之間的互斥、同步關(guān)系,來實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題。1.5.1 模塊說明:constunsignedshortSIZE_OF_BUFFER=10;/

6、unsignedshortProductID=0;/unsignedshortConsumeID=0;/緩沖區(qū)長度產(chǎn)品號(hào)將被消耗的產(chǎn)品號(hào)unsignedshortin=0;/下標(biāo)unsignedshortout=0;/產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)intg_bufferSIZE_OF_BUFFER;/boolg_continue=true;/HANDLEg_hMutex;/HANDLEg_hFullSemaphore;/HANDLEg_hEmptySemaphore;/緩沖區(qū)是個(gè)循環(huán)隊(duì)列控制程序結(jié)束用于線程間的互斥當(dāng)緩沖區(qū)滿時(shí)迫使生產(chǎn)者等待當(dāng)緩沖區(qū)空時(shí)迫使消費(fèi)者等待DWORD

7、WINAPIProducer(LPVOID);/生產(chǎn)者線程DWORDWINAPIConsumer(LPVOID);/消費(fèi)者線程1.5.2 源程序的主要部分:#include#includeconstunsignedshortSIZE_OF_BUFFER=10;/unsignedshortProductID=0;/unsignedshortConsumeID=0;/unsignedshortin=0;/下標(biāo)unsignedshortout=0;/區(qū)下標(biāo)intg_bufferSIZE_OF_BUFFER;/boolg_continue=true;/HANDLEg_hMutex;/HANDLEg_h

8、FullSemaphore;/HANDLEg_hEmptySemaphore;/DWORDWINAPIProducer(LPVOID);DWORDWINAPIConsumer(LPVOID);intmain()/創(chuàng)建各個(gè)互斥信號(hào)g_hMutex=CreateMutex(NULL,FALSE,NULL);g_hFullSemaphoreCreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);g_hEmptySemaphoreCreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);/調(diào)整下面的數(shù)值

9、,可以發(fā)現(xiàn),當(dāng)生產(chǎn)者個(gè)數(shù)多于消費(fèi)者個(gè)數(shù)時(shí),/生產(chǎn)速度快,生產(chǎn)者經(jīng)常等待消費(fèi)者;反之,消費(fèi)者經(jīng)常等待constunsignedshortPRODUCERS_COUNT=3;/者的個(gè)數(shù)constunsignedshortCONSUMERS_COUNT=1;/消費(fèi)緩沖區(qū)長度產(chǎn)品號(hào)將被消耗的產(chǎn)品號(hào)產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)產(chǎn)品出緩沖區(qū)時(shí)的緩沖緩沖區(qū)是個(gè)循環(huán)隊(duì)列控制程序結(jié)束用于線程間的互斥當(dāng)緩沖區(qū)滿時(shí)迫使生產(chǎn)者等待當(dāng)緩沖區(qū)空時(shí)迫使消費(fèi)者等待/生產(chǎn)者線程/消費(fèi)者線程生產(chǎn)者的個(gè)數(shù)/總的線程數(shù)constunsignedshortTHREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COU

10、NT;HANDLEhThreadsPRODUCERS_COUNT;/各線程的 handleDWORDproducerIDCONSUMERS_COUNT;/生產(chǎn)者線程的標(biāo)識(shí)符DWORDconsumerIDTHREADS_COUNT;/消費(fèi)者線程的標(biāo)識(shí)符/創(chuàng)建生產(chǎn)者線程for(inti=0;iPRODUCERS_COUNT;+i)hThreadsi=CreateThread(NULL,0,Producer,NULL,0,&producerIDi);if(hThreadsi=NULL)return-1;/創(chuàng)建消費(fèi)者線程for(intj=0;jCONSUMERS_COUNT;+j)hThrea

11、dsPRODUCERS_COUNT+j=CreateThread(NULL,0,Consumer,NULL,0,&consumerIDj);if(hThreadsj=NULL)return-1;while(g_continue)if(getchar()/g_continue=false;按回車后終止程序運(yùn)行return0;)/生產(chǎn)一個(gè)產(chǎn)品。簡單模擬了一下,僅輸出新產(chǎn)品的 ID 號(hào)voidProduce()(std:cerrProducing+ProductID.;std:cerrSucceedstd:endl;)/把新生產(chǎn)的產(chǎn)品放入緩沖區(qū)voidAppend()(std:cerrApp

12、endingaproduct.;g_bufferin=ProductID;in=(in+1)%SIZE_OF_BUFFER;std:cerrSucceedstd:endl;/輸出緩沖區(qū)當(dāng)前的狀態(tài)for(inti=0;iSIZE_OF_BUFFER;+i)std:couti:g_bufferi;if(i=in)std:cout-生產(chǎn);if(i=out)std:cout-消費(fèi);std:coutstd:endl;)/從緩沖區(qū)中取出一個(gè)產(chǎn)品voidTake()(std:cerrTakingaproduct.;ConsumelD=g_bufferout;out=(out+1)%SIZE_OF_BUFFE

13、R;std:cerrSucceedstd:endl;/輸出緩沖區(qū)當(dāng)前的狀態(tài)for(inti=0;iSIZE_OF_BUFFER;+i)std:couti:g_bufferi;if(i=in)std:cout-生產(chǎn);if(i=out)std:cout-消費(fèi);std:coutstd:endl;)/消耗一個(gè)產(chǎn)品voidConsume()std:cerrConsumingConsumeID.;std:cerrSucceedstd:endl;)/生產(chǎn)者DWORDWINAPIProducer(LPVOIDlpPara)(while(g_continue)WaitForSingleObject(g_hFul

14、lSemaphore,INFINITE);WaitForSingleObject(g_hMutex,INFINITE);Produce();Append();Sleep(1500);ReleaseMutex(g_hMutex);ReleaseSemaphore(g_hEmptySemaphore,1,NULL);return0;/消費(fèi)者DWORDWINAPIConsumer(LPVOIDlpPara)while(g_continue)WaitForSingleObject(g_hEmptySemaphore,INFINITE);WaitForSingleObject(g_hMutex,INFINITE);Take();Consume();Sleep(1500);ReleaseMutex(g_hMutex);ReleaseSemaphore(g_hFullSemaphore,1,NULL);return0;測試用例,運(yùn)行結(jié)果與運(yùn)行情況分析:1.5.3 測試用例:在本次課程設(shè)計(jì)的測試中,緩沖區(qū)長度是取值為 10,生產(chǎn)者個(gè)數(shù)取值為 3,消費(fèi)者個(gè)數(shù)取值為 1.運(yùn)行結(jié)果與分析:旦回;wI.d:_3GQdata 星要敦轉(zhuǎn)1我的文檔 sualstudta2O

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論