最短作業優先演算法又叫做短程序優先演算法
寫此博文目的:
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完成 並不立即恢復執行,通常等到當前...