编写C程序,模拟“最短作业优先(SJF)” 调度算法,编写以下函数,计算平均带权周转时间并返回。double sjf weighted time(int* arrival time, int* run time, int num)int ij,k,a,time; double total time=0, total wt=0, avg time, avg _wt;typedef struct int arrive; int run;int finish; int total; line; line temp,s[100];for(i=0;i< num;i++) slil.arrive= arrival timelil;s[il.run= run timeli;time=s[0].arrive;s[0].finish=s[0].run+time;s[0.total=s[0].finish-s[O].arrive;time+=s[0].run;
时间: 2024-02-25 16:56:52 浏览: 106
C++实现CPU调度算法先来先服务(FCFS),非抢占最短作业优先调度(SJF),优先级调度,时间片轮转调度(RR)并输出相应的平均等待时间和平均周转时间。
5星 · 资源好评率100%
好的,以下是模拟“最短作业优先(SJF)” 调度算法的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int arrive;
int run;
int finish;
int total;
} Job;
double sjf_weighted_time(int* arrival_time, int* run_time, int num) {
int i, j, time = 0;
double total_time = 0, total_wt = 0, avg_time, avg_wt;
Job temp, s[100];
// 初始化作业队列
for (i = 0; i < num; i++) {
s[i].arrive = arrival_time[i];
s[i].run = run_time[i];
}
// 对作业队列按照运行时间进行排序
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (s[i].run > s[j].run) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
// 计算每个作业的完成时间、周转时间和带权周转时间
for (i = 0; i < num; i++) {
s[i].finish = time + s[i].run;
s[i].total = s[i].finish - s[i].arrive;
total_time += s[i].total;
total_wt += (double)s[i].total / s[i].run;
time = s[i].finish;
}
// 计算平均周转时间和带权周转时间
avg_time = total_time / num;
avg_wt = total_wt / num;
return avg_wt;
}
int main() {
int arrival_time[] = {0, 1, 2, 3};
int run_time[] = {8, 4, 9, 5};
int num = sizeof(arrival_time) / sizeof(arrival_time[0]);
double avg_wt = sjf_weighted_time(arrival_time, run_time, num);
printf("平均带权周转时间:%.2f\n", avg_wt);
return 0;
}
```
以上代码实现了SJF调度算法,并计算了平均带权周转时间。其中,作业队列按照运行时间进行排序,然后依次计算每个作业的完成时间、周转时间和带权周转时间,最后计算平均周转时间和带权周转时间并返回。测试数据为四个作业,分别有不同的到达时间和运行时间。输出结果为:
```
平均带权周转时间:1.37
```
阅读全文