RTEMS  5.0.0
Data Structures | Macros | Functions
Deterministic Priority Scheduler

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
 

Functions

void _Scheduler_priority_Initialize (const Scheduler_Control *scheduler)
 Initializes the priority scheduler. This routine initializes the priority scheduler.
 
void _Scheduler_priority_Block (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 
void _Scheduler_priority_Schedule (const Scheduler_Control *scheduler, Thread_Control *the_thread)
 Sets the heir thread to be the next ready thread. More...
 
void _Scheduler_priority_Unblock (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 
void _Scheduler_priority_Update_priority (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *base_node)
 
void _Scheduler_priority_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
 
void _Scheduler_priority_Yield (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 
RTEMS_INLINE_ROUTINE Scheduler_priority_Context_Scheduler_priority_Get_context (const Scheduler_Control *scheduler)
 
RTEMS_INLINE_ROUTINE Scheduler_priority_Node_Scheduler_priority_Thread_get_node (Thread_Control *the_thread)
 
RTEMS_INLINE_ROUTINE Scheduler_priority_Node_Scheduler_priority_Node_downcast (Scheduler_Node *node)
 
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize (Chain_Control *ready_queues, Priority_Control maximum_priority)
 Ready queue initialization. More...
 
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. More...
 
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. More...
 
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. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Extract_body (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
 
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. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body (const Scheduler_Control *scheduler, Thread_Control *the_thread, bool force_dispatch)
 Scheduling decision logic. More...
 
RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_update (Scheduler_priority_Ready_queue *ready_queue, unsigned int new_priority, Priority_bit_map_Control *bit_map, Chain_Control *ready_queues)
 Updates the specified ready queue data according to the new priority value. More...
 

Detailed Description

Macro Definition Documentation

◆ SCHEDULER_PRIORITY_ENTRY_POINTS

#define SCHEDULER_PRIORITY_ENTRY_POINTS
Value:
{ \
_Scheduler_priority_Initialize, /* initialize entry point */ \
_Scheduler_priority_Schedule, /* schedule entry point */ \
_Scheduler_priority_Yield, /* yield entry point */ \
_Scheduler_priority_Block, /* block entry point */ \
_Scheduler_priority_Unblock, /* unblock entry point */ \
_Scheduler_priority_Update_priority, /* update priority entry point */ \
_Scheduler_default_Map_priority, /* map priority entry point */ \
_Scheduler_default_Unmap_priority, /* unmap priority entry point */ \
SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP \
_Scheduler_priority_Node_initialize, /* node initialize entry point */ \
_Scheduler_default_Node_destroy, /* node destroy entry point */ \
_Scheduler_default_Release_job, /* new period of task */ \
_Scheduler_default_Cancel_job, /* cancel period of task */ \
_Scheduler_default_Tick, /* tick entry point */ \
_Scheduler_default_Start_idle /* start idle entry point */ \
SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \
}

Entry points for the Deterministic Priority Based Scheduler.

Function Documentation

◆ _Scheduler_priority_Ready_queue_enqueue()

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.

Parameters
[in]nodeThe node to enqueue.
[in]ready_queueThe ready queue.
[in]bit_mapThe priority bit map of the scheduler instance.

◆ _Scheduler_priority_Ready_queue_enqueue_first()

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.

Parameters
[in]nodeThe node to enqueue as first.
[in]ready_queueThe ready queue.
[in]bit_mapThe priority bit map of the scheduler instance.

◆ _Scheduler_priority_Ready_queue_extract()

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.

Parameters
[in]nodeThe node to extract.
[in]ready_queueThe ready queue.
[in]bit_mapThe priority bit map of the scheduler instance.

◆ _Scheduler_priority_Ready_queue_first()

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.

Parameters
[in]bit_mapThe priority bit map of the scheduler instance.
[in]ready_queuesThe ready queues of the scheduler instance.
Returns
This method returns the first node.

◆ _Scheduler_priority_Ready_queue_initialize()

RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize ( Chain_Control ready_queues,
Priority_Control  maximum_priority 
)

Ready queue initialization.

This routine initializes ready_queues for priority-based scheduling.

◆ _Scheduler_priority_Ready_queue_update()

RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_update ( Scheduler_priority_Ready_queue ready_queue,
unsigned int  new_priority,
Priority_bit_map_Control bit_map,
Chain_Control ready_queues 
)

Updates the specified ready queue data according to the new priority value.

Parameters
[in]ready_queueThe ready queue.
[in]new_priorityThe new priority.
[in]bit_mapThe priority bit map of the scheduler instance.
[in]ready_queuesThe ready queues of the scheduler instance.

◆ _Scheduler_priority_Schedule()

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().

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