21xrx.com
2024-11-22 07:28:29 Friday
登录
文章检索 我的文章 写文章
高响应比优先调度算法C++程序
2023-07-08 09:21:23 深夜i     --     --
优先调度算法 高响应比 C++程序

高响应比优先调度算法是一种常用的进程调度算法,主要是为了提高系统的响应速度和效率。高响应比优先调度算法根据进程等待时间和服务时间来计算响应比,然后按照响应比的大小给进程分配CPU时间。

下面是一个使用C++编程语言实现的高响应比优先调度算法程序:


#include<iostream>

using namespace std;

struct process

  int process_id; // 进程ID

  int arrival_time; // 到达时间

  int burst_time; // 运行时间

  int waiting_time; // 等待时间

  int turnaround_time; // 周转时间

  int remaining_time; // 剩余运行时间

;

// 比较函数,用于按照进程到达时间排序

bool compare(process a, process b)

  return a.arrival_time < b.arrival_time;

int main() {

  int n, time = 0, total_wait = 0, total_turnaround = 0; // n表示进程数

  float avg_wait, avg_turnaround;

  cout << "Enter the number of processes: ";

  cin >> n;

  process p[n];

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

    cout << "Enter arrival time and burst time for process " << i + 1 << ": ";

    cin >> p[i].arrival_time >> p[i].burst_time;

    p[i].process_id = i + 1;

    p[i].remaining_time = p[i].burst_time; // 初始剩余时间等于运行时间

  }

  sort(p, p + n, compare); // 按照到达时间排序

  cout << "\nGantt chart: "; // 打印甘特图

  while(true) {

    int flag = 1, min_remaining_time = INT_MAX, highest_response_ratio = INT_MIN, current_process;

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

      if(p[i].remaining_time > 0 && p[i].arrival_time <= time) {

        // 最高响应比优先,遍历所有进程

        int response_ratio = 1 + (time - p[i].arrival_time) / p[i].burst_time;

        if(response_ratio > highest_response_ratio)

          highest_response_ratio = response_ratio;

          current_process = i;

        

        flag = 0; // 在规定时间内还有进程未完成,所以不需要结束

      }

      // 记录剩余时间最小值

      if(p[i].remaining_time < min_remaining_time && p[i].remaining_time > 0 && p[i].arrival_time <= time) {

        min_remaining_time = p[i].remaining_time;

      }

    }

    if(flag)

      break; // 所有进程都已完成

    

    cout << "|" << time << "-P" << p[current_process].process_id << "-";

    // 更新进程的等待时间和剩余运行时间

    p[current_process].waiting_time = time - p[current_process].arrival_time;

    p[current_process].remaining_time--;

    time++;

  }

  cout << "|" << time << "\n";

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

    p[i].turnaround_time = p[i].burst_time + p[i].waiting_time;

    total_wait += p[i].waiting_time;

    total_turnaround += p[i].turnaround_time;

  }

  avg_wait = (float)total_wait / n;

  avg_turnaround = (float)total_turnaround / n;

  cout << "\nProcess ID  Arrival Time  Burst Time  Waiting Time  Turnaround Time\n";

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

    cout << "   P" << p[i].process_id << "\t\t" << p[i].arrival_time << "\t\t" <<

      p[i].burst_time << "\t\t" << p[i].waiting_time << "\t\t" << p[i].turnaround_time << "\n";

  }

  cout << "Average waiting time = " << avg_wait << "\n";

  cout << "Average turnaround time = " << avg_turnaround << "\n";

  return 0;

}

这个程序首先要求用户输入进程数,然后依次输入每个进程的到达时间和运行时间,最后通过高响应比优先调度算法计算每个进程的等待时间和周转时间,并打印输出这些信息。 运行这个程序可以比较直观地看到高响应比优先调度算法的效果。

  
  

评论区

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