#include <stdio.h>
#include <string.h>
#define N 3
// 进程PCB结构
typedef struct {
char name[10]; // 进程名
int prio; // 优先级
int needtime; // 需要运行时间
int runtime; // 已运行时间
char state[10]; // 状态
} PCB;
PCB pcb[N];
// 按优先级从高到低排序
void sort_prio() {
int i, j;
PCB temp;
for (i = 0; i < N-1; i++) {
for (j = i+1; j < N; j++) {
if (pcb[i].prio < pcb[j].prio) {
temp = pcb[i];
pcb[i] = pcb[j];
pcb[j] = temp;
}
}
}
}
// 显示进程信息
void show() {
printf("\n进程名\t优先级\t需要时间\t已运行时间\t状态\n"); for (int i = 0; i < N; i++) {
printf("%s\t%d\t%d\t\t%d\t\t%s\n", pcb[i].name,
pcb[i].prio,
pcb[i].needtime,
pcb[i].runtime,
pcb[i].state);
}
}
int main() {
// 初始化3个进程(和你实验文档完全一致)
pcb[0].prio = 3;
pcb[0].needtime = 5;
pcb[0].runtime = 0;
pcb[1].prio = 1;
pcb[1].needtime = 3;
pcb[1].runtime = 0;
pcb[2].prio = 5; // 最高优先级
pcb[2].needtime = 2;
pcb[2].runtime = 0;
printf("===== 最高优先数优先调度算法 =====\n"); sort_prio();
show();
int finish = 0;
while (finish < N) {
sort_prio();
// 选第一个就绪进程运行
int run_i = -1;
for (int i = 0; i < N; i++) {
if (strcmp(pcb
[i
].
state, "完成") != 0) { run_i = i;
break;
}
}
if (run_i == -1) break;
// 标记运行态
strcpy(pcb
[run_i
].
state, "运行"); printf("\n----- 运行进程:%s -----\n", pcb
[run_i
].
name); show();
// 运行一个时间片
pcb[run_i].runtime++;
// 判断是否完成
if (pcb[run_i].runtime >= pcb[run_i].needtime) {
strcpy(pcb
[run_i
].
state, "完成"); finish++;
printf("\n进程 %s 执行完毕!\n", pcb
[run_i
].
name); } else {
strcpy(pcb
[run_i
].
state, "就绪"); }
}
printf("\n===== 所有进程调度完成 =====\n"); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTiAzCgovLyDov5vnqItQQ0Lnu5PmnoQKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBuYW1lWzEwXTsgIC8vIOi/m+eoi+WQjQogICAgaW50IHByaW87ICAgICAgIC8vIOS8mOWFiOe6pwogICAgaW50IG5lZWR0aW1lOyAgIC8vIOmcgOimgei/kOihjOaXtumXtAogICAgaW50IHJ1bnRpbWU7ICAgIC8vIOW3sui/kOihjOaXtumXtAogICAgY2hhciBzdGF0ZVsxMF07IC8vIOeKtuaAgQp9IFBDQjsKClBDQiBwY2JbTl07CgovLyDmjInkvJjlhYjnuqfku47pq5jliLDkvY7mjpLluo8Kdm9pZCBzb3J0X3ByaW8oKSB7CiAgICBpbnQgaSwgajsKICAgIFBDQiB0ZW1wOwogICAgZm9yIChpID0gMDsgaSA8IE4tMTsgaSsrKSB7CiAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgIGlmIChwY2JbaV0ucHJpbyA8IHBjYltqXS5wcmlvKSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gcGNiW2ldOwogICAgICAgICAgICAgICAgcGNiW2ldID0gcGNiW2pdOwogICAgICAgICAgICAgICAgcGNiW2pdID0gdGVtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLy8g5pi+56S66L+b56iL5L+h5oGvCnZvaWQgc2hvdygpIHsKICAgIHByaW50ZigiXG7ov5vnqIvlkI1cdOS8mOWFiOe6p1x06ZyA6KaB5pe26Ze0XHTlt7Lov5DooYzml7bpl7RcdOeKtuaAgVxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHByaW50ZigiJXNcdCVkXHQlZFx0XHQlZFx0XHQlc1xuIiwKICAgICAgICAgICAgcGNiW2ldLm5hbWUsCiAgICAgICAgICAgIHBjYltpXS5wcmlvLAogICAgICAgICAgICBwY2JbaV0ubmVlZHRpbWUsCiAgICAgICAgICAgIHBjYltpXS5ydW50aW1lLAogICAgICAgICAgICBwY2JbaV0uc3RhdGUpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIOWIneWni+WMljPkuKrov5vnqIvvvIjlkozkvaDlrp7pqozmlofmoaPlrozlhajkuIDoh7TvvIkKICAgIHN0cmNweShwY2JbMF0ubmFtZSwgImFhIik7CiAgICBwY2JbMF0ucHJpbyA9IDM7CiAgICBwY2JbMF0ubmVlZHRpbWUgPSA1OwogICAgcGNiWzBdLnJ1bnRpbWUgPSAwOwogICAgc3RyY3B5KHBjYlswXS5zdGF0ZSwgIuWwsee7qiIpOwoKICAgIHN0cmNweShwY2JbMV0ubmFtZSwgImJiIik7CiAgICBwY2JbMV0ucHJpbyA9IDE7CiAgICBwY2JbMV0ubmVlZHRpbWUgPSAzOwogICAgcGNiWzFdLnJ1bnRpbWUgPSAwOwogICAgc3RyY3B5KHBjYlsxXS5zdGF0ZSwgIuWwsee7qiIpOwoKICAgIHN0cmNweShwY2JbMl0ubmFtZSwgImNjIik7CiAgICBwY2JbMl0ucHJpbyA9IDU7ICAvLyDmnIDpq5jkvJjlhYjnuqcKICAgIHBjYlsyXS5uZWVkdGltZSA9IDI7CiAgICBwY2JbMl0ucnVudGltZSA9IDA7CiAgICBzdHJjcHkocGNiWzJdLnN0YXRlLCAi5bCx57uqIik7CgogICAgcHJpbnRmKCI9PT09PSDmnIDpq5jkvJjlhYjmlbDkvJjlhYjosIPluqbnrpfms5UgPT09PT1cbiIpOwogICAgcHJpbnRmKCLliJ3lp4vov5vnqIvkv6Hmga/vvJpcbiIpOwogICAgc29ydF9wcmlvKCk7CiAgICBzaG93KCk7CgogICAgaW50IGZpbmlzaCA9IDA7CiAgICB3aGlsZSAoZmluaXNoIDwgTikgewogICAgICAgIHNvcnRfcHJpbygpOwoKICAgICAgICAvLyDpgInnrKzkuIDkuKrlsLHnu6rov5vnqIvov5DooYwKICAgICAgICBpbnQgcnVuX2kgPSAtMTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICBpZiAoc3RyY21wKHBjYltpXS5zdGF0ZSwgIuWujOaIkCIpICE9IDApIHsKICAgICAgICAgICAgICAgIHJ1bl9pID0gaTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocnVuX2kgPT0gLTEpIGJyZWFrOwoKICAgICAgICAvLyDmoIforrDov5DooYzmgIEKICAgICAgICBzdHJjcHkocGNiW3J1bl9pXS5zdGF0ZSwgIui/kOihjCIpOwogICAgICAgIHByaW50ZigiXG4tLS0tLSDov5DooYzov5vnqIvvvJolcyAtLS0tLVxuIiwgcGNiW3J1bl9pXS5uYW1lKTsKICAgICAgICBzaG93KCk7CgogICAgICAgIC8vIOi/kOihjOS4gOS4quaXtumXtOeJhwogICAgICAgIHBjYltydW5faV0ucnVudGltZSsrOwoKICAgICAgICAvLyDliKTmlq3mmK/lkKblrozmiJAKICAgICAgICBpZiAocGNiW3J1bl9pXS5ydW50aW1lID49IHBjYltydW5faV0ubmVlZHRpbWUpIHsKICAgICAgICAgICAgc3RyY3B5KHBjYltydW5faV0uc3RhdGUsICLlrozmiJAiKTsKICAgICAgICAgICAgZmluaXNoKys7CiAgICAgICAgICAgIHByaW50ZigiXG7ov5vnqIsgJXMg5omn6KGM5a6M5q+V77yBXG4iLCBwY2JbcnVuX2ldLm5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cmNweShwY2JbcnVuX2ldLnN0YXRlLCAi5bCx57uqIik7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiXG49PT09PSDmiYDmnInov5vnqIvosIPluqblrozmiJAgPT09PT1cbiIpOwogICAgcmV0dXJuIDA7Cn0=