21xrx.com
2024-11-22 09:52:05 Friday
登录
文章检索 我的文章 写文章
「响应比高者优先调度算法」的C++程序
2023-07-02 08:43:36 深夜i     --     --
响应比高 优先调度算法 C++程序 调度器 进程管理

响应比高者优先调度算法,也被称为最短响应时间优先(Shortest Response Time Next,SRTN)调度算法,在操作系统中被广泛应用。这种算法基于响应时间对进程进行调度,能够让短进程快速得到响应,并保证了较高的系统利用率。

下面我们来介绍一下该算法的C++程序实现。

首先,在程序中定义一个进程结构体Process,需要包含进程的ID、到达时间、运行时间和响应比。定义如下:


struct Process

  int id;  // 进程ID

  int arrival;  // 到达时间

  int burst;  // 运行时间

  float ratio;  // 响应比

;

接下来,定义一个按到达时间排列的函数arriveSort,并且在代码中实现该函数,实现如下:


bool arriveSort(Process a, Process b)

  return a.arrival < b.arrival;

然后,定义一个按响应比排列的函数ratioSort,并在程序中实现该函数,实现如下:


bool ratioSort(Process a, Process b)

  return a.ratio > b.ratio;

接下来,在程序中主函数中实现该算法,具体实现如下:


int main() {

  int n, time = 0, sumBurst = 0;

  float avgWait = 0, avgTurnaround = 0;

  vector<Process> processes;  // 创建进程数组

  // 输入进程数和每个进程的信息

  cin >> n;

  for (int i = 0; i < n; i++) {

    Process p;

    p.id = i + 1;

    cin >> p.arrival >> p.burst;

    processes.push_back(p);

    sumBurst += p.burst;

  }

  // 按到达时间对进程数组进行排序

  sort(processes.begin(), processes.end(), arriveSort);

  // 执行进程

  while (time < sumBurst) {

    // 计算响应比

    for (int i = 0; i < processes.size(); i++) {

      if (processes[i].ratio == 0) {

        processes[i].ratio = 1 + (time - processes[i].arrival) / (float)processes[i].burst;

      }

    }

    // 按响应比对进程数组进行排序

    sort(processes.begin(), processes.end(), ratioSort);

    for (int i = 0; i < processes.size(); i++) {

      // 如果进程已经执行完毕,则跳过该进程

      if (processes[i].burst == 0) continue;

      // 如果该进程还未到达,则等待该进程到达

      if (processes[i].arrival > time) {

        time++;

        i--;

        continue;

      }

      // 执行该进程

      processes[i].burst--;

      // 输出该进程的执行情况

      cout << "Time : " << time << " - Process : " << processes[i].id << endl;

      // 计算等待时间和周转时间

      if (processes[i].burst == 0) {

        avgTurnaround += time - processes[i].arrival + 1;

        avgWait += time - processes[i].arrival - processes[i].burst + 1;

      }

      break;

    }

    time++;

  }

  // 输出平均等待时间和平均周转时间

  cout << "Average Waiting Time : " << avgWait / n << endl;

  cout << "Average Turnaround Time : " << avgTurnaround / n << endl;

  return 0;

}

该算法的核心部分就是计算响应比和按响应比排序,并且在执行进程的过程中,输出该进程的执行情况,并计算等待时间和周转时间。

以上就是响应比高者优先调度算法的C++程序实现,感兴趣的读者可以自行尝试在自己的电脑上运行程序,更进一步地了解该算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复