RTEMS 6.1-rc1
Files | Data Structures | Macros | Functions
Simple Priority SMP Scheduler

This group contains the Simple Priority SMP Scheduler implementation. More...

Files

file  schedulersimplesmp.h
 This header file provides the interfaces of the Simple Priority SMP Scheduler.
 
file  schedulersimplesmp.c
 This source file contains the implementation of _Scheduler_simple_SMP_Add_processor(), _Scheduler_simple_SMP_Ask_for_help(), _Scheduler_simple_SMP_Block(), _Scheduler_simple_SMP_Initialize(), _Scheduler_simple_SMP_Node_initialize(), _Scheduler_simple_SMP_Reconsider_help_request(), _Scheduler_simple_SMP_Remove_processor(), _Scheduler_simple_SMP_Unblock(), _Scheduler_simple_SMP_Update_priority(), _Scheduler_simple_SMP_Withdraw_node(), _Scheduler_simple_SMP_Make_sticky(), _Scheduler_simple_SMP_Clean_sticky(), and _Scheduler_simple_SMP_Yield().
 

Data Structures

struct  Scheduler_simple_SMP_Context
 

Macros

#define SCHEDULER_SIMPLE_SMP_MAXIMUM_PRIORITY   255
 
#define SCHEDULER_SIMPLE_SMP_ENTRY_POINTS
 Entry points for the Simple SMP Scheduler. More...
 

Functions

void _Scheduler_simple_SMP_Initialize (const Scheduler_Control *scheduler)
 Initializes the scheduler's context. More...
 
void _Scheduler_simple_SMP_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 Initializes the node with the given attributes. More...
 
void _Scheduler_simple_SMP_Block (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Blocks a thread. More...
 
void _Scheduler_simple_SMP_Unblock (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 Unblocks a thread. More...
 
void _Scheduler_simple_SMP_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Updates the priority of the node. More...
 
bool _Scheduler_simple_SMP_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Asks for help. More...
 
void _Scheduler_simple_SMP_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Reconsiders help. More...
 
void _Scheduler_simple_SMP_Withdraw_node (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
 Withdraws node. More...
 
void _Scheduler_simple_SMP_Make_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Makes the node sticky. More...
 
void _Scheduler_simple_SMP_Clean_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Cleans the sticky property from the node. More...
 
void _Scheduler_simple_SMP_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
 Adds idle to scheduler. More...
 
Thread_Control_Scheduler_simple_SMP_Remove_processor (const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
 Removes an idle thread from the given cpu. More...
 
void _Scheduler_simple_SMP_Yield (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
 

Detailed Description

This group contains the Simple Priority SMP Scheduler implementation.

The Simple Priority SMP Scheduler allocates a processor for the processor count highest priority ready threads. The thread priority and position in the ready chain are the only information to determine the scheduling decision. Threads with an allocated processor are in the scheduled chain. After initialization the scheduled chain has exactly processor count nodes. Each processor has exactly one allocated thread after initialization. All enqueue and extract operations may exchange threads with the scheduled chain. One thread will be added and another will be removed. The scheduled and ready chain is ordered according to the thread priority order. The chain insert operations are O(count of ready threads), thus this scheduler is unsuitable for most real-time applications.

The thread preempt mode will be ignored.

Macro Definition Documentation

◆ SCHEDULER_SIMPLE_SMP_ENTRY_POINTS

#define SCHEDULER_SIMPLE_SMP_ENTRY_POINTS
Value:
{ \
_Scheduler_simple_SMP_Initialize, \
_Scheduler_default_Schedule, \
_Scheduler_simple_SMP_Yield, \
_Scheduler_simple_SMP_Block, \
_Scheduler_simple_SMP_Unblock, \
_Scheduler_simple_SMP_Update_priority, \
_Scheduler_default_Map_priority, \
_Scheduler_default_Unmap_priority, \
_Scheduler_simple_SMP_Ask_for_help, \
_Scheduler_simple_SMP_Reconsider_help_request, \
_Scheduler_simple_SMP_Withdraw_node, \
_Scheduler_simple_SMP_Make_sticky, \
_Scheduler_simple_SMP_Clean_sticky, \
_Scheduler_default_Pin_or_unpin_not_supported, \
_Scheduler_default_Pin_or_unpin_not_supported, \
_Scheduler_simple_SMP_Add_processor, \
_Scheduler_simple_SMP_Remove_processor, \
_Scheduler_simple_SMP_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
_Scheduler_default_Cancel_job, \
_Scheduler_SMP_Start_idle \
SCHEDULER_DEFAULT_SET_AFFINITY_OPERATION \
}

Entry points for the Simple SMP Scheduler.

Function Documentation

◆ _Scheduler_simple_SMP_Add_processor()

void _Scheduler_simple_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 thread control.

◆ _Scheduler_simple_SMP_Ask_for_help()

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

Asks for help.

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_simple_SMP_Block()

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

Blocks a thread.

Parameters
schedulerThe scheduler instance.
[in,out]threadThe thread to block.
[in,out]nodeThe scheduler node of thread.

◆ _Scheduler_simple_SMP_Clean_sticky()

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

Cleans the sticky property from the node.

Parameters
scheduleris the scheduler of the node.
[in,out]the_threadis the thread owning the node.
[in,out]nodeis the scheduler node to clean the sticky property.

◆ _Scheduler_simple_SMP_Initialize()

void _Scheduler_simple_SMP_Initialize ( const Scheduler_Control scheduler)

Initializes the scheduler's context.

Parameters
schedulerThe scheduler instance to initialize the context of.

◆ _Scheduler_simple_SMP_Make_sticky()

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

Makes the node sticky.

Parameters
scheduleris the scheduler of the node.
[in,out]the_threadis the thread owning the node.
[in,out]nodeis the scheduler node to make sticky.

◆ _Scheduler_simple_SMP_Node_initialize()

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

Initializes the node with the given attributes.

Parameters
schedulerThe scheduler instance.
[out]nodeThe node to initialize.
the_threadThe user of the node, if RTEMS_SMP is defined.
priorityThe priority of the node to initialize.

◆ _Scheduler_simple_SMP_Reconsider_help_request()

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

Reconsiders help.

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

◆ _Scheduler_simple_SMP_Remove_processor()

Thread_Control * _Scheduler_simple_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_simple_SMP_Unblock()

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

Unblocks a thread.

Parameters
schedulerThe scheduler instance.
[in,out]threadThe thread to unblock.
[in,out]nodeThe scheduler node of thread.

◆ _Scheduler_simple_SMP_Update_priority()

void _Scheduler_simple_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 of node.
nodeThe node to update the priority of.

◆ _Scheduler_simple_SMP_Withdraw_node()

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

Withdraws node.

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 the case the node is scheduled.

◆ _Scheduler_simple_SMP_Yield()

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

Performs a yield operation for the thread.

Parameters
schedulerThe scheduler instance.
threadThe thread to yield.
[in,out]nodeThe node of the thread to perform a yield.