資源簡介
《操作系統》第四版,最高響應比算法實現作業調度,作業信息可以自行輸入,輸出作業號,到達時間,運行時間,完成時間,等等,輸出平均周轉時間,帶權周轉時間,調度順序,
代碼片段和文件信息
#?include?
#?include?
#?include?
#define?WAIT?“Wait“//就緒狀態?
#define?RUN?“Run“//運行狀態?
#define?FINISH?“Finish“//完成狀態?
#define?JOBNUMBER?20?//設置最大進程測試數為20???
struct?JCB?{
char?jobName[10];//作業名?
int?arriveTime;//到達時間?
int?runTime;//需要運行時間?
int?startTime;//開始時間?
int?endTime;//完成時間?
int?turnoverTime;//周轉時間?
float?useWeightTurnoverTime;//帶權周轉時間
char?processStatus[10];//進程狀態?
};
static?int?currentTime?=?0;//當前時間?
static?int?finishNumber?=?0;//進程完成數量?
char?JobArray[JOBNUMBER][10];//存放數組名信息的二元數組?
float?priority[JOBNUMBER];//存放進程優先級的一元數組?
int?num=0;//用戶創建進程個數
void?loop(struct?JCB*?jcb?int?i);
//創建作業函數
void?createJCB(struct?JCB*?jcb)?{
printf(“請用戶輸入想要創建的進程個數:“);
scanf_s(“%d“?&?num);
if?(num?>?JOBNUMBER)
printf(“進程個數超過最大進程數!\n“);
else?{
for?(int?i?=?0;?i? printf(“請用戶依次輸入第%d的作業的作業號?到達時間?需要運行時間\n“i+1);
scanf_s(“%s“?&jcb[i].jobName?sizeof(jcb[i].jobName));//作業號?
scanf_s(“%d“?&jcb[i].arriveTime);//到達時間?
scanf_s(“%d“?&jcb[i].runTime);//需要運行時間?
jcb[i].startTime?=?0;//作業開始時間初始化為0
jcb[i].endTime?=?0;//作業結束時間初始化為0
jcb[i].turnoverTime?=?0;//作業周轉時間初始化為0
jcb[i].useWeightTurnoverTime?=?0.0;//作業帶權周轉時間初始化為0
strcpy_s(jcb[i].processStatus?WAIT);//作業狀態初始化為等待
}
}
printf(“---------------------------------------------\n“);
}
//將所有作業打印輸出
void?printJob(struct?JCB*?jcb)?{
printf(“當前時間為%d\n“?currentTime);
printf(“作業號?到達時間?需要運行時間?開始時間?完成時間?周轉時間?帶權周轉時間?進程狀態\n“);
for?(int?i?=?0;?i? if?(strcmp(jcb[i].processStatus?FINISH)?==?0)//如果進程為finish狀態
printf(“%s\t%d\t%4d\t\t%d\t%d\t??%d\t??%.2f\t??%s\n“?jcb[i].jobName?jcb[i].arriveTime?jcb[i].runTime?jcb[i].startTime?jcb[i].endTime?jcb[i].turnoverTime?jcb[i].useWeightTurnoverTime?jcb[i].processStatus);
else?if?(strcmp(jcb[i].processStatus?RUN)?==?0)//如果進程為run狀態
printf(“%s\t%d\t%4d\t\t%d\t運行中\t??none\t??none????%s\n“?jcb[i].jobName?jcb[i].arriveTime?jcb[i].runTime?jcb[i].startTime?jcb[i].processStatus);
else?//如果進程為wait狀態
printf(“%s\t%d\t%4d\t\t未運行\tnone\t??none\t??none????%s\n“?jcb[i].jobName?jcb[i].arriveTime?jcb[i].runTime?jcb[i].processStatus);
}
printf(“---------------------------------------------\n“);
}
//計算平均帶權周轉時間?
float?weightTurnoverTimeCount(struct?JCB*?jcb)?{
float?sum?=?0.0;//所有作業的帶權周轉時間之和
for?(int?i?=?0;?i? sum?+=?jcb[i].useWeightTurnoverTime;
return?sum?/?num;//平均帶權周轉時間=所有帶權周轉時間之和/總的作業數目?
}
//計算平均周轉時間?
float?turnOverTimeCount(struct?JCB*?jcb)?{
float?sum?=?0.0;//所有作業的周轉時間之和
for?(int?i?=?0;?i? sum?+=?jcb[i].turnoverTime;
return?sum?/?num;//平均周轉時間=所有周轉時間之和/總的作業數目?
}
//比較各個進程之間的到達時間按升序排列?,用戶創建好作業以后,需要按照作業到達的先后順序排序
void?compare(struct?JCB*?jcb)?
{
struct?JCB?temp;
for?(int?i?=?0;?i? {
int?min?=?jcb[i].arriveTime?minIndex?=?i;//將當前作業的到達時間默認為最早的,依次和后面的作業相比較
for?(int?j?=?i?+?1;?j? {
if?(jcb[j].arriveTime?
- 上一篇:分治法—最近點對.cpp
- 下一篇:C++基礎入門.md
評論
共有 條評論