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

動(dòng)態(tài)priority排序模塊:
用來保證頭部永遠(yuǎn)最大

到達(dá)時(shí)間進(jìn)入就緒狀態(tài)模塊:

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

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


以A為例:

最后結(jié)束時(shí):

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

