Untitled

 avatar
unknown
plain_text
4 months ago
891 B
3
Indexable
void
scheduler(void)
{
    struct proc *p;
    struct proc *high_priority_proc;

    for(;;){
        // Enable interrupts on this processor.
        sti();

        acquire(&ptable.lock);

        high_priority_proc = 0;

        // Find the process with the highest priority
        for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){
            if(p->state != RUNNABLE)
                continue;

            if(!high_priority_proc || p->priority < high_priority_proc->priority){
                high_priority_proc = p;
            }
        }

        if(high_priority_proc){
            p = high_priority_proc;

            // Switch to the chosen process
            proc = p;
            switchuvm(p);
            p->state = RUNNING;
            swtch(&cpu->scheduler, proc->context);
            switchkvm();

            proc = 0;
        }

        release(&ptable.lock);
    }
}
Editor is loading...
Leave a Comment