用C语言写一个进程调度算法,包括先来先服务,短进程优先和最高响应级优先算法。三个算法汇总,如果选择算法一的话,就是先来先服务算法,算法二的话就是短进程优先算法,算法三的话就是最高响应算法。
时间: 2023-11-10 15:31:04 浏览: 102
好的,我可以为您介绍一下这三种进程调度算法的实现方法。
1. 先来先服务算法(FCFS)
这是最简单的一种进程调度算法,它按照进程到达的顺序进行调度,即先到达的进程先执行,后到达的进程后执行。实现方法如下:
```c
void fcfs()
{
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < p[i].bt; j++) {
printf("Process %d is executing\n", p[i].pid);
}
}
}
```
2. 短进程优先算法(SJF)
这种算法是基于每个进程的执行时间来进行排序的,执行时间短的进程会先被调度。实现方法如下:
```c
void sjf()
{
int i, j, min;
for (i = 0; i < n; i++) {
min = i;
for (j = i+1; j < n; j++) {
if (p[j].bt < p[min].bt) {
min = j;
}
}
if (min != i) {
swap(&p[i], &p[min]);
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < p[i].bt; j++) {
printf("Process %d is executing\n", p[i].pid);
}
}
}
```
3. 最高响应比优先算法(HRRN)
这种算法是基于每个进程的响应比来进行排序的,响应比越高的进程会先被调度。实现方法如下:
```c
void hrrn()
{
int i, j, max;
float rr, max_rr;
for (i = 0; i < n; i++) {
max_rr = INT_MIN;
max = -1;
for (j = 0; j < n; j++) {
if (p[j].rt > 0) {
rr = (p[j].wt + p[j].bt) / (float)p[j].bt;
if (rr > max_rr) {
max_rr = rr;
max = j;
}
}
}
if (max == -1) {
break;
}
for (j = 0; j < p[max].bt; j++) {
printf("Process %d is executing\n", p[max].pid);
}
p[max].rt = 0;
}
}
```
以上就是三种进程调度算法的实现方法,您可以根据需要选择其中一种进行调度。
阅读全文