




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
黑龍江外國語學院 2012-2013學年 第1學期 Term 1 2012-2013 Academic Year Heilongjiang International University答卷封面(COVER)評閱結(jié)果Final mark評閱人Examiner課程名稱(Subject): 操作系統(tǒng)課程設(shè)計編 號 (No.): 12-13-1-050154 系 別 (Department): 信息科學系專 業(yè) (Major): 計算機科學與技術(shù) 姓 名 (Name): 高懷云 學 號 (Students Number): BC10331103 注意事項(Notes)1.考生需將上述有關(guān)項目填寫清楚2.字跡要清楚,保持卷面清潔。3.交卷時請將本答卷和題簽一起上交,題簽作為封面下一頁裝訂。1、Candidates should fill in the information appropriately.2、Keep the handwriting clear and the paper tidy.3、Candidate should hand in this cover and paper together; the answer sheet should be attached to the cover.IV機密(Confidential) 編號(No.): 12-13-1-050154試 題(Test)課程名稱(Subject):操作系統(tǒng)課程設(shè)計考核類別(Type of test):考查課程類別(Type of course) : 實踐環(huán)節(jié) 考試形式(Test type) : 論文 使用范圍(Target group): 計算機科學與技術(shù) 要求:一、通過本課程設(shè)計,使學生在上機實驗中體會計算機操作系統(tǒng)的基本原理,訓練學生模擬實現(xiàn)操作系統(tǒng)管理和控制資源的能力。二、學生可在下列13個題目中任選1個。(1)先來先服務(wù)調(diào)度算法、短作業(yè)優(yōu)先調(diào)度算法、時間片輪轉(zhuǎn)調(diào)度算法、優(yōu)先級調(diào)度算法(2)生產(chǎn)者-消費者問題(3)最先適應(yīng)算法、最佳適應(yīng)算法、最壞適應(yīng)算法(4)先進先出算法、最久未使用淘汰算法、理想淘汰算法(5)銀行家算法(6)小型文件系統(tǒng)三、模擬實現(xiàn)算法在Windows平臺下,可用C語言、C+語言和Java語言等。摘 要短作業(yè)優(yōu)先調(diào)度算SJF,是指對短作業(yè)或短進程優(yōu)先調(diào)度的算法。它們可已分別用于作業(yè)調(diào)度和進程調(diào)度。短作業(yè)優(yōu)先的調(diào)度算法是從后備隊列中選擇一個或若干個估計運行最短的作業(yè),將它們調(diào)入內(nèi)存運行。對成批進入系統(tǒng)的用戶,根據(jù)進程控制塊的信息,按一定的策略選取若干個作業(yè)使它們可以獲得處理機運行的一項工作。而對每個用戶來說希望自己的周轉(zhuǎn)時間是最小的,短作業(yè)優(yōu)先(SJF)便是其中的一種算法。該算法每次調(diào)度都是從后備作業(yè)隊列中,選擇一個或多個最短服務(wù)時間的進程進入該隊列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源、創(chuàng)建進程,然后放入就緒隊列。在進程調(diào)度算法中采用FJS算法時,這每次調(diào)度是從就緒隊列中,選擇一個服務(wù)時間最短的進入該隊列的進程,為之分配處理機,使之投入運行。該進程一直運行到完成或發(fā)生某事件阻塞后,才放棄處理機。本設(shè)計是為了加深對作業(yè)概念的理解,掌握段作業(yè)優(yōu)先(SJF)算法,深入了解批處理系統(tǒng)如何組織作業(yè)、管理作業(yè)和調(diào)度作業(yè),了解作業(yè)控制塊的作用,以及作業(yè)控制塊的內(nèi)容和組織方式。關(guān)鍵詞:操作系統(tǒng) 短作業(yè)優(yōu)先調(diào)度算法 Java語言目 錄一、設(shè)計題目二、設(shè)計內(nèi)容三、設(shè)計過程3.1短作業(yè)優(yōu)先調(diào)度算法分析3.2短作業(yè)優(yōu)先調(diào)度算法設(shè)計3.3短作業(yè)優(yōu)先調(diào)度算法數(shù)據(jù)設(shè)計3.4代碼實現(xiàn)3.5程序運行四、總結(jié)五、參考文獻黑龍江外國語學院 2012-2013學年 第1學期 Term 1 2012-2013 Academic Year Heilongjiang International University一、 設(shè)計題目短作業(yè)優(yōu)先調(diào)度算法。二、設(shè)計內(nèi)容實驗內(nèi)容:短作業(yè)優(yōu)先調(diào)度算法的基本思想是按照作業(yè)提交的服務(wù)時間的長短,調(diào)入系統(tǒng)或分派CPU,換句話說,當在作業(yè)調(diào)度中采用短作業(yè)優(yōu)先務(wù)算法時,每次調(diào)度都是從后備作業(yè)隊列中選擇一個或多個服務(wù)時間最短的進程進入隊列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源、創(chuàng)建進程然后放入就須隊列一旦選擇了服務(wù)時間最短的入該隊列的進程,該進程一直運行到完成或發(fā)生某事件而阻塞后才放棄處理機。編寫程序完成批處理系統(tǒng)中的作業(yè)調(diào)度,要求采用短作業(yè)優(yōu)先的作業(yè)調(diào)度算法。實驗具體包括:首先確定作業(yè)控制塊的內(nèi)容,作業(yè)控制塊的組成方式;然后完成作業(yè)調(diào)度;最后編寫主函數(shù)對所作工作進程測試。創(chuàng)建作業(yè)控制塊JCB,定義為結(jié)構(gòu)體,為進入系統(tǒng)的作業(yè)建立檔案,其中定義了作業(yè)名,作業(yè)到達時間,作業(yè)服務(wù)時間,作業(yè)開始執(zhí)行時間,作業(yè)完成時間,作業(yè)周轉(zhuǎn)時間,作業(yè)平均周轉(zhuǎn)時間。輸出文字提醒用戶操作步驟:設(shè)定輸入數(shù)據(jù)的格式及數(shù)量;運行完程序后顯示輸出實驗結(jié)果。首先按各個作業(yè)完成時間由大到小排序。再用輸入到達時間與服務(wù)時間按一定算法算出各個作業(yè)的開始執(zhí)行時間、完成時間、周轉(zhuǎn)時間、作業(yè)平均周轉(zhuǎn)時間。運行結(jié)果:先比較各個進程服務(wù)時間找到服務(wù)時間最短的放入就緒隊列,然后根據(jù)進程的服務(wù)時間的長短把進程依次運行,結(jié)果是依次按著進程的服務(wù)時間的長短輸出各個進程。三、設(shè)計過程3.1短作業(yè)優(yōu)先調(diào)度算法分析1算法設(shè)計能夠?qū)崿F(xiàn)以下功能:1)短作業(yè)優(yōu)先調(diào)度算法是沒從進程隊列中選擇服務(wù)時間最短的進程調(diào)度內(nèi)存執(zhí)行該進程。2)能夠輸入進程的基本信息,其中包括進程名,到達時間、開始時間、服務(wù)時間、完成時間、周轉(zhuǎn)時間、平均周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間,本程序是通過文件輸入數(shù)據(jù)而不是通過鍵盤輸入數(shù)據(jù)。3)根據(jù)短作業(yè)優(yōu)先調(diào)度算法計算各個進程的到達時間、開始時間、服務(wù)時間、完成時間、周轉(zhuǎn)時間、平均周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間、最后在標準輸出上面打印出周轉(zhuǎn)時間、平均周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間。2通過操作系統(tǒng)課程設(shè)計,從而加深對短作業(yè)優(yōu)先調(diào)度算法的理解,更加深刻體會短作業(yè)優(yōu)先調(diào)度算法的核心思想,從而更好的學習該算法,掌握短作業(yè)優(yōu)先調(diào)度算法,以及調(diào)度算法中的進程隊列的基本操作情況。能夠用程序設(shè)計語言模擬各個算法的實現(xiàn),能夠判斷算法的優(yōu)缺點,從而明白該算法以及其它的算法相比較更加深刻的了解各個算法的好處以及該算法的不足從而明白處理及模擬進程的各個情況通過對運行結(jié)果與運行情況的分析更能深刻的了解短作業(yè)優(yōu)先調(diào)度算法。3.2短作業(yè)優(yōu)先調(diào)度算法設(shè)計進程定義了一個類B來實現(xiàn)進程從而把各個進程表示出來其中定義了字段有String processname表示進程名,float arrivetime表示到達時間,float servetime表示服務(wù)時間,float finishtime表示完成時間,float turnovertime表示周轉(zhuǎn)時間,float weighturnovertime表示帶權(quán)周轉(zhuǎn)時間,int flag標記該進程是否已經(jīng)完成進程用到了一個fun()方法標記最早執(zhí)行的進程然后通過where循環(huán)把各個進程按照先來先服務(wù)的順序依次執(zhí)行完。進程利用了一個set()方法從而計算一個進程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間利用了一個print()方法把進程的平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間給打印輸出。B模塊:這個模塊表示進程類,能夠記錄進程名,開始時間、等待時間、需要執(zhí)行時間、周轉(zhuǎn)時間、完成時間、帶權(quán)周轉(zhuǎn)時間,在最先執(zhí)行的進程可以通過用fun()方法獲取通過先來先服務(wù)的順序分配CPU。在B類中一個比較重要的方法是setFinish()方法通過該方法從而記錄各個進程開始執(zhí)行的時間以及每個進程的完成時間還有就是set()方法通過該方法可以計算各個進程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間以及完成進程的個數(shù)。A模塊:這個模塊主要是對給定的進程的執(zhí)行以及計算各個進程的到達時間、服務(wù)時間、完成時間、開始時間、周轉(zhuǎn)時間、平均周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間的定義以及打印輸出。 開始短作業(yè)優(yōu)先調(diào)度算法輸入進程數(shù)進程2信息進程1信息進程n信息退出3.3短作業(yè)優(yōu)先調(diào)度算法數(shù)據(jù)設(shè)計1)用到了一個進程類B2)用到了一個A類3)用到了一個public static void main(String args) /系統(tǒng)的主函數(shù)4)public String toString() /打印輸出5)public void print() /打印輸出平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間6)數(shù)據(jù)結(jié)構(gòu)是創(chuàng)建一個進程信息結(jié)構(gòu):class B private String processname ;/進程名private int arrivetime ;/到達時間private int servetime ;/服務(wù)時間 private int finishtime ;/完成時間private int turnovertime ;/周轉(zhuǎn)時間private int finish=0;private double weighturnovertime ;/帶權(quán)周轉(zhuǎn)時間private int flag=0 ;/標記該進程是否已經(jīng)完成private static int finishnum=0 ;/記錄已經(jīng)完成的進程數(shù)private double aveturnovertime ;/平均周轉(zhuǎn)時間private double aveweighturnovertime ;/平均帶勸周轉(zhuǎn)時間public B(String processname,float arrivetime,float servetime) /構(gòu)造方法只傳入已知量 cessname=processname ; this.arrivetime=arrivetime ; this.servetime=servetime ;public void setFlag() this.flag=1 ; ;public void setFinishtime(float finishtime) this.finishtime=finishtime ; public void setTurnovertime() this.turnovertime=this.finishtime-this.arrivetime ; public void setWeighturnovertime() this.weighturnovertime=this.turnovertime/this.servetime ; public String toString() return cessname + t + this.arrivetime+ tt + this.servetime + t + this.finishtime + tt + this.turnovertime + tt + this.weighturnovertime + n ; 此外,定義了進程數(shù)組、記錄進程的個數(shù)、記錄已完成的進程的個數(shù)以及各個進程的開始時間:private B processes=new B10 ;/進程數(shù)組private int n=0 ;/記錄進程數(shù)private int finishnum=0 ;/記錄已經(jīng)完成的進程數(shù)private float finish=0 ;此外還定義了用來找到最早到達的進程記錄進程個數(shù)的和各個進程的開始時間以及完成進程個數(shù)的方法:public void fun() /查找第一個到達時間最找的進程 float temp=processes0.arrivetime ;/記錄最小的到達時間 int k=0 ;/標志該執(zhí)行的進程 for(int i=0;iprocessesi.arrivetime) temp=processesi.arrivetime ; k=i ; this.finish=temp ;/設(shè)置finish的初始值為到達最早的進程的到達時間 this.set(k) ; while(this.finishnum!=this.n) float min=1000f ;int flag=0 ; for(int i=0;in;i+)/根據(jù)到達時間最早原則,找到該執(zhí)行的進程 if(cessesi.flag=0 & cessesi.arrivetime) min=cessesi.arrivetime ; k=i ; flag=1 ; if(flag=0) this.finish+ ; else this.set(k) ; 此外,定義了傳遞進程名、到達時間、服務(wù)時間的方法。還定義了計算平均周轉(zhuǎn)時間和平均帶全周轉(zhuǎn)時間的方法。public void add(String processname,float arrivetime,float servetime)/添加進程并計算完成時間 B process=new B(processname,arrivetime,servetime) ; cessesn=process ; n+ ; for (int i=0;ithis.n;i+ ) this.aveturnovertime+=processesi.turnovertime ; this.aveturnovertime/=this.n ; for (int i=0;ithis.n;i+ ) this.aveweighturnovertime+=processesi.weighturnovertime ; this.aveweighturnovertime/=this.n ; 定義了一個計算進程的完成時間和周轉(zhuǎn)時間以及各個進程的開始執(zhí)行的時間的方法:public void set(int i)/計算一個進程的完成時間,周轉(zhuǎn)時間,帶權(quán)周轉(zhuǎn)時間 this.setFinish(cessesi.servetime) ; cessesi.setFinishtime(finish) ; cessesi.setTurnovertime() ; cessesi.setWeighturnovertime() ; cessesi.setFlag() ;/進程完成 this.finishnum+ ; 通過定義了一個進程的類B從而定義了一個進程的數(shù)組通過進程里的方法從而傳遞進程名到達時間服務(wù)時間并把進程的完成時間、周轉(zhuǎn)時間、帶圈周轉(zhuǎn)時間、平均周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間計算出來并且打印輸出。3.4代碼實現(xiàn)經(jīng)過前面的工作,最后在集成編輯環(huán)境中,編寫的程序代碼如下:class A class B private String processname ; private float arrivetime ; private float servetime ; private float finishtime ; private float turnovertime ; private float weighturnovertime ; private int flag=0 ; public B(String processname,float arrivetime,float servetime) cessname=processname ; this.arrivetime=arrivetime ; this.servetime=servetime ; public void setFlag() this.flag=1 ; public void setFinishtime(float finishtime) this.finishtime=finishtime ; public void setTurnovertime() this.turnovertime=this.finishtime-this.arrivetime ; public void setWeighturnovertime() this.weighturnovertime=this.turnovertime/this.servetime ; public String toString() return cessname + t + this.arrivetime+ tt + this.servetime + t + this.finishtime + tt + this.turnovertime + tt + this.weighturnovertime + n ; private B processes=new B10 ; private int n=0 ; private int finishnum=0 ; private float finish=0 ; private float aveturnovertime ; private float aveweighturnovertime ; public void setFinish(float servetime) finish+=servetime ; public void add(String processname,float arrivetime,float servetime) B process=new B(processname,arrivetime,servetime) ; cessesn=process ; n+ ; public void fun() float temp=processes0.arrivetime ; int k=0 ; for(int i=0;iprocessesi.arrivetime) temp=processesi.arrivetime ; k=i ; this.finish=temp ; this.set(k) ; while(this.finishnum!=this.n) float min=1000f ;int flag=0 ; for(int i=0;in;i+) if(cessesi.flag=0 & cessesi.servetime) min=cessesi.servetime ; k=i ; flag=1 ; if(flag=0) this.finish+ ; else this.set(k) ; for (int i=0;ithis.n;i+ ) this.aveturnovertime+=processesi.turnovertime ; this.aveturnovertime/=this.n ; for (int i=0;ithis.n;i+ ) this.aveweighturnovertime+=processesi.weighturnovertime ; this.aveweighturnovertime/=this.n ; public void set(int i) this.setFinish(cessesi.servetime) ; cessesi.setFinishtime(finish) ; cessesi.setTurnovertime() ; cessesi.setWeighturnovertime() ; cessesi.setFlag() ; this.finishnum+ ; public void print() for(int i=0;ithis.n;i+) System.out.print(cessesi) ; System.out.println(平均周轉(zhuǎn)時間: +this.aveturnovertime) ; System.out.println(平均帶權(quán)周轉(zhuǎn)時間: + this.aveweighturnovertime) ; public class FJS public static void main(String args) A a=new A() ; a.add(W,0,4) ; a.add(U,5,3) ; a.add(I,6,5) ; a.add(O,7,2) ; a.add(P,8,4) ; a.add(S,8,8) ; a.fun() ; System.out.println(進程名 到達時間 服務(wù)時間t完成時間t周轉(zhuǎn)時間t帶權(quán)周轉(zhuǎn)時間) ; a.print() ; 計算進程開始時間的方法:public void setFnish(float servetime) finish+=servetime ; 3.5程序運行程序運行時隨機輸入五個進程分別是W、U、I、O、P、S以及它們的到達時間分別為0.0、5.0、6.0、7.0、8.0、8.0服務(wù)時間為4.0、3.0、5.0、2.0、4.0、8.0完成時間為4.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)開發(fā)企業(yè)財務(wù)代理記賬及土地增值稅合同
- 礦山安全標志牌設(shè)計制作及銷售合同
- 車輛保養(yǎng)與道路救援服務(wù)合作協(xié)議
- 離婚時遺產(chǎn)繼承與財產(chǎn)分割協(xié)議書
- 茶葉拍賣會組織與委托合同
- 旅游地產(chǎn)租賃合同范本:含旅游服務(wù)配套
- 餐飲業(yè)員工勞動合同范本:職業(yè)規(guī)劃與薪酬激勵
- 膽道疾病的外科治療課件
- 生態(tài)型工業(yè)廠房買賣中介服務(wù)協(xié)議
- 互聯(lián)網(wǎng)公司財務(wù)總監(jiān)任職及股權(quán)激勵合同
- 礦井調(diào)度員考試題及答案
- 美國《GENIUS法案》:合規(guī)穩(wěn)定幣的監(jiān)管框架
- 2025至2030中國控制按鈕開關(guān)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 臨商銀行股份有限公司招聘筆試真題2024
- 2025廣東高考物理試題(大題部分)+評析
- DB31-T 1593-2025 基于自動駕駛功能的公交運營技術(shù)要求
- 醫(yī)院純水系統(tǒng)管理制度
- 2025年中考英語考前沖刺押題模擬試卷 3套(含答案)
- 鄉(xiāng)村基層工作筆試題目及答案
- CJ/T 258-2014纖維增強無規(guī)共聚聚丙烯復合管
- 2025年小升初語文復習:積累運用 專項匯編(含答案)
評論
0/150
提交評論