scheduler and sched).
Also process creation: sys_fork() and copyproc().
sched(), which ends up jumping
into scheduler().
Submit:
Where is the stack that sched() executes on?
Where is the stack that scheduler() executes on?
When sched() calls swtch(),
does that call to swtch() ever return? If so, when?
swtch, to
maintain. Compare these invariants with what swtch
actually implements, and the state that our kernel maintains in
a struct context.
Submit: Could swtch do less work and still be
correct? Could we reduce the size of a struct context?
Provide concrete examples if yes, or argue for why not.
swtch() in scheduler() with calls
to cprintf() like this:
cprintf("a");
swtch(&cpu->scheduler, proc->context);
cprintf("b");
Similarly,
surround the call to swtch() in sched() with calls
to cprintf() like this:
cprintf("c");
swtch(&proc->context, cpu->scheduler);
cprintf("d");
Rebuild your kernel and boot it on QEMU.
With a few exceptions
you should see a regular four-character pattern repeated over and over.
Submit: What is the four-character pattern?
The very first characters are ac. Why does
this happen?