1. 程式人生 > >C++模擬處理機HRRN排程演算法

C++模擬處理機HRRN排程演算法

本實驗隨機輸入的程序個數、程序名稱、程序提交到系統的時間、程序執行所需時間。通過模擬程式。顯示以下資訊:
1)處理機對程序的排程過程。
2)計算這N個程序的平均週轉時間。
三、HRRN(最高響應比排程演算法)原理
最高響應比排程:在每次排程作業時,先計算後備隊中每個作業的響應比,然後挑選響應比高者投入執行。
響應比R定義:
R=(w+S)/S
(R:響應比,W=等待時間,S=執行時間)
響應比R= 週轉時間 / 執行時間
=(執行時間 + 等待時間)/ 執行時間
= 1 +(等待時間 / 執行時間)

四、示例
如:輸入
程序個數:5
程序名稱 到達系統時間 所需服務時間
A 0 3
B 2 6
C 4 4
D 6 5
E 8 2

顯示執行結果:
程序名稱 到達系統時間 所需服務時間 開始時間 結束時間
A 0 3 0 3
B 2 6 3 9
C 4 4 9 13
E 8 2 13 15
D 6 5 15 20
5個程序的平均週轉時間:(3+7+9+7+14)/5=8

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

struct Process
{
    char name;
    int start_time;
    int surves_time;
    int turnover_time;
    int end_time;
    double priority;
} P[1000]; bool cmp1(const Process &p1, const Process &p2) { if(p1.start_time==p2.start_time) return p1.surves_time<p2.surves_time; return p1.start_time<p2.start_time; } bool cmp3(const Process &p1, const Process &p2) { return (p1.priority > p2.priority) ||
(p1.priority==p2.priority && p1.start_time<p2.start_time); } void HRRN(Process *p, int n) { int i, j, k, finish; double sum=0.0; finish = 0; j = 0; sort(p, p+n, cmp1); for(i = 0; i < n; i++) { while(j<n && p[j].start_time <= finish) j++; for(k = i; k < j; k++) p[k].priority = (finish-p[k].start_time+p[k].surves_time) / p[k].surves_time; sort(p+i, p+j, cmp3); if(p[i].start_time > finish) p[i].end_time = p[i].start_time + p[i].surves_time; else p[i].end_time = finish + p[i].surves_time; p[i].turnover_time = p[i].end_time - p[i].start_time; finish = p[i].end_time; } cout<<"程序名稱\t"<<"到達系統時間\t"<<"所需服務時間\t"<<"開始時間\t"<<"結束時間\t"<<endl; for(int i=0; i<n; i++) { if(!i) cout<<p[i].name<<"\t\t"<<p[i].start_time<<"\t\t"<<p[i].surves_time<<"\t\t"<<p[i].start_time<<"\t\t"<<p[i].end_time<<endl; else cout<<p[i].name<<"\t\t"<<p[i].start_time<<"\t\t"<<p[i].surves_time<<"\t\t"<<p[i-1].end_time<<"\t\t"<<p[i].end_time<<endl; sum+=p[i].turnover_time; } cout<<"平均週轉時間: "<<sum/n*1.0<<endl; } int main() { int n; while(cin>>n) { for(int i=0; i<n; i++) cin>>P[i].name>>P[i].start_time>>P[i].surves_time; HRRN(P,n); } return 0; }

效果圖:
在這裡插入圖片描述
在這裡插入圖片描述