优先级调度算法用c语言写代码
时间: 2023-10-16 08:06:21 浏览: 180
时间片轮转算法和优先级调度算法-C语言模拟实现-收藏.doc
以下是一个简单的优先级调度算法的 C 语言代码示例:
```c
#include <stdio.h>
#define MAX_PROCESS 10
// 进程结构体
typedef struct {
int pid; // 进程 ID
int priority; // 进程优先级
int burst_time; // 进程需要执行的时间
int waiting_time; // 进程等待时间
int turnaround_time; // 进程周转时间
int remaining_time; // 进程剩余执行时间
int executed_time; // 进程已执行时间
int status; // 进程状态:1-就绪,2-执行,3-完成
} process;
// 获取进程信息
void get_process_info(process *p, int n) {
int i;
for (i = 0; i < n; i++) {
printf("请输入进程 %d 的信息:\n", i + 1);
printf("进程 ID:");
scanf("%d", &p[i].pid);
printf("进程优先级:");
scanf("%d", &p[i].priority);
printf("进程需要执行的时间:");
scanf("%d", &p[i].burst_time);
p[i].remaining_time = p[i].burst_time;
p[i].status = 1;
printf("\n");
}
}
// 选择下一个要执行的进程
int select_process(process *p, int n) {
int i, max_priority = 0, next_process = -1;
for (i = 0; i < n; i++) {
if (p[i].status == 1 && p[i].priority > max_priority) {
max_priority = p[i].priority;
next_process = i;
}
}
return next_process;
}
// 执行进程
void execute_process(process *p, int n, int index) {
p[index].status = 2;
p[index].executed_time++;
p[index].remaining_time--;
int i;
for (i = 0; i < n; i++) {
if (i != index && p[i].status == 1) {
p[i].waiting_time++;
}
}
}
// 完成进程
void finish_process(process *p, int index) {
p[index].status = 3;
p[index].turnaround_time = p[index].waiting_time + p[index].burst_time;
}
// 输出进程信息
void print_process_info(process *p, int n) {
int i;
for (i = 0; i < n; i++) {
printf("进程 %d:\n", i + 1);
printf("进程 ID:%d\n", p[i].pid);
printf("进程优先级:%d\n", p[i].priority);
printf("进程需要执行的时间:%d\n", p[i].burst_time);
printf("进程等待时间:%d\n", p[i].waiting_time);
printf("进程周转时间:%d\n", p[i].turnaround_time);
printf("\n");
}
}
int main() {
int n, i, index;
process p[MAX_PROCESS];
printf("请输入进程数:");
scanf("%d", &n);
get_process_info(p, n);
while (1) {
index = select_process(p, n);
if (index == -1) break;
execute_process(p, n, index);
if (p[index].remaining_time == 0) {
finish_process(p, index);
}
}
print_process_info(p, n);
return 0;
}
```
以上代码实现了一个简单的优先级调度算法,其中包括了进程结构体、获取进程信息、选择下一个要执行的进程、执行进程、完成进程、输出进程信息等函数。在主函数中,先获取进程数和进程信息,然后进入循环,每次循环根据优先级选择下一个要执行的进程,执行进程并更新进程状态和等待时间,如果进程已经执行完毕,则完成进程。最后输出进程信息。
阅读全文