RTEMS
5.1
|
Modules | |
CBS Scheduler | |
CBS Scheduler. | |
Deterministic Priority Scheduler | |
Deterministic Priority Scheduler. | |
EDF Scheduler | |
EDF Scheduler. | |
SMP Scheduler | |
SMP Scheduler. | |
Simple Priority Scheduler | |
Simple Priority Scheduler. | |
Files | |
file | scheduler.h |
Constants and Structures Associated with the Scheduler. | |
file | schedulerimpl.h |
Inlined Routines Associated with the Manipulation of the Scheduler. | |
file | schedulernode.h |
Handles Scheduler Nodes. | |
file | schedulernodeimpl.h |
Scheduler Node Implementation. | |
file | scheduler.c |
Scheduler Initialize. | |
file | schedulercbs.c |
CBS Scheduler Budget Handler. | |
file | schedulercbsattachthread.c |
Attach Scheduler CBS Thread. | |
file | schedulercbscleanup.c |
Scheduler CBS Cleanup. | |
file | schedulercbscreateserver.c |
Scheduler CBS Create Server. | |
file | schedulercbsdestroyserver.c |
Scheduler CBS Destroy Server. | |
file | schedulercbsdetachthread.c |
Detach from the CBS Server. | |
file | schedulercbsgetapprovedbudget.c |
Scheduler CBS Get Approved Budget. | |
file | schedulercbsgetexecutiontime.c |
Get Thread Execution Info. | |
file | schedulercbsgetparameters.c |
_Scheduler_CBS_Get_parameters | |
file | schedulercbsgetremainingbudget.c |
Scheduler CBS Get Remaining Budget. | |
file | schedulercbsgetserverid.c |
Scheduler CBS Get Server id. | |
file | schedulercbsreleasejob.c |
Scheduler CBS Release Job. | |
file | schedulercbssetparameters.c |
Set Parameters for CBS Scheduling. | |
file | schedulercbsunblock.c |
Unblocks a Thread from the Queue. | |
file | schedulerdefaultnodedestroy.c |
Scheduler Default Node Destruction Operation. | |
file | schedulerdefaultnodeinit.c |
Scheduler Default Node Initialization Operation. | |
file | schedulerdefaultreleasejob.c |
Default Scheduler Release Job Operation. | |
file | schedulerdefaultsetaffinity.c |
Scheduler Default Set Affinity Operation. | |
file | schedulerdefaulttick.c |
Default Scheduler At Tick Handler. | |
file | scheduleredf.c |
Scheduler EDF Initialize and Support. | |
file | scheduleredfblock.c |
Removes the Thread from Ready Queue. | |
file | scheduleredfchangepriority.c |
Scheduler EDF Extract. | |
file | scheduleredfnodeinit.c |
Scheduler EDF Allocate. | |
file | scheduleredfreleasejob.c |
Scheduler EDF Release Job. | |
file | scheduleredfschedule.c |
Scheduler EDF Allocate. | |
file | scheduleredfunblock.c |
Scheduler EDF Unblock. | |
file | scheduleredfyield.c |
Scheduler EDF Yield. | |
file | schedulerpriorityblock.c |
Scheduler Priority Block. | |
file | schedulerprioritychangepriority.c |
Removes Thread from Thread Queue. | |
file | schedulerpriorityschedule.c |
Priority Scheduler Schedule Method. | |
file | schedulerpriorityunblock.c |
Scheduler Priority Unblock. | |
file | schedulerpriorityyield.c |
Scheduler Priority Yield. | |
file | schedulersimple.c |
Scheduler Simple Functions. | |
file | schedulersimpleblock.c |
Simple Scheduler Block a Thread. | |
file | schedulersimplechangepriority.c |
Removes a Thread from the Simple Queue. | |
file | schedulersimpleschedule.c |
Simple Schedule Determine Heir. | |
file | schedulersimpleunblock.c |
Scheduler Simple Handler / Unblock. | |
file | schedulersimpleyield.c |
Simple Schedule Yield CPU. | |
Data Structures | |
struct | Scheduler_Operations |
The scheduler operations. More... | |
struct | Scheduler_Context |
Scheduler context. More... | |
struct | _Scheduler_Control |
Scheduler control. More... | |
struct | Scheduler_Node |
Scheduler node for per-thread data. More... | |
Macros | |
#define | _Scheduler_Count ( (size_t) 1 ) |
Count of registered schedulers. More... | |
#define | SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP |
#define | SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY |
#define | PRIORITY_MAXIMUM ( _Scheduler_Table[ 0 ].maximum_priority ) |
This defines the lowest (least important) thread priority of the first scheduler instance. | |
#define | SCHEDULER_NODE_OF_WAIT_PRIORITY_NODE(node) RTEMS_CONTAINER_OF( node, Scheduler_Node, Wait.Priority.Node.Node.Chain ) |
#define | SCHEDULER_NODE_OF_WAIT_PRIORITY(node) RTEMS_CONTAINER_OF( node, Scheduler_Node, Wait.Priority ) |
#define | SCHEDULER_PRIORITY_APPEND_FLAG 1 |
Priority append indicator for the priority control used for the scheduler node priority. | |
#define | SCHEDULER_PRIORITY_MAP(priority) ( ( priority ) << 1 ) |
Maps a priority value to support the append indicator. | |
#define | SCHEDULER_PRIORITY_UNMAP(priority) ( ( priority ) >> 1 ) |
Returns the plain priority value. | |
#define | SCHEDULER_PRIORITY_PURIFY(priority) ( ( priority ) & ~( (Priority_Control) SCHEDULER_PRIORITY_APPEND_FLAG ) ) |
Clears the priority append indicator bit. | |
#define | SCHEDULER_PRIORITY_APPEND(priority) ( ( priority ) | SCHEDULER_PRIORITY_APPEND_FLAG ) |
Returns the priority control with the append indicator bit set. | |
#define | SCHEDULER_PRIORITY_IS_APPEND(priority) ( ( ( priority ) & SCHEDULER_PRIORITY_APPEND_FLAG ) != 0 ) |
Returns true, if the item should be appended to its priority group, otherwise returns false and the item should be prepended to its priority group. | |
Typedefs | |
typedef struct _Scheduler_Control | Scheduler_Control |
typedef struct Scheduler_Context | Scheduler_Context |
Scheduler context. More... | |
typedef struct Scheduler_Node | Scheduler_Node |
Functions | |
Priority_Control | _Scheduler_default_Map_priority (const Scheduler_Control *scheduler, Priority_Control priority) |
Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP(). More... | |
Priority_Control | _Scheduler_default_Unmap_priority (const Scheduler_Control *scheduler, Priority_Control priority) |
Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP(). More... | |
void | _Scheduler_default_Schedule (const Scheduler_Control *scheduler, Thread_Control *the_thread) |
Does nothing. More... | |
void | _Scheduler_default_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority) |
Performs the scheduler base node initialization. More... | |
void | _Scheduler_default_Node_destroy (const Scheduler_Control *scheduler, Scheduler_Node *node) |
Does nothing. More... | |
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. More... | |
void | _Scheduler_default_Cancel_job (const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context) |
Does nothing. More... | |
void | _Scheduler_default_Tick (const Scheduler_Control *scheduler, Thread_Control *executing) |
Performs tick operations depending on the CPU budget algorithm for each executing thread. More... | |
void | _Scheduler_default_Start_idle (const Scheduler_Control *scheduler, Thread_Control *the_thread, struct Per_CPU_Control *cpu) |
Starts an idle thread. More... | |
void | _Scheduler_Handler_initialization (void) |
Initializes the scheduler to the policy chosen by the user. More... | |
RTEMS_INLINE_ROUTINE Scheduler_Context * | _Scheduler_Get_context (const Scheduler_Control *scheduler) |
Gets the context of the scheduler. More... | |
RTEMS_INLINE_ROUTINE const Scheduler_Control * | _Scheduler_Get_by_CPU (const Per_CPU_Control *cpu) |
Gets the scheduler for the cpu. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Acquire_critical (const Scheduler_Control *scheduler, ISR_lock_Context *lock_context) |
Acquires the scheduler instance inside a critical section (interrupts disabled). More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Release_critical (const Scheduler_Control *scheduler, ISR_lock_Context *lock_context) |
Releases the scheduler instance inside a critical section (interrupts disabled). More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Schedule (Thread_Control *the_thread) |
General scheduling decision. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Yield (Thread_Control *the_thread) |
Scheduler yield with a particular thread. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Block (Thread_Control *the_thread) |
Blocks a thread with respect to the scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Unblock (Thread_Control *the_thread) |
Unblocks a thread with respect to the scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Update_priority (Thread_Control *the_thread) |
Propagates a priority change of a thread to the scheduler. More... | |
RTEMS_INLINE_ROUTINE Priority_Control | _Scheduler_Map_priority (const Scheduler_Control *scheduler, Priority_Control priority) |
Maps a thread priority from the user domain to the scheduler domain. More... | |
RTEMS_INLINE_ROUTINE Priority_Control | _Scheduler_Unmap_priority (const Scheduler_Control *scheduler, Priority_Control priority) |
Unmaps a thread priority from the scheduler domain to the user domain. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority) |
Initializes a scheduler node. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Node_destroy (const Scheduler_Control *scheduler, Scheduler_Node *node) |
Destroys a scheduler node. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Release_job (Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context) |
Releases a job of a thread with respect to the scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Cancel_job (Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context) |
Cancels a job of a thread with respect to the scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Tick (const Per_CPU_Control *cpu) |
Scheduler method invoked at each clock tick. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Start_idle (const Scheduler_Control *scheduler, Thread_Control *the_thread, Per_CPU_Control *cpu) |
Starts the idle thread for a particular processor. More... | |
RTEMS_INLINE_ROUTINE bool | _Scheduler_Has_processor_ownership (const Scheduler_Control *scheduler, uint32_t cpu_index) |
Checks if the scheduler of the cpu with the given index is equal to the given scheduler. More... | |
RTEMS_INLINE_ROUTINE const Processor_mask * | _Scheduler_Get_processors (const Scheduler_Control *scheduler) |
Gets the processors of the scheduler. More... | |
bool | _Scheduler_Get_affinity (Thread_Control *the_thread, size_t cpusetsize, cpu_set_t *cpuset) |
Copies the thread's scheduler's affinity to the given cpuset. More... | |
RTEMS_INLINE_ROUTINE bool | _Scheduler_default_Set_affinity_body (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, const Processor_mask *affinity) |
Checks if the affinity is a subset of the online processors. More... | |
bool | _Scheduler_Set_affinity (Thread_Control *the_thread, size_t cpusetsize, const cpu_set_t *cpuset) |
Sets the thread's scheduler's affinity. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Generic_block (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node, void(*extract)(const Scheduler_Control *, Thread_Control *, Scheduler_Node *), void(*schedule)(const Scheduler_Control *, Thread_Control *, bool)) |
Blocks the thread. More... | |
RTEMS_INLINE_ROUTINE uint32_t | _Scheduler_Get_processor_count (const Scheduler_Control *scheduler) |
Gets the number of processors of the scheduler. More... | |
RTEMS_INLINE_ROUTINE Objects_Id | _Scheduler_Build_id (uint32_t scheduler_index) |
Builds an object build id. More... | |
RTEMS_INLINE_ROUTINE uint32_t | _Scheduler_Get_index_by_id (Objects_Id id) |
Gets the scheduler index from the given object build id. More... | |
RTEMS_INLINE_ROUTINE const Scheduler_Control * | _Scheduler_Get_by_id (Objects_Id id) |
Gets the scheduler from the given object build id. More... | |
RTEMS_INLINE_ROUTINE uint32_t | _Scheduler_Get_index (const Scheduler_Control *scheduler) |
Gets the index of the scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Update_heir (Thread_Control *new_heir, bool force_dispatch) |
Updates the heir. More... | |
RTEMS_INLINE_ROUTINE Status_Control | _Scheduler_Set (const Scheduler_Control *new_scheduler, Thread_Control *the_thread, Priority_Control priority) |
Sets a new scheduler. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Node_do_initialize (const struct _Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority) |
Initializes a node. More... | |
RTEMS_INLINE_ROUTINE const Scheduler_Control * | _Scheduler_Node_get_scheduler (const Scheduler_Node *node) |
Gets the scheduler of the node. More... | |
RTEMS_INLINE_ROUTINE Thread_Control * | _Scheduler_Node_get_owner (const Scheduler_Node *node) |
Gets the owner of the node. More... | |
RTEMS_INLINE_ROUTINE Priority_Control | _Scheduler_Node_get_priority (Scheduler_Node *node) |
Gets the priority of the node. More... | |
RTEMS_INLINE_ROUTINE void | _Scheduler_Node_set_priority (Scheduler_Node *node, Priority_Control new_priority, bool prepend_it) |
Sets the priority of the node. More... | |
Variables | |
const Scheduler_Control | _Scheduler_Table [] |
Registered schedulers. More... | |
This handler encapsulates functionality related to managing sets of threads that are ready for execution.
#define _Scheduler_Count ( (size_t) 1 ) |
Count of registered schedulers.
Application provided via <rtems/confdefs.h> on SMP configurations.
It is very important that this is a compile-time constant on uni-processor configurations (in this case RTEMS_SMP is not defined) so that the compiler can optimize the some loops away
typedef struct Scheduler_Context Scheduler_Context |
Scheduler context.
The scheduler context of a particular scheduler implementation must place this structure at the begin of its context structure.
RTEMS_INLINE_ROUTINE void _Scheduler_Acquire_critical | ( | const Scheduler_Control * | scheduler, |
ISR_lock_Context * | lock_context | ||
) |
Acquires the scheduler instance inside a critical section (interrupts disabled).
scheduler | The scheduler instance. |
lock_context | The lock context to use for _Scheduler_Release_critical(). |
RTEMS_INLINE_ROUTINE void _Scheduler_Block | ( | Thread_Control * | the_thread | ) |
Blocks a thread with respect to the scheduler.
This routine removes the_thread from the scheduling decision for the scheduler. The primary task is to remove the thread from the ready queue. It performs any necessary scheduling operations including the selection of a new heir thread.
the_thread | The thread. |
RTEMS_INLINE_ROUTINE Objects_Id _Scheduler_Build_id | ( | uint32_t | scheduler_index | ) |
Builds an object build id.
scheduler_index | The index to build the build id out of. |
RTEMS_INLINE_ROUTINE void _Scheduler_Cancel_job | ( | Thread_Control * | the_thread, |
Priority_Node * | priority_node, | ||
Thread_queue_Context * | queue_context | ||
) |
Cancels a job of a thread with respect to the scheduler.
the_thread | The thread. |
priority_node | The priority node of the job. |
queue_context | The thread queue context to provide the set of threads for _Thread_Priority_update(). |
void _Scheduler_default_Cancel_job | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
Priority_Node * | priority_node, | ||
Thread_queue_Context * | queue_context | ||
) |
Does nothing.
scheduler | This parameter is unused. |
the_thread | This parameter is unused. |
priority_node | This parameter is unused. |
queue_context | This parameter is unused. |
Priority_Control _Scheduler_default_Map_priority | ( | const Scheduler_Control * | scheduler, |
Priority_Control | priority | ||
) |
Returns the scheduler internal thread priority mapped by SCHEDULER_PRIORITY_MAP().
scheduler | Unused. |
priority | The user visible thread priority. |
void _Scheduler_default_Node_destroy | ( | const Scheduler_Control * | scheduler, |
Scheduler_Node * | node | ||
) |
Does nothing.
scheduler | This parameter is unused. |
node | This parameter is unused. |
void _Scheduler_default_Node_initialize | ( | const Scheduler_Control * | scheduler, |
Scheduler_Node * | node, | ||
Thread_Control * | the_thread, | ||
Priority_Control | priority | ||
) |
Performs the scheduler base node initialization.
scheduler | This parameter is unused. | |
[out] | node | The node to initialize. |
the_thread | This parameter is unused. | |
priority | The thread priority. |
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.
scheduler | This parameter is unused. |
the_thread | This parameter is unused. |
priority_node | This parameter is unused. |
deadline | This parameter is unused. |
queue_context | This parameter is unused. |
void _Scheduler_default_Schedule | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread | ||
) |
Does nothing.
scheduler | This parameter is unused. |
the_thread | This parameter is unused. |
RTEMS_INLINE_ROUTINE bool _Scheduler_default_Set_affinity_body | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
Scheduler_Node * | node, | ||
const Processor_mask * | affinity | ||
) |
Checks if the affinity is a subset of the online processors.
scheduler | This parameter is unused. |
the_thread | This parameter is unused. |
node | This parameter is unused. |
affinity | The processor mask to check. |
true | affinity is a subset of the online processors. |
false | affinity is not a subset of the online processors. |
void _Scheduler_default_Start_idle | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
struct Per_CPU_Control * | cpu | ||
) |
Starts an idle thread.
scheduler | This parameter is unused. | |
[in,out] | the_thread | An idle thread. |
cpu | This parameter is unused. |
void _Scheduler_default_Tick | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | executing | ||
) |
Performs tick operations depending on the CPU budget algorithm for each executing thread.
This routine is invoked as part of processing each clock tick.
scheduler | The scheduler. | |
[in,out] | executing | An executing thread. |
Priority_Control _Scheduler_default_Unmap_priority | ( | const Scheduler_Control * | scheduler, |
Priority_Control | priority | ||
) |
Returns the user visible thread priority unmapped by SCHEDULER_PRIORITY_UNMAP().
scheduler | Unused. |
priority | The scheduler internal thread priority. |
RTEMS_INLINE_ROUTINE void _Scheduler_Generic_block | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
Scheduler_Node * | node, | ||
void(*)(const Scheduler_Control *, Thread_Control *, Scheduler_Node *) | extract, | ||
void(*)(const Scheduler_Control *, Thread_Control *, bool) | schedule | ||
) |
Blocks the thread.
scheduler | The scheduler instance. |
the_thread | The thread to block. |
node | The corresponding scheduler node. |
extract | Method to extract the thread. |
schedule | Method for scheduling threads. |
bool _Scheduler_Get_affinity | ( | Thread_Control * | the_thread, |
size_t | cpusetsize, | ||
cpu_set_t * | cpuset | ||
) |
Copies the thread's scheduler's affinity to the given cpuset.
the_thread | The thread to get the affinity of its scheduler. | |
cpusetsize | The size of cpuset. | |
[out] | cpuset | The cpuset that serves as destination for the copy operation |
true | The copy operation was lossless. |
false | The copy operation was not lossless |
RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Get_by_CPU | ( | const Per_CPU_Control * | cpu | ) |
Gets the scheduler for the cpu.
cpu | The cpu control to get the scheduler of. |
RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Get_by_id | ( | Objects_Id | id | ) |
Gets the scheduler from the given object build id.
id | The object build id. |
RTEMS_INLINE_ROUTINE Scheduler_Context* _Scheduler_Get_context | ( | const Scheduler_Control * | scheduler | ) |
Gets the context of the scheduler.
scheduler | The scheduler to get the context of. |
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index | ( | const Scheduler_Control * | scheduler | ) |
Gets the index of the scheduler.
scheduler | The scheduler to get the index of. |
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_index_by_id | ( | Objects_Id | id | ) |
Gets the scheduler index from the given object build id.
id | The object build id. |
RTEMS_INLINE_ROUTINE uint32_t _Scheduler_Get_processor_count | ( | const Scheduler_Control * | scheduler | ) |
Gets the number of processors of the scheduler.
scheduler | The scheduler instance to get the number of processors of. |
RTEMS_INLINE_ROUTINE const Processor_mask* _Scheduler_Get_processors | ( | const Scheduler_Control * | scheduler | ) |
Gets the processors of the scheduler.
scheduler | The scheduler to get the processors of. |
void _Scheduler_Handler_initialization | ( | void | ) |
Initializes the scheduler to the policy chosen by the user.
This routine initializes the scheduler to the policy chosen by the user through confdefs, or to the priority scheduler with ready chains by default.
RTEMS_INLINE_ROUTINE bool _Scheduler_Has_processor_ownership | ( | const Scheduler_Control * | scheduler, |
uint32_t | cpu_index | ||
) |
Checks if the scheduler of the cpu with the given index is equal to the given scheduler.
scheduler | The scheduler for the comparison. |
cpu_index | The index of the cpu for the comparison. |
true | The scheduler of the cpu is the given scheduler. |
false | The scheduler of the cpu is not the given scheduler. |
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Map_priority | ( | const Scheduler_Control * | scheduler, |
Priority_Control | priority | ||
) |
Maps a thread priority from the user domain to the scheduler domain.
Let M be the maximum scheduler priority. The mapping must be bijective in the closed interval [0, M], e.g. _Scheduler_Unmap_priority( scheduler, _Scheduler_Map_priority( scheduler, p ) ) == p for all p in [0, M]. For other values the mapping is undefined.
scheduler | The scheduler instance. |
priority | The user domain thread priority. |
RTEMS_INLINE_ROUTINE void _Scheduler_Node_destroy | ( | const Scheduler_Control * | scheduler, |
Scheduler_Node * | node | ||
) |
Destroys a scheduler node.
The caller must ensure that _Scheduler_Node_destroy() will be called only after a corresponding _Scheduler_Node_initialize().
scheduler | The scheduler instance. | |
[out] | node | The scheduler node to destroy. |
RTEMS_INLINE_ROUTINE void _Scheduler_Node_do_initialize | ( | const struct _Scheduler_Control * | scheduler, |
Scheduler_Node * | node, | ||
Thread_Control * | the_thread, | ||
Priority_Control | priority | ||
) |
Initializes a node.
scheduler | The scheduler for the initialization of node. | |
[out] | node | The node to initialize. |
the_thread | The thread for the initialization of node. | |
priority | The priority value for node. |
RTEMS_INLINE_ROUTINE Thread_Control* _Scheduler_Node_get_owner | ( | const Scheduler_Node * | node | ) |
Gets the owner of the node.
node | The node to get the owner of. |
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Node_get_priority | ( | Scheduler_Node * | node | ) |
Gets the priority of the node.
node | The node to get the priority of. |
RTEMS_INLINE_ROUTINE const Scheduler_Control* _Scheduler_Node_get_scheduler | ( | const Scheduler_Node * | node | ) |
Gets the scheduler of the node.
node | The node to get the scheduler of. |
RTEMS_INLINE_ROUTINE void _Scheduler_Node_initialize | ( | const Scheduler_Control * | scheduler, |
Scheduler_Node * | node, | ||
Thread_Control * | the_thread, | ||
Priority_Control | priority | ||
) |
Initializes a scheduler node.
The scheduler node contains arbitrary data on function entry. The caller must ensure that _Scheduler_Node_destroy() will be called after a _Scheduler_Node_initialize() before the memory of the scheduler node is destroyed.
scheduler | The scheduler instance. | |
[out] | node | The scheduler node to initialize. |
the_thread | The thread of the scheduler node to initialize. | |
priority | The thread priority. |
RTEMS_INLINE_ROUTINE void _Scheduler_Node_set_priority | ( | Scheduler_Node * | node, |
Priority_Control | new_priority, | ||
bool | prepend_it | ||
) |
Sets the priority of the node.
[in,out] | node | The node to set the priority of. |
new_priority | The new priority for node. | |
prepend_it | Indicates whether the new priority should be prepended. |
RTEMS_INLINE_ROUTINE void _Scheduler_Release_critical | ( | const Scheduler_Control * | scheduler, |
ISR_lock_Context * | lock_context | ||
) |
Releases the scheduler instance inside a critical section (interrupts disabled).
scheduler | The scheduler instance. |
lock_context | The lock context used for _Scheduler_Acquire_critical(). |
RTEMS_INLINE_ROUTINE void _Scheduler_Release_job | ( | Thread_Control * | the_thread, |
Priority_Node * | priority_node, | ||
uint64_t | deadline, | ||
Thread_queue_Context * | queue_context | ||
) |
Releases a job of a thread with respect to the scheduler.
the_thread | The thread. |
priority_node | The priority node of the job. |
deadline | The deadline in watchdog ticks since boot. |
queue_context | The thread queue context to provide the set of threads for _Thread_Priority_update(). |
RTEMS_INLINE_ROUTINE void _Scheduler_Schedule | ( | Thread_Control * | the_thread | ) |
General scheduling decision.
The preferred method to add a new scheduler is to define the jump table entries and add a case to the _Scheduler_Initialize routine.
Generic scheduling implementations that rely on the ready queue only can be found in the _Scheduler_queue_XXX functions.This kernel routine implements the scheduling decision logic for the scheduler. It does NOT dispatch.
the_thread | The thread which state changed previously. |
RTEMS_INLINE_ROUTINE Status_Control _Scheduler_Set | ( | const Scheduler_Control * | new_scheduler, |
Thread_Control * | the_thread, | ||
Priority_Control | priority | ||
) |
Sets a new scheduler.
new_scheduler | The new scheduler to set. | |
[in,out] | the_thread | The thread for the operations. |
priority | The initial priority for the thread with the new scheduler. |
STATUS_SUCCESSFUL | The operation succeeded. |
STATUS_RESOURCE_IN_USE | The thread's wait queue is not empty. |
STATUS_UNSATISFIED | The new scheduler has no processors. |
bool _Scheduler_Set_affinity | ( | Thread_Control * | the_thread, |
size_t | cpusetsize, | ||
const cpu_set_t * | cpuset | ||
) |
Sets the thread's scheduler's affinity.
[in,out] | the_thread | The thread to set the affinity of. |
cpusetsize | The size of cpuset. | |
cpuset | The cpuset to set the affinity. |
true | The operation succeeded. |
false | The operation did not succeed. |
RTEMS_INLINE_ROUTINE void _Scheduler_Start_idle | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
Per_CPU_Control * | cpu | ||
) |
Starts the idle thread for a particular processor.
scheduler | The scheduler instance. | |
[in,out] | the_thread | The idle thread for the processor. |
[in,out] | cpu | The processor for the idle thread. |
RTEMS_INLINE_ROUTINE void _Scheduler_Tick | ( | const Per_CPU_Control * | cpu | ) |
Scheduler method invoked at each clock tick.
This method is invoked at each clock tick to allow the scheduler implementation to perform any activities required. For the scheduler which support standard RTEMS features, this includes time-slicing management.
cpu | The cpu control for the operation. |
RTEMS_INLINE_ROUTINE void _Scheduler_Unblock | ( | Thread_Control * | the_thread | ) |
Unblocks a thread with respect to the scheduler.
This operation must fetch the latest thread priority value for this scheduler instance and update its internal state if necessary.
the_thread | The thread. |
RTEMS_INLINE_ROUTINE Priority_Control _Scheduler_Unmap_priority | ( | const Scheduler_Control * | scheduler, |
Priority_Control | priority | ||
) |
Unmaps a thread priority from the scheduler domain to the user domain.
scheduler | The scheduler instance. |
priority | The scheduler domain thread priority. |
RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir | ( | Thread_Control * | new_heir, |
bool | force_dispatch | ||
) |
Updates the heir.
[in,out] | new_heir | The new heir. |
force_dispatch | Indicates whether the dispatch happens also if the currently running thread is set as not preemptible. |
RTEMS_INLINE_ROUTINE void _Scheduler_Update_priority | ( | Thread_Control * | the_thread | ) |
Propagates a priority change of a thread to the scheduler.
On uni-processor configurations, this operation must evaluate the thread state. In case the thread is not ready, then the priority update should be deferred to the next scheduler unblock operation.
The operation must update the heir and thread dispatch necessary variables in case the set of scheduled threads changes.
the_thread | The thread changing its priority. |
RTEMS_INLINE_ROUTINE void _Scheduler_Yield | ( | Thread_Control * | the_thread | ) |
Scheduler yield with a particular thread.
This routine is invoked when a thread wishes to voluntarily transfer control of the processor to another thread.
the_thread | The yielding thread. |
const Scheduler_Control _Scheduler_Table[] |