操作系統(tǒng)課程設(shè)計(jì)_第1頁
操作系統(tǒng)課程設(shè)計(jì)_第2頁
操作系統(tǒng)課程設(shè)計(jì)_第3頁
操作系統(tǒng)課程設(shè)計(jì)_第4頁
操作系統(tǒng)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

學(xué)號(hào):0120810340614課程設(shè)計(jì)題目進(jìn)程同步模擬設(shè)計(jì)——生產(chǎn)者和消費(fèi)者問題學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)0806姓名張方紀(jì)指導(dǎo)教師孫玉芬2010年1月20日課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 張方紀(jì) 專業(yè)班級(jí): 計(jì)算機(jī)0806指導(dǎo)教師: 孫玉芬 工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院題目:進(jìn)程同步模擬設(shè)計(jì)一一生產(chǎn)者和消費(fèi)者問題初始條件:預(yù)備內(nèi)容:閱讀操作系統(tǒng)的進(jìn)程管理章節(jié)內(nèi)容,對(duì)進(jìn)程的同步和互斥,以及信號(hào)量機(jī)制度有深入的理解。實(shí)踐準(zhǔn)備:掌握一種計(jì)算機(jī)高級(jí)語言的使用。要求完成的主要任務(wù):(包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)模擬用信號(hào)量機(jī)制實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者問題。設(shè)計(jì)報(bào)告內(nèi)容應(yīng)說明:⑴需求分析;⑵功能設(shè)計(jì)(數(shù)據(jù)結(jié)構(gòu)及模塊說明);⑶開發(fā)平臺(tái)及源程序的主要部分;⑷測(cè)試用例,運(yùn)行結(jié)果與運(yùn)行情況分析;⑸自我評(píng)價(jià)與總結(jié):i) 你認(rèn)為你完成的設(shè)計(jì)哪些地方做得比較好或比較出色;ii) 什么地方做得不太好,以后如何改正;iii) 從本設(shè)計(jì)得到的收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗(yàn)和教訓(xùn));iv) 完成本題是否有其他方法(如果有,簡(jiǎn)要說明該方法);時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成程序分析及設(shè)計(jì)。周2、周3:完成程序調(diào)試及測(cè)試。周4、周5:驗(yàn)收、撰寫課程設(shè)計(jì)報(bào)告。(注意事項(xiàng):嚴(yán)禁抄襲,一旦發(fā)現(xiàn),一律按0分記)指導(dǎo)教師簽名:系主任(或責(zé)任教師)簽名:進(jìn)程同步模擬設(shè)計(jì)——生產(chǎn)者和消費(fèi)者問題1課設(shè)任務(wù)本課程設(shè)計(jì)的任務(wù)在于,通過編寫一個(gè)具體的有關(guān)操作系統(tǒng)進(jìn)程同步互斥的經(jīng)典問題,加強(qiáng)對(duì)操作系統(tǒng)實(shí)現(xiàn)進(jìn)程間同步與互斥的機(jī)制的理解。同時(shí)培養(yǎng)提出問題、發(fā)現(xiàn)知識(shí)、使用工具、解決問題的能力。具體地,我們要編制出一個(gè)程序,利用PV原語以及進(jìn)程創(chuàng)建、同步、互斥、銷毀等相關(guān)的系統(tǒng)調(diào)用來模擬“生產(chǎn)者一消費(fèi)者”問題。2背景介紹2.1“生產(chǎn)者一消費(fèi)者”問題(theproducer-consumerproblem)問題描述:一組生產(chǎn)者向一組消費(fèi)者提供消息,它們共享一個(gè)有界緩沖區(qū)n,生產(chǎn)者向其中投放消息,消費(fèi)者從中取得消息。規(guī)則:?對(duì)于生產(chǎn)者進(jìn)程:產(chǎn)生一個(gè)數(shù)據(jù),當(dāng)要送入緩沖區(qū)時(shí),要檢查緩沖區(qū)是否已滿,若未滿,則可將數(shù)據(jù)送入緩沖區(qū),并通知消費(fèi)者進(jìn)程;否則,等待;?對(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è)互斥的問題。問題分析:該問題涉及到操作系統(tǒng)進(jìn)程管理當(dāng)中的兩個(gè)重要概念一一同步和互斥。同步,表現(xiàn)在生產(chǎn)者和消費(fèi)者需要協(xié)同工作,步調(diào)不能拉開太大(由緩沖區(qū)大小n決定,n越大,緩沖空間越大,步調(diào)可以拉得越開;n=1時(shí),必須是生產(chǎn)一個(gè),消費(fèi)一個(gè),生產(chǎn)者和消費(fèi)者就完全同步了)。當(dāng)步調(diào)差距超過極限時(shí),走在前面的當(dāng)前進(jìn)程(生產(chǎn)者)調(diào)用P原語時(shí)由于資源耗盡,被阻塞;步調(diào)靠后的繼續(xù)向前推進(jìn)。由此實(shí)現(xiàn)同步?;コ?,表現(xiàn)在生產(chǎn)者與消費(fèi)者、生產(chǎn)者與生產(chǎn)者、消費(fèi)者與消費(fèi)者任何兩個(gè)成員之間必須互斥地使用緩沖區(qū)。當(dāng)有一個(gè)成員進(jìn)入緩沖區(qū)存/取產(chǎn)品時(shí),其他成員將被關(guān)在門外排隊(duì)等候(被阻塞);當(dāng)完畢時(shí),通知隊(duì)首成員進(jìn)入。由操作系統(tǒng)理論可知,我們需要三個(gè)信號(hào)量,分別命名full,empty,mutex,來分別代表消費(fèi)者的可用資源數(shù)、生產(chǎn)者的可用資源數(shù)、緩沖區(qū)是否可用。初值:full=0(消費(fèi)者無資源可用),empty=N(生產(chǎn)者有N個(gè)資源可用,N代表緩沖區(qū)大?。?,mutex=1(緩沖區(qū)可用)。要模擬多個(gè)進(jìn)程的并發(fā),我們要使用一個(gè)系統(tǒng)調(diào)用,使多個(gè)函數(shù)或程序同時(shí)地執(zhí)行。鑒于VC下這樣的函數(shù)太過復(fù)雜,Linux下筆者暫未找到,因此我們使用Toyix系統(tǒng)提供的一個(gè)系統(tǒng)調(diào)用函數(shù):cobegin。其說明如下:cobegin原型:intcobegin();功能:創(chuàng)建多個(gè)子進(jìn)程并發(fā)執(zhí)行函數(shù)。參數(shù):函數(shù)名用0結(jié)束,例如:cobegin(f1,f2,f3,0);返回值:創(chuàng)建子進(jìn)程的個(gè)數(shù)。說明:所有子進(jìn)程共享數(shù)據(jù)段,主進(jìn)程撤銷,所有子進(jìn)程將被撤銷。我們于下一小節(jié)具體講述有關(guān)Toyix的背景知識(shí)。2.2Toyix簡(jiǎn)介2.2.1概述Toyix是我國著名計(jì)算機(jī)教育家王爽老師開發(fā)的一個(gè)專門用于操作系統(tǒng)基礎(chǔ)理論教學(xué)的軟件。該軟件很好的解決了目前存在于計(jì)算機(jī)專業(yè)操作系統(tǒng)課程教學(xué)中無法使學(xué)習(xí)者獲得實(shí)踐體驗(yàn)和對(duì)理論直觀的了解的問題。以下是Toyix軟件的重要意義和特點(diǎn)的描述:(該軟件下載地址)傳統(tǒng)的操作系統(tǒng)教學(xué)中存在的問題:?重理論輕實(shí)踐,學(xué)習(xí)的理論沒有與編程結(jié)合,使學(xué)習(xí)者無法獲得實(shí)際的體驗(yàn)。?以u(píng)nix或windows為平臺(tái)實(shí)踐,這兩種系統(tǒng)比較復(fù)雜,須學(xué)習(xí)許多相關(guān)的知識(shí),分散學(xué)習(xí)者的精力,不能把主要精力放在操作系統(tǒng)的問題的研究上。因此我們需要一個(gè)既能提供編程體驗(yàn),又不能太復(fù)雜的試驗(yàn)平臺(tái)。為了解決這個(gè)問題,王爽老師開發(fā)了一個(gè)專門用于操作系統(tǒng)基礎(chǔ)理論教學(xué)的系統(tǒng)—Toyix。Toyix的特點(diǎn):1、 Toyix小巧簡(jiǎn)單Toyix安裝包只有幾百KB,下載后解壓即可使用。2、 Toyix的用戶操作方便Toyix兼容Dos的大多數(shù)命令。3、 Toyix下使用的是TC的編譯器多數(shù)學(xué)習(xí)者在學(xué)操作系統(tǒng)前都學(xué)過C語言,一般是從TC起步的,這樣在Toyix下編程時(shí)就不需要再學(xué)習(xí)新的編程知識(shí),就可以開始編程。4、 Toyix的編程接口兼容性好系統(tǒng)部分與UNIX兼容,C庫函數(shù)與標(biāo)準(zhǔn)的C庫函數(shù)兼容,這樣書上的代碼非常容易在Toyix下實(shí)現(xiàn)。當(dāng)然Toyix沒有實(shí)現(xiàn)UNIX和標(biāo)準(zhǔn)C的所有函數(shù),只實(shí)現(xiàn)了一些教學(xué)實(shí)踐中必須的。2.2.2Toyix的安裝安裝步驟:

1、下載TOYIXCE.zip文件,將壓縮文件中的TOYIXCE文件夾解壓到D盤根目錄下,如下圖。文件更)編輯⑥查看但)收藏⑴工具(I)繁助文件更)編輯⑥查看但)收藏⑴工具(I)繁助?O后退-OF尸搜素文件夾回?地址(山|^0:\TOC\o"1-5"\h\zr 'Ij削建-徹史怦夷 Ij得次個(gè)女傳買抵鄙到I通晶臨件探 I解壓Toyix到D:盤根目錄2、打開TOYIXCE文件夾,瀏覽Toyix的系統(tǒng)文件,查看Toyix系統(tǒng)文件的目錄結(jié)構(gòu),如下圖。*D:\TOYIXCE文件曷舞牌(曰查者但)收藻⑴工具⑴幫助(E)。后退-0A|Q掀S。文件夾園?aJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件喪ranin支件喪□mmaJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件喪ranin支件喪□mm1女件初文件夾ft等以倒建一個(gè)新文偉冥用迂亍女伴哭鋼割teSHELL.Elffi眼,砧IT」:.TOVIX_C.EKE1499-1-423:00tuyix.libB-J9-1-?[;35LIB文件WY.EXE1澎-LT6;37OT.OBJ2002^-292;14IrtteTmadtatefileTLINK.EKE19^-1-^7:16CSAIE1-54:55-LI&文件T0TIX.H1獺T-T利CHeader£i1eEDIT.COM1-101Z:OO應(yīng)用程序_C麗2Q&2-M921:13EX&交件峰很日蚓SOOT年勺月事日'I、44CQ.MT2&0Z-S-2T0:35.Wind口印字早肉密文件圖2Toyix操作系統(tǒng)的目錄結(jié)構(gòu)如果看到toyix的系統(tǒng)文件在D:\TOYIXCE目錄下,說明Toyix系統(tǒng)已安裝完畢。2.2.3對(duì)Toyix的一點(diǎn)修改

Toyix將用戶程序源文件放在了心盤根目錄,極不方便打開,又容易與C:盤系統(tǒng)文件混淆。因此我建議更改工作目錄。打開Toyix操作系統(tǒng)的目錄結(jié)構(gòu)中的CO.BAT文件,將其中內(nèi)容更改為:@echooffpathd:\toyixcecd/dD:\TOYIXCE\PROJECTStoy并在D:\TOYIXCE目錄下建立一PROJECTS文件夾,即可將工作目錄設(shè)在D:\TOYIXCE\PROJECTS下,可以很方便地將整個(gè)Toyix操作系統(tǒng)及你所編寫的程序打包,而且也避免了與C:盤主操作系統(tǒng)文件的相互干擾。此后,用戶用edit文本編輯器新建的文件以及后面用cc命令編譯和用do命令運(yùn)行的文件/程序就都默認(rèn)在此工作目錄下了。2.2.4Toyix的啟動(dòng)和初步使用WindowsXp及以上的用戶可以直接雙擊CO.BAT啟動(dòng)2.2.4Toyix操作系統(tǒng)。默認(rèn)當(dāng)前目錄即上面所說的D:\TOYIXCE\PROJECTSoToyix系統(tǒng)很簡(jiǎn)單,只涉及簡(jiǎn)單的模擬進(jìn)程管理,只包含等少許外部程序(當(dāng)然用戶可以利用它的CC內(nèi)部命令自己生成.prg格式的外部程序)oToy.exe是其在Windows下的啟動(dòng)程序。用戶使用普通的文本編輯器,或它自帶的editDOS下的編輯器編輯源程序。使用cc命令編譯。使用do命令運(yùn)行。運(yùn)行過程中,DOS界面上方會(huì)有一欄toyix的進(jìn)程監(jiān)視器。它顯示了所有進(jìn)程的狀態(tài),“running”后面顯示的是正在執(zhí)行進(jìn)程的進(jìn)程號(hào),“ready”后面顯示的是就緒進(jìn)程的進(jìn)程號(hào),“blocked”后面顯示的是阻塞進(jìn)程的進(jìn)程號(hào)。如圖3:running*!0vea.<Ly:1 blocksdI TNuLtdprdicbssffoni-fcnroflxQ31-pvgCl)4kFr-easkey 圖3toyix的進(jìn)程監(jiān)視器2.2.5Toyix編程Toyix編程部分主要講解toyix系統(tǒng)提供的庫函數(shù)。Toyix庫函數(shù)主要分兩類:一類是與系統(tǒng)相關(guān)的庫函數(shù);另一類是c庫函數(shù),和一般c庫函數(shù)的使用基本相同。此部分內(nèi)容請(qǐng)讀者參考,上面的資料。地址:http://www.toyix.nct/tutorial/tutorial.htm#a2讀者也可以通過本課設(shè)報(bào)告來窺知toyix系統(tǒng)的內(nèi)容。3具體實(shí)現(xiàn)(完整代碼及分析)完整代碼如下:#include<toyix.h>#defineN4semaphoremutex;semaphorefull;semaphoreempty;produce(){delay(3000);/*用3秒鐘生產(chǎn)一件產(chǎn)品*/printf("%dProduceaproduct\n",get_pid());p(&empty);p(&mutex);delay(5000);/*用5秒鐘將該產(chǎn)品放入緩沖區(qū)*/printf("%dPuttheproductintobuffer\n",get_pid());v(&mutex);v(&full);}consume(){p(&full);p(&mutex);delay(5000);/*用5秒鐘從緩沖區(qū)取走一件產(chǎn)品*/printf("%dFetchaproductformbuffer\n”,get_pid());v(&mutex);v(&empty);delay(3000);/*用3秒鐘消費(fèi)該產(chǎn)品*/printf("%dConsumetheproduct\n”,get_pid());}main(){intn,i;printf("\n");/*設(shè)置信號(hào)量的初值*/set(&mutex,1);/*mutex=1:緩沖區(qū)可用;mutex=0:緩沖區(qū)正被占用,不可用*/set(&full,0);/*consume函數(shù)的信號(hào)量。full=1~N:緩沖區(qū)有產(chǎn)品可取走;full<=0:緩沖區(qū)無產(chǎn)品*/set(&empty,N);/*produce函數(shù)的信號(hào)量°empty=1~N:緩沖區(qū)有空位放產(chǎn)品;full<=0:緩沖區(qū)無空位*/n=cobegin(/*多個(gè)函數(shù)(進(jìn)程)并行執(zhí)行。測(cè)試各種情況。(注:cobegin最多支持7個(gè)函數(shù)同時(shí)運(yùn)行)*/produce,produce,produce,produce,produce,consume,consume,0);printf("%dsub-processreadytorunconcurrently.\n”,n);printf("\n");getch();/*必須加上,以保證主進(jìn)程最后才結(jié)束。cobegin的子進(jìn)程都會(huì)在主進(jìn)程結(jié)束時(shí)被銷毀。*/}運(yùn)行過程與結(jié)果:匚:「C:^TlffDOlSVsysl\c>d.eseToyixuersion1_0S,Copyright<c>2093UangShuangTQ<;ixisconcurrentenvironmentivseAinOSteachin?andresea.rcliin9Uan^Shuan^Jsemail:superhopel?!26.cdh,feustu@163.comkCo.:XTO?IXCEXPROJECT£>cccp.cConpiling...cp.c:Availablememory244700Linking...Making-.-.pp-prg-<Co.>D:XTOVIXCEXPEOJECTS>_圖4編譯源程序,成功生成.prg可執(zhí)行文件反C:\THTD01SVsysleB32\cad.eserunning:0ready:1 blocked: ToyixThree-statesHonitorU0.03Toyixis-aconcurrentenvironment inOSteachingandresearchinsUan^ShLian^Jsemail:superhopeP,fewstuP163.conkCo.>D:\TOVIKCE\PROJECT£>cccp.cConpiling...cp_c:Availablenemoi'9244700Linking...Making-.-.pp-prffkCo.>D:XTOVIXCEXPKOJECTS>docpcp.prg-<1〉dLPressanyke^F...圖5執(zhí)行可執(zhí)行文件,父進(jìn)程就緒0號(hào)進(jìn)程是操作系統(tǒng)初始進(jìn)程,或命令行進(jìn)程。1號(hào)進(jìn)程為可執(zhí)行文件調(diào)入內(nèi)存所產(chǎn)生的進(jìn)程,即主(父)進(jìn)程。本程序中,2號(hào)開始即為子進(jìn)程。Cobegin中共7個(gè)函數(shù)(進(jìn)程)并發(fā)執(zhí)行,進(jìn)程號(hào)分別為2?8。

圖6按任意鍵開始運(yùn)行可以看到,此時(shí)進(jìn)程5被調(diào)度到,61234處于就緒狀態(tài),78被阻塞。3C:\¥IlTD01SVsys-t eserunning:1readj/:3 blocked:245&78ToyixThree-statesHonitorU0.03<Co_JD:\T0¥IXCEXPKOJECTS>cccp_cGonpiling...cp.c:Availablenemor^r2447BBLinkinc[-..Making-.-.cp-prffkCo.>D:ST0?IXCESPBOJECTS>docpcp_pi'fftl>okPressanykey.-7sub—pi'ocessreadytoi'uncancLLi't'entlu.ProduceaproductProduceaproductProduceaproductProduceaproductProduceaproduct圖7進(jìn)程的切換調(diào)度可見,34256都已經(jīng)執(zhí)行過至少一次,而且并發(fā)的7個(gè)進(jìn)程的調(diào)度先后順序并無一定之規(guī)。6進(jìn)程(生產(chǎn)者)生產(chǎn)了1件產(chǎn)品,可是因?yàn)榫彌_區(qū)才4個(gè)單位,前四個(gè)生產(chǎn)者已經(jīng)往其中放滿了產(chǎn)品。接下來會(huì)發(fā)生什么?8C:\THTD01SVsysl?32\c>d.eserunning:running:1ready: blocked:Flaking...cp.prcrToyixThree-statesNonitorU0.03<Co.7D:<Co.7D:\TO¥IKCESPKOJECTS>docp.prcfCl>opsPressanykey...7sub-processreadytoi'nnCPconcurrent34256342577ProduceProduceProduceProduceProducePutthePutthePutthePuttheFetchaConsumeFetchaConsumePuttheaproductaproductaproductaproductaproductproductintoproductintoproductintoproductintoproductfol'r34256342577ProduceProduceProduceProduceProducePutthePutthePutthePuttheFetchaConsumeFetchaConsumePuttheaproductaproductaproductaproductaproductproductintoproductintoproductintoproductintoproductfol'rtJieproductproductfot'nthepr

溫馨提示

  • 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)論