RTEMS
5.1
|
SMP Scheduler. More...
Modules | |
Deterministic Priority SMP Scheduler | |
Deterministic Priority SMP Scheduler. | |
EDF Priority SMP Scheduler | |
EDF Priority SMP Scheduler. | |
Simple Priority SMP Scheduler | |
Simple Priority SMP Scheduler. | |
Strong APA Scheduler | |
Strong APA Scheduler. | |
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 bool(* | Scheduler_SMP_Has_ready) (Scheduler_Context *context) |
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) |
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, Priority_Control insert_priority) |
typedef void(* | Scheduler_SMP_Move) (Scheduler_Context *context, Scheduler_Node *node_to_move) |
typedef bool(* | Scheduler_SMP_Ask_for_help) (Scheduler_Context *context, Thread_Control *thread, Scheduler_Node *node) |
typedef void(* | Scheduler_SMP_Update) (Scheduler_Context *context, Scheduler_Node *node_to_update, Priority_Control new_priority) |
typedef void(* | Scheduler_SMP_Set_affinity) (Scheduler_Context *context, Scheduler_Node *node, void *arg) |
typedef bool(* | Scheduler_SMP_Enqueue) (Scheduler_Context *context, Scheduler_Node *node_to_enqueue, Priority_Control priority) |
typedef void(* | Scheduler_SMP_Allocate_processor) (Scheduler_Context *context, Scheduler_Node *scheduled, Scheduler_Node *victim, Per_CPU_Control *victim_cpu) |
typedef void(* | Scheduler_SMP_Register_idle) (Scheduler_Context *context, Scheduler_Node *idle, Per_CPU_Control *cpu) |
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 *idle, struct Per_CPU_Control *cpu) |
Starts an idle thread on the specified cpu. More... | |
SMP Scheduler.
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.
void _Scheduler_SMP_Start_idle | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | idle, | ||
struct Per_CPU_Control * | cpu | ||
) |
Starts an idle thread on the specified cpu.
scheduler | The scheduler instance. | |
[in,out] | idle | The idle thread to schedule. |
[out] | cpu | The cpu to run the idle thread on. |