資源簡介
.c
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
typedef?char?string[10];??//定義string為含有10個字符元素的字符數(shù)組類型
struct?task?{
string?name;???//作業(yè)名稱*
int?arrTime;???//作業(yè)到達(dá)時間*
int?serTime;???//作業(yè)要求服務(wù)時間*
int?waiTime;???//等待時間
int?begTime;???//開始運行時間
int?finTime;???//結(jié)束運行時間
int?turTime;???//周轉(zhuǎn)時間
double?priority;??//優(yōu)先權(quán)?
int?finish;????//是否已經(jīng)完成 finish=0表示沒有完成?finish=1表示已經(jīng)完成
}JCB[10]; ???//定義JCB為包含十個結(jié)構(gòu)體的數(shù)組
void?print(int?iint?timesint?a);
int?num;??//記錄輸入的作業(yè)數(shù)量?
int?FIFO_waitTime=0;
int?HRN_waitTime=0;
void?init()//初始化
{
int?i;
FIFO_waitTime=0;
HRN_waitTime=0;
for(i=0;i {
JCB[i].begTime=0;
JCB[i].finTime=0;
JCB[i].waiTime=0;
JCB[i].turTime=0;
JCB[i].finish=0;
}
}
/***************錄入作業(yè)信息****************/???
void?input()
{
int?i;
????system(“cls“);
printf(“\n請輸入作業(yè)數(shù)量:?“);
scanf(“%d“?&num);
for(i=0;i {
printf(“\n請輸入作業(yè)?NO.%d:\n“i+1);
printf(“??作業(yè)名稱:?\t“);
scanf(“%s“JCB[i].name);
printf(“??到達(dá)時間:?\t“);
scanf(“%d“&JCB[i].arrTime);
printf(“??服務(wù)時間:?\t“);
scanf(“%d“&JCB[i].serTime);
JCB[i].priority?=?1; //初始化每個作業(yè)的優(yōu)先權(quán)都為1
JCB[i].finish?=0;
}
}
/***************************先來先服務(wù)算法***********************/
void?FIFO()
{
int?SturTime=0;
int?ij;
int?maxmax_j;
struct?task?t;
//按照到達(dá)時間排序
for(j=0;j {
max=JCB[j].arrTime;
max_j=j;
for(i=j;i {
if(JCB[i].arrTime {
max=JCB[i].arrTime;
max_j=i;
}
}
t=JCB[max_j];
JCB[max_j]=JCB[j];
JCB[j]=t;
}
for(i=0;i {
if(i==0){
JCB[i].begTime=JCB[i].arrTime;
JCB[i].waiTime=0;
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
}else{
if(JCB[i-1].finTime-JCB[i].arrTime>0){??
//表明在上一個作業(yè)被調(diào)度后,當(dāng)前作業(yè)已經(jīng)在后備隊列中了
JCB[i].waiTime=JCB[i-1].finTime-JCB[i].arrTime;
JCB[i].begTime=JCB[i-1].finTime;
}else{
JCB[i].waiTime=0;
JCB[i].begTime=JCB[i].arrTime;
}
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
}
FIFO_waitTime+=JCB[i].waiTime;
JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;
SturTime+=JCB[i].turTime;
}
for(i=0;i {
if(i==0)
print(i20);
else
print(i10);
}
printf(“等待時間總和:\t%d“FIFO_waitTime);
printf(“\t平均周轉(zhuǎn)時間:\t%d\n“SturTime/num);
}
/******************最高響應(yīng)比優(yōu)先算法*****************/
void?HRN()
{
int?pre;
int?SturTime=0;
int?current;//記錄當(dāng)前操作的作業(yè)的下標(biāo)
int?count=1ijSserviceTimeRelativeMinSerTime=INT_MAX;
double?min=INT_MINmax=INT_MAX;
int?startTime;
//第一個被調(diào)度的作業(yè)就是最先到達(dá)的那個幾個
for(i=0;i {
if(JCB[i].arrTime {
max=JCB[i].arrTime;
current=i;
}
}
for(i=0;i {
if(JC
評論
共有 條評論