短进程优先调度算法代码
时间: 2023-11-08 09:05:19 浏览: 116
短进程优先调度算法
3星 · 编辑精心推荐
短进程优先调度算法的代码实现如下:
1. 首先,定义一个进程控制块(PCB)结构体,包含进程名、到达时间、需要运行时间、已用CPU时间、进程状态等信息。
2. 然后,定义一个作业队列,将所有需要调度的进程按照到达时间从小到大排序。
3. 接着,定义一个当前时间变量nowtime,表示当前系统时间。
4. 在每个时间片结束时,遍历作业队列,找出所有已到达但未完成的进程,并计算它们的估计运行时间。
5. 选择估计运行时间最短的进程,将其调入内存运行。
6. 如果有多个进程估计运行时间相同,则按照到达时间从小到大的顺序进行调度。
下面是短进程优先调度算法的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS_NUM 5
typedef struct PCB {
char name[10]; // 进程名
int arrive_time; // 到达时间
int need_time; // 需要运行时间
int used_time; // 已用CPU时间
int state; // 进程状态(0:未完成,1:已完成)
} PCB;
int main() {
PCB jobs[MAX_PROCESS_NUM]; // 作业队列
int i, j, temp, nowtime = 0, flag1 = 0, min_needtime = 9999, n = MAX_PROCESS_NUM;
// 初始化作业队列
for (i = 0; i < n; i++) {
printf("请输入第%d个进程的信息:\n", i + 1);
printf("进程名:");
scanf("%s", jobs[i].name);
printf("到达时间:");
scanf("%d", &jobs[i].arrive_time);
printf("需要运行时间:");
scanf("%d", &jobs[i].need_time);
jobs[i].used_time = 0;
jobs[i].state = 0;
}
// 短进程优先调度算法
while (1) {
flag1 = 0;
min_needtime = 9999;
temp = -1;
// 遍历作业队列,找出所有已到达但未完成的进程,并计算它们的估计运行时间
for (i = 0; i < n; i++) {
if (jobs[i].state == 0 && jobs[i].arrive_time <= nowtime) {
flag1 = 1;
if (jobs[i].need_time < min_needtime) {
min_needtime = jobs[i].need_time;
temp = i;
}
}
}
// 如果有未完成的进程,则选择估计运行时间最短的进程,将其调入内存运行
if (flag1 == 1) {
printf("当前时间:%d,调度进程:%s\n", nowtime, jobs[temp].name);
jobs[temp].used_time += 1;
if (jobs[temp].used_time == jobs[temp].need_time) {
jobs[temp].state = 1;
}
}
// 如果所有进程都已完成,则退出循环
flag1 = 0;
for (i = 0; i < n; i++) {
if (jobs[i].state == 0) {
flag1 = 1;
break;
}
}
if (flag1 == 0) {
break;
}
nowtime++;
}
return 0;
}
```
阅读全文