Rework thread priority management

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Sep 7 05:25:19 UTC 2016


The new thread priority data structures are:

/**
  * @brief The priority node to build up a priority aggregation.
  */
typedef struct {
   /**
    * @brief Node component for a chain or red-black tree.
    */
   union {
     Chain_Node Chain;
     RBTree_Node RBTree;
   } Node;

   /**
    * @brief The priority value of this node.
    */
   Priority_Control priority;
} Priority_Node;

/**
  * @brief The priority action type.
  */
typedef enum {
   PRIORITY_ACTION_ADD,
   PRIORITY_ACTION_CHANGE,
   PRIORITY_ACTION_REMOVE,
   PRIORITY_ACTION_INVALID
} Priority_Action_type;

typedef struct Priority_Aggregation Priority_Aggregation;

/**
  * @brief The priority aggregation.
  */
struct Priority_Aggregation {
   /**
    * @brief A priority node reflection the overall priority of the 
aggregation.
    *
    * May be used to add this aggregation to another aggregation to 
build up a
    * recursive priority scheme.
    */
   Priority_Node Node;

   /**
    * @brief A red-black tree to contain priority nodes contributing to the
    * overall priority of the this priority aggregation.
    */
   RBTree_Control Contributors;

#if defined(RTEMS_SMP)
   /**
    * @brief The scheduler instance of this priority aggregation.
    */
   const struct Scheduler_Control *scheduler;
#endif

   /**
    * @brief A priority action block to manage priority node additions, 
changes
    * and removals.
    */
   struct {
#if defined(RTEMS_SMP)
     /**
      * @brief The next priority aggregation in the action chain.
      */
     Priority_Aggregation *next;
#endif

     /**
      * @brief The priority node of the action.
      */
     Priority_Node *node;

     /**
      * @brief The type of the action.
      */
     Priority_Action_type type;
   } Action;
};

/**
  * @brief A set of priority actions.
  */
typedef struct {
   /**
    * @brief The first action of a priority action chain.
    */
   Priority_Aggregation *actions;
} Priority_Actions;

A thread priority is now a basically a priority queue.

On 07/09/16 03:44, Gedare Bloom wrote:
> I will try to read this code, but probably not until Friday.
>
> One question from the high-level description, can you clarify what
> "aggregation" means? Maybe this comes clear in one of the patches.
>
> Gedare
>
> On Tue, Sep 6, 2016 at 8:40 AM, Sebastian Huber
> <sebastian.huber at embedded-brains.de> wrote:
>> This patch set reworks the thread priority management.  The main goals are
>>
>> 1. an enhanced implementation of the priority inheritance protocol, and
>>
>> 2. support for the OMIP locking protocol.
>>
>> Instead of the current and real priority values in combination with the
>> resource count use thread priority nodes which contribute to the overall thread
>> priority.
>>
>> The actual priority of a thread is now an aggregation of priority nodes.
>> The thread priority aggregation for the home scheduler instance of a
>> thread consists of at least one priority node, which is normally the
>> real priority of the thread.  The locking protocols (e.g. priority
>> ceiling and priority inheritance), rate-monotonic period objects and the
>> POSIX sporadic server add, change and remove priority nodes.
>>
>> A thread changes its priority now immediately, e.g. priority changes are
>> not deferred until the thread releases its last resource.
>>
>> _______________________________________________
>> devel mailing list
>> devel at rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel

-- 
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list