Java 動態模擬操作系統進程調度算法
實驗目的
通過對進程調度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀態和進程調度過程、調度算法的理解。
設備與環境
硬件設備:PC機一臺
軟件環境:安裝Windows操作系統,並安裝相關的程序開發環境,如C \C++\Java 等編程語言環境。
實驗內容
實驗采用瞭java語言編程模擬N個進程采用動態高優先權優先進程調度算法。該算法就是按照優先權的大小運行進程,如果一個時間片內未運行完,則將優先權數減3後再插入到鏈表中按priority的順序進行排序找到最大的priority作為下一個運行進程且在就緒隊列裡面的進程priority會加1。
主模塊:
動態priority排序模塊:
用來保證頭部永遠最大
到達時間進入就緒狀態模塊:
計算周轉時間和帶權周轉時間:
實驗結果及分析
輸入的信息
初始權值都為100,needtime為還需要的時間
進程 到達時刻 服務時間
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2
以A為例:
最後結束時:
部分代碼展示
//創建結構
class PCB{
String ID;
int priority=-1;
int cputime;//服務的時間
int needtime;//進程還需的時間
String state="wait";
int arrivetime;
PCB next;
public PCB(String ID,int priority,int cputime,int arrivetime){
this.ID=ID;
this.priority=priority;
this.cputime=cputime;
this.arrivetime=arrivetime;
}
}
判斷是否到達,進程進入時間 for(int i=0;i<arr.size();i++){ if(h==arr.get(i).arrivetime){ Dynamic_priority.sort(arr.get(i)); arr.remove(i);}}
//將進程轉為就緒態並排序 public static void sort(PCB pcb){ PCB tmp=null; if(ready==null){//當頭結點為空 ready=pcb; tail=pcb;} else {if(pcb.priority>ready.priority){//如果這個結點priority大於頭priority pcb.next=ready; ready=pcb;} else { boolean m=false; tmp=ready;//q while (m==false){ if(tail.priority>=pcb.priority){//插入尾端 tail.next=pcb; tail=pcb; pcb.next=null; m=true; } else { if(tmp.priority>=pcb.priority&&pcb.priority>tail.priority){//逐漸遍歷插到tmp前 pcb.next=tmp.next; tmp.next=pcb; m=true; } else { tmp=tmp.next;
到此這篇關於Java 動態模擬操作系統進程調度算法的文章就介紹到這瞭,更多相關Java 操作系統進程調度算法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!