Scheduler Strong APA  Release
Files | Classes | Macros | Functions
Strong APA Scheduler

Strong APA Scheduler. More...

Files

file  schedulerstrongapa.c
 Strong APA Scheduler Implementation.
 
file  schedulerstrongapa.h
 Strong APA Scheduler API.
 

Classes

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_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...
 
bool _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

Strong APA Scheduler.

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_default_Pin_or_unpin, \
_Scheduler_default_Pin_or_unpin, \
_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_default_Tick, \
_Scheduler_strong_APA_Start_idle, \
_Scheduler_strong_APA_Set_affinity \
}

Entry points for the Strong APA Scheduler.

Definition at line 151 of file schedulerstrongapa.h.

◆ SCHEDULER_STRONG_APA_MAXIMUM_PRIORITY

#define SCHEDULER_STRONG_APA_MAXIMUM_PRIORITY   255

Definition at line 146 of file schedulerstrongapa.h.

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.

Definition at line 886 of file schedulerstrongapa.c.

◆ _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.

Definition at line 822 of file schedulerstrongapa.c.

◆ _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.

Definition at line 759 of file schedulerstrongapa.c.

◆ _Scheduler_strong_APA_Initialize()

void _Scheduler_strong_APA_Initialize ( const Scheduler_Control *  scheduler)

Initializes the scheduler.

Parameters
schedulerThe scheduler to initialize.

Definition at line 732 of file schedulerstrongapa.c.

◆ _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.

Definition at line 935 of file schedulerstrongapa.c.

◆ _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

Definition at line 837 of file schedulerstrongapa.c.

◆ _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.

Definition at line 920 of file schedulerstrongapa.c.

◆ _Scheduler_strong_APA_Set_affinity()

bool _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.

Definition at line 956 of file schedulerstrongapa.c.

◆ _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.

Definition at line 902 of file schedulerstrongapa.c.

◆ _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.

Definition at line 785 of file schedulerstrongapa.c.

◆ _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.

Definition at line 802 of file schedulerstrongapa.c.

◆ _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.

Definition at line 853 of file schedulerstrongapa.c.

◆ _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.

Definition at line 741 of file schedulerstrongapa.c.