#include <stdio.h>
#include <string.h>
#define MAX_PROCESS 5
// 进程控制块PCB
typedef struct {
char name[20];
int priority;
int need_time;
int run_time;
char state[10];
} PCB;
PCB pcb[MAX_PROCESS];
int process_num;
// 按优先级从高到低排序
void sortByPriority() {
int i, j;
PCB temp;
for (i = 0; i < process_num - 1; i++) {
for (j = i + 1; j < process_num; j++) {
if (pcb[i].priority < pcb[j].priority) {
temp = pcb[i];
pcb[i] = pcb[j];
pcb[j] = temp;
}
}
}
}
// 显示所有进程状态
void showProcessState() {
printf("\n%-8s%-8s%-12s%-12s%-8s\n", "进程名", "优先级", "需要时间", "已运行时间", "状态");
for (int i = 0; i < process_num; i++) {
printf("%-8s%-8d%-12d%-12d%-8s\n", pcb[i].name,
pcb[i].priority,
pcb[i].need_time,
pcb[i].run_time,
pcb[i].state);
}
}
int main() {
int i, finished_count = 0;
printf("===== 进程调度实验:最高优先数优先算法 =====\n"); scanf("%d", &process_num
); if (process_num > 5) process_num = 5;
// 输入进程信息
for (i = 0; i < process_num; i++) {
printf("\n输入第%d个进程信息(进程名 优先级 需要运行时间):\n", i
+ 1); scanf("%s %d %d", pcb
[i
].
name, &pcb
[i
].
priority, &pcb
[i
].
need_time); pcb[i].run_time = 0;
}
printf("\n===== 开始调度 =====\n");
// 调度主循环
while (finished_count < process_num) {
sortByPriority();
// 找到第一个未完成进程
for (i = 0; i < process_num; i++) {
if (strcmp(pcb
[i
].
state, "完成") != 0) { break;
}
}
// 运行当前进程
showProcessState();
// 执行一个时间片
pcb[i].run_time++;
pcb[i].priority--; // 动态优先级:运行一次优先级-1
// 判断是否完成
if (pcb[i].run_time >= pcb[i].need_time) {
finished_count++;
printf("\n进程【%s】执行完毕!\n", pcb
[i
].
name); } else {
}
}
printf("\n===== 所有进程调度完成 =====\n"); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYX1BST0NFU1MgNQoKLy8g6L+b56iL5o6n5Yi25Z2XUENCCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgbmFtZVsyMF07CiAgICBpbnQgcHJpb3JpdHk7CiAgICBpbnQgbmVlZF90aW1lOwogICAgaW50IHJ1bl90aW1lOwogICAgY2hhciBzdGF0ZVsxMF07Cn0gUENCOwoKUENCIHBjYltNQVhfUFJPQ0VTU107CmludCBwcm9jZXNzX251bTsKCi8vIOaMieS8mOWFiOe6p+S7jumrmOWIsOS9juaOkuW6jwp2b2lkIHNvcnRCeVByaW9yaXR5KCkgewogICAgaW50IGksIGo7CiAgICBQQ0IgdGVtcDsKICAgIGZvciAoaSA9IDA7IGkgPCBwcm9jZXNzX251bSAtIDE7IGkrKykgewogICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgcHJvY2Vzc19udW07IGorKykgewogICAgICAgICAgICBpZiAocGNiW2ldLnByaW9yaXR5IDwgcGNiW2pdLnByaW9yaXR5KSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gcGNiW2ldOwogICAgICAgICAgICAgICAgcGNiW2ldID0gcGNiW2pdOwogICAgICAgICAgICAgICAgcGNiW2pdID0gdGVtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLy8g5pi+56S65omA5pyJ6L+b56iL54q25oCBCnZvaWQgc2hvd1Byb2Nlc3NTdGF0ZSgpIHsKICAgIHByaW50ZigiXG4lLThzJS04cyUtMTJzJS0xMnMlLThzXG4iLCAKICAgICAgICAgICAi6L+b56iL5ZCNIiwgIuS8mOWFiOe6pyIsICLpnIDopoHml7bpl7QiLCAi5bey6L+Q6KGM5pe26Ze0IiwgIueKtuaAgSIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZXNzX251bTsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlLThzJS04ZCUtMTJkJS0xMmQlLThzXG4iLAogICAgICAgICAgICAgICBwY2JbaV0ubmFtZSwKICAgICAgICAgICAgICAgcGNiW2ldLnByaW9yaXR5LAogICAgICAgICAgICAgICBwY2JbaV0ubmVlZF90aW1lLAogICAgICAgICAgICAgICBwY2JbaV0ucnVuX3RpbWUsCiAgICAgICAgICAgICAgIHBjYltpXS5zdGF0ZSk7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IGksIGZpbmlzaGVkX2NvdW50ID0gMDsKCiAgICBwcmludGYoIj09PT09IOi/m+eoi+iwg+W6puWunumqjO+8muacgOmrmOS8mOWFiOaVsOS8mOWFiOeul+azlSA9PT09PVxuIik7CiAgICBwcmludGYoIuivt+i+k+WFpei/m+eoi+aVsOmHj++8iOacgOWkmjXkuKrvvInvvJoiKTsKICAgIHNjYW5mKCIlZCIsICZwcm9jZXNzX251bSk7CiAgICBpZiAocHJvY2Vzc19udW0gPiA1KSBwcm9jZXNzX251bSA9IDU7CgogICAgLy8g6L6T5YWl6L+b56iL5L+h5oGvCiAgICBmb3IgKGkgPSAwOyBpIDwgcHJvY2Vzc19udW07IGkrKykgewogICAgICAgIHByaW50ZigiXG7ovpPlhaXnrKwlZOS4qui/m+eoi+S/oeaBr++8iOi/m+eoi+WQjSDkvJjlhYjnuqcg6ZyA6KaB6L+Q6KGM5pe26Ze077yJ77yaXG4iLCBpICsgMSk7CiAgICAgICAgc2NhbmYoIiVzICVkICVkIiwgcGNiW2ldLm5hbWUsICZwY2JbaV0ucHJpb3JpdHksICZwY2JbaV0ubmVlZF90aW1lKTsKICAgICAgICBwY2JbaV0ucnVuX3RpbWUgPSAwOwogICAgICAgIHN0cmNweShwY2JbaV0uc3RhdGUsICLlsLHnu6oiKTsKICAgIH0KCiAgICBwcmludGYoIlxuPT09PT0g5byA5aeL6LCD5bqmID09PT09XG4iKTsKCiAgICAvLyDosIPluqbkuLvlvqrnjq8KICAgIHdoaWxlIChmaW5pc2hlZF9jb3VudCA8IHByb2Nlc3NfbnVtKSB7CiAgICAgICAgc29ydEJ5UHJpb3JpdHkoKTsKCiAgICAgICAgLy8g5om+5Yiw56ys5LiA5Liq5pyq5a6M5oiQ6L+b56iLCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb2Nlc3NfbnVtOyBpKyspIHsKICAgICAgICAgICAgaWYgKHN0cmNtcChwY2JbaV0uc3RhdGUsICLlrozmiJAiKSAhPSAwKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8g6L+Q6KGM5b2T5YmN6L+b56iLCiAgICAgICAgc3RyY3B5KHBjYltpXS5zdGF0ZSwgIui/kOihjCIpOwogICAgICAgIHNob3dQcm9jZXNzU3RhdGUoKTsKCiAgICAgICAgLy8g5omn6KGM5LiA5Liq5pe26Ze054mHCiAgICAgICAgcGNiW2ldLnJ1bl90aW1lKys7CiAgICAgICAgcGNiW2ldLnByaW9yaXR5LS07ICAvLyDliqjmgIHkvJjlhYjnuqfvvJrov5DooYzkuIDmrKHkvJjlhYjnuqctMQoKICAgICAgICAvLyDliKTmlq3mmK/lkKblrozmiJAKICAgICAgICBpZiAocGNiW2ldLnJ1bl90aW1lID49IHBjYltpXS5uZWVkX3RpbWUpIHsKICAgICAgICAgICAgc3RyY3B5KHBjYltpXS5zdGF0ZSwgIuWujOaIkCIpOwogICAgICAgICAgICBmaW5pc2hlZF9jb3VudCsrOwogICAgICAgICAgICBwcmludGYoIlxu6L+b56iL44CQJXPjgJHmiafooYzlrozmr5XvvIFcbiIsIHBjYltpXS5uYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJjcHkocGNiW2ldLnN0YXRlLCAi5bCx57uqIik7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiXG49PT09PSDmiYDmnInov5vnqIvosIPluqblrozmiJAgPT09PT1cbiIpOwogICAgcmV0dXJuIDA7Cn0=