Index Index for
Section 9r
Index Alphabetical
listing for S
Bottom of page Bottom of
page

sleep(9r)

NAME

sleep - General: Puts a calling process to sleep

SYNOPSIS

void sleep( caddr_t *channel, long pri );

ARGUMENTS

channel Specifies a unique address associated with the calling kernel thread to be put to sleep. pri Specifies whether the sleep request is interruptible. Setting this argument to the PCATCH flag causes the process to sleep in an interruptible state (that is, the kernel thread can take asynchronous signals). Not setting the PCATCH flag causes the process to sleep in an uninterruptible state (that is, the kernel thread cannot take asynchronous signals).

DESCRIPTION

The sleep routine puts a calling process to sleep on the address specified by the channel argument. Some common addresses are the lbolt argument, a buf structure, and a proc structure. This address should be unique to prevent unexpected wake/sleep cycles, which can occur if different processes are sleeping on the same address accidentally. If you set the PCATCH flag in the pri argument, the sleep routine puts signals on the queue and does not wake up the sleeping process. The sleep and wakeup routines block and then wake up a process. Generally, device drivers call these routines to wait for the transfer to complete an interrupt from the device. That is, the write routine of the device driver sleeps on the address of a known location, and the device's Interrupt Service Interface (ISI) wakes the process when the device interrupts. It is the responsibility of the wakened process to check if the condition for which it was sleeping has been removed.

NOTES

The operating system provides two ways to put a process to sleep: interruptible and uninterruptible. The sleep routine performs an uninterruptible sleep operation if you do not set the PCATCH flag and an interruptible sleep operation if you set the PCATCH flag. This means that device drivers cannot call sleep at interrupt context because at interrupt context there is no calling process to be put to sleep. Thus, a device driver's Interrupt Service Interface (ISI) and those routines called from within the ISI must not call the sleep routine. On this operating system, you cannot use pri to set the scheduling priority of the calling process.

RETURN VALUES

None

FILES

<param.h>

SEE ALSO

Routines: wakeup(9r)

Index Index for
Section 9r
Index Alphabetical
listing for S
Top of page Top of
page