Java 動態(tài)模擬操作系統(tǒng)進程調(diào)度算法
實驗?zāi)康?/h2>
通過對進程調(diào)度算法的模擬,進一步理解進程的基本概念,加深對進程運行狀態(tài)和進程調(diào)度過程、調(diào)度算法的理解。
設(shè)備與環(huán)境
硬件設(shè)備:PC機一臺
軟件環(huán)境:安裝Windows操作系統(tǒng),并安裝相關(guān)的程序開發(fā)環(huán)境,如C \C++\Java 等編程語言環(huán)境。
實驗內(nèi)容
實驗采用了java語言編程模擬N個進程采用動態(tài)高優(yōu)先權(quán)優(yōu)先進程調(diào)度算法。該算法就是按照優(yōu)先權(quán)的大小運行進程,如果一個時間片內(nèi)未運行完,則將優(yōu)先權(quán)數(shù)減3后再插入到鏈表中按priority的順序進行排序找到最大的priority作為下一個運行進程且在就緒隊列里面的進程priority會加1。
主模塊:

動態(tài)priority排序模塊:
用來保證頭部永遠最大

到達時間進入就緒狀態(tài)模塊:

計算周轉(zhuǎn)時間和帶權(quán)周轉(zhuǎn)時間:

實驗結(jié)果及分析
輸入的信息
初始權(quán)值都為100,needtime為還需要的時間
進程 到達時刻 服務(wù)時間
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2


以A為例:

最后結(jié)束時:

部分代碼展示?
//創(chuàng)建結(jié)構(gòu)
class PCB{
String ID;
int priority=-1;
int cputime;//服務(wù)的時間
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);}}
//將進程轉(zhuǎn)為就緒態(tài)并排序
public static void sort(PCB pcb){
PCB tmp=null;
if(ready==null){//當頭結(jié)點為空
ready=pcb;
tail=pcb;}
else {if(pcb.priority>ready.priority){//如果這個結(jié)點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;
到此這篇關(guān)于Java 動態(tài)模擬操作系統(tǒng)進程調(diào)度算法的文章就介紹到這了,更多相關(guān)Java? 操作系統(tǒng)進程調(diào)度算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot?自定義注解實現(xiàn)涉密字段脫敏
關(guān)于數(shù)據(jù)脫敏,網(wǎng)上的文章都是硬編碼規(guī)則,比如對身份證,手機號,郵件地址等固定寫法脫敏。本文在此基礎(chǔ)上,拓展動態(tài)從數(shù)據(jù)庫查出涉密關(guān)鍵字執(zhí)行脫敏操作。感興趣的同學可以參考閱讀2023-03-03
java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法
現(xiàn)在遇到一個項目,移動設(shè)備存儲數(shù)據(jù),然后一起上傳,那就出現(xiàn)了許多重復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java并發(fā)請求下數(shù)據(jù)插入重復(fù)問題的解決方法,需要的朋友可以參考下2021-11-11
關(guān)于spring中單例Bean引用原型Bean產(chǎn)生的問題及解決
這篇文章主要介紹了關(guān)于spring中單例Bean引用原型Bean產(chǎn)生的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
Java Integer.valueOf()和Integer.parseInt()的區(qū)別說明
這篇文章主要介紹了Java Integer.valueOf()和Integer.parseInt()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
java日期時間格式化@JsonFormat與@DateTimeFormat的使用
本文主要介紹了java日期時間格式化@JsonFormat與@DateTimeFormat的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08

