排程演算法之最短作業優先演算法

2021-08-20 07:57:36 字數 2026 閱讀 9267

最短作業優先演算法又叫做短程序優先演算法

寫此博文目的:

1.方便自己複習

2.給正在學習此演算法的人一點參考

單道(一次只能執行乙個程序)

分析:先將程序按照到達時間公升序排序,第乙個程序到達的時候不等待,直接執行,因為他是第乙個到達的程序,在他之前沒有程序在執行,當有程序到達但是有其他程序在執行的時候,到達的程序處於等待狀態,當某個正在執行的程序執行完畢的時候,需要選擇下乙個程序,依據是:處於等待狀態的程序,且執行時間最短(當有多個程序處於等待狀態的時候,選擇執行時間最短的程序,這個結束最短作業優先演算法的核心)

**如下:

#includeusing

namespace

std;

#define takein "takein"//

對應的程序狀態

#define wait "wait"

#define run "run"

#define finish "finish"

#define pnumber 5//

程序個數

typedef

struct

pcb pcb;

pcb pcbs[pnumber];

//程序陣列

int currenttime=0;//

時間int processindex=0;//

程序的編號

void createpcbs()//

程序初始化函式

printf(

"\n***********************************************\n");

}void printfpcbsinfo()//

列印所有程序的所有資訊

}void sortpcbs()//

按到達時間的公升序排序

}pcb temp=pcbs[minindex];//

交換 pcbs[minindex]=pcbs[i];

pcbs[i]=temp;

}}int selnectprocess()//}}

return result;//

返回下乙個執行的程序的編號

}int ishasprocessarrive()//

檢查在某乙個時間點有沒有程序到達

}return

result;

}void runprocess(int

pindex)

printfpcbsinfo();

//列印程序此時資訊

} processindex++;//

準備執行下乙個程序

currenttime--;//

收回乙個時刻,因為下乙個程序在此時執行

}void startprocess()//

開始程序的排程

else

if(currenttime==firstarrivetime)

else

//第乙個程序執行完畢,選擇下乙個程序

if(processindex==pnumber)//

所有程序執行完畢

break;//

跳出迴圈

} }

}int

main()

輸入文字如下:

執行結果如下:

天氣不錯。。。

實時排程演算法之最低鬆弛度優先演算法

最低鬆弛度優先即llf least laxity first 演算法 該演算法是根據任務緊急 或鬆弛 的程度,來確定任務的優先順序。任務的緊急程度愈高,為該任務所賦予的優先順序就愈高,以使之優先執行。例如,乙個任務在200ms時必須完成,而它本身所需的執行時間就有100ms,因此,排程程式必須在10...

最短作業優先演算法(不完善)

float minwaitingtime int requesttimes,int durations,int n float minwaitingtime int requesttimes,int durations,int n for i 0 iif i 0 第一次執行的時候,不用考慮作業的執行...

作業排程演算法

1.先來先服務fcfs first come first serve 是最簡單的排程演算法,按先後順序進行排程。按照作業提交或程序變為就緒狀態的先後次序,分派cpu 當前作業或程序占用cpu,直到執行完或阻塞,才出讓cpu 非搶占方式 在作業或程序喚醒後 如i o完成 並不立即恢復執行,通常等到當前...