#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PROCESS 10 // 最大进程数
// 进程状态枚举
typedef enum {
READY, // 就绪态
RUNNING, // 运行态
FINISHED // 完成态
} ProcessState;
// 进程控制块 PCB
typedef struct PCB {
char name[20]; // 进程名
int priority; // 优先数(数值越大优先级越高)
int needTime; // 需要运行的时间
int runTime; // 已运行时间
ProcessState state; // 进程状态
struct PCB *next; // 指向下一个进程的指针
} PCB;
PCB *readyQueue = NULL; // 就绪队列头指针
PCB *runningProcess = NULL; // 当前运行进程
// 创建新进程
PCB* createProcess(char *name, int priority, int needTime) {
PCB
*p
= (PCB
*)malloc(sizeof(PCB
)); p->priority = priority;
p->needTime = needTime;
p->runTime = 0;
p->state = READY;
p->next = NULL;
return p;
}
// 按优先数降序插入就绪队列(优先数高的在前)
void insertByPriority(PCB *newProcess) {
if (readyQueue == NULL) {
readyQueue = newProcess;
return;
}
// 如果新进程优先级比队首还高
if (newProcess->priority > readyQueue->priority) {
newProcess->next = readyQueue;
readyQueue = newProcess;
return;
}
// 找到合适位置插入
PCB *current = readyQueue;
while (current->next != NULL && current->next->priority >= newProcess->priority) {
current = current->next;
}
newProcess->next = current->next;
current->next = newProcess;
}
// 从就绪队列取出优先级最高的进程
PCB* getHighestPriority() {
if (readyQueue == NULL) return NULL;
PCB *p = readyQueue;
readyQueue = readyQueue->next;
p->next = NULL;
return p;
}
// 显示当前所有进程状态
void displayProcesses() {
printf("\n========== 当前进程状态 ==========\n");
// 显示运行态进程
if (runningProcess != NULL) {
printf("[运行态] 进程名: %s | 优先数: %d | 还需时间: %d | 已运行: %d\n", runningProcess->name, runningProcess->priority,
runningProcess->needTime - runningProcess->runTime,
runningProcess->runTime);
}
// 显示就绪队列
if (readyQueue == NULL) {
} else {
PCB *p = readyQueue;
int count = 1;
while (p != NULL) {
printf(" [%d] 进程名: %s | 优先数: %d | 还需时间: %d | 状态: 就绪\n", count++, p->name, p->priority,
p->needTime - p->runTime);
p = p->next;
}
}
printf("==================================\n"); }
// 调度算法(动态优先数:每运行一次优先数-1)
void schedule() {
printf("\n********** 开始进程调度 **********\n");
while (readyQueue != NULL || runningProcess != NULL) {
// 如果当前没有运行进程,从就绪队列取一个
if (runningProcess == NULL) {
runningProcess = getHighestPriority();
if (runningProcess != NULL) {
runningProcess->state = RUNNING;
printf("调度进程 [%s] 进入运行态\n", runningProcess
->name
); }
}
// 运行当前进程一个时间片
if (runningProcess != NULL) {
runningProcess->runTime++;
printf("进程 [%s] 运行中... (已运行: %d/%d)\n", runningProcess->name,
runningProcess->runTime,
runningProcess->needTime);
// 检查是否完成
if (runningProcess->runTime >= runningProcess->needTime) {
runningProcess->state = FINISHED;
printf("✓ 进程 [%s] 运行完成!\n", runningProcess
->name
); runningProcess = NULL;
} else {
// 动态优先数调整:优先数减1
runningProcess->priority--;
runningProcess->name, runningProcess->priority);
// 时间片用完,放回就绪队列
runningProcess->state = READY;
PCB *temp = runningProcess;
runningProcess = NULL;
insertByPriority(temp);
}
}
displayProcesses();
}
printf("\n********** 所有进程调度完成 **********\n"); }
int main() {
int n, i;
char name[20];
int priority, needTime;
printf("===== 最高优先数优先调度算法 =====\n");
for (i = 0; i < n; i++) {
printf("\n--- 输入第 %d 个进程信息 ---\n", i
+ 1);
PCB *p = createProcess(name, priority, needTime);
insertByPriority(p);
}
displayProcesses();
// 开始调度
schedule();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBNQVhfUFJPQ0VTUyAxMCAgLy8g5pyA5aSn6L+b56iL5pWwCgovLyDov5vnqIvnirbmgIHmnprkuL4KdHlwZWRlZiBlbnVtIHsKICAgIFJFQURZLCAgICAgIC8vIOWwsee7quaAgQogICAgUlVOTklORywgICAgLy8g6L+Q6KGM5oCBCiAgICBGSU5JU0hFRCAgICAvLyDlrozmiJDmgIEKfSBQcm9jZXNzU3RhdGU7CgovLyDov5vnqIvmjqfliLblnZcgUENCCnR5cGVkZWYgc3RydWN0IFBDQiB7CiAgICBjaGFyIG5hbWVbMjBdOyAgICAgICAgICAvLyDov5vnqIvlkI0KICAgIGludCBwcmlvcml0eTsgICAgICAgICAgIC8vIOS8mOWFiOaVsO+8iOaVsOWAvOi2iuWkp+S8mOWFiOe6p+i2iumrmO+8iQogICAgaW50IG5lZWRUaW1lOyAgICAgICAgICAgLy8g6ZyA6KaB6L+Q6KGM55qE5pe26Ze0CiAgICBpbnQgcnVuVGltZTsgICAgICAgICAgICAvLyDlt7Lov5DooYzml7bpl7QKICAgIFByb2Nlc3NTdGF0ZSBzdGF0ZTsgICAgIC8vIOi/m+eoi+eKtuaAgQogICAgc3RydWN0IFBDQiAqbmV4dDsgICAgICAgLy8g5oyH5ZCR5LiL5LiA5Liq6L+b56iL55qE5oyH6ZKICn0gUENCOwoKUENCICpyZWFkeVF1ZXVlID0gTlVMTDsgICAgIC8vIOWwsee7qumYn+WIl+WktOaMh+mSiApQQ0IgKnJ1bm5pbmdQcm9jZXNzID0gTlVMTDsgLy8g5b2T5YmN6L+Q6KGM6L+b56iLCgovLyDliJvlu7rmlrDov5vnqIsKUENCKiBjcmVhdGVQcm9jZXNzKGNoYXIgKm5hbWUsIGludCBwcmlvcml0eSwgaW50IG5lZWRUaW1lKSB7CiAgICBQQ0IgKnAgPSAoUENCKiltYWxsb2Moc2l6ZW9mKFBDQikpOwogICAgc3RyY3B5KHAtPm5hbWUsIG5hbWUpOwogICAgcC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKICAgIHAtPm5lZWRUaW1lID0gbmVlZFRpbWU7CiAgICBwLT5ydW5UaW1lID0gMDsKICAgIHAtPnN0YXRlID0gUkVBRFk7CiAgICBwLT5uZXh0ID0gTlVMTDsKICAgIHJldHVybiBwOwp9CgovLyDmjInkvJjlhYjmlbDpmY3luo/mj5LlhaXlsLHnu6rpmJ/liJfvvIjkvJjlhYjmlbDpq5jnmoTlnKjliY3vvIkKdm9pZCBpbnNlcnRCeVByaW9yaXR5KFBDQiAqbmV3UHJvY2VzcykgewogICAgaWYgKHJlYWR5UXVldWUgPT0gTlVMTCkgewogICAgICAgIHJlYWR5UXVldWUgPSBuZXdQcm9jZXNzOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgLy8g5aaC5p6c5paw6L+b56iL5LyY5YWI57qn5q+U6Zif6aaW6L+Y6auYCiAgICBpZiAobmV3UHJvY2Vzcy0+cHJpb3JpdHkgPiByZWFkeVF1ZXVlLT5wcmlvcml0eSkgewogICAgICAgIG5ld1Byb2Nlc3MtPm5leHQgPSByZWFkeVF1ZXVlOwogICAgICAgIHJlYWR5UXVldWUgPSBuZXdQcm9jZXNzOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgLy8g5om+5Yiw5ZCI6YCC5L2N572u5o+S5YWlCiAgICBQQ0IgKmN1cnJlbnQgPSByZWFkeVF1ZXVlOwogICAgd2hpbGUgKGN1cnJlbnQtPm5leHQgIT0gTlVMTCAmJiBjdXJyZW50LT5uZXh0LT5wcmlvcml0eSA+PSBuZXdQcm9jZXNzLT5wcmlvcml0eSkgewogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgfQogICAgbmV3UHJvY2Vzcy0+bmV4dCA9IGN1cnJlbnQtPm5leHQ7CiAgICBjdXJyZW50LT5uZXh0ID0gbmV3UHJvY2VzczsKfQoKLy8g5LuO5bCx57uq6Zif5YiX5Y+W5Ye65LyY5YWI57qn5pyA6auY55qE6L+b56iLClBDQiogZ2V0SGlnaGVzdFByaW9yaXR5KCkgewogICAgaWYgKHJlYWR5UXVldWUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgICBQQ0IgKnAgPSByZWFkeVF1ZXVlOwogICAgcmVhZHlRdWV1ZSA9IHJlYWR5UXVldWUtPm5leHQ7CiAgICBwLT5uZXh0ID0gTlVMTDsKICAgIHJldHVybiBwOwp9CgovLyDmmL7npLrlvZPliY3miYDmnInov5vnqIvnirbmgIEKdm9pZCBkaXNwbGF5UHJvY2Vzc2VzKCkgewogICAgcHJpbnRmKCJcbj09PT09PT09PT0g5b2T5YmN6L+b56iL54q25oCBID09PT09PT09PT1cbiIpOwogICAgCiAgICAvLyDmmL7npLrov5DooYzmgIHov5vnqIsKICAgIGlmIChydW5uaW5nUHJvY2VzcyAhPSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJb6L+Q6KGM5oCBXSDov5vnqIvlkI06ICVzIHwg5LyY5YWI5pWwOiAlZCB8IOi/mOmcgOaXtumXtDogJWQgfCDlt7Lov5DooYw6ICVkXG4iLAogICAgICAgICAgICAgICBydW5uaW5nUHJvY2Vzcy0+bmFtZSwgcnVubmluZ1Byb2Nlc3MtPnByaW9yaXR5LAogICAgICAgICAgICAgICBydW5uaW5nUHJvY2Vzcy0+bmVlZFRpbWUgLSBydW5uaW5nUHJvY2Vzcy0+cnVuVGltZSwKICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnJ1blRpbWUpOwogICAgfQogICAgCiAgICAvLyDmmL7npLrlsLHnu6rpmJ/liJcKICAgIHByaW50ZigiXG7jgJDlsLHnu6rpmJ/liJfjgJFcbiIpOwogICAgaWYgKHJlYWR5UXVldWUgPT0gTlVMTCkgewogICAgICAgIHByaW50ZigiICAo56m6KVxuIik7CiAgICB9IGVsc2UgewogICAgICAgIFBDQiAqcCA9IHJlYWR5UXVldWU7CiAgICAgICAgaW50IGNvdW50ID0gMTsKICAgICAgICB3aGlsZSAocCAhPSBOVUxMKSB7CiAgICAgICAgICAgIHByaW50ZigiICBbJWRdIOi/m+eoi+WQjTogJXMgfCDkvJjlhYjmlbA6ICVkIHwg6L+Y6ZyA5pe26Ze0OiAlZCB8IOeKtuaAgTog5bCx57uqXG4iLAogICAgICAgICAgICAgICAgICAgY291bnQrKywgcC0+bmFtZSwgcC0+cHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICBwLT5uZWVkVGltZSAtIHAtPnJ1blRpbWUpOwogICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICB9CiAgICB9CiAgICBwcmludGYoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwp9CgovLyDosIPluqbnrpfms5XvvIjliqjmgIHkvJjlhYjmlbDvvJrmr4/ov5DooYzkuIDmrKHkvJjlhYjmlbAtMe+8iQp2b2lkIHNjaGVkdWxlKCkgewogICAgaW50IHRpbWUgPSAwOwogICAgCiAgICBwcmludGYoIlxuKioqKioqKioqKiDlvIDlp4vov5vnqIvosIPluqYgKioqKioqKioqKlxuIik7CiAgICAKICAgIHdoaWxlIChyZWFkeVF1ZXVlICE9IE5VTEwgfHwgcnVubmluZ1Byb2Nlc3MgIT0gTlVMTCkgewogICAgICAgIHByaW50ZigiXG4+Pj4g5pe26Ze054mHICVkIDw8PFxuIiwgdGltZSsrKTsKICAgICAgICAKICAgICAgICAvLyDlpoLmnpzlvZPliY3msqHmnInov5DooYzov5vnqIvvvIzku47lsLHnu6rpmJ/liJflj5bkuIDkuKoKICAgICAgICBpZiAocnVubmluZ1Byb2Nlc3MgPT0gTlVMTCkgewogICAgICAgICAgICBydW5uaW5nUHJvY2VzcyA9IGdldEhpZ2hlc3RQcmlvcml0eSgpOwogICAgICAgICAgICBpZiAocnVubmluZ1Byb2Nlc3MgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnN0YXRlID0gUlVOTklORzsKICAgICAgICAgICAgICAgIHByaW50Zigi6LCD5bqm6L+b56iLIFslc10g6L+b5YWl6L+Q6KGM5oCBXG4iLCBydW5uaW5nUHJvY2Vzcy0+bmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8g6L+Q6KGM5b2T5YmN6L+b56iL5LiA5Liq5pe26Ze054mHCiAgICAgICAgaWYgKHJ1bm5pbmdQcm9jZXNzICE9IE5VTEwpIHsKICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnJ1blRpbWUrKzsKICAgICAgICAgICAgcHJpbnRmKCLov5vnqIsgWyVzXSDov5DooYzkuK0uLi4gKOW3sui/kOihjDogJWQvJWQpXG4iLCAKICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdQcm9jZXNzLT5uYW1lLCAKICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdQcm9jZXNzLT5ydW5UaW1lLCAKICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdQcm9jZXNzLT5uZWVkVGltZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblrozmiJAKICAgICAgICAgICAgaWYgKHJ1bm5pbmdQcm9jZXNzLT5ydW5UaW1lID49IHJ1bm5pbmdQcm9jZXNzLT5uZWVkVGltZSkgewogICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnN0YXRlID0gRklOSVNIRUQ7CiAgICAgICAgICAgICAgICBwcmludGYoIuKckyDov5vnqIsgWyVzXSDov5DooYzlrozmiJDvvIFcbiIsIHJ1bm5pbmdQcm9jZXNzLT5uYW1lKTsKICAgICAgICAgICAgICAgIGZyZWUocnVubmluZ1Byb2Nlc3MpOwogICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MgPSBOVUxMOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8g5Yqo5oCB5LyY5YWI5pWw6LCD5pW077ya5LyY5YWI5pWw5YePMQogICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnByaW9yaXR5LS07CiAgICAgICAgICAgICAgICBwcmludGYoIui/m+eoiyBbJXNdIOS8mOWFiOaVsOmZjeS4uiAlZFxuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPm5hbWUsIHJ1bm5pbmdQcm9jZXNzLT5wcmlvcml0eSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIOaXtumXtOeJh+eUqOWujO+8jOaUvuWbnuWwsee7qumYn+WIlwogICAgICAgICAgICAgICAgcnVubmluZ1Byb2Nlc3MtPnN0YXRlID0gUkVBRFk7CiAgICAgICAgICAgICAgICBQQ0IgKnRlbXAgPSBydW5uaW5nUHJvY2VzczsKICAgICAgICAgICAgICAgIHJ1bm5pbmdQcm9jZXNzID0gTlVMTDsKICAgICAgICAgICAgICAgIGluc2VydEJ5UHJpb3JpdHkodGVtcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGlzcGxheVByb2Nlc3NlcygpOwogICAgfQogICAgCiAgICBwcmludGYoIlxuKioqKioqKioqKiDmiYDmnInov5vnqIvosIPluqblrozmiJAgKioqKioqKioqKlxuIik7Cn0KCmludCBtYWluKCkgewogICAgaW50IG4sIGk7CiAgICBjaGFyIG5hbWVbMjBdOwogICAgaW50IHByaW9yaXR5LCBuZWVkVGltZTsKICAgIAogICAgcHJpbnRmKCI9PT09PSDmnIDpq5jkvJjlhYjmlbDkvJjlhYjosIPluqbnrpfms5UgPT09PT1cbiIpOwogICAgcHJpbnRmKCLor7fovpPlhaXov5vnqIvmlbDph486ICIpOwogICAgc2NhbmYoIiVkIiwgJm4pOwogICAgCiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCJcbi0tLSDovpPlhaXnrKwgJWQg5Liq6L+b56iL5L+h5oGvIC0tLVxuIiwgaSArIDEpOwogICAgICAgIHByaW50Zigi6L+b56iL5ZCNOiAiKTsKICAgICAgICBzY2FuZigiJXMiLCBuYW1lKTsKICAgICAgICBwcmludGYoIuS8mOWFiOaVsCjmlbDlgLzotorlpKfkvJjlhYjnuqfotorpq5gpOiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmcHJpb3JpdHkpOwogICAgICAgIHByaW50Zigi6ZyA6KaB6L+Q6KGM5pe26Ze0OiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmbmVlZFRpbWUpOwogICAgICAgIAogICAgICAgIFBDQiAqcCA9IGNyZWF0ZVByb2Nlc3MobmFtZSwgcHJpb3JpdHksIG5lZWRUaW1lKTsKICAgICAgICBpbnNlcnRCeVByaW9yaXR5KHApOwogICAgfQogICAgCiAgICBwcmludGYoIlxu5Yid5aeL5bCx57uq6Zif5YiXOiIpOwogICAgZGlzcGxheVByb2Nlc3NlcygpOwogICAgCiAgICAvLyDlvIDlp4vosIPluqYKICAgIHNjaGVkdWxlKCk7CiAgICAKICAgIHJldHVybiAwOwp9