removing taskvares (was Re: rtems_filesystem_current issues)
Chris Johns
cjohns at cybertec.com.au
Mon Oct 28 05:53:36 UTC 2002
Till Straumann wrote:
>
> As for supporting other librarie's globals: IMO, the most important goal
> is not to punish threads who do not use e.g. RPC with context switch
> overhead related to RPC. OTOH, a thread who decides to use (again,
> for example,) RPC, should be willing to accept a little higher penalty.
>
The issue with this type of rule and why taskvars fails as a concept is
the switch out time for a task, eg RPC, is the switch in time for
another task. RPC may be willing to pay the price, how-ever the task
being switch too may not. Suddenly things are not deterministic.
We must settle on a solution that is scalable for all cases and IMO have
0 switching overhead.
The User Extensions API seems to fit the bill, is stable and documented.
>
> This leads to a model with one pointer (to each thread's RTEMS-reent
> structure) which is switched very fast.
Check the TCB's "extensions" array and see if this is suitable. It seems
suitable for this job.
>
> The RTEMS-reent structure then
> can have one (or a couple of) slots for pointers to "extension lists".
>
I wonder if this does not solve the problem just moves it. You could end
up creating a specialised subset of the User Extensions API. I would be
concerned about adding another API while we have one that should do the job.
A pointer is only half the problem. You need "construction" and
"destruction" support to setup and clean up memory used. For example
setting up memory may not be a straight forward malloc and memcpy of an
existing global structure as pointers may be present. A deep copy maybe
needed.
I think things that are libc specific should be grouped, how-ever the
remainder can directly use the User Extensions API.
> -> context switch is fast in any case.
> -> tasks who need access to library globals have to look them up
>
> note that in most cases the global variables are not accessed very
> frequently and it's less painful to increase lookup time than context
> switch latency.
>
The User Extension API has no switch cost. The cost to access via the
indirect pointer is a little higher than directly but this seems to be
the price to pay. This seems to fit what are asking for.
--
Chris Johns, cjohns at cybertec.com.au
More information about the users
mailing list