zoukankan      html  css  js  c++  java
  • 操作系统 HRRN高响应比优先级调度算法(C++实现)

    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.
    ", CurTime );
    19             CurTime ++;
    20         }
    21         for(int t = 1; t <= S[temp]; t ++){
    22             CurTime += 1;
    23             printf( "Time %d : Program %d is Running.
    ",CurTime,temp );
    24         }
    25         printf( "Time %d : Program %d is already done.
    ",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 }
  • 相关阅读:
    [Angular 9] Built-in template syntax $any
    [Angular 9] Improved Dependency Injection with the new providedIn scopes 'any' and 'platform'
    [Angular 9 Unit testing] Stronger typing for dependency injection in tests
    [Angular] Preserve the current route’s query parameters when navigating with the Angular Router
    [Angular] Do relative routing inside component
    [Typescript] Make your optional fields required in TypeScript
    [Typescript] Exclude Properties from a Type in TypeScript
    [Javascript] Hide Properties from Showing Up in "for ... in" Loops in JavaScript
    [Debug] Set and remove DOM breakpoints
    【职业素养】4种让你显得没教养的做法
  • 原文地址:https://www.cnblogs.com/john1015/p/12979843.html
Copyright © 2011-2022 走看看