实验5:进程调度算法模拟-RR

模拟时间片轮转算法 1、用到的数据结构 /* PCB */ struct PCB { pid_t pid;//进程 PID int state; //状态信息,1 表示正在运行,0 表示暂停,-1 表示结束 unsigned long runned_time;//已运行时间 unsigned long need_running_time;//剩余运行时间 }; /* PCB集合 */ struct PCB pcb[TOTAL]; //PCB 集合 2、算法思路 算法实现分主函数(main)和分派函数(Dispatch)。 (1)其中主函数(main)的核心功能为: 实现 6 个子进程的创建和子进程 PCB 的初始化。对子进程 PCB 初始化时,状态设为 0,运 行时间由随机数产生。子进程创建后,就通过信号 SIGSTOP 让它处于暂停状态,当被分派 函数(Dispatch)选中后,才能继续执行,输出子进程 x 正在执行的信息。 同时要在主程序里设置定时器,定时器的时间间隔为时间片长度,时间片到,就调用分派函 数(Dispatch)重新选派程序。 (2)分派函数的核心功能: 将正在执行的子进程暂停,状态变为 0,修改已运行时间和剩余运行时间。 如果该子进程剩余时间小于或等于 0,说明执行完毕,PCB 状态改为-1,结束该子进程。 重新选择下一个子进程,状态变为 1,输出该子进程的已运行时间和剩余运行时间,让该子 进程恢复运行。 当所有子进程都结束后,则父程序结束

相关代码:

运行结果:

猜你喜欢

转载自blog.csdn.net/weixin_52357218/article/details/128619044