进程调度(优先级调度)—–编程模拟实现HRRN调度算法。
本文最后更新于 168 天前,如有失效请评论区留言。

实验目的:

深入理解进程及作业的调度原理,掌握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;
}

结果截图:

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

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

版权声明:除特殊说明,博客文章均为 "代码不会敲" 原创。依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇