调度算法C语言实现

  • 格式:docx
  • 大小:37.48 KB
  • 文档页数:7

调度算法C语言实现

调度算法是操作系统中的重要内容之一,它决定了进程在系统中的运行方式和顺序。本文将介绍两种常见的调度算法,先来先服务(FCFS)和最短作业优先(SJF),并用C语言实现它们。

一、先来先服务(FCFS)调度算法

先来先服务(FCFS)调度算法是最简单的调度算法之一、它按照进程到达的先后顺序进行调度,即谁先到达就先执行。实现这个算法的关键是记录进程到达的顺序和每个进程的执行时间。

下面是一个用C语言实现先来先服务调度算法的示例程序:

```c

#include

//进程控制块结构体

typedef struct

int pid; // 进程ID

int arrivalTime; // 到达时间

int burstTime; // 执行时间

} Process;

int mai

int n; // 进程数量

printf("请输入进程数量:"); scanf("%d", &n);

//输入每个进程的到达时间和执行时间

Process process[n];

for (int i = 0; i < n; i++)

printf("请输入进程 %d 的到达时间和执行时间:", i);

scanf("%d%d", &process[i].arrivalTime,

&process[i].burstTime);

process[i].pid = i;

}

//根据到达时间排序进程

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if (process[i].arrivalTime > process[j].arrivalTime)

Process temp = process[i];

process[i] = process[j];

process[j] = temp;

}

}

} //计算平均等待时间和平均周转时间

float totalWaitingTime = 0; // 总等待时间

float totalTurnaroundTime = 0; // 总周转时间

int currentTime = 0; // 当前时间

for (int i = 0; i < n; i++)

if (currentTime < process[i].arrivalTime)

currentTime = process[i].arrivalTime;

}

totalWaitingTime += currentTime - process[i].arrivalTime;

totalTurnaroundTime += (currentTime + process[i].burstTime)

- process[i].arrivalTime;

currentTime += process[i].burstTime;

}

//输出结果

float avgWaitingTime = totalWaitingTime / n;

float avgTurnaroundTime = totalTurnaroundTime / n;

printf("平均等待时间:%f\n", avgWaitingTime);

printf("平均周转时间:%f\n", avgTurnaroundTime);

return 0; ```

以上程序实现了先来先服务(FCFS)调度算法,首先根据进程的到达时间排序,然后依次执行每个进程,并计算总等待时间和总周转时间。最后根据总等待时间和总周转时间计算平均等待时间和平均周转时间,输出结果。

二、最短作业优先(SJF)调度算法

最短作业优先(SJF)调度算法是按照进程的执行时间进行排序,执行时间越短的进程越优先执行。实现这个算法的关键是记录进程的执行时间。

下面是一个用C语言实现最短作业优先调度算法的示例程序:

```c

#include

//进程控制块结构体

typedef struct

int pid; // 进程ID

int arrivalTime; // 到达时间

int burstTime; // 执行时间

} Process;

int mai

int n; // 进程数量 printf("请输入进程数量:");

scanf("%d", &n);

//输入每个进程的到达时间和执行时间

Process process[n];

for (int i = 0; i < n; i++)

printf("请输入进程 %d 的到达时间和执行时间:", i);

scanf("%d%d", &process[i].arrivalTime,

&process[i].burstTime);

process[i].pid = i;

}

//根据执行时间排序进程

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if (process[i].burstTime > process[j].burstTime)

Process temp = process[i];

process[i] = process[j];

process[j] = temp;

}

} }

//计算平均等待时间和平均周转时间

float totalWaitingTime = 0; // 总等待时间

float totalTurnaroundTime = 0; // 总周转时间

int currentTime = 0; // 当前时间

for (int i = 0; i < n; i++)

if (currentTime < process[i].arrivalTime)

currentTime = process[i].arrivalTime;

}

totalWaitingTime += currentTime - process[i].arrivalTime;

totalTurnaroundTime += (currentTime + process[i].burstTime)

- process[i].arrivalTime;

currentTime += process[i].burstTime;

}

//输出结果

float avgWaitingTime = totalWaitingTime / n;

float avgTurnaroundTime = totalTurnaroundTime / n;

printf("平均等待时间:%f\n", avgWaitingTime);

printf("平均周转时间:%f\n", avgTurnaroundTime); return 0;

```

以上程序实现了最短作业优先(SJF)调度算法,首先根据进程的执行时间排序,然后依次执行每个进程,并计算总等待时间和总周转时间。最后根据总等待时间和总周转时间计算平均等待时间和平均周转时间,输出结果。

总结:

以上是先来先服务(FCFS)和最短作业优先(SJF)调度算法在C语言中的实现代码。调度算法是操作系统中非常重要的概念,对于提高系统的性能和效率有着重要的作用。通过实现调度算法的示例程序,可以更好地理解和掌握调度算法的原理和实现方式。