CFS(Completely Fair Scheduler,完全公平调度器)是一种进程调度策略,最早引入于Linux内核2.6.23版本。CFS的目标是在多核系统中提供公平的CPU时间分配,并以纳秒级的精度进行调度。
基本原则和策略:
CFS调度策略通过动态地调整进程的虚拟运行时间,使得每个进程能够公平地获得CPU时间,从而提供更好的公平性和响应性。它适用于多核系统和服务器环境,能够高效地管理并调度各种类型的任务,确保系统资源的公平分配。
接上文,在这里继续完成调度算法的实现
你只需要实现一个CFS算法类,然后实现schedule函数,比如下面的方法:
void scheduleCFS(Process processes[], int n) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> minHeap;
// 初始化运行队列
for (int i = 0; i < n; i++) {
minHeap.push(make_pair(processes[i].vruntime, i));
}
int current_time = 0;
while (!minHeap.empty()) {
pair<int, int> minProcess = minHeap.top();
minHeap.pop();
int process_index = minProcess.second;
Process currentProcess = processes[process_index];
cout << "执行进程 " << currentProcess.pid << ",执行时间 " << currentProcess.execution_time << endl;
current_time += currentProcess.execution_time;
currentProcess.vruntime = current_time;
cout << "进程 " << currentProcess.pid << " 执行完毕,完成时间 " << current_time << endl;
if (current_time < 100) {
minHeap.push(make_pair(currentProcess.vruntime, process_index));
}
}
}