Doubt in scheduler SMP function _Scheduler_SMP_Schedule_highest_ready
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Aug 5 07:29:59 UTC 2020
On 04/08/2020 17:57, Gedare Bloom wrote:
> On Tue, Aug 4, 2020 at 8:14 AM Richi Dubey<richidubey at gmail.com> wrote:
>> Hi,
>>
>> I have a quick doubt about the logic in the else part of the _Scheduler_SMP_Schedule_highest_ready function.
>>
> I'll give my understanding. Only Sebastian really understands this stuff;)
>
>> We get the action == SCHEDULER_TRY_TO_SCHEDULE_DO_BLOCK if the node returned by get_highest_ready is already SCHEDULED and has a pinning level of 1 (or <=1). This means that the highest ready eligible node is already scheduled and pinned to a processor.
>>
> This means that the highest ready node cannot be scheduled right now,
> for some reason. It is the thread that is already scheduled, or the
> node is busy helping.
>
>> Why do we then change its state to BLOCKED and remove it from the chain of ready nodes?
>>
> If the thread that owns the node can't be scheduled right now (e.g.,
> it is already scheduled on a different node), then the node should be
> blocked so we can maybe pick a different node to schedule.
Yes. I tried to improve the documentation a bit:
https://lists.rtems.org/pipermail/devel/2020-August/061144.html
What can be a bit confusing is that we have a scheduled state for
threads and for scheduler nodes:
/**
* @brief The thread state with respect to the scheduler.
*/
typedef enum {
/**
* @brief This thread is blocked with respect to the scheduler.
*
* This thread uses no scheduler nodes.
*/
THREAD_SCHEDULER_BLOCKED,
/**
* @brief This thread is scheduled with respect to the scheduler.
*
* This thread executes using one of its scheduler nodes. This could
be its
* own scheduler node or in case it owns resources taking part in the
* scheduler helping protocol a scheduler node of another thread.
*/
THREAD_SCHEDULER_SCHEDULED,
/**
* @brief This thread is ready with respect to the scheduler.
*
* None of the scheduler nodes of this thread is scheduled.
*/
THREAD_SCHEDULER_READY
} Thread_Scheduler_state;
/**
* @brief SMP scheduler node states.
*/
typedef enum {
/**
* @brief This scheduler node is blocked.
*
* A scheduler node is blocked if the corresponding thread is not ready.
*/
SCHEDULER_SMP_NODE_BLOCKED,
/**
* @brief The scheduler node is scheduled.
*
* A scheduler node is scheduled if the corresponding thread is ready
and the
* scheduler allocated a processor for it. A scheduled node is
assigned to
* exactly one processor. The count of scheduled nodes in this scheduler
* instance equals the processor count owned by the scheduler instance.
*/
SCHEDULER_SMP_NODE_SCHEDULED,
/**
* @brief This scheduler node is ready.
*
* A scheduler node is ready if the corresponding thread is ready and the
* scheduler did not allocate a processor for it.
*/
SCHEDULER_SMP_NODE_READY
} Scheduler_SMP_Node_state;
--
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