RTEMS: CBS Scheduler

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Files | Data Structures | Macros | Typedefs | Functions | Variables
CBS Scheduler
Internal » SuperCore » Scheduler Handler

CBS Scheduler. More...

## Files
file | schedulercbs.h
| Thread manipulation for the CBS scheduler.
file | schedulercbsimpl.h
| CBS Scheduler Implementation.

## Data Structures
struct | Scheduler_CBS_Parameters
struct | Scheduler_CBS_Server
struct | Scheduler_CBS_Node

## Macros
#define | SCHEDULER_CBS_MAXIMUM_PRIORITY SCHEDULER_EDF_MAXIMUM_PRIORITY
#define | SCHEDULER_CBS_ENTRY_POINTS
#define | SCHEDULER_CBS_OK 0
#define | SCHEDULER_CBS_ERROR_GENERIC -16
#define | SCHEDULER_CBS_ERROR_NO_MEMORY -17
#define | SCHEDULER_CBS_ERROR_INVALID_PARAMETER -18
#define | SCHEDULER_CBS_ERROR_UNAUTHORIZED -19
#define | SCHEDULER_CBS_ERROR_UNIMPLEMENTED -20
#define | SCHEDULER_CBS_ERROR_MISSING_COMPONENT -21
#define | SCHEDULER_CBS_ERROR_INCONSISTENT_STATE -22
#define | SCHEDULER_CBS_ERROR_SYSTEM_OVERLOAD -23
#define | SCHEDULER_CBS_ERROR_INTERNAL_ERROR -24
#define | SCHEDULER_CBS_ERROR_NOT_FOUND -25
#define | SCHEDULER_CBS_ERROR_FULL -26
#define | SCHEDULER_CBS_ERROR_EMPTY -27
#define | SCHEDULER_CBS_ERROR_NOSERVER SCHEDULER_CBS_ERROR_NOT_FOUND

## Typedefs
typedef uint32_t | Scheduler_CBS_Server_id
typedef void(* | Scheduler_CBS_Budget_overrun) (Scheduler_CBS_Server_id server_id)

## Functions
void | _Scheduler_CBS_Unblock (const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
| Unblocks a thread.
void | _Scheduler_CBS_Release_job (const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
| Releases a job.
void | _Scheduler_CBS_Cancel_job (const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
| Cancels a job.
int | _Scheduler_CBS_Initialize (void)
| _Scheduler_CBS_Initialize
int | _Scheduler_CBS_Attach_thread (Scheduler_CBS_Server_id server_id, rtems_id task_id)
| Attaches a task to an already existing server.
int | _Scheduler_CBS_Detach_thread (Scheduler_CBS_Server_id server_id, rtems_id task_id)
| Detaches from the CBS Server.
int | _Scheduler_CBS_Cleanup (void)
| Cleans up resources associated to the CBS Library.
int | _Scheduler_CBS_Create_server (Scheduler_CBS_Parameters *params, Scheduler_CBS_Budget_overrun budget_overrun_callback, rtems_id *server_id)
| Creates a new server with specified parameters.
int | _Scheduler_CBS_Destroy_server (Scheduler_CBS_Server_id server_id)
| Detaches all tasks from a server and destroys it.
int | _Scheduler_CBS_Get_approved_budget (Scheduler_CBS_Server_id server_id, time_t *approved_budget)
| Retrieves the approved budget.
int | _Scheduler_CBS_Get_remaining_budget (Scheduler_CBS_Server_id server_id, time_t *remaining_budget)
| Retrieves remaining budget for the current server instance.
int | _Scheduler_CBS_Get_execution_time (Scheduler_CBS_Server_id server_id, time_t *exec_time, time_t *abs_time)
| Gets relative time info.
int | _Scheduler_CBS_Get_parameters (Scheduler_CBS_Server_id server_id, Scheduler_CBS_Parameters *params)
| Retrieves CBS scheduling parameters.
int | _Scheduler_CBS_Get_server_id (rtems_id task_id, Scheduler_CBS_Server_id *server_id)
| Gets a thread server id.
int | _Scheduler_CBS_Set_parameters (Scheduler_CBS_Server_id server_id, Scheduler_CBS_Parameters *parameters)
| Sets parameters for CBS scheduling.
void | _Scheduler_CBS_Budget_callout (Thread_Control *the_thread)
| Invoked when a limited time quantum is exceeded.
void | _Scheduler_CBS_Node_initialize (const Scheduler_Control *scheduler, Scheduler_Node *node, Thread_Control *the_thread, Priority_Control priority)
| Initializes a CBS specific scheduler node of the_thread.
RTEMS_INLINE_ROUTINE Scheduler_CBS_Node * | _Scheduler_CBS_Thread_get_node (Thread_Control *the_thread)
| Gets the CBS node of the thread.
RTEMS_INLINE_ROUTINE Scheduler_CBS_Node * | _Scheduler_CBS_Node_downcast (Scheduler_Node *node)
| Casts the scheduler node to a scheduler CBS node.

## Variables
const uint32_t | _Scheduler_CBS_Maximum_servers
Scheduler_CBS_Server | _Scheduler_CBS_Server_list []

## Detailed Description

CBS Scheduler.

## Macro Definition Documentation

## ◆ SCHEDULER_CBS_ENTRY_POINTS

#define SCHEDULER_CBS_ENTRY_POINTS

Value:
{ \
_Scheduler_EDF_Initialize, /* initialize entry point */ \
_Scheduler_EDF_Schedule, /* schedule entry point */ \
_Scheduler_EDF_Yield, /* yield entry point */ \
_Scheduler_EDF_Block, /* block entry point */ \
_Scheduler_CBS_Unblock, /* unblock entry point */ \
_Scheduler_EDF_Update_priority, /* update priority entry point */ \
_Scheduler_EDF_Map_priority, /* map priority entry point */ \
_Scheduler_EDF_Unmap_priority, /* unmap priority entry point */ \
SCHEDULER_OPERATION_DEFAULT_ASK_FOR_HELP \
_Scheduler_CBS_Node_initialize, /* node initialize entry point */ \
_Scheduler_default_Node_destroy, /* node destroy entry point */ \
_Scheduler_CBS_Release_job, /* new period of task */ \
_Scheduler_CBS_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 \
}
_Scheduler_CBS_Release_job
void _Scheduler_CBS_Release_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, uint64_t deadline, Thread_queue_Context *queue_context)
Releases a job.
Definition: schedulercbsreleasejob.c:24
_Scheduler_CBS_Cancel_job
void _Scheduler_CBS_Cancel_job(const Scheduler_Control *scheduler, Thread_Control *the_thread, Priority_Node *priority_node, Thread_queue_Context *queue_context)
Cancels a job.
Definition: schedulercbsreleasejob.c:54
_Scheduler_CBS_Unblock
void _Scheduler_CBS_Unblock(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Unblocks a thread.
Definition: schedulercbsunblock.c:28
_Scheduler_EDF_Yield
void _Scheduler_EDF_Yield(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Executes a thread yield for the thread.
Definition: scheduleredfyield.c:24
_Scheduler_EDF_Initialize
void _Scheduler_EDF_Initialize(const Scheduler_Control *scheduler)
Initializes EDF scheduler.
Definition: scheduleredf.c:24
_Scheduler_EDF_Block
void _Scheduler_EDF_Block(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Removes the blocking thread from the ready queue and schedules is only again if the thread is executi...
Definition: scheduleredfblock.c:24
_Scheduler_EDF_Map_priority
Priority_Control _Scheduler_EDF_Map_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Gets the mapped priority map of the priority control.
Definition: scheduleredfreleasejob.c:24
_Scheduler_EDF_Unmap_priority
Priority_Control _Scheduler_EDF_Unmap_priority(const Scheduler_Control *scheduler, Priority_Control priority)
Gets the unmapped priority map of the priority control.
Definition: scheduleredfreleasejob.c:32
_Scheduler_EDF_Update_priority
void _Scheduler_EDF_Update_priority(const Scheduler_Control *scheduler, Thread_Control *the_thread, Scheduler_Node *node)
Updates the priority of the scheduler node.
Definition: scheduleredfchangepriority.c:23
_Scheduler_EDF_Schedule
void _Scheduler_EDF_Schedule(const Scheduler_Control *scheduler, Thread_Control *the_thread)
Sets the heir thread to be the next ready thread in the rbtree ready queue.
Definition: scheduleredfschedule.c:23
_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_Node_destroy
void _Scheduler_default_Node_destroy(const Scheduler_Control *scheduler, Scheduler_Node *node)
Does nothing.
Definition: schedulerdefaultnodedestroy.c:24
_Scheduler_default_Start_idle
void _Scheduler_default_Start_idle(const Scheduler_Control *scheduler, Thread_Control *the_thread, struct Per_CPU_Control *cpu)
Starts an idle thread.
Definition: schedulerdefaultstartidle.c:15

Entry points for the Constant Bandwidth Server Scheduler.

Note
  : The CBS scheduler is an enhancement of EDF scheduler, therefor some routines are similar.

## Typedef Documentation

## ◆ Scheduler_CBS_Budget_overrun

typedef void(* Scheduler_CBS_Budget_overrun) (Scheduler_CBS_Server_id server_id)

Callback function invoked when a budget overrun of a task occurs.

## ◆ Scheduler_CBS_Server_id

typedef uint32_t Scheduler_CBS_Server_id

Server id.

## Function Documentation

## ◆ _Scheduler_CBS_Attach_thread()

int _Scheduler_CBS_Attach_thread | ( | Scheduler_CBS_Server_id | server_id,
|  | rtems_id | task_id
| ) |  |

Attaches a task to an already existing server.

Attach a task to an already existing server.

Parameters

  server_id | The id of the existing server.
  task_id | The id of the task to attach.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is so big or there is no thread for this task id.
  SCHEDULER_CBS_ERROR_NOSERVER | The server is not yet initialized.
  SCHEDULER_CBS_ERROR_FULL | The server already has a task.

## ◆ _Scheduler_CBS_Budget_callout()

void _Scheduler_CBS_Budget_callout | ( | Thread_Control * | the_thread | ) |

Invoked when a limited time quantum is exceeded.

This routine is invoked when a limited time quantum is exceeded.

Parameters

  the_thread | The thread that exceeded a limited time quantum.

## ◆ _Scheduler_CBS_Cancel_job()

void _Scheduler_CBS_Cancel_job | ( | const Scheduler_Control * | scheduler,
|  | Thread_Control * | the_thread,
|  | Priority_Node * | priority_node,
|  | Thread_queue_Context * | queue_context
| ) |  |

Cancels a job.

Parameters

  scheduler | The scheduler for the operation.
  the_thread | The corresponding thread.
  priority_node | The priority node for the operation.
  queue_context | The thread queue context.

## ◆ _Scheduler_CBS_Cleanup()

int _Scheduler_CBS_Cleanup | ( | void |  | ) |

Cleans up resources associated to the CBS Library.

Cleanup resources associated to the CBS Library.

Returns
  This method always returns SCHEDULER_CBS_OK.

## ◆ _Scheduler_CBS_Create_server()

int _Scheduler_CBS_Create_server | ( | Scheduler_CBS_Parameters * | params,
|  | Scheduler_CBS_Budget_overrun | budget_overrun_callback,
|  | rtems_id * | server_id
| ) |  |

Creates a new server with specified parameters.

Create a new server with specified parameters.

Parameters

  | params | The parameters for the server.
  | budget_overrun_callback | The budget overrun for the new server.
  [out] | server_id | In the case of success, this parameter contains the id of the newly created server.

Return values

  SCHEDULER_CBS_OK | The operation succeeded.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The given parameters are invalid.
  SCHEDULER_CBS_ERROR_FULL | The maximum number of servers was already created, a new server cannot be created.

## ◆ _Scheduler_CBS_Destroy_server()

int _Scheduler_CBS_Destroy_server | ( | Scheduler_CBS_Server_id | server_id | ) |

Detaches all tasks from a server and destroys it.

Detach all tasks from a server and destroy it.

Parameters

  server_id | The id of the server to destroy.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no initialized server with this id.

## ◆ _Scheduler_CBS_Detach_thread()

int _Scheduler_CBS_Detach_thread | ( | Scheduler_CBS_Server_id | server_id,
|  | rtems_id | task_id
| ) |  |

Detaches from the CBS Server.

Detach from the CBS Server.

Parameters

  server_id | The id of the existing server.
  task_id | The id of the task to attach.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is to big, or the task with this id is not attached to this server or there is no thread with this task.
  SCHEDULER_CBS_ERROR_NOSERVER | The server is not yet initialized.

## ◆ _Scheduler_CBS_Get_approved_budget()

int _Scheduler_CBS_Get_approved_budget | ( | Scheduler_CBS_Server_id | server_id,
|  | time_t * | approved_budget
| ) |  |

Retrieves the approved budget.

Retrieve the budget that has been approved for the subsequent server instances.

Parameters

  | server_id | The id of the server instance of which the budget is wanted.
  [out] | approved_budget | Contains the approved budget after a successful method call.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no initialized server with this id.

## ◆ _Scheduler_CBS_Get_execution_time()

int _Scheduler_CBS_Get_execution_time | ( | Scheduler_CBS_Server_id | server_id,
|  | time_t * | exec_time,
|  | time_t * | abs_time
| ) |  |

Gets relative time info.

Retrieve time info relative to server_id. The server status code is returned.

Parameters

  | server_id | is the server to get the status code from.
  [out] | exec_time | Contains the execution time after a successful method call.
  | abs_time | Not apparently used.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no initialized server with this id.

## ◆ _Scheduler_CBS_Get_parameters()

int _Scheduler_CBS_Get_parameters | ( | Scheduler_CBS_Server_id | server_id,
|  | Scheduler_CBS_Parameters * | params
| ) |  |

Retrieves CBS scheduling parameters.

Retrieve CBS scheduling parameters.

Parameters

  | server_id | The id of the server to get the scheduling parameters from.
  [out] | params | Will contain the scheduling parameters after successful method call.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no initialized server with this id.

## ◆ _Scheduler_CBS_Get_remaining_budget()

int _Scheduler_CBS_Get_remaining_budget | ( | Scheduler_CBS_Server_id | server_id,
|  | time_t * | remaining_budget
| ) |  |

Retrieves remaining budget for the current server instance.

Retrieve remaining budget for the current server instance.

Parameters

  | server_id | The id of the server instance of which the remaining budget is wanted.
  [out] | remaining_budget | Contains the remaining budget after a successful method call.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no initialized server with this id.

## ◆ _Scheduler_CBS_Get_server_id()

int _Scheduler_CBS_Get_server_id | ( | rtems_id | task_id,
|  | Scheduler_CBS_Server_id * | server_id
| ) |  |

Gets a thread server id.

Get a thread server id, or SCHEDULER_CBS_ERROR_NOT_FOUND if it is not attached to any server.

Parameters

  | task_id | The id of the task to get the corresponding server.
  [out] | server_id | Will contain the server id after successful method call.

Return values

  SCHEDULER_CBS_OK | The operation was successful
  SCHEDULER_CBS_ERROR_NOSERVER | There is no server with this task attached.

## ◆ _Scheduler_CBS_Initialize()

int _Scheduler_CBS_Initialize | ( | void |  | ) |

_Scheduler_CBS_Initialize

Initializes the CBS library.

Returns
  SCHEDULER_CBS_OK This method always returns this status.

## ◆ _Scheduler_CBS_Node_downcast()

RTEMS_INLINE_ROUTINE Scheduler_CBS_Node * _Scheduler_CBS_Node_downcast | ( | Scheduler_Node * | node | ) |

Casts the scheduler node to a scheduler CBS node.

Parameters

  node | The node to be casted to a scheduler CBS node.

Returns
  CBS Node pointer to node.

## ◆ _Scheduler_CBS_Node_initialize()

void _Scheduler_CBS_Node_initialize | ( | const Scheduler_Control * | scheduler,
|  | Scheduler_Node * | node,
|  | Thread_Control * | the_thread,
|  | Priority_Control | priority
| ) |  |

Initializes a CBS specific scheduler node of the_thread.

Parameters

  | scheduler | The scheduler control for the operation.
  [out] | node | The scheduler node to initalize.
  | the_thread | The thread to initialize a scheduler node for.
  | priority | The priority for the node.

## ◆ _Scheduler_CBS_Release_job()

void _Scheduler_CBS_Release_job | ( | const Scheduler_Control * | scheduler,
|  | Thread_Control * | the_thread,
|  | Priority_Node * | priority_node,
|  | uint64_t | deadline,
|  | Thread_queue_Context * | queue_context
| ) |  |

Releases a job.

Parameters

  scheduler | The scheduler for the operation.
  the_thread | The corresponding thread.
  priority_node | The priority node for the operation.
  deadline | The deadline for the job.
  queue_context | The thread queue context.

## ◆ _Scheduler_CBS_Set_parameters()

int _Scheduler_CBS_Set_parameters | ( | Scheduler_CBS_Server_id | server_id,
|  | Scheduler_CBS_Parameters * | parameters
| ) |  |

Sets parameters for CBS scheduling.

Change CBS scheduling parameters.

Parameters

  server_id | The id of the server.
  parameters | The parameters to set.

Return values

  SCHEDULER_CBS_OK | The operation was successful.
  SCHEDULER_CBS_ERROR_INVALID_PARAMETER | The server id is too big or the given parameters are invalid.
  SCHEDULER_CBS_ERROR_NOSERVER | There is no server with this id.

## ◆ _Scheduler_CBS_Thread_get_node()

RTEMS_INLINE_ROUTINE Scheduler_CBS_Node * _Scheduler_CBS_Thread_get_node | ( | Thread_Control * | the_thread | ) |

Gets the CBS node of the thread.

Parameters

  the_thread | The thread to get the CBS node of.

Returns
  Pointer to the scheduler node of the_thread.

## ◆ _Scheduler_CBS_Unblock()

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

Unblocks a thread.

Parameters

  scheduler | The scheduler control.
  the_thread | The thread to unblock.
  node | The scheduler node.

## Variable Documentation

## ◆ _Scheduler_CBS_Maximum_servers

const uint32_t _Scheduler_CBS_Maximum_servers
| extern

Maximum number of simultaneous servers.

## ◆ _Scheduler_CBS_Server_list

Scheduler_CBS_Server _Scheduler_CBS_Server_list[]
| extern

List of servers. The Scheduler_CBS_Server is the index to the array of pointers to _Scheduler_CBS_Server_list.