用c语言编写进程的四种调度算法以及主函数的调用
时间: 2024-03-21 10:41:37 浏览: 20
四种常见的进程调度算法分别是:
1. 先来先服务(FCFS)调度算法:按照进程到达的先后顺序进行调度,先到达的进程先执行,直到执行完成或者等待某种事件发生。
2. 短作业优先(SJF)调度算法:按照进程的执行时间长短进行调度,执行时间短的进程先执行。
3. 优先级调度算法:为每个进程分配一个优先级,按照优先级高低进行调度,优先级高的进程先执行。
4. 时间片轮转(RR)调度算法:将CPU时间分成若干个时间片,每个进程占用一个时间片,时间片用完后,进程被挂起,等待下次调度。
下面是一个用C语言实现时间片轮转调度算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS_NUM 10
#define TIME_SLICE 2
struct process {
int pid; // 进程ID
int burst_time; // 进程执行时间
int remain_time; // 进程剩余执行时间
int waiting_time; // 进程等待时间
};
int main()
{
int i, j, n, time_count, total_waiting_time, total_turnaround_time;
struct process p[MAX_PROCESS_NUM];
// 输入进程数和每个进程的执行时间
printf("Enter the number of processes: ");
scanf("%d", &n);
printf("Enter the burst time of each process:\n");
for (i = 0; i < n; i++) {
p[i].pid = i + 1;
scanf("%d", &p[i].burst_time);
p[i].remain_time = p[i].burst_time;
}
// 时间片轮转调度算法
time_count = 0;
while (1) {
int flag = 1;
for (i = 0; i < n; i++) {
if (p[i].remain_time > 0) {
flag = 0;
if (p[i].remain_time > TIME_SLICE) {
time_count += TIME_SLICE;
p[i].remain_time -= TIME_SLICE;
} else {
time_count += p[i].remain_time;
p[i].waiting_time = time_count - p[i].burst_time;
p[i].remain_time = 0;
}
}
}
if (flag == 1) break;
}
// 计算平均等待时间和平均周转时间
total_waiting_time = 0;
total_turnaround_time = 0;
printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < n; i++) {
int turnaround_time = p[i].burst_time + p[i].waiting_time;
printf("%d\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].burst_time, p[i].waiting_time, turnaround_time);
total_waiting_time += p[i].waiting_time;
total_turnaround_time += turnaround_time;
}
printf("Average waiting time: %.2f\n", (float)total_waiting_time / n);
printf("Average turnaround time: %.2f\n", (float)total_turnaround_time / n);
return 0;
}
```