操作系統(tǒng)課程設計-進程通信與進程同步機制實踐_第1頁
操作系統(tǒng)課程設計-進程通信與進程同步機制實踐_第2頁
操作系統(tǒng)課程設計-進程通信與進程同步機制實踐_第3頁
操作系統(tǒng)課程設計-進程通信與進程同步機制實踐_第4頁
操作系統(tǒng)課程設計-進程通信與進程同步機制實踐_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《操作系統(tǒng)》課程設計題目:進程通信與進程同步機制實踐學院名稱:計算機科學與通信工程學院班級學號:學生姓名:教師姓名:教師職稱:2016年1月8日

目錄一課程設計內容二開發(fā)環(huán)境二原理五主要數(shù)據(jù)結構和流程六原語對應的函數(shù)及算法七測試結果與分析八總結九源程序清單一課程設計的內容【設計內容】某銀行提供6個服務窗口(3個對私服務窗口,2個對公服務窗口,1個理財服務窗口、一臺取號機和20個供顧客等待的座位。顧客到達銀行時,若有空座位,則到取號機上領取一個號,等待叫號;若沒有空座位,則在門外等待或離開。取號機每次僅允許一位顧客使用,有對公、對私和理財三類號,每位顧客只能選取其中一個。當營業(yè)員空閑時,通過叫號選取一位顧客,并為其服務?!菊f明】(1)可模擬設立一個服務時間區(qū)間如9:00-17:00,也可限定最大服務人數(shù);(2)顧客達到時間隨機,辦理對私、對公、理財業(yè)務隨機,每位顧客服務時間可設定在一定范圍內。這些都可通過隨機數(shù)產生。(3)取號時顧客拿到的號含有號碼和等待的人數(shù),例如A、B、C分別代表對私、對公、理財,“號碼:A05,有2人等待”表示取的是對私服務號,編號是05,有2人等待辦理對私業(yè)務。(4)成績評定:平時占60%,實驗報告占40%;其中平時60%包括考勤和學習態(tài)度、學習積極性等占20%,兩次檢查,每次檢查各占20%?!緳z查說明】第一次檢查:時間18周周三-四,檢查同步與互斥算法與API熟悉情況第二次檢查:時間18周周五上午與晚上,檢查最終程序完成情況?!疽蟆空f明設置哪些信號量?信號量的含義和初始值是什么?并用信號量和P、V操作寫出進程的同步算法。(注:該內容包含在設計報告中,并在第一次檢查時檢查)查閱并自學進程、線程的創(chuàng)建與撤銷、信號量、P操作、V操作等相關原語的系統(tǒng)調用。(注:該內容包含在設計報告中,并在第一次檢查時檢查)在Linux或Windows或Unix環(huán)境下,采用系統(tǒng)調用中的進程或線程的創(chuàng)建與撤銷、信號量、P操作、V操作,編程解決上述問題,并完成調試與測試工作。(注:該內容包含將并在第二次檢查時檢查)打?。海ㄗ⒁猓河捎诙鄠€進程共享一個顯示器或文件,需要互斥訪問)各進程的初始狀態(tài)信息;中間狀態(tài)變化信息;最終狀態(tài)信息。例如,顧客到達時的時間狀態(tài)信息,領取的號碼信息,等待時間,接收服務的服務窗口信息、服務時間,離開時間等信息。目的通過課程設計模擬銀行辦理業(yè)務的情景,使用pv操作實現(xiàn)互斥與同步。來進一步熟悉課堂上講授的pv操作原語,掌握進程的互斥與同步的知識。二開發(fā)環(huán)境windows操作系統(tǒng),使用Java語言,在eclipse上實現(xiàn)三原理及算法1用一個線程來模擬一位客戶,客戶到來時間,離開時間,都是通過獲取系統(tǒng)的時間來體現(xiàn)。中間等待及辦理業(yè)務的時間則通過產生的一定范圍的隨機數(shù)對線程進行睡眠來模擬的2總共分為三個類,第一個類是包括主函數(shù)的類,用來開啟程序并創(chuàng)建線程對象。第二個類是線程類,包括線程的定義和線程的方法run方法,在run方法內對實現(xiàn)主要程序的功能的函數(shù)進行調用。第三個類,就是存儲的需要用到的主要變量,計數(shù)器,及實現(xiàn)程序功能的三個函數(shù),供所有的線程公用。三個函數(shù)。第一個函數(shù)進行座位的檢測,有座位則進入銀行,沒有在在外等待,以及獲取此時運行該線程的名字,作為一個客戶的標識,并通告該客戶到來及此時的時間。第二個函數(shù)實現(xiàn)取號功能,其中包括判斷取號機是否有人使用,取號時根據(jù)隨機數(shù)產生三種不同的票號,同時該票號的內容還包括票的序號和此類票號對應的服務窗口現(xiàn)在還有多少人在等待。第三個函數(shù)是服務功能,包括根據(jù)票號判斷此時該類窗口是否有已滿,滿了就等待,沒滿則去辦理業(yè)務。辦理業(yè)務通過產生隨機數(shù)對線程進行休眠,客戶離開時,通告客戶的服務時間,及離開的時間。四主要數(shù)據(jù)結構和流程六個信號量一個代表大廳的座位,初值為20。一個代表取號機,初值為1,。三個窗口,初值分別為3,2,1。一個用來實現(xiàn)對記錄大廳人數(shù)的變量的互斥操作。四個變量一個代表辦理業(yè)務的總人數(shù)。三個分別代表三個窗口的等待人數(shù)。票號的格式為服務+票號+等待人數(shù)。例如A-22-3表示辦理對私服務,票號為22,該窗口還有3人在等待。等待時間,服務時間,均是調用函數(shù)產生隨機數(shù)。流程圖五原語對應函數(shù)及pv算法創(chuàng)建線程:繼承Thread類,實現(xiàn)run方法信號量semaphorep操作:acquirev操作:releaseSemaphoreZcount,Qcount,counta,countb,countc,countx;Zcount.value=20;Qcount.value=1;Counta.value=3;Countb.value=2;Countc.value=1;Countx.value=1;Process{P(&zcount);{p(&qcount);取票ABCReturnA或者B或者C;v(&qcount);If(A){P(&counta);V(&zcount);辦理服務V(&counta);}Elseif(B){P(&countb);V(&zcount);辦理服務V(&countb);}Else{P(&countc);V(&zcount);辦理服務V(&countc);}}}六測試結果與分析分析:進程的名字標志客戶。由于線程太快,設置的休眠時間較短,所以存在同一秒級有多個用戶到達。服務時間為1000,2000,3000毫秒隨機。到來及離開都是分別獲取此時系統(tǒng)的時間。七總結經過本次的實驗對pv操作有了更進一步的理解,從更深層次了解了同步與互斥的原理及實現(xiàn)的過程。設計過程遇到了各種問題。在設計pv操作時由于座位加上窗口共可以存放26個人,盡管信號量設置的是20,但是需要在每一個人申請到窗口時即釋放座位。就是在釋放窗口之前。在設計程序時關于每個線程共享的變量以及每個線程私有的變量的問題,比如取到的號即為每個線程的私有變量。最后經過一周半的課程設計之后,對編程,解決問題的能力,都有了一定的提升。九源程序清單第一個類packagebank1;publicclassroutine{publicstaticcommoncomm=newcommon(); @SuppressWarnings("deprecation") publicstaticvoidmain(String[]args){ inti; for(i=1;i<=20;i++){ clientclii=newclient(comm); clii.start(); } }}第二個類packagebank1;importmon;importjava.util.Random;importjava.util.concurrent.Semaphore;publicclassclientextendsThread{privatecommoncomm;Stringresult=newString(); publicclient(commonthiscomm){ //TODO自動生成的構造函數(shù)存根 comm=thiscomm; }publicvoidrun(){ Randomran=newRandom(); try{ sleep((ran.nextInt(6)+1)*2000); }catch(InterruptedExceptione1){ //TODO自動生成的catch塊 e1.printStackTrace(); } comm.sit(this.getName()); result=comm.qu(this.getName()); comm.handle(result,this.getName()); try{ sleep(10); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); }}}第三個類packagebank1;importjava.util.Date;importjava.util.Random;importjava.util.concurrent.Semaphore;publicclasscommon{ privateintzcount; privateintaa,bb,cc; Semaphoresemaphore=newSemaphore(10); Semaphoresemaphoreq=newSemaphore(1); Semaphoresemaphorea=newSemaphore(3); Semaphoresemaphoreb=newSemaphore(2); Semaphoresemaphorec=newSemaphore(1); Semaphoresemaphorez=newSemaphore(1); Randomran1=newRandom(); publiccommon(){ zcount=1; aa=-3; bb=-2; cc=-1; } publicvoidsit(Stringname){ try{ semaphore.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } Datedate=newDate(); System.out.println("客戶:"+name+"在時間"+date.toString()+":到達"+"\n"); }publicStringqu(Stringname){ Stringa=newString(); try{ semaphoreq.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } intx; inty; Randomran=newRandom(); x=ran.nextInt(9); y=zcount; //System.out.println(x); if(x<3){ aa++; intaaa; if(aa<0) aaa=0; else{aaa=aa;} a="A"+"--"+y+"該服務有"+aaa+"人等待"; System.out.println("客戶:"+name+":取到號:"+a+"\n"); try{ semaphorez.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } zcount++; semaphorez.release(); } elseif(3<=x&&x<=6){ bb++; intbbb; if(bb<0) bbb=0; else{bbb=bb;} a="B"+"--"+y+"該服務有"+bbb+"人等待"; System.out.println("客戶:"+name+":取到號:"+a+"\n"); try{ semaphorez.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } zcount++; semaphorez.release(); } else{ cc++; intccc; if(cc<0) ccc=0; else{ccc=cc;} a="C"+"--"+y+"該服務有"+ccc+"人等待"; System.out.println("客戶:"+name+":取到號:"+a+"\n"); try{ semaphorez.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } zcount++; semaphorez.release(); } semaphoreq.release(); returna; }publicvoidhandle(Stringb,Stringname){ if(b.charAt(0)=='A'){ try{ semaphorea.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } semaphore.release();System.out.println(name+":正在對私服務窗口辦理業(yè)務"+"\n");intt=(ran1.nextInt(3)+1)*1000;try{ Thread.sleep(t);}catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace();}aa--;semaphorea.release();Datedate=newDate();System.out.println(name+"服務時間"+t+"毫秒在"+date+":離開"+"\n"); } elseif(b.charAt(0)=='B'){ try{ semaphoreb.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } semaphore.release(); System.out.println(name+":正在對公服務窗口辦理業(yè)務"+"\n"); intt=(ran1.nextInt(3)+1)*1000; try{ Thread.sleep(t); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } bb--; semaphoreb.release(); Datedate=newDate();System.out.println(name+"服務時間"+t+"毫秒在"+date+":離開"+"\n"); } elseif(b.charAt(0)=='C'){ try{ semaphorec.acquire(); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } semaphore.release(); System.out.println(name+":正在理財服務窗口辦理業(yè)務"+"\n"); intt=(ran1.nextInt(3)+1)*1000; try{ Thread.sleep(t); }catch(InterruptedExceptione){ //TODO自動生成的catch塊 e.printStackTrace(); } cc--;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論