先来先服务短作业优先优先级调度调度算法代码C++
时间: 2023-09-13 20:05:19 浏览: 101
os课程设计 进程调度包括先来先服务,短作业优先,优先级调度等算法 其中数据的输入是以文件的形式 具体文件已经在zip中
以下是一个简单的短作业优先优先级调度算法的 C++ 代码示例:
```
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct Process {
int pid; // 进程 ID
int arrivalTime; // 到达时间
int burstTime; // 执行时间
int priority; // 优先级
int waitingTime; // 等待时间
int turnaroundTime; // 周转时间
};
bool compareArrival(Process a, Process b) { // 按到达时间排序的比较函数
return a.arrivalTime < b.arrivalTime;
}
bool comparePriority(Process a, Process b) { // 按优先级排序的比较函数
return a.priority < b.priority;
}
void sjf(vector<Process>& processes) {
sort(processes.begin(), processes.end(), compareArrival); // 按到达时间排序
int time = 0;
for (int i = 0; i < processes.size(); i++) {
time = max(time, processes[i].arrivalTime); // 更新当前时间为到达时间或者上一个进程结束的时间
int minIndex = i;
for (int j = i; j < processes.size() && processes[j].arrivalTime <= time; j++) { // 在当前时间之前到达的进程中找到最短作业
if (processes[j].burstTime < processes[minIndex].burstTime) {
minIndex = j;
}
}
swap(processes[i], processes[minIndex]); // 把最短作业交换到当前位置
processes[i].waitingTime = time - processes[i].arrivalTime; // 计算等待时间
time += processes[i].burstTime; // 更新时间
processes[i].turnaroundTime = time - processes[i].arrivalTime; // 计算周转时间
}
}
void priority(vector<Process>& processes) {
sort(processes.begin(), processes.end(), compareArrival); // 按到达时间排序
int time = 0;
for (int i = 0; i < processes.size(); i++) {
time = max(time, processes[i].arrivalTime); // 更新当前时间为到达时间或者上一个进程结束的时间
int maxIndex = i;
for (int j = i; j < processes.size() && processes[j].arrivalTime <= time; j++) { // 在当前时间之前到达的进程中找到最高优先级的进程
if (processes[j].priority < processes[maxIndex].priority) {
maxIndex = j;
}
}
swap(processes[i], processes[maxIndex]); // 把最高优先级的进程交换到当前位置
processes[i].waitingTime = time - processes[i].arrivalTime; // 计算等待时间
time += processes[i].burstTime; // 更新时间
processes[i].turnaroundTime = time - processes[i].arrivalTime; // 计算周转时间
}
}
int main() {
vector<Process> processes = {
{1, 0, 6, 2},
{2, 1, 3, 1},
{3, 2, 8, 3},
{4, 3, 4, 4},
{5, 4, 5, 5}
};
sjf(processes); // 使用短作业优先算法调度进程
// priority(processes); // 使用优先级调度算法调度进程
// 输出每个进程的等待时间和周转时间
cout << "Process\tWaiting Time\tTurnaround Time" << endl;
for (int i = 0; i < processes.size(); i++) {
cout << processes[i].pid << "\t" << processes[i].waitingTime << "\t\t" << processes[i].turnaroundTime << endl;
}
return 0;
}
```
其中,`Process` 结构体代表一个进程,包含进程 ID、到达时间、执行时间、优先级、等待时间和周转时间等信息。`compareArrival` 和 `comparePriority` 函数分别用于按到达时间和优先级排序。`sjf` 函数实现了短作业优先算法,而 `priority` 函数实现了优先级调度算法。最后在 `main` 函数中调用 `sjf` 或 `priority` 函数来进行进程调度,并输出每个进程的等待时间和周转时间。
阅读全文