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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

1、下載TOYIXCE.zip文件,將壓縮文件中的TOYIXCE文件夾解壓到D盤根目錄下,如下圖。文件更)編輯⑥查看但)收藏⑴工具(I)繁助文件更)編輯⑥查看但)收藏⑴工具(I)繁助?O后退-OF尸搜素文件夾回?地址(山|^0:\TOC\o"1-5"\h\zr 'Ij削建-徹史怦夷 Ij得次個女傳買抵鄙到I通晶臨件探 I解壓Toyix到D:盤根目錄2、打開TOYIXCE文件夾,瀏覽Toyix的系統(tǒng)文件,查看Toyix系統(tǒng)文件的目錄結構,如下圖。*D:\TOYIXCE文件曷舞牌(曰查者但)收藻⑴工具⑴幫助(E)。后退-0A|Q掀S。文件夾園?aJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件喪ranin支件喪□mmaJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件喪ranin支件喪□mm1女件初文件夾ft等以倒建一個新文偉冥用迂亍女伴哭鋼割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應用程序_C麗2Q&2-M921:13EX&交件峰很日蚓SOOT年勺月事日'I、44CQ.MT2&0Z-S-2T0:35.Wind口印字早肉密文件圖2Toyix操作系統(tǒng)的目錄結構如果看到toyix的系統(tǒng)文件在D:\TOYIXCE目錄下,說明Toyix系統(tǒng)已安裝完畢。2.2.3對Toyix的一點修改

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

圖6按任意鍵開始運行可以看到,此時進程5被調度到,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進程的切換調度可見,34256都已經執(zhí)行過至少一次,而且并發(fā)的7個進程的調度先后順序并無一定之規(guī)。6進程(生產者)生產了1件產品,可是因為緩沖區(qū)才4個單位,前四個生產者已經往其中放滿了產品。接下來會發(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論