操作系統(tǒng) 時間片輪轉(zhuǎn)RR進程調(diào)度算法 java版_第1頁
操作系統(tǒng) 時間片輪轉(zhuǎn)RR進程調(diào)度算法 java版_第2頁
操作系統(tǒng) 時間片輪轉(zhuǎn)RR進程調(diào)度算法 java版_第3頁
操作系統(tǒng) 時間片輪轉(zhuǎn)RR進程調(diào)度算法 java版_第4頁
操作系統(tǒng) 時間片輪轉(zhuǎn)RR進程調(diào)度算法 java版_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗二 間片輪轉(zhuǎn)RR進程調(diào)度算法1、 實驗?zāi)康耐ㄟ^這次實驗,加深對進程概念的理解,進一步掌握進程狀態(tài)的轉(zhuǎn)變、進程調(diào)度的策略及對系統(tǒng)性能的評價方法。2、 試驗內(nèi)容問題描述:設(shè)計程序模擬進程的時間片輪轉(zhuǎn)RR調(diào)度過程。假設(shè)有n個進程分別在T1, ,Tn時刻到達系統(tǒng),它們需要的服務(wù)時間分別為S1, ,Sn。分別利用不同的時間片大小q,采用時間片輪轉(zhuǎn)RR進程調(diào)度算法進行調(diào)度,計算每個進程的完成時間、周轉(zhuǎn)時間和帶權(quán)周轉(zhuǎn)時間,并且統(tǒng)計n個進程的平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間。3、 程序要求:1)進程個數(shù)n;每個進程的到達時間T1, ,Tn和服務(wù)時間S1, ,Sn;輸入時間片大小q。2)要求時間片輪轉(zhuǎn)法RR調(diào)

2、度進程運行,計算每個進程的周轉(zhuǎn)時間和帶權(quán)周轉(zhuǎn)時間,并且計算所有進程的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間;3)輸出:要求模擬整個調(diào)度過程,輸出每個時刻的進程運行狀態(tài),如“時刻3:進程B開始運行”等等;4)輸出:要求輸出計算出來的每個進程的周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、所有進程的平均周轉(zhuǎn)時間以及帶權(quán)平均周轉(zhuǎn)時間。4、 需求分析(1) 輸入的形式和輸入值的范圍時間片真實進程數(shù)各進程的到達時間各進程的服務(wù)時間(2) 輸出的形式模擬整個調(diào)度過程、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間、所有進程的平均周轉(zhuǎn)時間以及帶權(quán)平均周轉(zhuǎn)時間。(3)測試用例 作業(yè)情況時間片進程名ABCDE平均到達時間01234服務(wù)時間43524RRq=1完成時

3、間1210181117周轉(zhuǎn)時間1291681311.6帶權(quán)周轉(zhuǎn)時間333.243.253.29RRq=4完成時間47181317周轉(zhuǎn)時間461610139.8帶權(quán)周轉(zhuǎn)時間123.253.252.895、 調(diào)試分析由于自己自編寫代碼方面與他人有一定的差距,因此在做實驗的過程中我在網(wǎng)上搜了很多相關(guān)的資料,了解實現(xiàn)該算法的原理及各部分實現(xiàn)的代碼,同時參考了幾個別人寫好的源代碼,然后自己在理解的基礎(chǔ)上不斷的根據(jù)要求修改寫程序,不過其中碰見的很多的問題。我已經(jīng)自己調(diào)了好多錯誤,在一遍遍的調(diào)試和修改中,發(fā)現(xiàn)自己的經(jīng)驗在快速增長,這個感覺真的很不錯。然而,實驗的運行結(jié)果還不是很完美,每個進程在最后一個時間片

4、的運行過程中,進程列表的更新總是修改錯誤。不過在在本次試驗中學(xué)到了不少東西,一點點的在進步。6、 測試結(jié)果輸入時間片,進程數(shù),進程到達時間,服務(wù)時間輸出輸入時間片,進程數(shù),進程到達時間,服務(wù)時間輸出7、 附錄(java)package experiment;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Scanner;public class B_RR / 聲明變量/ 時間片public static

5、int q = 0;/ 允許的最大進程數(shù)public static int MaxNum = 100;/ 真正的進程數(shù)public static int realNum;/ order數(shù)組的一個下標(biāo)public static int number;/ 當(dāng)前時間public static int NowTime;/ 各進程的達到時間public static int ArrivalTime = new intMaxNum;/ 各進程的服務(wù)時間public static int ServiceTime = new intMaxNum;/ 各進程的服務(wù)時間(用于記錄進程服務(wù)時間隨時間片輪轉(zhuǎn)減少的過程

6、)public static int PServiceTime = new intMaxNum;/ 各進程的完成時間public static int FinishTime = new intMaxNum;/ 各進程的周轉(zhuǎn)時間public static int WholeTime = new intMaxNum;/ 進程調(diào)度隊列(存放的是各個進程的數(shù)字代號,如進程A數(shù)字代號為1)public static int order = new intMaxNum;/ 各進程的帶權(quán)周轉(zhuǎn)時間public static double WeightWholeTime = new doubleMaxNum;/

7、 平均周轉(zhuǎn)時間、平均帶權(quán)周轉(zhuǎn)時間public static double AverageWT, AverageWWT;/ 周轉(zhuǎn)時間總和public static int SumWT = 0;/ 帶權(quán)周轉(zhuǎn)時間總和public static double SumWWT = 0;/ 進程是否已經(jīng)結(jié)束的標(biāo)志public static boolean Finished = new booleanMaxNum;public static Scanner stdin;public static void main(String args) throws FileNotFoundException / 從文件

8、中輸入數(shù)據(jù)BufferedInputStream in = new BufferedInputStream(new FileInputStream("./file/02");System.setIn(in);stdin = new Scanner(System.in);q = stdin.nextInt(); / 時間片qrealNum = stdin.nextInt(); / 真實進程數(shù)for (int i = 0; i < realNum; i+) / 各進程的服務(wù)時間ArrivalTimei = stdin.nextInt();for (int j = 0; j

9、 < realNum; j+) / 各進程的服務(wù)時間ServiceTimej = stdin.nextInt();PServiceTimej = ServiceTimej; /用于記錄進程服務(wù)時間隨時間片輪轉(zhuǎn)減少的過程Finishedj = false;stdin.close();int all_add = 1; /就緒隊列中的進程個數(shù)order0 = 0; /進程調(diào)度隊列(存放的是各個進程的數(shù)字代號,如進程A數(shù)字代號為1)number = 1;NowTime = 0; /現(xiàn)在時間while (order0 != 100) /order0為100,是認(rèn)為規(guī)定進程調(diào)度結(jié)束的標(biāo)志/ 調(diào)度程序

10、char w = 'A'System.out.println("時刻" + NowTime + ":進程" + (char)(w + order0) + "開始運行;");if (PServiceTimeorder0 > q) /進程還未完成PServiceTimeorder0 = PServiceTimeorder0 - q; /對應(yīng)的進程的服務(wù)時間減去一個時間片NowTime += q; /現(xiàn)在時刻增加一個時間片System.out.println("時刻" + NowTime + &qu

11、ot;:進程" + (char)(w + order0) + "停止運行,加入就緒序列尾;"); else /進程剩一個時間片后結(jié)束NowTime += PServiceTimeorder0; /現(xiàn)在時間增加一個時間片PServiceTimeorder0 = 0; /對應(yīng)進程的服務(wù)時間歸零System.out.println("時刻" + NowTime + ":進程" + (char)(w + order0) + "運行結(jié)束;");FinishTimeorder0 = NowTime;WholeTime

12、order0 = NowTime - ArrivalTimeorder0;WeightWholeTimeorder0 = 1.0 * WholeTimeorder0 / ServiceTimeorder0;/ 將到達的程序加入序列尾if (all_add < realNum) for (int i = 1; i < realNum; i+) if (NowTime >= ArrivalTimei && Finishedi = false) /判斷該進程是否已經(jīng)在就緒隊列中ordernumber+ = i;all_add+; Finishedi = true;/

13、 將序列首程序調(diào)到序列尾int temp = order0;for (int i = 0; i < number - 1; i+) /將order中的每個數(shù)前移一位orderi = orderi + 1;if (PServiceTimetemp = 0) /進程已將全部調(diào)度結(jié)束,通過將order的第一個數(shù)標(biāo)記為100,來結(jié)束進程調(diào)度order-number = 100; else /進程還未調(diào)度結(jié)束ordernumber - 1 = temp;double all = 0, all1 = 0;for (int i = 0; i < realNum; i+) / 計算總周轉(zhuǎn)時間和總帶權(quán)周轉(zhuǎn)時間all += WholeTimei;all1 += WeightWholeTimei;System.out.println("n進程名t到達時間t服務(wù)時間t完成時間t周轉(zhuǎn)時間t帶權(quán)周轉(zhuǎn)時間");for (int i = 0; i < realNum; i+) System.out.println(char)(i + 'A') + "t" + ArrivalTimei + "t"+ ServiceTimei + "t" + FinishTimei + &quo

溫馨提示

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

評論

0/150

提交評論