1423.處理機調度模擬程序-操作系統(tǒng)課程設計_第1頁
1423.處理機調度模擬程序-操作系統(tǒng)課程設計_第2頁
1423.處理機調度模擬程序-操作系統(tǒng)課程設計_第3頁
1423.處理機調度模擬程序-操作系統(tǒng)課程設計_第4頁
1423.處理機調度模擬程序-操作系統(tǒng)課程設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

VIP免費下載

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

文檔簡介

.設計題目處理機調度模擬程序選擇一個調度算法,實現(xiàn)處理機調度、設計要求度算法采用最高優(yōu)先數(shù)優(yōu)先的調度算法(即把處理機分配給優(yōu)先數(shù)最高的進程)和先來先服務算法。每個進程有一個進程控制塊(PCB)表示。進程控制塊可以包含如下信息:進程名、優(yōu)先數(shù)、到達時間、需要運行時間、已用CPL間、進程狀態(tài)等等。數(shù)產(chǎn)生)。進程的到達時間為輸入進程的時間。進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒W(Wait)、運行R(Rur)、或完成F(Finish)三種狀態(tài)之一。就緒進程獲得CP后都只能運行一個時間片,用已占用CP時間加來表示。如果運行一個時間片后,進程的已占用 CP時間已達到所需要的運行時間,則撤消該進程,如果運行一個時間片后進程的已占用CP時間還未達所需要的運行時間,也就是進程還需要繼續(xù)運行,此時應將進程的優(yōu)先數(shù)減1(即降低一級),然后把它插入就緒隊列等待CP每進行一次調度程序都打印一次運行進程、就緒隊列、以及各個進程的PCB,以便進行檢查。重復以上過程,直到所要進程都完成為止1?進程調度算法包括:時間片輪轉法,短作業(yè)優(yōu)先算法,動級算法。

可選擇進程數(shù)量本程序包括三種算法,執(zhí)行時在主界面選擇算法(可用函現(xiàn)),進入子頁面后輸入進程數(shù),(運行時間,優(yōu)先數(shù)由隨機函數(shù)產(chǎn)生),執(zhí)行,顯示結果。三.設計目的在多道程序和多任務系統(tǒng)中,系統(tǒng)內同時處于若干個。也就是說能運行的進程數(shù)大于處理機個數(shù)。為

21進程占用處理機。要求學生設計一個模擬處理機調度算法,以鞏固和加深處理機調度的概念。四.設計分析1、實現(xiàn)原理首先,編寫一個進程調度類Main_PCB,一個進程信PCB_bloc以創(chuàng)建進程控制塊(PCB優(yōu)先數(shù)、到達時間、需要運行時間、已用CP時間、進程狀態(tài)等等。 對應成員變量是 pcb_Name;pcb_ID;intpcb_Pro;PCB_Begintime();pcb_Needtime;pcb_Spendtime;pcb_Finishtime;String pcb_Statue;成員方法是pcb_Work();可以實例化多個包含相同信息的進程,一個線程類Work允許多個進程共行的進程調度創(chuàng)建各自的模擬任務,由

process_Create(intProcess_ProcessNum)方法實現(xiàn)創(chuàng)建Process_ProcessNum個進程。接著,編寫進程調度算法(1)最高優(yōu)先數(shù)優(yōu)先的調度算法HIGH_method()理機分配給優(yōu)先數(shù)最高的進程);(2)先來先服務算法FIFS_method()。以上,兩個方法都是Main_PC的成員方法,由Main_PC勺主調函數(shù)

main()調用call()方法進行調用。進程的優(yōu)先數(shù)及需要的運行時間這里由由隨機數(shù)產(chǎn)生。進程的到達時間為創(chuàng)建進程的時間。進程的運行時間以時間片為單位進行計算。每個進程的狀態(tài)可以是就緒W(Wait)、運行R(Run)、或完成F

(Finish)三種狀態(tài)之一。這里采用線程的睡眠sleep()方法實現(xiàn),最后通過進程的開始時間、執(zhí)行時間和結束時間,觀察進程的執(zhí)行過程。2、程序執(zhí)行過程(1)開始執(zhí)行Main_PC主調方法main();22(2)調用方法process_Create(ProcessNum)創(chuàng)建ProcessNum個進程 一

調用call(method)方法;(a)如果method=執(zhí)行FIFS_method()創(chuàng)建進程的個子作業(yè)線程;(b)如果method=執(zhí)行HIGH_method()法,接著執(zhí)行創(chuàng)建進程的個子作業(yè)線程(3)輸出程序執(zhí)行的開始,和結束時間。

4Main_PCBpcb_Begintimepcb_Finishtimepcb_IDVariableprocessIDProcessNumTimePcb_QueexcuteQueueprocessNamePCB_block+main()+call()+HIGH_method()+FIFS_method()+process_Create()+printSign()5、實現(xiàn)用到的數(shù)據(jù)結構pcb_Namepcb_Needtimepcb_Needtimepcb_Needtimepcb_Needtime+pcb_Work()根據(jù)類圖可以分析出所采用的數(shù)據(jù)結構有:(1)隊列主要完成FIFS_method()算法,進程的先來先服務;Process。 Processl ProcessN(2)堆棧主要完成方法的調用時,先調用的后執(zhí);24

FIFS_method()call()main()(3)數(shù)組采用鏈主要用來記錄進程創(chuàng)建時的信息,為以后觀察其創(chuàng)建的初值過程和執(zhí)行結果采用鏈表數(shù)組的好處是可以實現(xiàn)數(shù)組的長度動態(tài)變化五.程序代Main_PCB如:packagePCB_con;importjava.Iang.*;importjava.Iang.Object;importjava.io.*;importjava.util.*;publicclassMain_PCB{publicstaticintvariable;25publicstaticintprocessID;publicstaticintProcessNum=5;publicstaticDateTime=newDate();publicstaticPCB_block[]Pcb_Que=newPCB_block[ProcessNum];publicstaticintexcuteQueue[]=newint[Pcb_Que.length];//publicstaticint[]sort=newint[ProcessNum];publicstaticString[]processName=newString[ProcessNum];

publicstaticint[]processld=newint[ProcessNum];publicstaticint[]processPro=newint[ProcessNum];publicstaticint[][]processBt=newint[2][ProcessNum];publicstaticint[]processSpt=newint[ProcessNum];publicstaticint[]processNt=newint[ProcessNum];publicstaticint[]processFt=newint[ProcessNum];publicstaticString[]processSta=newString[ProcessNum];publicstaticWork[]processWk=newWork[ProcessNum];//主調方法publicstaticvoidmain(String[]args){//intProcessNum=Integer.parselnt(args[0]);〃命令行輸入創(chuàng)建進程的個數(shù);//intcallMethod=Integer.parseInt(args[0]);〃命令行輸入調用的算FIF值為或優(yōu)先級值為2;printSign();System.out.println(”創(chuàng)建的進程數(shù)量是System.out.println();

process_Create(ProcessNum);

call(1);call(2);}//call方法staticvoidcall(intcallmeth){if(callmeth==1)FIFS_method();elseif(callmeth==2)HIGH_method();elseSystem.out.println(”沒有進程的調度算法被執(zhí)行 }〃最高優(yōu)先數(shù)優(yōu)先調publicstaticvoidHIGH_method(){26System.out.println();System.out.println();System.out.println(”------------------------------------------------------------------------

--------System.out.println(”--------最高優(yōu)先數(shù)算法被調

--------System.out.println(”System.out.println(”------------------------------------System.out.println(”公共變量的初值是int[]sort=newint[ProcessNum];

for(inti=0;i<sort」ength;i++){sort[i]=processPro[i];

}for(inti=0;i<sort」ength;i++){inttemp;for(intj=0;j<sort.length-1;j++){if(sort[j]<sort[j+1]){temp=sort[j];sort[j]=sort[j+1];sort[j+1]=temp;}}}}System.out.println(”for(inti=0;i<sort.length;i++){System.out.println(sort[i]);}System.out.println();

System.out.println(”進程被執(zhí)行的順序為 ”);for(inti=0;i<sort.length;i++){intj=0;

while(sort[i]!=processPro[j]){if(jvprocessPro.length-1)j++;}intsleeptime=(int)(Math.random()*10000);processWk[j].workMethod(j,sleeptime);

〃processWk[i].run();System.out.println(”公共變量的當前值是}}//先來先服務調度方27

publicstaticvoidFIFS_method(){System.out.println();

-------------------------------------);System.out.println(”

-------------------------------------);System.out.println(”---------先來先服務算法被調--------------System.out.println(”--------------------------------------System.out.println(”--------------------------------------);processID=i;-------------------------------------);System.out.println(”進程被執(zhí)行的順序為”);for(inti=0;i<excuteQueue.length;i++){intj=0;while(excuteQueue[i]!=processld[j]){if(j<processId.length-1)j++;}執(zhí)行processWk[j].workMethod(j);}}〃輸出標志staticvoidprintSign(){11********************************************”System.out.println();}

//進程創(chuàng)建方System.out.println();Process11**************************************);System.out.println();staticvoidprocess_Create(intProcess_ProcessNum){PCB_block[]Pcb_Que=newPCB_block[Process_ProcessNum];intproID[]=newint[Pcb_Que.length];System.out.println(”----------進程剛被創(chuàng)建是的信息如下:System.out.println();for(inti=0;i<Pcb_Que.length;i++){PCB_blockProcess=newPCB_block();

processID=i;Process.pcb_ID=10*i;Process.pcb_Pro=(int)(Math.random()*100);Process.pcb_Needtime=(int)(Math.random()*1000);28Process.pcb_Spendtime=0;Process.pcb_Begintime.minute=Time.getMinutes();Process.pcb_Begintime.secend=Time.getSeconds();Process.pcb_Statue

processName[i]=Process.pcb_Name;processPro[i]=Process.pcb_Pro;processId[i]=Process.pcb_ID;processSpt[i]=Process.pcb_Spendtime;processNt[i]=Process.pcb_Needtime;processSta[i]=Process.pcb_Statue;processWk[i]=Process.pcb_Work;processBt[0][i]=Process.pcb_Begintime.minute;processBt[1][i]=Process.pcb_Begintime.secend;

Pcb_Que[i]=Process;System.out.println(” 剛創(chuàng)建時的信息System.out.println();

System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println(”System.out.println();proID[i]=Pcb_Que[i].pcb_ID;}excuteQueue=proID;

}//被創(chuàng)建進程的存貯數(shù)publicstaticvoidstore_ProcessInfoArray(){}}〃進程信息類classPCB_block{30Stringpcb_Name;

intpcb_ID;intpcb_Pro;PCB_Begintimepcb_Begintime=newPCB_Begintime();intpcb_Needtime;intpcb_Spendtime;intpcb_Finishtime;Stringpcb_Statue;Workpcb_Work=newWork();}

〃進程工作的線程classWorkextendsThread{publicvoidrun(){}publicstaticvoidmain(String[]args){intvar=0;Workp=newWork();

System.out.println();〃p.workMethod();p.workMethod(var);}voidworkMethod(){}voidworkMethod(intsletim){

try{sleep(sletim);}catch(Exceptione){System.out.println(e.toString());}}voidworkMethod(intid,intsletim){}}classPCB_Begintime{intminute;intsecend;}31

先來先服務調度方法publicstaticvoidFIFS_method(){System.out.println();System.out.println(”--------------------------------------

-------------------------------------);System.out.println(”---------先來先服務算法被調System.out.println(”---------------------------------------------------------------------------);System.out.println(”進程被執(zhí)行的順序為”);for(inti=0;i<excuteQueue」ength;i++){intj=0;while(excuteQueue[i]!=processld[j]){if(j<processId」ength-1)j++;}執(zhí)行processWk[j].workMethod(j);}}//輸出標staticvoidprintSign(){System.out.println();Process);););System.out.println(System.out.println(System.out.println();System.out.println();}Process.pcb_Work=newProMeth();

//記錄進程的信息到數(shù)processName[i]=Process.pcb_Name;processPro[i]=Process.pcb_Pro;processId[i]=Process.pcb_ID;processSpt[i]=Process.pcb_Spendtime;processNt[i]=Process.pcb_Needtime;processSta[i]=Process.pcb_Statue;processWk[i]=Process.pcb_Work;processBt[0][i]=Process.pcb_Begintime.minute;32

processBt[1][i]=Process.pcb_Begintime.secend;Pcb_Que[i]=Process;System.out.println(” 岡U倉U建時的信System.out.println();System.out.println(”

p.workMethod(var);}voidworkMethod(){}voidworkMethod(intsletim){

try{sleep(sletim);}catch(Exceptione){System.out.println(e.toString());}}voidworkMethod(intid,intsletim){}}//時間的分和時classPCB_Begintime{

intminute;intsecend;}部分程序代碼:packagePCB_con;importjava.lang.*;

importjava.lang.Object;importjava.io.*;

importjava.util.*;publicclassMain_PCB{publicstaticintvariable;34publicstaticintprocessID;publicstaticintProcessNum=5;publicstaticDateTime=newDate();publicstaticPCB_block[]Pcb_Que=newPCB_block[ProcessNum];publicstaticintexcuteQueue[]=newint[Pcb_Que」ength];//publicstaticint[]sort=newint[ProcessNum];

//被創(chuàng)建進程的存貯數(shù)publicstaticString[]processName=newString[ProcessNum];publicstaticint[]processld=newint[ProcessNum];publicstaticint[]processPro=newint[ProcessNum];publicstaticint[][]processBt=newint[2][ProcessNum];publicstaticint[]processSpt=newint[ProcessNum];publicstaticint[]processNt=newint[ProcessNum];

publicstaticint[]processFt=newint[ProcessNum];publicstaticString[]processSta=newString[ProcessNum];

publicstaticWork[]processWk=newWork[ProcessNum];//主調方publicstaticvoidmain(String[]args){//intProcessNum=Integer.parselnt(args[0]);〃命令行輸入創(chuàng)建進程的個數(shù);//intcallMethod=Integer.parselnt(args[0]);〃命令行輸入調用的算法FIFS值為或優(yōu)先級值為2;printSign();System.out.println(”創(chuàng)建的進程數(shù)量是System.out.println();

process_Create(ProcessNum);

call(1);call(2);}//call方法staticvoidcall(intcallmeth){if(callmeth==1)FIFS_method();elseif(callmeth==2)HIGH_method();elseSystem.out.println(”沒有進程的調度算法被執(zhí)行 ?。粆//最高優(yōu)先數(shù)優(yōu)先調publicstaticvoidHIGH_method(){35System.out.println();System.out.println(”-

-------System.out.println(”--------最高優(yōu)先數(shù)算法被調

-------System.out.println(”-公共變量的初值是:System.out.println(”公共變量的初值是:公共變量的初值是:int[]sort=newint[ProcessNum];for(inti=0;i<sort」ength;i++){sort[i]=processPro[i];}for(inti=0;i<sort.length;i++){inttemp;for(intj=0;j<sort.length-1;j++){if(sort[j]<sort[j+1]){temp=sort[j];sort[j]=sort[j+1];sort[j+1]=temp;

}}}System.out.println(”System.out.println(”for(inti=0;i<sort.length;i++){System.out.println(sort[i]);}System.out.println();

System.out.println(”進程被執(zhí)行的順序為 ”);for(inti=0;i<sort.length;i++){intj=0;while(sort[i]!=processPro[j]){if(jvprocessPro.length-1)j++;}processID=i;processID=i;intsleeptime=(int)(Math.random()*10000);processWk[j].workMethod(j,sleeptime);

〃processWk[i].run();System.out.println(”公共變量的當前值是}}36進程創(chuàng)建方法staticvoidprocess_Create(intProcess_ProcessNum){PCB_block[]Pcb_Que=newPCB_block[Process_ProcessNum];intproID[]=newint[Pcb_Que.length];System.out.println(”------------進程剛被創(chuàng)建是的信息如下-------System.out.println();for(inti=0;i<Pcb_Que.length;i++){PCB_blockProcess=newPCB_block();processID=i;Process.pcb_ID=10*i;Process.pcb_Pro=(int)(Math.random()*100);Process.pcb_Needtime=(int)(Math.random()*1000);Process.pcb_Spendtime=0;Process.pcb_Begintime.minute=Time.getMinutes();Process.pcb_Begi

六、執(zhí)行結果和結果分析**************************************************Process**************************************************創(chuàng)建的進程數(shù)量是:5------進程剛被創(chuàng)建是的信息如下:-------###Process0剛創(chuàng)建時的信息PCB###Name::process0createTime::ThuDec1515:41:14CST2005ID::0 Needtime::164Pro::9Spendtime::0

currentstatus::Wait###Process1剛創(chuàng)建時的信息PCB###Name::process1createTime::ThuDec1515:41:14CST2005ID::1038Needtime::636 Pro::11 Spendtime::0 currentstatus::Wait###Process2剛創(chuàng)建時的信息PCB###Name::process2createTime::ThuDec1515:41:14CST2005ID::20 Needtime::319Pro::53Spendtime::0currentstatus::Wait

溫馨提示

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

最新文檔

評論

0/150

提交評論