RTEMS 6.1-rc1
Files | Data Structures | Macros | Functions

This group contains the Strong APA Scheduler implementation. More...

Files

file  schedulerstrongapa.h
 This header file provides the interfaces of the Strong APA Scheduler.
 
file  schedulerstrongapa.c
 This source file contains the implementation of _Scheduler_strong_APA_Add_processor(), _Scheduler_strong_APA_Allocate_processor(), _Scheduler_strong_APA_Ask_for_help(), _Scheduler_strong_APA_Block(), _Scheduler_strong_APA_Do_ask_for_help(), _Scheduler_strong_APA_Do_enqueue(), _Scheduler_strong_APA_Do_set_affinity(), _Scheduler_strong_APA_Do_update(), _Scheduler_strong_APA_Enqueue(), _Scheduler_strong_APA_Enqueue_scheduled(), _Scheduler_strong_APA_Extract_from_ready(), _Scheduler_strong_APA_Extract_from_scheduled(), _Scheduler_strong_APA_Find_highest_ready(), _Scheduler_strong_APA_Get_highest_ready(), _Scheduler_strong_APA_Get_lowest_reachable(), _Scheduler_strong_APA_Get_lowest_scheduled(), _Scheduler_strong_APA_Has_ready(), _Scheduler_strong_APA_Initialize(), _Scheduler_strong_APA_Insert_ready(), _Scheduler_strong_APA_Move_from_ready_to_scheduled(), _Scheduler_strong_APA_Move_from_scheduled_to_ready(), _Scheduler_strong_APA_Node_initialize(), _Scheduler_strong_APA_Reconsider_help_request(), _Scheduler_strong_APA_Register_idle(), _Scheduler_strong_APA_Remove_processor(), _Scheduler_strong_APA_Set_affinity(), _Scheduler_strong_APA_Set_scheduled(), _Scheduler_strong_APA_Start_idle(), _Scheduler_strong_APA_Unblock(), _Scheduler_strong_APA_Update_priority(), _Scheduler_strong_APA_Withdraw_node(), _Scheduler_strong_APA_Make_sticky(), _Scheduler_strong_APA_Clean_sticky(), and _Scheduler_strong_APA_Yield().
 

Data Structures

struct  Scheduler_strong_APA_Node
 Scheduler node specialization for Strong APA schedulers. More...
 
struct  Scheduler_strong_APA_CPU
 CPU related variables and a CPU_Control to implement BFS. More...
 
struct  Scheduler_strong_APA_Context
 Scheduler context and node definition for Strong APA scheduler. More...
 

Macros

#define SCHEDULER_STRONG_APA_MAXIMUM_PRIORITY   255
 
#define SCHEDULER_STRONG_APA_ENTRY_POINTS
 Entry points for the Strong APA Scheduler. More...
 

Functions

void _Scheduler_strong_APA_Initialize (const Scheduler_Control *scheduler)
 Initializes the scheduler. More...
 
void _Scheduler_strong_APA_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_strong_APA_Block (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Blocks the thread. More...
 
void _Scheduler_strong_APA_Unblock (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Unblocks the thread. More...
 
void _Scheduler_strong_APA_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Updates the priority of the node. More...
 
bool _Scheduler_strong_APA_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Asks for help. More...
 
void _Scheduler_strong_APA_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Reconsiders help request. More...
 
void _Scheduler_strong_APA_Withdraw_node (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, Thread_Scheduler_state next_state)
 Withdraws the node. More...
 
void _Scheduler_strong_APA_Make_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Makes the node sticky. More...
 
void _Scheduler_strong_APA_Clean_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Cleans the sticky property from the node. More...
 
void _Scheduler_strong_APA_sticky (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Cleans the sticky property from the node. More...
 
void _Scheduler_strong_APA_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
 Adds the idle thread to a processor. More...
 
Thread_Control_Scheduler_strong_APA_Remove_processor (const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
 Removes an idle thread from the given cpu. More...
 
void _Scheduler_strong_APA_Yield (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 Performs a yield operation. More...
 
void _Scheduler_strong_APA_Start_idle (const Scheduler_Control *scheduler, Thread_Control *idle, struct Per_CPU_Control *cpu)
 Starts an idle thread. More...
 
Status_Control _Scheduler_strong_APA_Set_affinity (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node_base, const Processor_mask *affinity)
 Sets the affinity . More...
 

Detailed Description

This group contains the Strong APA Scheduler implementation.

This is an implementation of the Strong APA scheduler defined by Cerqueira et al. in Linux's Processor Affinity API, Refined: Shifting Real-Time Tasks Towards Higher Schedulability.

The scheduled and ready nodes are accessed via the Scheduler_strong_APA_Context::Ready which helps in backtracking when a node which is executing on a CPU gets blocked. New node is allocated to the cpu by checking all the executing nodes in the affinity set of the node and the subsequent nodes executing on the processors in its affinity set.

Macro Definition Documentation

◆ SCHEDULER_STRONG_APA_ENTRY_POINTS

#define SCHEDULER_STRONG_APA_ENTRY_POINTS
Value:
{ \
_Scheduler_strong_APA_Initialize, \
_Scheduler_default_Schedule, \
_Scheduler_strong_APA_Yield, \
_Scheduler_strong_APA_Block, \
_Scheduler_strong_APA_Unblock, \
_Scheduler_strong_APA_Update_priority, \
_Scheduler_default_Map_priority, \
_Scheduler_default_Unmap_priority, \
_Scheduler_strong_APA_Ask_for_help, \
_Scheduler_strong_APA_Reconsider_help_request, \
_Scheduler_strong_APA_Withdraw_node, \
_Scheduler_strong_APA_Make_sticky, \
_Scheduler_strong_APA_Clean_sticky, \
_Scheduler_default_Pin_or_unpin_not_supported, \
_Scheduler_default_Pin_or_unpin_not_supported, \
_Scheduler_strong_APA_Add_processor, \
_Scheduler_strong_APA_Remove_processor, \
_Scheduler_strong_APA_Node_initialize, \
_Scheduler_default_Node_destroy, \
_Scheduler_default_Release_job, \
_Scheduler_default_Cancel_job, \
_Scheduler_strong_APA_Start_idle, \
_Scheduler_strong_APA_Set_affinity \
}

Entry points for the Strong APA Scheduler.

Function Documentation

◆ _Scheduler_strong_APA_Add_processor()

void _Scheduler_strong_APA_Add_processor ( const Scheduler_Control scheduler,
Thread_Control idle 
)

Adds the idle thread to a processor.

Parameters
schedulerThe scheduler control instance.
[in,out]Theidle thread to add to the processor.

◆ _Scheduler_strong_APA_Ask_for_help()

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

Asks for help.

Parameters
schedulerThe scheduler control instance.
the_threadThe thread that asks for help.
nodeThe node of the_thread.
Return values
trueThe request for help was successful.
falseThe request for help was not successful.

◆ _Scheduler_strong_APA_Block()

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

Blocks the thread.

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

◆ _Scheduler_strong_APA_Clean_sticky()

void _Scheduler_strong_APA_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_strong_APA_Initialize()

void _Scheduler_strong_APA_Initialize ( const Scheduler_Control scheduler)

Initializes the scheduler.

Parameters
schedulerThe scheduler to initialize.

◆ _Scheduler_strong_APA_Make_sticky()

void _Scheduler_strong_APA_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_strong_APA_Node_initialize()

void _Scheduler_strong_APA_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 control instance.
[out]nodeThe node to initialize.
the_threadThe thread of the node to initialize.
priorityThe priority for node.

◆ _Scheduler_strong_APA_Reconsider_help_request()

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

Reconsiders help request.

Parameters
schedulerThe scheduler control instance.
the_threadThe thread to reconsider the help request of.
[in,out]nodeThe node of the_thread

◆ _Scheduler_strong_APA_Remove_processor()

Thread_Control * _Scheduler_strong_APA_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_strong_APA_Set_affinity()

Status_Control _Scheduler_strong_APA_Set_affinity ( const Scheduler_Control scheduler,
Thread_Control thread,
Scheduler_Node node_base,
const Processor_mask *  affinity 
)

Sets the affinity .

Parameters
schedulerThe scheduler control instance.
the_threadThe thread to yield.
[in,out]nodeThe node of the_thread.

◆ _Scheduler_strong_APA_Start_idle()

void _Scheduler_strong_APA_Start_idle ( const Scheduler_Control scheduler,
Thread_Control idle,
struct Per_CPU_Control cpu 
)

Starts an idle thread.

Parameters
schedulerThe scheduler instance.
[in,out]the_threadAn idle thread.
cpuThe cpu for the operation.

◆ _Scheduler_strong_APA_sticky()

void _Scheduler_strong_APA_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_strong_APA_Unblock()

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

Unblocks the thread.

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

◆ _Scheduler_strong_APA_Update_priority()

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

Updates the priority of the node.

Parameters
schedulerThe scheduler control instance.
the_threadThe thread for the operation.
[in,out]nodeThe node to update the priority of.

◆ _Scheduler_strong_APA_Withdraw_node()

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

Withdraws the node.

Parameters
schedulerThe scheduler control instance.
[in,out]the_threadThe thread to change the state to next_state.
[in,out]nodeThe node to withdraw.
next_stateThe next state for the_thread.

◆ _Scheduler_strong_APA_Yield()

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

Performs a yield operation.

Parameters
schedulerThe scheduler control instance.
the_threadThe thread to yield.
[in,out]nodeThe node of the_thread.