RTEMS  5.0.0
Modules | Files | Data Structures | Typedefs | Enumerations | Functions

Modules

 Deterministic Priority SMP Scheduler
 
 EDF Priority SMP Scheduler
 
 Simple Priority SMP 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)
 

Detailed Description

The scheduler nodes can be in four states

State transitions are triggered via basic operations

dot_inline_dotgraph_4.png

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.

dot_inline_dotgraph_5.png

Lets start A. For this an enqueue operation is performed.

dot_inline_dotgraph_6.png

Lets start C.

dot_inline_dotgraph_7.png

Lets start B.

dot_inline_dotgraph_8.png

Lets change the priority of thread A to 4.

dot_inline_dotgraph_9.png

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.

dot_inline_dotgraph_10.png

Enumeration Type Documentation

◆ Scheduler_SMP_Node_state

SMP scheduler node states.

Enumerator
SCHEDULER_SMP_NODE_BLOCKED 

This scheduler node is blocked.

A scheduler node is blocked if the corresponding thread is not ready.

SCHEDULER_SMP_NODE_SCHEDULED 

The scheduler node is scheduled.

A scheduler node is scheduled if the corresponding thread is ready and the scheduler allocated a processor for it. A scheduled node is assigned to exactly one processor. The count of scheduled nodes in this scheduler instance equals the processor count owned by the scheduler instance.

SCHEDULER_SMP_NODE_READY 

This scheduler node is ready.

A scheduler node is ready if the corresponding thread is ready and the scheduler did not allocate a processor for it.