进程调度(优先级调度)-----编程模拟实现HRRN调度算法。

实验目的:

深入理解进程及作业的调度原理,掌握FCFS调度算法、SJF调度算法、PSA调度算法、HRRN调度算法。

 编写C语言程序,实现高响应比优先调度算法。

要求输入作业号、提交时刻及运行时间,输出调度顺序。

作业号

提交时刻(时)

运行时间(小时)

1

8:00

2.0

2

8:50

0.5

3

9:00

0.1

4

9:50

0.2

编程模拟实现HRRN调度算法。

代码如下:

#include<bits/stdc++.h>
using namespace std;


const int N = 1111;
int n, cnt = 1;
float s;	//当前时间
struct work
{
	int name;	//作业号
	float sumit_time;	//提交时刻
	float run_time;	//运行时间
	float s_time;	//开始时间
	float e_time;	//结束时间

	int st;	//标记运行顺序;
	float R;	//响应比

}w[N];

bool cmp1(work a, work b)
{
	return a.R < b.R;
}
bool cmp2(work a, work b)
{
	return a.st < b.st;
}


void RR()
{
	for (int i = 0; i <= n; i++)
	{
		if (!w[i].st && s >= w[i].sumit_time)
			w[i].R = (s - w[i].sumit_time + w[i].run_time) / w[i].run_time;
	}
}

void HRRN()
{
	for (int i = 1; i < n; i++)
	{
		RR();
		sort(w + 1, w + n + 1, cmp1);
		for (int j = n; j > 0; j--)
		{
			if (!w[j].st)
			{
				w[j].st = cnt++;
				w[j].s_time = s;
				w[j].e_time = s + w[n].run_time;
				s = w[j].e_time;
				break;
			}
		}
	}

	sort(w + 1, w + n + 1, cmp2);
	printf("调度顺序为:"); 
	for (int i = 1; i <= n; i++)
		printf("%d  ", w[i].name);

}

int  main()
{
	int mintime = 111, f;
	printf("请问共有几个作业:");
	scanf("%d", &n);
	printf("作业号	提交时刻(时)	运行时间(小时)\n");
	for (int i = 1; i <= n; i++)
	{
		w[i].st = 0;
		int h, m;
		scanf("%d%d:%d%f", &w[i].name, &h, &m, &w[i].run_time);		
		w[i].sumit_time =  h + 0.01 * m * 5 / 3;    //时间转换
        //找出第一个作业
		if (w[i].sumit_time < mintime)	f = i, mintime = w[i].sumit_time;
		else if (w[i].sumit_time == mintime && w[i].run_time < w[f].run_time)	f = i;
	}

	//第一个作业
	w[f].st = cnt++;
	w[f].s_time = w[f].sumit_time;
	w[f].e_time = w[f].sumit_time + w[f].run_time;
	s = w[f].e_time;
	HRRN();
	
	return 0;
}

结果截图:

在此代基础上进行修改,也可输出每个作业的周转时间

若有错误,大佬们请指出,谢谢

posted @   代码不会敲~  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示