操作系统长作业优先调度算法D代码
时间: 2023-10-11 13:04:33 浏览: 43
以下是一个简单的优先级调度算法的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESSES 10
typedef struct {
int pid; // 进程ID
int priority; // 优先级
int burst_time; // 执行时间
} process_t;
int main() {
process_t processes[MAX_PROCESSES];
int num_processes, i, j;
int total_time = 0, avg_wait_time = 0, avg_turnaround_time = 0;
// 输入进程数量和信息
printf("请输入进程数量:");
scanf("%d", &num_processes);
for (i = 0; i < num_processes; i++) {
printf("请输入进程%d的信息(格式为:进程ID 优先级 执行时间):", i+1);
scanf("%d %d %d", &processes[i].pid, &processes[i].priority, &processes[i].burst_time);
}
// 按优先级排序
for (i = 0; i < num_processes-1; i++) {
for (j = i+1; j < num_processes; j++) {
if (processes[i].priority < processes[j].priority) {
// 交换两个进程的位置
process_t temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 计算等待时间和周转时间
int waiting_time = 0;
for (i = 0; i < num_processes; i++) {
// 当前进程的等待时间
waiting_time += total_time;
// 更新总等待时间和总周转时间
avg_wait_time += waiting_time;
avg_turnaround_time += total_time + processes[i].burst_time;
// 执行当前进程
total_time += processes[i].burst_time;
}
// 输出结果
printf("进程ID\t优先级\t执行时间\t等待时间\t周转时间\n");
for (i = 0; i < num_processes; i++) {
printf("%d\t%d\t%d\t%d\t%d\n",
processes[i].pid,
processes[i].priority,
processes[i].burst_time,
(i == 0) ? 0 : waiting_time,
total_time - processes[i].burst_time);
}
printf("平均等待时间:%d\n", avg_wait_time / num_processes);
printf("平均周转时间:%d\n", avg_turnaround_time / num_processes);
return 0;
}
```
这个程序中,我们首先按照进程的优先级进行排序,然后依次执行每个进程,并计算等待时间和周转时间。最后输出每个进程的信息和平均等待时间和平均周转时间。