进程调度(优先级调度)-----编程模拟实现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;
}
结果截图:
在此代基础上进行修改,也可输出每个作业的周转时间
若有错误,大佬们请指出,谢谢
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤