您好,登錄后才能下訂單哦!
本篇內容主要講解“Java如何動態模擬操作系統進程調度算法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java如何動態模擬操作系統進程調度算法”吧!
通過對進程調度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀態和進程調度過程、調度算法的理解。
硬件設備:PC機一臺
軟件環境:安裝Windows操作系統,并安裝相關的程序開發環境,如C \C++\Java 等編程語言環境。
實驗采用了java語言編程模擬N個進程采用動態高優先權優先進程調度算法。該算法就是按照優先權的大小運行進程,如果一個時間片內未運行完,則將優先權數減3后再插入到鏈表中按priority的順序進行排序找到最大的priority作為下一個運行進程且在就緒隊列里面的進程priority會加1。
主模塊:
動態priority排序模塊:
用來保證頭部永遠最大
到達時間進入就緒狀態模塊:
計算周轉時間和帶權周轉時間:
輸入的信息
初始權值都為100,needtime為還需要的時間
進程 到達時刻 服務時間
A03
B26
C44
D65
E82
以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如何動態模擬操作系統進程調度算法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。