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?