#include <stdio.h>
#include <string.h>
#define MAX_PROCESS 5 // 最多5个进程
// 定义进程控制块PCB
typedef struct PCB {
char name[ 10 ] ; // 进程名
int priority; // 优先级
int need_time; // 需要运行时间
int run_time; // 已运行时间
char state; // 状态:R-运行,W-就绪,F-完成
} PCB;
PCB pcb[ MAX_PROCESS] ; // 进程数组
int process_num = 0 ; // 实际进程数
// 初始化进程(直接写入输入数据,无需手动输入)
void initProcess( ) {
// 实验示例输入:3个进程
pcb[ 0 ] .priority = 3 ;
pcb[ 0 ] .need_time = 5 ;
pcb[ 0 ] .run_time = 0 ;
pcb[ 0 ] .state = 'W' ;
pcb[ 1 ] .priority = 1 ;
pcb[ 1 ] .need_time = 8 ;
pcb[ 1 ] .run_time = 0 ;
pcb[ 1 ] .state = 'W' ;
pcb[ 2 ] .priority = 5 ;
pcb[ 2 ] .need_time = 10 ;
pcb[ 2 ] .run_time = 0 ;
pcb[ 2 ] .state = 'W' ;
process_num = 3 ;
}
// 查找当前优先级最高的就绪进程
int findMaxPriority( ) {
int max = - 1 ;
int index = - 1 ;
for ( int i = 0 ; i < process_num; i++ ) {
if ( pcb[ i] .state == 'W' && pcb[ i] .priority > max) {
max = pcb[ i] .priority ;
index = i;
}
}
return index;
}
// 显示所有进程信息
void showProcess( ) {
printf ( "进程名\t 优先级\t 需运行时间\t 已运行时间\t 状态\n " ) ; for ( int i = 0 ; i < process_num; i++ ) {
printf ( "%s\t %d\t %d\t \t %d\t \t %c\n " , pcb[ i] .name , pcb[ i] .priority ,
pcb[ i] .need_time , pcb[ i] .run_time , pcb[ i] .state ) ;
}
}
// 进程调度主函数
void scheduleProcess( ) {
int finish_count = 0 ; // 完成进程数
int current; // 当前运行进程下标
printf ( "===== 最高优先数优先调度算法开始 =====\n " ) ; showProcess( ) ;
while ( finish_count < process_num) {
current = findMaxPriority( ) ;
if ( current == - 1 ) break ; // 无就绪进程
// 选中进程运行
pcb[ current] .state = 'R' ;
printf ( "\n 运行进程:%s\n " , pcb
[ current
] .
name ) ; pcb[ current] .run_time ++; // 运行时间+1
// 运行完成
if ( pcb[ current] .run_time == pcb[ current] .need_time ) {
pcb[ current] .state = 'F' ;
finish_count++;
printf ( "进程 %s 运行完毕!\n " , pcb
[ current
] .
name ) ; } else {
// 动态优先级:运行一次优先级-1
pcb[ current] .priority --;
pcb[ current] .state = 'W' ;
}
showProcess( ) ;
}
printf ( "\n ===== 所有进程调度完成 =====\n " ) ; }
int main( ) {
initProcess( ) ; // 初始化并输入进程
scheduleProcess( ) ; // 调度进程
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYX1BST0NFU1MgNSAgLy8g5pyA5aSaNeS4qui/m+eoiwoKLy8g5a6a5LmJ6L+b56iL5o6n5Yi25Z2XUENCCnR5cGVkZWYgc3RydWN0IFBDQiB7CiAgICBjaGFyIG5hbWVbMTBdOyAgICAgLy8g6L+b56iL5ZCNCiAgICBpbnQgcHJpb3JpdHk7ICAgICAgLy8g5LyY5YWI57qnCiAgICBpbnQgbmVlZF90aW1lOyAgICAgLy8g6ZyA6KaB6L+Q6KGM5pe26Ze0CiAgICBpbnQgcnVuX3RpbWU7ICAgICAgLy8g5bey6L+Q6KGM5pe26Ze0CiAgICBjaGFyIHN0YXRlOyAgICAgICAgLy8g54q25oCB77yaUi3ov5DooYzvvIxXLeWwsee7qu+8jEYt5a6M5oiQCn0gUENCOwoKUENCIHBjYltNQVhfUFJPQ0VTU107ICAvLyDov5vnqIvmlbDnu4QKaW50IHByb2Nlc3NfbnVtID0gMDsgICAvLyDlrp7pmYXov5vnqIvmlbAKCi8vIOWIneWni+WMlui/m+eoi++8iOebtOaOpeWGmeWFpei+k+WFpeaVsOaNru+8jOaXoOmcgOaJi+WKqOi+k+WFpe+8iQp2b2lkIGluaXRQcm9jZXNzKCkgewogICAgLy8g5a6e6aqM56S65L6L6L6T5YWl77yaM+S4qui/m+eoiwogICAgc3RyY3B5KHBjYlswXS5uYW1lLCAiYWEiKTsKICAgIHBjYlswXS5wcmlvcml0eSA9IDM7CiAgICBwY2JbMF0ubmVlZF90aW1lID0gNTsKICAgIHBjYlswXS5ydW5fdGltZSA9IDA7CiAgICBwY2JbMF0uc3RhdGUgPSAnVyc7CgogICAgc3RyY3B5KHBjYlsxXS5uYW1lLCAiYmIiKTsKICAgIHBjYlsxXS5wcmlvcml0eSA9IDE7CiAgICBwY2JbMV0ubmVlZF90aW1lID0gODsKICAgIHBjYlsxXS5ydW5fdGltZSA9IDA7CiAgICBwY2JbMV0uc3RhdGUgPSAnVyc7CgogICAgc3RyY3B5KHBjYlsyXS5uYW1lLCAiY2MiKTsKICAgIHBjYlsyXS5wcmlvcml0eSA9IDU7CiAgICBwY2JbMl0ubmVlZF90aW1lID0gMTA7CiAgICBwY2JbMl0ucnVuX3RpbWUgPSAwOwogICAgcGNiWzJdLnN0YXRlID0gJ1cnOwoKICAgIHByb2Nlc3NfbnVtID0gMzsKfQoKLy8g5p+l5om+5b2T5YmN5LyY5YWI57qn5pyA6auY55qE5bCx57uq6L+b56iLCmludCBmaW5kTWF4UHJpb3JpdHkoKSB7CiAgICBpbnQgbWF4ID0gLTE7CiAgICBpbnQgaW5kZXggPSAtMTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc19udW07IGkrKykgewogICAgICAgIGlmIChwY2JbaV0uc3RhdGUgPT0gJ1cnICYmIHBjYltpXS5wcmlvcml0eSA+IG1heCkgewogICAgICAgICAgICBtYXggPSBwY2JbaV0ucHJpb3JpdHk7CiAgICAgICAgICAgIGluZGV4ID0gaTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gaW5kZXg7Cn0KCi8vIOaYvuekuuaJgOaciei/m+eoi+S/oeaBrwp2b2lkIHNob3dQcm9jZXNzKCkgewogICAgcHJpbnRmKCJcbuW9k+WJjei/m+eoi+eKtuaAge+8mlxuIik7CiAgICBwcmludGYoIui/m+eoi+WQjVx05LyY5YWI57qnXHTpnIDov5DooYzml7bpl7RcdOW3sui/kOihjOaXtumXtFx054q25oCBXG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2Vzc19udW07IGkrKykgewogICAgICAgIHByaW50ZigiJXNcdCVkXHQlZFx0XHQlZFx0XHQlY1xuIiwKICAgICAgICAgICAgICAgcGNiW2ldLm5hbWUsIHBjYltpXS5wcmlvcml0eSwKICAgICAgICAgICAgICAgcGNiW2ldLm5lZWRfdGltZSwgcGNiW2ldLnJ1bl90aW1lLCBwY2JbaV0uc3RhdGUpOwogICAgfQp9CgovLyDov5vnqIvosIPluqbkuLvlh73mlbAKdm9pZCBzY2hlZHVsZVByb2Nlc3MoKSB7CiAgICBpbnQgZmluaXNoX2NvdW50ID0gMDsgIC8vIOWujOaIkOi/m+eoi+aVsAogICAgaW50IGN1cnJlbnQ7ICAgICAgICAgICAvLyDlvZPliY3ov5DooYzov5vnqIvkuIvmoIcKCiAgICBwcmludGYoIj09PT09IOacgOmrmOS8mOWFiOaVsOS8mOWFiOiwg+W6pueul+azleW8gOWniyA9PT09PVxuIik7CiAgICBzaG93UHJvY2VzcygpOwoKICAgIHdoaWxlIChmaW5pc2hfY291bnQgPCBwcm9jZXNzX251bSkgewogICAgICAgIGN1cnJlbnQgPSBmaW5kTWF4UHJpb3JpdHkoKTsKICAgICAgICBpZiAoY3VycmVudCA9PSAtMSkgYnJlYWs7ICAvLyDml6DlsLHnu6rov5vnqIsKCiAgICAgICAgLy8g6YCJ5Lit6L+b56iL6L+Q6KGMCiAgICAgICAgcGNiW2N1cnJlbnRdLnN0YXRlID0gJ1InOwogICAgICAgIHByaW50ZigiXG7ov5DooYzov5vnqIvvvJolc1xuIiwgcGNiW2N1cnJlbnRdLm5hbWUpOwogICAgICAgIHBjYltjdXJyZW50XS5ydW5fdGltZSsrOyAgIC8vIOi/kOihjOaXtumXtCsxCgogICAgICAgIC8vIOi/kOihjOWujOaIkAogICAgICAgIGlmIChwY2JbY3VycmVudF0ucnVuX3RpbWUgPT0gcGNiW2N1cnJlbnRdLm5lZWRfdGltZSkgewogICAgICAgICAgICBwY2JbY3VycmVudF0uc3RhdGUgPSAnRic7CiAgICAgICAgICAgIGZpbmlzaF9jb3VudCsrOwogICAgICAgICAgICBwcmludGYoIui/m+eoiyAlcyDov5DooYzlrozmr5XvvIFcbiIsIHBjYltjdXJyZW50XS5uYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDliqjmgIHkvJjlhYjnuqfvvJrov5DooYzkuIDmrKHkvJjlhYjnuqctMQogICAgICAgICAgICBwY2JbY3VycmVudF0ucHJpb3JpdHktLTsKICAgICAgICAgICAgcGNiW2N1cnJlbnRdLnN0YXRlID0gJ1cnOwogICAgICAgIH0KICAgICAgICBzaG93UHJvY2VzcygpOwogICAgfQogICAgcHJpbnRmKCJcbj09PT09IOaJgOaciei/m+eoi+iwg+W6puWujOaIkCA9PT09PVxuIik7Cn0KCmludCBtYWluKCkgewogICAgaW5pdFByb2Nlc3MoKTsgICAgLy8g5Yid5aeL5YyW5bm26L6T5YWl6L+b56iLCiAgICBzY2hlZHVsZVByb2Nlc3MoKTsvLyDosIPluqbov5vnqIsKICAgIHJldHVybiAwOwp9