c語言模擬短作業優先排程演算法和時間片轉輪排程演算法

2021-08-20 06:09:31 字數 2423 閱讀 5462

陣列模擬短作業,隊咧模擬時間片轉輪,注釋很清楚,就不贅述

**:

#include#include#include#include#include#include#define r "run"  //執行中 

#define f "finish" //已完成

#define w "waite" //等待中

#define t "taken" //未提交

#define max 5

struct pcb;

int currenttime;//當前時間

int finish;//已完成數量

char c; //演算法選擇

int visit[max]; //標記是否存在佇列

//建立pcb

void createpcb(struct pcb* pcb)

}/*入隊操作。*/

void enqueue(queue *q,int x)

}/*出隊操作。*/

int dequeue(queue *q)

//列印

void display(struct pcb* pcb)

if(pcb[i].cputime==pcb[i].need&&strcmp(pcb[i].status,w)==0)

} }//取就緒佇列中執行時間最短的程序下標

int shortindex(struct pcb* pcb)

} }

return temp;

}

//比較各個程序之間的到達時間,按公升序排列

void sort(struct pcb* pcb)

} struct pcb temp=pcb[i];

pcb[i]=pcb[minindex];

pcb[minindex]=temp;

}

}//短作業優先

void shortruntime(struct pcb* pcb)

else

else

pcb[index].cputime++;//已用時間片+1

statusconfirm(pcb);

};pcb[index].end=currenttime; //更新完成時間

pcb[index].turnover=pcb[index].end-pcb[index].arrive; //計算周轉時間

pcb[index].useweightturnover= pcb[index].turnover*1.0/pcb[index].need;//計算帶權周轉時間

strcpy(pcb[index].status,f);

currenttime--;

}

}display(pcb);

}//時間片轉輪法

void highpriority(struct pcb* pcb)

else

for(i=0,j=index+1;iif(!visit[j]&&strcmp(pcb[j].status,w)==0)

}index=dequeue(&lq);//取隊頭

visit[index]=0;//不存在佇列中

if(pcb[index].start==-1)

strcpy(pcb[index].status,r);//程序狀態為執行中

display(pcb);

pcb[index].cputime++;//當前程序所用cpu時間增加

if(pcb[index].cputime==pcb[index].need)

else

}

}display(pcb);

}//計算平均帶權周轉時間

float weightturnovertimecount(struct pcb* pcb)

return sum /max;

} //計算平均周轉時間

float turnovertimecount(struct pcb* pcb)

return sum /max;

}//開始程序排程

void start(struct pcb* pcb)

printf("程序名 周轉時間 帶權周轉時間\n");

for(i=0;iprintf("---------------------------------------------\n");

printf("平均周轉時間為:%.2f\n",turnovertimecount(pcb));

printf("平均帶權周轉時間為:%.2f\n", weightturnovertimecount(pcb));

}

//主函式

int main()

先來先服務和短作業優先排程演算法

先來先服務排程演算法 系統按照作業到達的先後次序來進行排程,或者說它優先考慮在系統中等待時間最長的作業,而不管該作業所需執行時間的長短,從後備作業佇列中選擇幾個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源和建立程序。然後把它放入就緒佇列。當程序排程中才有fcfs演算法時,每次排程是從就緒的...

作業系統短作業優先排程演算法

短作業優先排程演算法 sjf 是以作業的長度來計算優先順序,作業越短,優先度越高。作業的長短是作業的執行時間來衡量的。源程式c 編寫,由老師提供的參考 網上查詢 同學之間討論之後完善,非誠勿擾!includeusing namespace std struct node job 10 按服務時間排序...

程序排程 先來先服務和短程序優先排程演算法

系統中有5個程序p1,p2,p3,p4,p5如下。規定程序的優先數越小優先順序越高。試描述在採用先來先服務排程 短程序優先排程演算法時,各個程序的執行過程,並計算這5個程序的平均周轉時間。假設忽略程序的排程時間。答 先來先服務排程演算法執行過程如下 按到達先後p1,p2,p3,p4,p5依次執行 程...