RTEMS: Strong APA Scheduler

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Files | Data Structures | Macros | Functions
Strong APA Scheduler
Internal » SuperCore » Scheduler Handler » SMP Scheduler

Strong APA Scheduler. More...

## Files
file | schedulerstrongapa.h
| Strong APA Scheduler API.
file | schedulerstrongapa.c
| Strong APA Scheduler Implementation.

## Data Structures
struct | Scheduler_strong_APA_Context
| Scheduler context specialization for Strong APA schedulers. More...
struct | Scheduler_strong_APA_Node
| Scheduler node specialization for Strong APA schedulers. More...

## Macros
#define | SCHEDULER_STRONG_APA_ENTRY_POINTS
| Entry points for the Strong APA Scheduler.

## Functions
void | _Scheduler_strong_APA_Initialize (const Scheduler_Control *scheduler)
| Initializes the scheduler.
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.
void | _Scheduler_strong_APA_Block (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Blocks the thread.
void | _Scheduler_strong_APA_Unblock (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Unblocks the thread.
void | _Scheduler_strong_APA_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Updates the priority of the node.
bool | _Scheduler_strong_APA_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Asks for help.
void | _Scheduler_strong_APA_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Reconsiders help request.
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.
void | _Scheduler_strong_APA_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
| Adds the idle thread to a 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.
void | _Scheduler_strong_APA_Yield (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Performs a yield operation.

## Detailed Description

Strong APA 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 the_thread preempt mode will be ignored.

## 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_SMP_Start_idle \
SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \
}
_Scheduler_strong_APA_Yield
void _Scheduler_strong_APA_Yield(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Performs a yield operation.
Definition: schedulerstrongapa.c:419
_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.
Definition: schedulerstrongapa.c:404
_Scheduler_strong_APA_Block
void _Scheduler_strong_APA_Block(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Blocks the thread.
Definition: schedulerstrongapa.c:225
_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.
Definition: schedulerstrongapa.c:172
_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.
Definition: schedulerstrongapa.c:320
_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.
Definition: schedulerstrongapa.c:388
_Scheduler_strong_APA_Unblock
void _Scheduler_strong_APA_Unblock(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Unblocks the thread.
Definition: schedulerstrongapa.c:284
_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.
Definition: schedulerstrongapa.c:351
_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.
Definition: schedulerstrongapa.c:340
_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.
Definition: schedulerstrongapa.c:367
_Scheduler_strong_APA_Initialize
void _Scheduler_strong_APA_Initialize(const Scheduler_Control *scheduler)
Initializes the scheduler.
Definition: schedulerstrongapa.c:159
_Scheduler_default_Tick
void _Scheduler_default_Tick(const Scheduler_Control *scheduler, Thread_Control *executing)
Performs tick operations depending on the CPU budget algorithm for each executing thread.
Definition: schedulerdefaulttick.c:27
_Scheduler_default_Release_job
void _Scheduler_default_Release_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
Does nothing.
Definition: schedulerdefaultreleasejob.c:24
_Scheduler_default_Node_destroy
void _Scheduler_default_Node_destroy(const Scheduler_Control *scheduler, Scheduler_Node *node)
Does nothing.
Definition: schedulerdefaultnodedestroy.c:24
_Scheduler_default_Map_priority
Priority_Control _Scheduler_default_Map_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP().
Definition: schedulerdefaultmappriority.c:15
_Scheduler_default_Schedule
void _Scheduler_default_Schedule(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Does nothing.
Definition: schedulerdefaultschedule.c:15
_Scheduler_default_Unmap_priority
Priority_Control _Scheduler_default_Unmap_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP().
Definition: schedulerdefaultmappriority.c:23
_Scheduler_default_Cancel_job
void _Scheduler_default_Cancel_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
Does nothing.
Definition: schedulerdefaultreleasejob.c:39

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

  | scheduler | The scheduler control instance.
  [in,out] | The | idle 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

  scheduler | The scheduler control instance.
  the_thread | The thread that asks for help.
  node | The node of the_thread.

Return values

  true | The request for help was successful.
  false | The 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

  | scheduler | The scheduler control instance.
  [in,out] | the_thread | The thread to block.
  [in,out] | node | The node of the thread to block.

## ◆ _Scheduler_strong_APA_Initialize()

void _Scheduler_strong_APA_Initialize | ( | const Scheduler_Control * | scheduler | ) |

Initializes the scheduler.

Parameters

  scheduler | The scheduler to initialize.

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

  | scheduler | The scheduler control instance.
  [out] | node | The node to initialize.
  | the_thread | The thread of the node to initialize.
  | priority | The 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

  | scheduler | The scheduler control instance.
  | the_thread | The thread to reconsider the help request of.
  [in,out] | node | The 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

  scheduler | The scheduler instance.
  cpu | The cpu control to remove from scheduler.

Returns
  The idle thread of the processor.

## ◆ _Scheduler_strong_APA_Unblock()

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

Unblocks the thread.

Parameters

  | scheduler | The scheduler control instance.
  [in,out] | the_thread | The thread to unblock.
  [in,out] | node | The 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

  | scheduler | The scheduler control instance.
  | the_thread | The thread for the operation.
  [in,out] | node | The 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

  | scheduler | The scheduler control instance.
  [in,out] | the_thread | The thread to change the state to next_state.
  [in,out] | node | The node to withdraw.
  | next_state | The 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

  | scheduler | The scheduler control instance.
  | the_thread | The thread to yield.
  [in,out] | node | The node of the_thread.