diff --git a/kernel/proc.c b/kernel/proc.c index 58a8a0b..4354ec5 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -454,6 +454,7 @@ scheduler(void) // processes are waiting. intr_on(); + int found = 0; for(p = proc; p < &proc[NPROC]; p++) { acquire(&p->lock); if(p->state == RUNNABLE) { @@ -467,9 +468,14 @@ scheduler(void) // Process is done running for now. // It should have changed its p->state before coming back. c->proc = 0; + found = 1; } release(&p->lock); } + if(found == 0) { + intr_on(); + asm volatile("wfi"); + } } }