RTEMS: Deterministic Priority SMP Scheduler

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Modules | Files | Data Structures | Macros | Functions
Deterministic Priority SMP Scheduler
Internal » SuperCore » Scheduler Handler » 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.

## Functions
void | _Scheduler_priority_SMP_Initialize (const Scheduler_Control *scheduler)
| Initializes the priority SMP scheduler.
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.
void | _Scheduler_priority_SMP_Block (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
| Blocks the thread.
void | _Scheduler_priority_SMP_Unblock (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
| Unblocks the thread.
void | _Scheduler_priority_SMP_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Updates the priority of the node.
bool | _Scheduler_priority_SMP_Ask_for_help (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Asks for help operation.
void | _Scheduler_priority_SMP_Reconsider_help_request (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Reconsiders help operation.
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.
void | _Scheduler_priority_SMP_Add_processor (const Scheduler_Control *scheduler, Thread_Control *idle)
| Adds idle to scheduler.
Thread_Control * | _Scheduler_priority_SMP_Remove_processor (const Scheduler_Control *scheduler, struct Per_CPU_Control *cpu)
| Removes an idle thread from the given cpu.
void | _Scheduler_priority_SMP_Yield (const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
| Performs the yield of a thread.

## 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 \
}
_Scheduler_priority_SMP_Unblock
void _Scheduler_priority_SMP_Unblock(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Unblocks the thread.
Definition: schedulerprioritysmp.c:152
_Scheduler_priority_SMP_Add_processor
void _Scheduler_priority_SMP_Add_processor(const Scheduler_Control *scheduler, Thread_Control *idle)
Adds idle to scheduler.
Definition: schedulerprioritysmp.c:256
_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.
Definition: schedulerprioritysmp.c:287
_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.
Definition: schedulerprioritysmp.c:235
_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.
Definition: schedulerprioritysmp.c:188
_Scheduler_priority_SMP_Initialize
void _Scheduler_priority_SMP_Initialize(const Scheduler_Control *scheduler)
Initializes the priority SMP scheduler.
Definition: schedulerprioritysmp.c:35
_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.
Definition: schedulerprioritysmp.c:219
_Scheduler_priority_SMP_Block
void _Scheduler_priority_SMP_Block(const Scheduler_Control *scheduler, Thread_Control *thread, Scheduler_Node *node)
Blocks the thread.
Definition: schedulerprioritysmp.c:93
_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.
Definition: schedulerprioritysmp.c:48
_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.
Definition: schedulerprioritysmp.c:272
_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.
Definition: schedulerprioritysmp.c:208
_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 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] | scheduler | The scheduler instance to add the processor to.
  | idle | The 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

  scheduler | The scheduler instance to ask for help.
  the_thread | The thread needing help.
  node | The scheduler node.

Return values

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

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

  scheduler | The 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

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

  scheduler | The scheduler instance to reconsider the help request.
  the_thread | The thread reconsidering a help request.
  node | The 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

  scheduler | The scheduler instance.
  cpu | The 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

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

  scheduler | The scheduler instance.
  the_thread | The thread for the operation.
  base_node | The 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

  scheduler | The scheduler instance to withdraw the node.
  the_thread | The thread using the node.
  node | The scheduler node to withdraw.
  next_state | The 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

  | scheduler | The scheduler instance.
  [in,out] | the_thread | The thread that performed the yield operation.
  | node | The scheduler node of the_thread.