RTEMS CPU Kit with SuperCore
4.11.3
|
The scheduler nodes can be in four states. More...
![]() |
Modules | |
Deterministic Priority SMP Scheduler | |
This is an implementation of the global fixed priority scheduler (G-FP). | |
Simple Priority SMP Scheduler | |
The Simple Priority SMP Scheduler allocates a processor for the processor count highest priority ready threads. | |
Files | |
file | schedulersmp.h |
SMP Scheduler API. | |
file | schedulersmpimpl.h |
SMP Scheduler Implementation. | |
Data Structures | |
struct | Scheduler_SMP_Context |
Scheduler context specialization for SMP schedulers. More... | |
struct | Scheduler_SMP_Node |
Scheduler node specialization for SMP schedulers. More... | |
Typedefs | |
typedef Scheduler_Node *(* | Scheduler_SMP_Get_highest_ready) (Scheduler_Context *context, Scheduler_Node *node) |
typedef Scheduler_Node *(* | Scheduler_SMP_Get_lowest_scheduled) (Scheduler_Context *context, Scheduler_Node *filter, Chain_Node_order order) |
typedef void(* | Scheduler_SMP_Extract) (Scheduler_Context *context, Scheduler_Node *node_to_extract) |
typedef void(* | Scheduler_SMP_Insert) (Scheduler_Context *context, Scheduler_Node *node_to_insert) |
typedef void(* | Scheduler_SMP_Move) (Scheduler_Context *context, Scheduler_Node *node_to_move) |
typedef void(* | Scheduler_SMP_Update) (Scheduler_Context *context, Scheduler_Node *node_to_update, Priority_Control new_priority) |
typedef Thread_Control *(* | Scheduler_SMP_Enqueue) (Scheduler_Context *context, Scheduler_Node *node_to_enqueue, Thread_Control *needs_help) |
typedef Thread_Control *(* | Scheduler_SMP_Enqueue_scheduled) (Scheduler_Context *context, Scheduler_Node *node_to_enqueue) |
typedef void(* | Scheduler_SMP_Allocate_processor) (Scheduler_Context *context, Thread_Control *scheduled, Thread_Control *victim) |
Enumerations | |
enum | Scheduler_SMP_Node_state { SCHEDULER_SMP_NODE_BLOCKED, SCHEDULER_SMP_NODE_SCHEDULED, SCHEDULER_SMP_NODE_READY } |
SMP scheduler node states. More... | |
Functions | |
void | _Scheduler_SMP_Start_idle (const Scheduler_Control *scheduler, Thread_Control *thread, struct Per_CPU_Control *cpu) |
Variables | |
const bool | _Scheduler_SMP_Node_valid_state_changes [3][3] |
The scheduler nodes can be in four states.
State transitions are triggered via basic operations
During system initialization each processor of the scheduler instance starts with an idle thread assigned to it. Lets have a look at an example with two idle threads I and J with priority 5. We also have blocked threads A, B and C with priorities 1, 2 and 3 respectively. The scheduler nodes are ordered with respect to the thread priority from left to right in the below diagrams. The highest priority node (lowest priority number) is the leftmost node. Since the processor assignment is independent of the thread priority the processor indices may move from one state to the other.
Lets start A. For this an enqueue operation is performed.
Lets start C.
Lets start B.
Lets change the priority of thread A to 4.
Now perform a blocking operation with thread B. Please note that thread A migrated now from processor 0 to processor 1 and thread C still executes on processor 1.
SMP scheduler node states.