函数组成。其中: INSERT1的功能是把还未完成且优先数小于别的进程的进程PCB按进程优先数的顺序插入到就绪队列中。 INSERT2是轮转法使用的函数,将执行了一个单位时间片数(为2)且还未完成的进程的PCB插到就绪队列的队尾。 FIRSTIN 的功能是将就绪队列中的第一个进程投入运行。 PRINT打印每执行一个时间片后的所有进程的状态,这里,就绪(等待)用“W”代表。 CREATE 的功能是创建新的进程,即创立进程的PCB,并将此PCB链入到就绪队列中去。 PRISCH按优先数算法调度进程。 ROUNDSCH按时间片轮转法调度进程。 主程序中定义了PCB 的结构和其它变量:number——进程数,algo为10个字符长的字符串,存放要求输入的算法的名,PRIORITY 为优先数算法,ROUNDROBIN为循环轮转法,在程序运行时输入其中的一个。 3.主要算法
算法 PRISCH
{ while (当前运行进程不为空) {
进程占用CPU 时间加1 进程到完成还要的CPU时间减1 进程优先数减3
if(进程到完成还要的CPU时间为0) { 将该进程插入到完成队列中 修改该进程状态 当前运行进程指针为空 if(就绪队列不为空) FIRSTIN函数 }
else if (就绪队列不为空且当前进程优先数小于就绪队列中第一
个进程的优先数)
{ 修改当前进程状态为W INSERT1函数 FIRSTIN函数 } PRINT函数 } }
算法 ROUNDSCH
{ while (当前运行进程不为空)
{
进程占用CPU 时间加1 进程到完成还要的CPU时间减1 进程计数器加1
if(进程到完成还要的CPU时间为0) { 将该进程插入到完成队列中 修改该进程状态 当前运行进程指针为空 if(就绪队列不为空) FIRSTIN过程 }
else if (进程计数器等于进程轮转时间片) { 修改当前进程计数器为0 if(就绪队列不为空) { 修改当前进程状态为W INSERT2过程 FIRSTIN过程 } } PRINT过程 } }
六. 实验报告
1. 实验题目。
2. 采用的数据结构及符号说明。
3. 打印一份源程序清单,并附加流程图与注释。 4. 打印出两种算法的执行结果。
5. 比较两种算法的优缺点并分析实验过程中遇到的问题,谈谈实验后的体会。