c - 如何在C中首先应用抢占式最短作业算法
问题描述
我正在尝试在 C 中实现不同的 OS 调度算法。我已经实现了 FCFS 和非抢占式最短作业优先调度,但是,对于抢占式 SJF 将发生的循环,我遇到了困难。这是我的文本文件的示例。
Process Arrival Burst
1 0 7
2 2 4
3 4 1
4 5 4
通过求解,我得到的平均等待时间是 4,但是,我似乎无法正确获得算法。
这是我的代码示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 256
//Create 2 structures
//XYZ: X = ALGO; Y = NUM OF PROCESSES; Z = FOR RR
//ABC: A = PID; B = ARRIVAL TIME; C = EXEC TIME
struct XYZ {
int algo, numProcesses, timeSlice;
};
struct ABC {
int pid, arrivalTime, execTime, endTime, waitTime, startTime;
};
int main(){
/*
ALGO DEFINER:
0 = FCFS ; 1 = NON PREEMPTIVE; 2 = PREEMPTIVE ; 3 = RR
*/
char filename[255];
struct XYZ scheduler;
struct ABC process[255], temp;
int i, j, k;
float average = 0.0, totalSum = 0.0;
FILE *filepointer;
int num = 0; //initialize to 0, if not, num = num+1 will start with 1
printf("Enter the name/path of the file: ");
scanf("%s", filename);
//If filename does not exist
filepointer = fopen(filename, "r");
if(filepointer == NULL){
printf("Filename %s does not exist\n", filename);
exit(1);
}
//If filename exists, continue
//Checking of file contents first
char buffer[LEN];
i = 0;
printf("File contents: \n");
//scan the file
while(fgets(buffer, LEN - 1, filepointer) != NULL){
sscanf(buffer, "%d %d %d", &process[i].pid, &process[i].arrivalTime, &process[i].execTime);
printf("%d %d %d\n", process[i].pid, process[i].arrivalTime, process[i].execTime);
i = i+1;
num = num+1; //store the number of lines, in my test is 10
}
//Store the first line as the XYZ structure
scheduler.algo = process[0].pid;
scheduler.numProcesses = process[0].arrivalTime;
scheduler.timeSlice = process[0].execTime;
//Preemptive SJF scheduling
//Sort the arrival time of each process
for(i = 1; i < num; i++){
for(j = 1; j < num-i; j++){
if(process[j].arrivalTime > process[j+1].arrivalTime){
temp = process[j];
process[j] = process[j+1];
process[j+1] = temp;
}
}
}
printf("Arrangement\n");
for(i = 0; i < num; i++){
printf("%d %d %d\n", process[i].pid, process[i].arrivalTime, process[i].execTime);
}
//Run the algo on the sorted arrival time
//Scan the whole dataset starting from the 1st line, line 0 is the indicator
for(i = 1; i < num; i++){
//insert code here for preemptive
}
return 0;
}
解决方案
推荐阅读
- unix - 单行生成的 CAT EOF 运行失败
- vue.js - Nuxt 中间件在页面重新加载时不起作用
- facebook - Facebook Graph API 在尝试为帐户创建帖子时返回 200 状态代码
- function - RSHINY - 如何将 rhandsontable 写入 csv 文件?
- c++ - 调用 C++ 父类默认构造函数而不是参数化构造函数
- css - 如何在 R Shiny 中调整自定义值框的宽度?
- reactjs - 有没有办法让函数渲染的嵌套组件的引用冒泡?
- shell - Makefile,何时评估 $(shell cat file)?
- discord - 如何让我的 Discord 机器人在运行 join 命令时检查成员是否在语音频道中?
- php - 使用 PHP 将 JSON 数据导入数据库(MySQL)