短进程优先算法与先来先服务算法代码C语言
时间: 2024-12-20 09:28:09 浏览: 3
短进程优先(SJF, Shortest Job First)算法的C语言实现通常涉及动态调整进程调度顺序,依据进程的剩余执行时间。这里我们以简单示例来说明:
```c
// 假设有一个结构体Process,包含了进程的基本信息
typedef struct {
char* name;
int arrival_time; // 到达时间
int burst_time; // 需要运行时间
int remaining_time; // 当前剩余执行时间
} Process;
// SJF调度函数
void shortest_job_first(Process processes[], int n) {
Process current_process;
int min_time = INT_MAX;
int index;
while (n > 0) {
current_process = processes[0]; // 初始化为第一个进程
// 更新剩余时间
for (int i = 1; i < n; i++) {
if (processes[i].remaining_time < min_time) {
min_time = processes[i].remaining_time;
current_process = processes[i];
}
}
// 执行进程
if (current_process.burst_time > 0) {
printf("%s starts at %d\n", current_process.name, current_process.arrival_time);
current_process.remaining_time -= current_process.burst_time;
n--;
} else {
printf("%s finished with %d CPU time\n", current_process.name, current_process.burst_time);
free(current_process); // 如果进程结束,释放内存
}
}
}
```
相比之下,先来先服务(FCFS, First-Come-First-Served)算法则按进程到达的先后顺序执行,不会考虑进程的实际执行时间。其基本逻辑是:
```c
void first_come_first_served(Process processes[], int n) {
for (int i = 0; i < n; i++) {
if (processes[i].burst_time > 0) {
printf("%s starts at %d\n", processes[i].name, processes[i].arrival_time);
// 直接执行,不更新剩余时间
processes[i].burst_time--;
if (processes[i].burst_time == 0) {
printf("%s finished with %d CPU time\n", processes[i].name, processes[i].burst_time);
}
}
}
}
```
阅读全文