定义了进程控制块pcb数据结构。文件中SJF()函数需要由学生来实现,由于running()函数同样每次都执行ready指针指向的进程,需要做的是将不断创建的进程按照其运行时间正确插入已按运行时间由小到大排列的队列中。请补全下面的代码并编译运行。
void SJF()//Shortest Job First 不可抢占
{
PCB *tp,*tempp;
if(!ready ){ //就绪队列为空
//待补全 将进程控制块插入空就绪队列,设置首尾指针、运行状态
}
else{
tp=ready;
tempp=tp;
if(ready->oncerun == 1) //当前进程正在执行
tp = tp->link;
if(tp!=NOTHING)
{
while(p->ntime >= tp->ntime ){//tp为插入位置
tempp = tp;
tp = tp->link;
if(tp==NOTHING)
break;
}
}
if(tp == ready){
if(ready->oncerun == 0){
//插入进程p为当前运行时间最短进程,插入头当前无运行进程并设置插入进程为运行进程
//待补全
}
else{ //当前有运行进程
//待补全
注意:本次实验希望学生实现的是非抢占的SJF调度,因此你需要注意在新插入进程的时候队首是否已经处于运行状态,再将其插入争取的位置。