PUBLIC void schedule() { PROCESS* p; int greatest_priority=0; int i; while (!greatest_priority) { if (firstLen-firstHead>0) { p_proc_ready=firstQueue[firstHead]; //greatest_priority=p_proc_ready->ticks; greatest_priority=p_proc_ready->priority; break; } else if(secondLen-secondHead>0) { for (i=0; i<secondLen; i++) { p=secondQueue[i]; if (p->state!=kRUNNABLE || p->ticks==0) continue; if (p->ticks > greatest_priority) { greatest_priority = p->ticks; p_proc_ready = p; } /*{ if (p->priority>greatest_priority && p->ticks!=0) { greatest_priority=p->priority; p_proc_ready=p; } }*/ } } else { for(i=0;i<lastLen;i++) { p=lastQueue[i]; if (p->ticks > greatest_priority) { greatest_priority = p->ticks; p_proc_ready = p; } } } if (!greatest_priority) initializeAllPro(); } p_proc_ready->state=kRUNNING; }
PUBLIC void schedule() { PROCESS* p; int greatest_priority=0; int i; while (!greatest_priority) { if (firstLen-firstHead>0) { p_proc_ready=firstQueue[firstHead]; //第一个队列按照先到先得 greatest_priority=p_proc_ready->ticks; break; } else //第二个队列按照优先级 { for (i=0; i<secondLen; i++) //第二个队列增设判断是否为runnable状态 { p=secondQueue[i]; if (p->state!=kRUNNABLE || p->ticks==0) continue; if (p->ticks > greatest_priority) { greatest_priority = p->ticks; p_proc_ready = p; } /*{ 下面代码被卡死。。。我也不懂为什么。。 if (p->priority>greatest_priority && p->ticks!=0) { greatest_priority=p->priority; p_proc_ready=p; } }*/ } } if (!greatest_priority) initializeAllPro(); } p_proc_ready->state=kRUNNING; }