操作系统 HRRN高响应比优先级调度算法

1. 算法性质

  HRRN算法既考虑了作业的等待时间,又考虑作业的运行时间,因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。

2. 实现方法

  我们为每个作业引入一个动态优先级,即优先级会随着时间的增加而动态增加,这样使得长作业的优先级在等待期间不断地增加,等到足够时间后,必然有机会获得处理机。

优先级算法描述为: 优先权(Rp) = (等待时间 + 要求服务时间)/ 要求服务时间

周转时间:周转时间(WT) = 作业完成时间 - 作业到达时间

带权周转时间:带权周转时间(WWT) = 周转时间 / 服务时间

平均周转时间:平均周转时间(AWT) = 作业周转总时间 / 作业个数

平均带权周转时间:平均带权周转时间(AWWT) = 带权周转总时间 / 作业个数

3. 算法优点

  • 如果作业的等待时间相同,则要求服务的时间越短,其优先级越高,因而类似于SJF算法,有利于短作业。
  • 当要求服务的时间相同时,作业的优先权又决定于其等待时间,因而有类似于FCFS算法。
  • 对于长作业的优先级,可以随等待时间增加而提高,当其等待时间足够长时,也可以获得处理机。

4. 实现代码

  4.1 HRRN实现函数

 1 //HRRN高相应比优先级调度算法
 2 void HRRN( vector<int> T, vector<double> S, vector<int> &FT, vector<int> &WT 
 3             , vector<double> &WWT){
 4     int CurTime = 0, temp = 0, length = T.size();
 5     vector<bool> Finished(length, 1); 
 6     vector<double> Rp(length, 0); //优先级
 7     for(int i = 0; i < length; i ++){
 8         //迭代计算未进行进程的全部优先级
 9         for( int i = 0; i < length; i ++){
10             if( Finished[i] ){
11                 Rp[i] = ( abs(T[i] - CurTime) + S[i] ) / S[i];
12                 if(Rp[i] > Rp[temp])
13                     temp = i; //寻找最高优先级
14             }
15         }
16         //输出当前时间进程状态
17         while( CurTime < T[temp] ){
18             printf( "Time %d : No Program is Running.\n", CurTime );
19             CurTime ++;
20         }
21         for(int t = 1; t <= S[temp]; t ++){
22             CurTime += 1;
23             printf( "Time %d : Program %d is Running.\n",CurTime,temp );
24         }
25         printf( "Time %d : Program %d is already done.\n",CurTime + 1,temp );
26         FT[temp] = CurTime; WT[temp] = CurTime - T[temp]; WWT[temp] = WT[temp] / S[temp];
27         //完成该进程后使其初始化。
28         Finished[temp] = 0; Rp[temp] = 0;
29     }
30 }

  4.2 主函数

 1 int main()
 2 {
 3     vector<int> ArrivalTime;
 4     vector<double> ServiceTime;
 5     vector<int> PServiceTime;
 6     vector<int> FinishTime(N,0);
 7     vector<int> WholeTime(N,0);
 8     vector<double> WeightWholeTime(N,0);
 9     
10     _init_project(ArrivalTime, ServiceTime); //初始化函数
11     HRRN(ArrivalTime, ServiceTime, FinishTime, WholeTime, WeightWholeTime);
12 }

猜你喜欢

转载自www.cnblogs.com/john1015/p/12979843.html
今日推荐