RTEMS CPU Kit with SuperCore
4.11.3
|
![]() |
Data Structures | |
struct | Scheduler_priority_Context |
struct | Scheduler_priority_Ready_queue |
Data for ready queue operations. More... | |
struct | Scheduler_priority_Node |
Scheduler node specialization for Deterministic Priority schedulers. More... | |
Macros | |
#define | SCHEDULER_PRIORITY_ENTRY_POINTS |
Entry points for the Deterministic Priority Based Scheduler. More... | |
#define SCHEDULER_PRIORITY_ENTRY_POINTS |
Entry points for the Deterministic Priority Based Scheduler.
void _Scheduler_priority_Block | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread | ||
) |
Removes the_thread from the scheduling decision.
This routine removes the_thread from the scheduling decision, that is, removes it from the ready queue. It performs any necessary scheduling operations including the selection of a new heir thread.
[in] | scheduler | The scheduler instance. |
[in] | the_thread | is the thread to be blocked |
void _Scheduler_priority_Initialize | ( | const Scheduler_Control * | scheduler | ) |
Initializes the priority scheduler.
This routine initializes the priority scheduler.
int _Scheduler_priority_Priority_compare | ( | Priority_Control | p1, |
Priority_Control | p2 | ||
) |
Compare two priorities.
This routine compares two priorities.
>0 | for p1 > p2; 0 for p1 == p2; <0 for p1 < p2. |
References _Scheduler_priority_Priority_compare_body().
RTEMS_INLINE_ROUTINE int _Scheduler_priority_Priority_compare_body | ( | Priority_Control | p1, |
Priority_Control | p2 | ||
) |
Priority comparison.
This routine implements priority comparison for priority-based scheduling.
Referenced by _Scheduler_priority_Priority_compare().
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue | ( | Chain_Node * | node, |
Scheduler_priority_Ready_queue * | ready_queue, | ||
Priority_bit_map_Control * | bit_map | ||
) |
Enqueues a node on the specified ready queue.
The node is placed as the last element of its priority group.
[in] | node | The node to enqueue. |
[in] | ready_queue | The ready queue. |
[in] | bit_map | The priority bit map of the scheduler instance. |
References _Chain_Append_unprotected(), _Priority_bit_map_Add(), Scheduler_priority_Ready_queue::Priority_map, and Scheduler_priority_Ready_queue::ready_chain.
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue_first | ( | Chain_Node * | node, |
Scheduler_priority_Ready_queue * | ready_queue, | ||
Priority_bit_map_Control * | bit_map | ||
) |
Enqueues a node on the specified ready queue as first.
The node is placed as the first element of its priority group.
[in] | node | The node to enqueue as first. |
[in] | ready_queue | The ready queue. |
[in] | bit_map | The priority bit map of the scheduler instance. |
References _Chain_Prepend_unprotected(), _Priority_bit_map_Add(), Scheduler_priority_Ready_queue::Priority_map, and Scheduler_priority_Ready_queue::ready_chain.
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_extract | ( | Chain_Node * | node, |
Scheduler_priority_Ready_queue * | ready_queue, | ||
Priority_bit_map_Control * | bit_map | ||
) |
Extracts a node from the specified ready queue.
[in] | node | The node to extract. |
[in] | ready_queue | The ready queue. |
[in] | bit_map | The priority bit map of the scheduler instance. |
References _Chain_Has_only_one_node(), _Chain_Initialize_empty(), and Scheduler_priority_Ready_queue::ready_chain.
RTEMS_INLINE_ROUTINE Chain_Node* _Scheduler_priority_Ready_queue_first | ( | Priority_bit_map_Control * | bit_map, |
Chain_Control * | ready_queues | ||
) |
Return a pointer to the first node.
This routines returns a pointer to the first node on ready_queues.
[in] | bit_map | The priority bit map of the scheduler instance. |
[in] | ready_queues | The ready queues of the scheduler instance. |
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize | ( | Chain_Control * | ready_queues | ) |
Ready queue initialization.
This routine initializes ready_queues for priority-based scheduling.
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_update | ( | Scheduler_priority_Ready_queue * | ready_queue, |
Priority_Control | new_priority, | ||
Priority_bit_map_Control * | bit_map, | ||
Chain_Control * | ready_queues | ||
) |
Updates the specified ready queue data according to the new priority value.
[in] | ready_queue | The ready queue. |
[in] | new_priority | The new priority. |
[in] | bit_map | The priority bit map of the scheduler instance. |
[in] | ready_queues | The ready queues of the scheduler instance. |
References Scheduler_priority_Ready_queue::ready_chain.
void _Scheduler_priority_Schedule | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread | ||
) |
Sets the heir thread to be the next ready thread.
This kernel routine sets the heir thread to be the next ready thread by invoking the_scheduler->ready_queue->operations->first().
References _Scheduler_priority_Schedule_body().
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread, | ||
bool | force_dispatch | ||
) |
Scheduling decision logic.
This kernel routine implements scheduling decision logic for priority-based scheduling.
Referenced by _Scheduler_priority_Schedule().
Scheduler_Void_or_thread _Scheduler_priority_Unblock | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread | ||
) |
Add the_thread to the scheduling decision.
This routine adds the_thread to the scheduling decision, that is, adds it to the ready queue and updates any appropriate scheduling variables, for example the heir thread.
[in] | scheduler | The scheduler instance. |
[in] | the_thread | will be unblocked |
Scheduler_Void_or_thread _Scheduler_priority_Yield | ( | const Scheduler_Control * | scheduler, |
Thread_Control * | the_thread | ||
) |
The specified THREAD yields.
This routine is invoked when a thread wishes to voluntarily transfer control of the processor to another thread in the queue.
This routine will remove the specified THREAD from the ready queue and place it immediately at the rear of this chain. Reset timeslice and yield the processor functions both use this routine, therefore if reset is true and this is the only thread on the queue then the timeslice counter is reset. The heir THREAD will be updated if the running is also the currently the heir.
[in] | scheduler | The scheduler instance. |
[in,out] | the_thread | The yielding thread. |