操作系统动态优先权的进程调度算法C语言
时间: 2023-10-23 22:14:16 浏览: 206
操作系统中常用的动态优先级进程调度算法包括Round-Robin算法、最短进程优先(SPN)算法、最短剩余时间优先(SRTN)算法等等。下面是一个使用Round-Robin算法的进程调度程序示例,使用C语言编写:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PROCESS_NUM 10 // 最大进程数
#define TIME_QUANTUM 4 // 时间片长度
typedef struct Process {
char name[10]; // 进程名
int arrival_time; // 到达时间
int burst_time; // 运行时间
int priority; // 优先级
int remaining_time; // 剩余时间
} Process;
int main() {
int n; // 进程数
Process processes[MAX_PROCESS_NUM];
int current_time = 0; // 当前时间
int completed_num = 0; // 已完成的进程数
int i, j;
printf("请输入进程数:");
scanf("%d", &n);
for(i = 0; i < n; i++) {
printf("请输入第%d个进程的信息:\n", i + 1);
printf("进程名:");
scanf("%s", processes[i].name);
printf("到达时间:");
scanf("%d", &processes[i].arrival_time);
printf("运行时间:");
scanf("%d", &processes[i].burst_time);
printf("优先级:");
scanf("%d", &processes[i].priority);
processes[i].remaining_time = processes[i].burst_time;
}
while(completed_num < n) {
int min_priority = 10000; // 最小优先级
int min_priority_index = -1; // 最小优先级进程的下标
// 找到当前时间所有已到达的进程中优先级最高的进程
for(i = 0; i < n; i++) {
if(processes[i].arrival_time <= current_time && processes[i].remaining_time > 0 && processes[i].priority < min_priority) {
min_priority = processes[i].priority;
min_priority_index = i;
}
}
// 如果当前时间没有已到达的进程,则时间加一
if(min_priority_index == -1) {
current_time++;
continue;
}
// 运行当前进程
printf("当前时间:%d,运行进程:%s\n", current_time, processes[min_priority_index].name);
processes[min_priority_index].remaining_time -= TIME_QUANTUM;
current_time += TIME_QUANTUM;
// 判断当前进程是否已完成
if(processes[min_priority_index].remaining_time <= 0) {
completed_num++;
printf("当前时间:%d,进程:%s已完成\n", current_time, processes[min_priority_index].name);
}
}
return 0;
}
```
该程序中使用了Round-Robin算法,通过循环遍历所有已到达的进程中优先级最高的进程来选择要运行的进程。运行进程时每次使用固定长度的时间片,当进程剩余时间小于等于0时即表示该进程已完成。
阅读全文