模拟实现下面三个进程调度算法中的任意一个: 短进程优先调度算法,用C编译
时间: 2023-12-18 21:05:14 浏览: 30
以下是短进程优先调度算法的C语言实现:
```c
#include <stdio.h>
#define MAX_PROCESS 10
struct process {
int id;
int arrival_time;
int burst_time;
int waiting_time;
int turnaround_time;
int completed;
};
void sort_processes(struct process *processes, int n) {
int i, j;
struct process temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (processes[i].burst_time > processes[j].burst_time) {
temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
}
void calculate_times(struct process *processes, int n) {
int i;
float avg_waiting_time = 0, avg_turnaround_time = 0;
int total_waiting_time = 0, total_turnaround_time = 0;
int total_completed = 0, current_time = 0;
while (total_completed < n) {
for (i = 0; i < n; i++) {
if (processes[i].arrival_time <= current_time && !processes[i].completed) {
processes[i].waiting_time = current_time - processes[i].arrival_time;
processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time;
processes[i].completed = 1;
total_completed++;
total_waiting_time += processes[i].waiting_time;
total_turnaround_time += processes[i].turnaround_time;
}
}
current_time++;
}
avg_waiting_time = (float)total_waiting_time / n;
avg_turnaround_time = (float)total_turnaround_time / n;
printf("Process ID\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].id, processes[i].arrival_time,
processes[i].burst_time, processes[i].waiting_time, processes[i].turnaround_time);
}
printf("Average Waiting Time: %f\n", avg_waiting_time);
printf("Average Turnaround Time: %f\n", avg_turnaround_time);
}
int main() {
int n, i;
struct process processes[MAX_PROCESS];
printf("Enter number of processes: ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Enter arrival time and burst time for process %d: ", i + 1);
scanf("%d %d", &processes[i].arrival_time, &processes[i].burst_time);
processes[i].id = i + 1;
processes[i].completed = 0;
}
sort_processes(processes, n);
calculate_times(processes, n);
return 0;
}
```
该程序首先让用户输入进程数和每个进程的到达时间和执行时间,然后将进程按照执行时间进行排序,并计算出每个进程的等待时间和周转时间。最后输出每个进程的详细信息以及平均等待时间和平均周转时间。