RTEMS
|
Scheduler node for per-thread data. More...
#include <schedulernode.h>
Public Attributes | |
union { | |
Chain_Node Chain | |
RBTree_Node RBTree | |
} | Node |
Chain node for usage in various scheduler data structures. More... | |
int | sticky_level |
The sticky level determines if this scheduler node should use an idle thread in case this node is scheduled and the owner thread is blocked. | |
struct _Thread_Control * | user |
The thread using this node. More... | |
struct _Thread_Control * | idle |
The idle thread claimed by this node in case the sticky level is greater than zero and the thread is block or is scheduled on another scheduler instance. More... | |
struct _Thread_Control * | owner |
The thread owning this node. | |
struct { | |
Chain_Node Wait_node | |
Node to add this scheduler node to Thread_Control::Scheduler::Wait_nodes. | |
union { | |
Chain_Node Chain | |
The node for Thread_Control::Scheduler::Scheduler_nodes. | |
Scheduler_Node * next | |
The next pointer for a temporary remove list. More... | |
} Scheduler_node | |
Node to add this scheduler node to Thread_Control::Scheduler::Scheduler_nodes or a temporary remove list. | |
Scheduler_Node * next_request | |
Link to the next scheduler node in the Thread_Control::Scheduler::requests list. | |
Scheduler_Node_request request | |
The current scheduler node request. | |
} | Thread |
Block to register and manage this scheduler node in the thread control block of the owner of this scheduler node. | |
struct { | |
Priority_Aggregation Priority | |
} | Wait |
Thread wait support block. | |
struct { | |
Priority_Control value | |
The thread priority value of this scheduler node. More... | |
SMP_sequence_lock_Control Lock | |
Sequence lock to synchronize priority value updates. | |
} | Priority |
The thread priority information used by the scheduler. More... | |
Scheduler node for per-thread data.
Definition at line 79 of file schedulernode.h.
struct _Thread_Control* Scheduler_Node::idle |
The idle thread claimed by this node in case the sticky level is greater than zero and the thread is block or is scheduled on another scheduler instance.
This is necessary to ensure the priority ceiling protocols work across scheduler boundaries.
Definition at line 117 of file schedulernode.h.
Scheduler_Node* Scheduler_Node::next |
The next pointer for a temporary remove list.
Definition at line 152 of file schedulernode.h.
union { ... } Scheduler_Node::Node |
Chain node for usage in various scheduler data structures.
Strictly, this is the wrong place for this field since the data structures to manage scheduler nodes belong to the particular scheduler implementation. Currently, all SMP scheduler implementations use chains or red-black trees. The node is here to simplify things, just like the object node in the thread control block.
struct { ... } Scheduler_Node::Priority |
The thread priority information used by the scheduler.
The thread priority is manifest in two independent areas. One area is the user visible thread priority along with a potential thread queue. The other is the scheduler. During a thread priority change, the user visible thread priority and the thread queue are first updated and the thread priority value here is changed. Once this is done the scheduler is notified via the update priority operation, so that it can update its internal state and honour a new thread priority value.
struct _Thread_Control* Scheduler_Node::user |
The thread using this node.
This is either the owner or an idle thread.
Definition at line 107 of file schedulernode.h.
Priority_Control Scheduler_Node::value |
The thread priority value of this scheduler node.
The producer of this value is _Thread_Change_priority(). The consumer is the scheduler via the unblock and update priority operations.
This priority control consists of two parts. One part is the plain priority value (most-significant 63 bits). The other part is the least-significant bit which indicates if the thread should be appended (bit set) or prepended (bit cleared) to its priority group, see SCHEDULER_PRIORITY_APPEND().
Definition at line 199 of file schedulernode.h.