RTEMS  5.1
Modules | Files | Data Structures | Macros | Functions
Deterministic Priority SMP Scheduler

Deterministic Priority SMP Scheduler. More...

Modules

 Deterministic Priority Affinity SMP Scheduler
 Deterministic Priority Affinity SMP Scheduler.
 

Files

file  schedulerprioritysmp.h
 Deterministic Priority SMP Scheduler API.
 
file  schedulerprioritysmpimpl.h
 Deterministic Priority SMP Scheduler API.
 
file  schedulerprioritysmp.c
 Deterministic Priority SMP Scheduler Implementation.
 

Data Structures

struct  Scheduler_priority_SMP_Context
 Scheduler context specialization for Deterministic Priority SMP schedulers. More...
 
struct  Scheduler_priority_SMP_Node
 Scheduler node specialization for Deterministic Priority SMP schedulers. More...
 

Macros

#define SCHEDULER_PRIORITY_SMP_ENTRY_POINTS
 Entry points for the Priority SMP Scheduler. More...
 

Functions

void _Scheduler_priority_SMP_Initialize (const Scheduler_Control *scheduler)
 Initializes the priority SMP scheduler. More...
 
void _Scheduler_priority_SMP_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Initializes the node with the given priority. More...
 
void _Scheduler_priority_SMP_Block (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Blocks the thread. More...
 
void _Scheduler_priority_SMP_Unblock (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Unblocks the thread. More...
 
void _Scheduler_priority_SMP_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Updates the priority of the node. More...
 
bool _Scheduler_priority_SMP_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Asks for help operation. More...
 
void _Scheduler_priority_SMP_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Reconsiders help operation. More...
 
void _Scheduler_priority_SMP_Withdraw_node (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
 Withdraws node operation. More...
 
void _Scheduler_priority_SMP_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
 Adds idle to scheduler. More...
 
Thread_Control_Scheduler_priority_SMP_Remove_processor (const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
 Removes an idle thread from the given cpu. More...
 
void _Scheduler_priority_SMP_Yield (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Performs the yield of a thread. More...
 

Detailed Description

Deterministic Priority SMP Scheduler.

This is an implementation of the global fixed priority scheduler (G-FP). It uses one ready chain per priority to ensure constant time insert operations. The scheduled chain uses linear insert operations and has at most processor count entries. Since the processor and priority count are constants all scheduler operations complete in a bounded execution time.

The thread preempt mode will be ignored.

Macro Definition Documentation

◆ SCHEDULER_PRIORITY_SMP_ENTRY_POINTS

#define SCHEDULER_PRIORITY_SMP_ENTRY_POINTS
Value:
{ \
_Scheduler_priority_SMP_Initialize, \
_Scheduler_default_Schedule, \
_Scheduler_priority_SMP_Yield, \
_Scheduler_priority_SMP_Block, \
_Scheduler_priority_SMP_Unblock, \
_Scheduler_priority_SMP_Update_priority, \
_Scheduler_default_Map_priority, \
_Scheduler_default_Unmap_priority, \
_Scheduler_priority_SMP_Ask_for_help, \
_Scheduler_priority_SMP_Reconsider_help_request, \
_Scheduler_priority_SMP_Withdraw_node, \
_Scheduler_default_Pin_or_unpin, \
_Scheduler_default_Pin_or_unpin, \
_Scheduler_priority_SMP_Add_processor, \
_Scheduler_priority_SMP_Remove_processor, \
_Scheduler_priority_SMP_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
_Scheduler_default_Cancel_job, \
_Scheduler_default_Tick, \
_Scheduler_SMP_Start_idle \
SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \
}

Entry points for the Priority SMP Scheduler.

Function Documentation

◆ _Scheduler_priority_SMP_Add_processor()

void _Scheduler_priority_SMP_Add_processor ( const Scheduler_Control scheduler,
Thread_Control idle 
)

Adds idle to scheduler.

Parameters
[in,out]schedulerThe scheduler instance to add the processor to.
idleThe idle thrad control.

◆ _Scheduler_priority_SMP_Ask_for_help()

bool _Scheduler_priority_SMP_Ask_for_help ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Asks for help operation.

Parameters
schedulerThe scheduler instance to ask for help.
the_threadThe thread needing help.
nodeThe scheduler node.
Return values
trueAsk for help was successful.
falseAsk for help was not successful.

◆ _Scheduler_priority_SMP_Block()

void _Scheduler_priority_SMP_Block ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Blocks the thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread to block.
[in,out]nodeThe thread's scheduler node.

◆ _Scheduler_priority_SMP_Initialize()

void _Scheduler_priority_SMP_Initialize ( const Scheduler_Control scheduler)

Initializes the priority SMP scheduler.

This routine initializes the priority SMP scheduler.

Parameters
schedulerThe scheduler to initialize.

◆ _Scheduler_priority_SMP_Node_initialize()

void _Scheduler_priority_SMP_Node_initialize ( const Scheduler_Control scheduler,
Scheduler_Node node,
Thread_Control the_thread,
Priority_Control  priority 
)

Initializes the node with the given priority.

Parameters
schedulerThe scheduler instance.
[out]nodeThe node to initialize.
the_threadThe thread of the scheduler node.
priorityThe priority for the initialization.

◆ _Scheduler_priority_SMP_Reconsider_help_request()

void _Scheduler_priority_SMP_Reconsider_help_request ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Reconsiders help operation.

Parameters
schedulerThe scheduler instance to reconsider the help request.
the_threadThe thread reconsidering a help request.
nodeThe scheduler node.

◆ _Scheduler_priority_SMP_Remove_processor()

Thread_Control* _Scheduler_priority_SMP_Remove_processor ( const Scheduler_Control scheduler,
struct Per_CPU_Control cpu 
)

Removes an idle thread from the given cpu.

Parameters
schedulerThe scheduler instance.
cpuThe cpu control to remove from scheduler.
Returns
The idle thread of the processor.

◆ _Scheduler_priority_SMP_Unblock()

void _Scheduler_priority_SMP_Unblock ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Unblocks the thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread to unblock.
[in,out]nodeThe thread's scheduler node.

◆ _Scheduler_priority_SMP_Update_priority()

void _Scheduler_priority_SMP_Update_priority ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node 
)

Updates the priority of the node.

Parameters
schedulerThe scheduler instance.
the_threadThe thread for the operation.
base_nodeThe thread's scheduler node.

◆ _Scheduler_priority_SMP_Withdraw_node()

void _Scheduler_priority_SMP_Withdraw_node ( const Scheduler_Control scheduler,
Thread_Control the_thread,
Scheduler_Node node,
Thread_Scheduler_state  next_state 
)

Withdraws node operation.

Parameters
schedulerThe scheduler instance to withdraw the node.
the_threadThe thread using the node.
nodeThe scheduler node to withdraw.
next_stateThe next thread scheduler state in case the node is scheduled.

◆ _Scheduler_priority_SMP_Yield()

void _Scheduler_priority_SMP_Yield ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node 
)

Performs the yield of a thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadThe thread that performed the yield operation.
nodeThe scheduler node of the_thread.