// - choose a process to run
// - longjmp to start running that process
// - eventually that process transfers control back
-// via longjmp back to the top of scheduler.
+// via longjmp back to the scheduler.
void
scheduler(void)
{
}
// A fork child's very first scheduling by scheduler()
-// will longjmp here. "return" to user space.
+// will longjmp here. "Return" to user space.
void
forkret(void)
{
p->state = UNUSED;
p->pid = 0;
p->ppid = 0;
+ p->name[0] = 0;
release(&proc_table_lock);
return pid;
}
void
procdump(void)
{
+ static char *states[] = {
+ "unused",
+ "embryo",
+ "sleep ",
+ "runble",
+ "run ",
+ "zombie"
+ };
int i;
struct proc *p;
+ char *state;
for(i = 0; i < NPROC; i++) {
p = &proc[i];
if(p->state == UNUSED)
continue;
- cprintf("%d %d %p\n", p->pid, p->state);
+ if(p->state < 0 || p->state > ZOMBIE)
+ state = "???";
+ else
+ state = states[p->state];
+ cprintf("%d %s %s\n", p->pid, state, p->name);
}
}