wakeup - General: Wakes up all processes sleeping on a
caddr_t channel );
Specifies the address on which the wakeup is to be issued.
The wakeup routine wakes up all processes sleeping on the
address specified by the channel argument. All processes
sleeping on this address are awakened and made ready to be
scheduled according to the priorities they specified when
they went to sleep. It is possible that there are no processes
sleeping on the channel at the time the wakeup is
issued. This situation can occur for a variety of reasons
and does not represent an error condition.
The sleep and wakeup routines block and unblock a process.
Generally, a device driver issues these routines on behalf
of a process requesting I/O while a transfer is in
progress. That is, a process requesting I/O is put to
sleep on an address associated with the request by the
appropriate device driver routine. When the transfer has
asynchronously completed, the device driver interrupt service
routine issues a wakeup on the address associated
with the completed request. This action makes the relevant
process to be scheduled.
The process resumes execution within the relevant device
driver routine at the point immediately following the
request to sleep. The driver, on behalf of the process,
can then determine whether the condition for which it was
sleeping (in this example, completion of an I/O request)
has been removed. If so, it can continue on to complete
the I/O request. Otherwise, the appropriate driver routine
can decide to put the process back to sleep to await
removal of the indicated condition.
Routines: mpsleep(9r), sleep(9r)
[ Back ]