操作系统:作业调度实验

这篇博客详细介绍了操作系统中三种作业调度算法——先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)的实现过程。通过实验,展示了输入、输出信息,包括作业的调度顺序、等待时间、周转时间和统计信息,以理解不同调度策略的影响。
摘要由CSDN通过智能技术生成

实验内容

输入

1 A 0 20
2 B 10 30
3 C 15 10
4 D 20 24
5 E 25 6

输出信息

作业编号 作业名称 提交时间 要求服务运行时间 开始时间 完成时间 等待时间 周转时间

统计信息包括: 平均周转时间、平均带权周转时间

算法实现

  • 按先来先服务(FCFS)的原则进行调度,输出作业调度的顺序及相关信息
  • 按最短作业优先(SJF)的原则进行调度,输出作业调度的顺序及相关信息
  • 按最高响应比优先(HRRN)的原则进行调度,输出作业调度顺序及相关信息

代码

#include <iostream>
#include <string>
#include <algorithm>
#define MAX 10 // 设置最大的作业数为10
using namespace std;

struct JCB
{
   
	int id; // 作业编号
	string name; // 作业名称
	double RP; // 响应比
	int aTime; // 提交时间(到达时间)
	int rTime; // 要求服务运行时间
	double tTime; // 周转时间:完成时间 - 提交时间
	double wtTime; //带权周转时间:周转时间 / 运行时间
	bool flag = false; // 记录有没有被“删除”
};

typedef struct JCB JCB;

JCB JobArray[MAX]; 
JCB JobArrayFinal[MAX];// 结构体最终顺序
int fTime; // 完成时间
int nTime = 0; // 目前时间
int wTime; // 等待时间
int sTime; // 开始时间
double totaltTime = 0, totalwtTime = 0; // 总周转时间,总带权周转时间
int len = 0; // 总作业数

// 输入所有作业信息
void input(JCB* p) {
   
	cout << "请输入作业数:";
	cin >> len;
	for (int i = 0; i < len; i++) {
   
		cout << "\n请输入作业编号:";
		cin >> (p + i)->id;
		cout << "请输入作业名称:";
		cin >> (p + i)->name;
		cout << "请输入作业提交时间:";
		cin >> (p + i)->aTime;
		cout << "请输入作业运行时间:";
		cin >> (p + i)->rTime;
	}
}

// 先来先服务(按到达时间从小到大排序)
int FCFS(const JCB &s1,const JCB &s2) {
   
	// 如果到达时间相同,就按运行时间从小到大排序
	if (s1.aTime == s2.aTime) {
   
		return s1.rTime < s2.rTime;
	}
	else {
   
		return s1.aTime < s2.aTime;
	}
}

// 最短作业优先(按执行时间从小到大排序)
void SJF(JCB* p) {
   
	// 载入第一个到达的作业
	JobArrayFinal[0] = JobArray[0];
	JobArray[0].flag = true; // “删除”第一个作业
	// 计算第一个作业完成时间
	int finishTime = JobArrayFinal[0].aTime + JobArrayFinal[0].rTime;
	int index = 0; // 记录正在等待的作业的结尾
	int short_time = 999; // 正在等待的作业的最小执行时间
	int short_index;// 记录正在等待的最小执行时间作业的位置
	int start; 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值