#include <stdio.h>
#include <string.h>
#define N 3
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() {
// 固定进程:aa bb cc,和文档完全一致
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_idx = -1;
for (int i = 0; i < N; i++) {
if (strcmp(pcb
[i
].
state, "完成") != 0) { run_idx = i;
break;
}
}
// 标记运行
strcpy(pcb
[run_idx
].
state, "运行"); printf("\n正在运行:%s\n", pcb
[run_idx
].
name); show();
// 运行一个时间单位
pcb[run_idx].runtime++;
// 判断是否完成
if (pcb[run_idx].runtime >= pcb[run_idx].needtime) {
strcpy(pcb
[run_idx
].
state, "完成"); finish++;
printf("\n【%s】运行结束\n", pcb
[run_idx
].
name); } else {
strcpy(pcb
[run_idx
].
state, "就绪"); }
}
printf("\n===== 所有进程调度完成 =====\n"); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTiAzCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyIG5hbWVbMTBdOwogICAgaW50IHByaW87ICAgICAgIC8vIOS8mOWFiOe6pwogICAgaW50IG5lZWR0aW1lOyAgIC8vIOmcgOimgei/kOihjOaXtumXtAogICAgaW50IHJ1bnRpbWU7ICAgIC8vIOW3sui/kOihjOaXtumXtAogICAgY2hhciBzdGF0ZVsxMF07IC8vIOeKtuaAgQp9IFBDQjsKClBDQiBwY2JbTl07CgovLyDmjInkvJjlhYjnuqfku47pq5jliLDkvY7mjpLluo8Kdm9pZCBzb3J0X3ByaW8oKSB7CiAgICBpbnQgaSwgajsKICAgIFBDQiB0ZW1wOwogICAgZm9yIChpID0gMDsgaSA8IE4tMTsgaSsrKSB7CiAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgIGlmIChwY2JbaV0ucHJpbyA8IHBjYltqXS5wcmlvKSB7CiAgICAgICAgICAgICAgICB0ZW1wID0gcGNiW2ldOwogICAgICAgICAgICAgICAgcGNiW2ldID0gcGNiW2pdOwogICAgICAgICAgICAgICAgcGNiW2pdID0gdGVtcDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKLy8g5pi+56S65qC85byP5a6M5YWo5Yy56YWN5paH5qGjCnZvaWQgc2hvdygpIHsKICAgIHByaW50ZigiXG7ov5vnqIvlkI1cdOS8mOWFiOe6p1x06ZyA6KaB5pe26Ze0XHTlt7Lov5DooYzml7bpl7RcdOeKtuaAgVxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHByaW50ZigiJXNcdCVkXHQlZFx0XHQlZFx0XHQlc1xuIiwKICAgICAgICAgICAgcGNiW2ldLm5hbWUsCiAgICAgICAgICAgIHBjYltpXS5wcmlvLAogICAgICAgICAgICBwY2JbaV0ubmVlZHRpbWUsCiAgICAgICAgICAgIHBjYltpXS5ydW50aW1lLAogICAgICAgICAgICBwY2JbaV0uc3RhdGUpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIOWbuuWumui/m+eoi++8mmFhIGJiIGNj77yM5ZKM5paH5qGj5a6M5YWo5LiA6Ie0CiAgICBzdHJjcHkocGNiWzBdLm5hbWUsICJhYSIpOwogICAgcGNiWzBdLnByaW8gPSAzOwogICAgcGNiWzBdLm5lZWR0aW1lID0gNTsKICAgIHBjYlswXS5ydW50aW1lID0gMDsKICAgIHN0cmNweShwY2JbMF0uc3RhdGUsICLlsLHnu6oiKTsKCiAgICBzdHJjcHkocGNiWzFdLm5hbWUsICJiYiIpOwogICAgcGNiWzFdLnByaW8gPSAxOwogICAgcGNiWzFdLm5lZWR0aW1lID0gMzsKICAgIHBjYlsxXS5ydW50aW1lID0gMDsKICAgIHN0cmNweShwY2JbMV0uc3RhdGUsICLlsLHnu6oiKTsKCiAgICBzdHJjcHkocGNiWzJdLm5hbWUsICJjYyIpOwogICAgcGNiWzJdLnByaW8gPSA1OyAgLy8g5pyA6auY5LyY5YWI57qnCiAgICBwY2JbMl0ubmVlZHRpbWUgPSAyOwogICAgcGNiWzJdLnJ1bnRpbWUgPSAwOwogICAgc3RyY3B5KHBjYlsyXS5zdGF0ZSwgIuWwsee7qiIpOwoKICAgIHByaW50ZigiPT09PT0g6L+b56iL6LCD5bqm5a6e6aqM77ya5pyA6auY5LyY5YWI5pWw5LyY5YWIID09PT09XG4iKTsKICAgIHNvcnRfcHJpbygpOwogICAgc2hvdygpOwoKICAgIGludCBmaW5pc2ggPSAwOwogICAgd2hpbGUgKGZpbmlzaCA8IE4pIHsKICAgICAgICBzb3J0X3ByaW8oKTsKCiAgICAgICAgLy8g6YCJ5LyY5YWI57qn5pyA6auY55qE6L+b56iL6L+Q6KGMCiAgICAgICAgaW50IHJ1bl9pZHggPSAtMTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICBpZiAoc3RyY21wKHBjYltpXS5zdGF0ZSwgIuWujOaIkCIpICE9IDApIHsKICAgICAgICAgICAgICAgIHJ1bl9pZHggPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIOagh+iusOi/kOihjAogICAgICAgIHN0cmNweShwY2JbcnVuX2lkeF0uc3RhdGUsICLov5DooYwiKTsKICAgICAgICBwcmludGYoIlxu5q2j5Zyo6L+Q6KGM77yaJXNcbiIsIHBjYltydW5faWR4XS5uYW1lKTsKICAgICAgICBzaG93KCk7CgogICAgICAgIC8vIOi/kOihjOS4gOS4quaXtumXtOWNleS9jQogICAgICAgIHBjYltydW5faWR4XS5ydW50aW1lKys7CgogICAgICAgIC8vIOWIpOaWreaYr+WQpuWujOaIkAogICAgICAgIGlmIChwY2JbcnVuX2lkeF0ucnVudGltZSA+PSBwY2JbcnVuX2lkeF0ubmVlZHRpbWUpIHsKICAgICAgICAgICAgc3RyY3B5KHBjYltydW5faWR4XS5zdGF0ZSwgIuWujOaIkCIpOwogICAgICAgICAgICBmaW5pc2grKzsKICAgICAgICAgICAgcHJpbnRmKCJcbuOAkCVz44CR6L+Q6KGM57uT5p2fXG4iLCBwY2JbcnVuX2lkeF0ubmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RyY3B5KHBjYltydW5faWR4XS5zdGF0ZSwgIuWwsee7qiIpOwogICAgICAgIH0KICAgIH0KCiAgICBwcmludGYoIlxuPT09PT0g5omA5pyJ6L+b56iL6LCD5bqm5a6M5oiQID09PT09XG4iKTsKICAgIHJldHVybiAwOwp9