Processes in the TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE further subdivided into different classes, each of which corresponds to a specific event. In this state, the state of the process does not provide enough information to quickly get the process descriptor, so another process list called wait_queue . Wait_queue implements conditional event expectations. A process waiting for a specific event is placed in the correct wait queue.
Waiting queues are executed as circular lists, the elements of which include pointers to handle descriptors. Each element of the wait queue list is of type wait_queue:
struct wait_queue { struct task_struct * task; struct wait_queue * next; };
source share