q编写并调试一个模拟的进程调度程序,采用 “先 来先服务”调度算法对多个进程进行调度。 计算平均周转时间和平均带权周转时间。
时间: 2024-01-22 14:17:15 浏览: 22
好的,这是一个简单的 C++ 代码实现,可以帮助你完成这个任务:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Process {
int pid;
int arrival_time;
int burst_time;
int completion_time;
int turnaround_time;
int waiting_time;
float normalized_turnaround_time;
};
bool compare(Process a, Process b) {
return a.arrival_time < b.arrival_time;
}
int main() {
int n, i, j;
float avg_waiting_time = 0, avg_turnaround_time = 0, avg_normalized_turnaround_time = 0;
cout << "Enter the number of processes: ";
cin >> n;
vector<Process> processes(n);
vector<int> waiting_time(n);
cout << "Enter arrival time and burst time for each process:\n";
for(i = 0; i < n; i++) {
processes[i].pid = i+1;
cout << "Process " << processes[i].pid << ": ";
cin >> processes[i].arrival_time >> processes[i].burst_time;
}
sort(processes.begin(), processes.end(), compare);
processes[0].completion_time = processes[0].arrival_time + processes[0].burst_time;
processes[0].turnaround_time = processes[0].completion_time - processes[0].arrival_time;
processes[0].waiting_time = processes[0].turnaround_time - processes[0].burst_time;
processes[0].normalized_turnaround_time = (float)processes[0].turnaround_time / processes[0].burst_time;
avg_waiting_time += processes[0].waiting_time;
avg_turnaround_time += processes[0].turnaround_time;
avg_normalized_turnaround_time += processes[0].normalized_turnaround_time;
for(i = 1; i < n; i++) {
int min_index = i;
for(j = i; j < n; j++) {
if(processes[j].arrival_time <= processes[i-1].completion_time && processes[j].burst_time < processes[min_index].burst_time) {
min_index = j;
}
}
processes[min_index].completion_time = processes[i-1].completion_time + processes[min_index].burst_time;
processes[min_index].turnaround_time = processes[min_index].completion_time - processes[min_index].arrival_time;
processes[min_index].waiting_time = processes[min_index].turnaround_time - processes[min_index].burst_time;
processes[min_index].normalized_turnaround_time = (float)processes[min_index].turnaround_time / processes[min_index].burst_time;
avg_waiting_time += processes[min_index].waiting_time;
avg_turnaround_time += processes[min_index].turnaround_time;
avg_normalized_turnaround_time += processes[min_index].normalized_turnaround_time;
swap(processes[i], processes[min_index]);
}
cout << "\nPID\tArrival Time\tBurst Time\tCompletion Time\tTurnaround Time\tWaiting Time\tNormalized Turnaround Time\n";
for(Process p : processes) {
cout << p.pid << "\t" << p.arrival_time << "\t\t" << p.burst_time << "\t\t" << p.completion_time << "\t\t" << p.turnaround_time << "\t\t" << p.waiting_time << "\t\t" << p.normalized_turnaround_time << endl;
}
cout << "\nAverage Waiting Time: " << avg_waiting_time/n << endl;
cout << "Average Turnaround Time: " << avg_turnaround_time/n << endl;
cout << "Average Normalized Turnaround Time: " << avg_normalized_turnaround_time/n << endl;
return 0;
}
```
这个代码实现了 "先来先服务" 调度算法,用户需要输入每个进程的到达时间和执行时间。程序会计算出每个进程的完成时间、周转时间、等待时间和带权周转时间,并且输出这些结果和平均值。
希望能对你有帮助!