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!

推薦閱讀: