How is control returned to the dispatcher ?
The current process continues unless one of the following occurs :
Hence, two types of events : Internal events (Sleeping Beauty -
go to sleep and hope in the future a Prince Charming will wake you), or
an external event - (unpredictable) occurs.
Dispatcher keeps a list of ready processes (threads) - how does it
choose ?
a) Zero ready threads - just loops
b) One ready thread - easy
c) More that one thread - use a strategy (FIFO, LIFO, Priority)
A sample dispatcher :
PROCEDURE DISPATCH
BEGIN
If current^.state <> running OR
current^.priority < readyq^.priority THEN
BEGIN /* choose new process */
IF current^.state = running THEN
BEGIN
current^.state=ready
schedule(current)
/* add current to ready queue
in priority order */
END
current := readyq
readyq := readyq^.next
END
load registers from PCB or stack
put PC and PSW on stack
return from interrupt
/* loads PC and PSW from stack */
END
what should dispatcher do if there is no runnable process ?