实现进程调度算法 联系客服

发布时间 : 星期三 文章实现进程调度算法更新完毕开始阅读6d2ff4ddbb4cf7ec4afed033

实现进程调度算法

[实验目的]

通过该实验加深和提高对进程调度知识的掌握。 [实验内容及要求]

用C语言实现下列要求,并写出实验报告,报告内容包括:题目、

目的、内容和要求、程序清单、运行情况(输入、输出)、总结。

现有一批给定的进程P1、P2、P3、P4、P5,它们到达时间和要求

运行时间如下:

进程 P1 p2 p3 p4 p5 到达时间 0 1 2 3 4 运行时间 5 3 2 6 1 (1)分别输出采用短进程优先调度算法SPF、先来先服务FCFS调度算法时,各进程的周转时间、带权周转时间及平均周转时间和平均带权周转时间,比较两种算法哪个性能好。 (2)输出两种调度算法的进程完成顺序。

源程序为:

#include #include struct process {

char pname; float arrivetime; float servetime; float finishtime; float roundtime; float droundtime; float waittime; float yxq; };

struct process pro[100];

void fcfs(struct process pro[],int n); void sjf(struct process pro[],int n);

struct process *sortarrivetime(struct process pro[],int n); void print(struct process pro[],int n); void main() {

int n,i;

printf(\请输入有几个进程:\ scanf(\ for(i=0;i

fcfs(pro,n); sjf(pro,n); }

struct process *sortarrivetime(struct process pro[],int n) {

int i,j;

struct process itemp; int flag;

for(i=1;i

flag=0; for(j=0;jpro[j+1].arrivetime) { itemp=pro[j]; pro[j]=pro[j+1]; pro[j+1]=itemp; flag=1; } } if(flag==0) break; }

return pro; }

void print(struct process pro[],int n) {

int i;

float Sumroundtime=0,Sumdroundtime=0; float averoundtime,avedroundtime; for(i=0;i

averoundtime=Sumroundtime/n; avedroundtime=Sumdroundtime/n;

printf(\进程名\\t到达时间\\t服务时间\\t完成时间\\t周转时间\\t带全周转\ for(i=0;i

printf(\pro[i].servetime,pro[i].finishtime,pro[i].roundtime,pro[i].droundtime); }

printf(\平均值\\t\\t\\t\\t\\t\\t\\t%.2f\\t\\t%.2f\\n\}

void fcfs(struct process pro[],int n) {

int i;

pro=sortarrivetime(pro,n);

pro[0].finishtime=pro[0].arrivetime+pro[0].servetime; pro[0].roundtime=pro[0].finishtime-pro[0].arrivetime; pro[0].droundtime=pro[0].roundtime/pro[0].servetime;

for(i=1;i

printf(\先来先服务:\\n\\n\ print(pro,n); }

void sjf(struct process pro[],int n) {

int i;

pro=sortarrivetime(pro,n);

pro[0].finishtime=pro[0].arrivetime+pro[0].servetime; for(i=1;ipro[i-1].finishtime) { pro[i].finishtime=pro[i].arrivetime+pro[i].servetime; } else { int k=0; for(int m=i;mpro[l].servetime) {