RTEMS
Public Attributes | List of all members
Scheduler_Node Struct Reference

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_Controluser
 The thread using this node. More...
 
struct _Thread_Controlidle
 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_Controlowner
 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...
 

Detailed Description

Scheduler node for per-thread data.

Definition at line 79 of file schedulernode.h.

Member Data Documentation

◆ idle

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.

◆ next

Scheduler_Node* Scheduler_Node::next

The next pointer for a temporary remove list.

See also
_Thread_Scheduler_process_requests().

Definition at line 152 of file schedulernode.h.

◆ Node

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.

◆ Priority

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.

◆ user

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.

◆ value

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.


The documentation for this struct was generated from the following file: