任务1:在linux系统中,使用vim或者sublime_text编辑器,编写FCFS算法的程序代码,并实现以下功能: 1)输出选择作业的次序; 2)计算并输出平均作业周转时间; 3)计算并输出平均带权周转时间。(用c语言写出代码,带有提交时刻,估计运行时间)
时间: 2024-12-23 14:14:30 浏览: 49
在Linux系统中,使用Vim或Sublime Text编辑器编写FCFS(First-Come-First-Served,先到先服务)算法的C语言程序可以按照以下步骤进行:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体表示作业
typedef struct {
int jobId; // 作业ID
float submitTime; // 提交时间
float burstTime; // 运行时间
} Job;
// 比较函数用于FCFS排序
int compareJobs(Job *a, Job *b) {
return a->submitTime - b->submitTime;
}
void printOrder(Job jobs[], int n) {
printf("按提交时间顺序执行的作业序列:\n");
for (int i = 0; i < n; i++) {
printf("%d ", jobs[i].jobId);
}
printf("\n");
}
float calculateTurnaroundTime(Job jobs[], int n) {
float totalTurnaround = 0;
for (int i = 0; i < n; i++) {
totalTurnaround += jobs[i].burstTime + (i == 0 ? 0 : jobs[i-1].finishTime);
}
return totalTurnaround / n;
}
float calculateAverageTurnaroundTime(Job jobs[], int n) {
return calculateTurnaroundTime(jobs, n);
}
float calculateWeightedTurnaroundTime(Job jobs[], int n) {
float weightedTotal = 0;
for (int i = 0; i < n; i++) {
weightedTotal += jobs[i].burstTime * (jobs[i].burstTime + (i == 0 ? 0 : jobs[i-1].finishTime));
}
return weightedTotal / n;
}
int main() {
Job jobs[5]; // 假设有5个作业
int n = sizeof(jobs) / sizeof(jobs[0]);
// 填充作业数据
jobs[0] = {1, 0, 4};
jobs[1] = {2, 2, 3};
jobs[2] = {3, 4, 2};
jobs[3] = {4, 6, 1};
jobs[4] = {5, 8, 5};
qsort(jobs, n, sizeof(Job), compareJobs);
printOrder(jobs, n);
float avgTurnaround = calculateAverageTurnaroundTime(jobs, n);
printf("平均作业周转时间: %.2f\n", avgTurnaround);
float weightedAvgTurnaround = calculateWeightedTurnaroundTime(jobs, n);
printf("平均带权周转时间: %.2f\n", weightedAvgTurnaround);
return 0;
}
```
在上述代码中,我们首先定义了一个Job结构体,包含了作业ID、提交时间和运行时间。然后实现了排序、打印顺序、周转时间和带权周转时间的计算方法。在main函数中,创建了几个作业示例并应用FCFS算法。
注意:这只是一个基础版本的FCFS算法程序,实际使用时可以根据需求修改数组大小和作业数据。此外,提交时刻(finishTime)在这个例子中假设每个作业都是立即开始执行的,实际场景下需要考虑调度延迟。这个代码没有处理用户输入,如果你需要从命令行读取作业信息,还需要增加相应的输入部分。在运行前,请确保已经安装好必要的编译器环境(如gcc)。你可以使用`gcc program.c -o fcfs`编译,然后通过`./fcfs`运行程序。
阅读全文