linux作业调度算法模拟
时间: 2025-01-16 12:15:37 浏览: 29
Linux 作业调度算法模拟实现方法
时间片轮转(Round Robin, RR)
时间片轮转是一种常见的多任务处理操作系统使用的CPU调度算法。该算法给每个进程分配固定的时间片,在这段时间内允许进程运行。如果进程未在这段时间内结束,则会被暂停并放入队列末端等待下次执行机会。
#include <stdio.h>
#define TIME_SLICE 4 // 定义时间片大小
typedef struct {
int pid; // 进程ID
int burstTime; // 需要的总CPU时间
} Process;
void roundRobin(Process processes[], int n) {
int remainingTime[n];
for (int i = 0; i < n; ++i)
remainingTime[i] = processes[i].burstTime;
while (1) {
int done = 1;
for (int i = 0 ; i < n; i++) {
if (remainingTime[i] > 0) {
done = 0;
if (remainingTime[i] > TIME_SLICE){
printf("Process %d is running for %d units\n",processes[i].pid ,TIME_SLICE);
remainingTime[i] -= TIME_SLICE;
} else {
printf("Process %d is running for %d units and completes.\n",processes[i].pid ,remainingTime[i]);
remainingTime[i] = 0;
}
}
}
if (done == 1)
break;
}
}
此代码展示了如何通过循环遍历所有进程列表,并按照设定的时间片依次让各个进程获得CPU资源[^1]。
最高优先级优先(Priority Scheduling)
最高优先级优先策略依据预先指定好的静态或动态优先数来决定下一个被执行的任务。具有较高数值代表更高重要性的程序将会被优先考虑执行。
// 假设已经定义好了结构体 `Process` 和其成员变量 `priority`
void priorityScheduling(Process processes[], int n) {
qsort(processes, n, sizeof(Process), compareByPriority);
for(int i=0;i<n;i++){
printf("Executing process ID:%d with Priority:%d \n",processes[i].pid,processes[i].priority);
}
}
int compareByPriority(const void *a, const void *b){
return ((Process *)b)->priority - ((Process *)a)->priority ;
}
这段示例实现了基于优先权排序的过程,其中qsort()
函数用于按降序排列数组中的元素[^2]。
先来先服务(First-Come First-Served, FCFS)
这是一种最简单的调度方式之一,它遵循先进入系统的请求最先得到响应的原则。每当有新的任务加入就将其放置在一个队列里排队等候;当当前正在执行的任务完成后,系统会从未完成的任务中取出最早到达的那个继续执行下去直到全部完成为止。
void fcfsScheduling(Process processes[], int n) {
for(int i=0;i<n;i++){
printf("Executing process ID:%d which arrived first\n",processes[i].id);
}
}
上述简单例子说明了FCFS的工作原理——即总是从头到尾顺序处理每一个到来的新任务[^3]。
相关推荐

















