MentOS
0.8.0
The Mentoring Operating System
|
Go to the source code of this file.
Classes | |
struct | wait_queue_head_t |
Head of the waiting queue. More... | |
struct | wait_queue_entry_t |
Entry of the waiting queue. More... | |
Macros | |
#define | WNOHANG 0x00000001 |
Return immediately if no child is there to be waited for. | |
#define | WUNTRACED 0x00000002 |
Return for children that are stopped, and whose status has not been reported. | |
#define | WIFSIGNALED(status) (!WIFSTOPPED(status) && !WIFEXITED(status)) |
returns true if the child process exited because of a signal that was not caught. | |
#define | WIFSTOPPED(status) (((status)&0xff) == 0x7f) |
returns true if the child process that caused the return is currently stopped; this is only possible if the call was done using WUNTRACED(). | |
#define | WEXITSTATUS(status) (((status)&0xff00) >> 8) |
evaluates to the least significant eight bits of the return code of the child that terminated, which may have been set as the argument to a call to exit() or as the argument for a return statement in the main program. This macro can only be evaluated if WIFEXITED() returned nonzero. | |
#define | WTERMSIG(status) ((status)&0x7f) |
returns the number of the signal that caused the child process to terminate. This macro can only be evaluated if WIFSIGNALED() returned nonzero. | |
#define | WIFEXITED(status) (WTERMSIG(status) == 0) |
Is nonzero if the child exited normally. | |
#define | WSTOPSIG(status) (WEXITSTATUS(status)) |
returns the number of the signal that caused the child to stop. This macro can only be evaluated if WIFSTOPPED() returned nonzero. | |
#define | TASK_RUNNING 0x00 |
The process is either: 1) running on CPU or 2) waiting in a run queue. | |
#define | TASK_INTERRUPTIBLE (1 << 0) |
The process is sleeping, waiting for some event to occur. | |
#define | TASK_UNINTERRUPTIBLE (1 << 1) |
Similar to TASK_INTERRUPTIBLE, but it doesn't process signals. | |
#define | TASK_STOPPED (1 << 2) |
Stopped, it's not running, and not able to run. | |
#define | TASK_TRACED (1 << 3) |
Is being monitored by other processes such as debuggers. | |
#define | EXIT_ZOMBIE (1 << 4) |
The process has terminated. | |
#define | EXIT_DEAD (1 << 5) |
The final state. | |
#define | WQ_FLAG_EXCLUSIVE 0x01 |
When an entry has this flag is added to the end of the wait queue. Entries without that flag are, instead, added to the beginning. | |
Typedefs | |
typedef struct wait_queue_head_t | wait_queue_head_t |
Head of the waiting queue. | |
typedef struct wait_queue_entry_t | wait_queue_entry_t |
Entry of the waiting queue. | |
Functions | |
wait_queue_entry_t * | wait_queue_entry_alloc (void) |
Allocates the memory for a wait_queue_entry. More... | |
void | wait_queue_entry_dealloc (wait_queue_entry_t *wait_queue_entry) |
Frees the memory of a wait_queue_entry. More... | |
void | init_waitqueue_entry (wait_queue_entry_t *wq, struct task_struct *task) |
Initialize the waiting queue entry. More... | |
void | add_wait_queue (wait_queue_head_t *head, wait_queue_entry_t *wq) |
Adds the element to the waiting queue. More... | |
void | remove_wait_queue (wait_queue_head_t *head, wait_queue_entry_t *wq) |
Removes the element from the waiting queue. More... | |
int | default_wake_function (wait_queue_entry_t *wait, unsigned mode, int sync) |
The default wake function, a wrapper for try_to_wake_up. More... | |
wait_queue_entry_t * | sleep_on (wait_queue_head_t *wq) |
Sets the state of the current process to TASK_UNINTERRUPTIBLE and inserts it into the specified wait queue. More... | |
void add_wait_queue | ( | wait_queue_head_t * | head, |
wait_queue_entry_t * | wq | ||
) |
Adds the element to the waiting queue.
head | The head of the waiting queue. |
wq | The entry we insert inside the waiting queue. |
int default_wake_function | ( | wait_queue_entry_t * | wait, |
unsigned | mode, | ||
int | sync | ||
) |
The default wake function, a wrapper for try_to_wake_up.
wait | The pointer to the wait queue. |
mode | The type of wait (TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE). |
sync | Specifies if the wakeup should be synchronous. |
void init_waitqueue_entry | ( | wait_queue_entry_t * | wq, |
struct task_struct * | task | ||
) |
Initialize the waiting queue entry.
wq | The entry we initialize. |
task | The task associated with the entry. |
void remove_wait_queue | ( | wait_queue_head_t * | head, |
wait_queue_entry_t * | wq | ||
) |
Removes the element from the waiting queue.
head | The head of the waiting queue. |
wq | The entry we remove from the waiting queue. |
wait_queue_entry_t* sleep_on | ( | wait_queue_head_t * | wq | ) |
Sets the state of the current process to TASK_UNINTERRUPTIBLE and inserts it into the specified wait queue.
wq | Waitqueue where to sleep. |
wait_queue_entry_t* wait_queue_entry_alloc | ( | void | ) |
Allocates the memory for a wait_queue_entry.
void wait_queue_entry_dealloc | ( | wait_queue_entry_t * | wait_queue_entry | ) |
Frees the memory of a wait_queue_entry.
wait_queue_entry | pointer to the wait_queue_entry. |