psa优先调度算法的c语言,FCFS、SJF、PSA、RR、MFS作业调度C语言实现

本文提供了一段C语言代码,实现了FCFS(先来先服务)、SJF(短作业优先)、PSA(优先级调度算法)、RR(轮转调度)和MFS(多级反馈队列)等作业调度算法。代码在VS编辑器下编写,并修复了到达时间相同和总时间不足的问题。包括初始化、计算和输出等功能,适合学习和参考。
摘要由CSDN通过智能技术生成

优化后

此代码使用vs编辑器编写,其中使用到头文件的引用

下面有源码可以直接复制使用,另外底面有源码文件链接

代码不符条件的bug,请直接评论指出,会尽快修改,合作愉快

2018/11/28 修复总时间无法到达到达时间

修复进程到达时间相同

#define _CRT_SECURE_NO_WARNINGS

#define NUMBER 5

#include

#include

char process_name[NUMBER] = { 'A', 'B', 'C', 'D', 'E' };

int arrive_time[NUMBER] = { 0, 2, 2, 3, 4 };

int server_time[NUMBER] = { 1, 3, 5, 2, 4 };

int fcfs_finished[NUMBER];

int fcfs_work[NUMBER];

double a_fcks_work[NUMBER];

typedef struct name_server{

char process_name;

int arrive_time;

int server_time;

int finished;

int work;

double a_work;

double prioprity;

int is_finished;//代表轮转周期结束时,当前进程是否结束

};

void init_data(name_server *init_data);

void chang_position(name_server *temp_name_server, int index, int temp_value);

void calc_work_or_a_work(name_server *new_name_server_psa);

void print(name_server print_struct[5]);

void recovery_order(name_server *new_name_server, name_server *old_name_server);

void fcfs();

void sjf();

void psa();

//先来先服务

void fcfs() {

name_server name_server_fcfs[NUMBER];

//初始化

init_data(name_server_fcfs);

int is_true = 1;

int temp_sum = 0;

int is_wait = 0;

while (is_true){

//完成时间

int is_finished = 0;

for (int i = 0; i

//当时间无法达到到达时刻时执行

if (is_wait > NUMBER+1) {

temp_sum++;

is_wait = 0;

break;

}

//判断是否到达

if (name_server_fcfs[i].arrive_time > temp_sum) {

is_wait++;

continue;

}

if (name_server_fcfs[i].is_finished == 1){

is_finished++;

is_wait++;

if (is_finished == NUMBER){

is_true = 0;

break;

}

continue;

}

//完成时间

name_server_fcfs[i].finished = temp_sum + name_server_fcfs[i].server_time;

temp_sum += name_server_fcfs[i].server_time;

name_server_fcfs[i].is_finished = 1;

is_wait = 0;

break;

}

}

calc_work_or_a_work(name_server_fcfs);

}

//短作业优先

void sjf() {

//初始化一个进程名与服务时间有关的结构体

name_server name_server_sjf[NUMBER];

//初始化数据

init_data(name_server_sjf);

//完成时间的计算

int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值