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