[ECOS] "Threads on ecos" confirmation needed...

Ivan Horvat ihorvat@xylon.hr
Fri Jan 30 20:00:00 GMT 2004


Hi.

>Im my opinion there is no need to alter eCos behaviour. eCos does *not* need
>malloc/free so kernel should not use it. Threads' data can be allocated in
>global storage and/or on stacks and *nobody* should free that.
>
>Obviously you can implement auto-free feature if you want. There is even no
>need to modify existing eCos code!
>  
>

I didn't mean to use malloc/free. If I recall well, there is a hard 
limit on number of
threads that can be created in ecos (correct me if I'm wrong). So, one 
can declare an
array of Cyg_Thread objects (firts thought, also:-):

      Cyg_Thread thr_slots[MAX_THREADS];

with number of elements that is equal to maximum number of threads. 
Then, changes
are quite simple. For example, cyg_thread_create() could be modified 
first to find a
free "slot". Then, instead of placing the object into user supplied 
space pointed by
'thread':

      Cyg_Thread *t = new((void *)thread) Cyg_Thread (...);

it should place it in one of the "empty slots":

      Cyg_Thread *t = new((void *)&thr_slots[empty]) Cyg_Thread (...);

Then, Cyg_Thread::exit() should be also modified to find the 'self' 
within the 'thr_slots'
and mark it as unallocated, available for future use. This would enable 
elegant and
automatic termination of "detached" threads (which I need in large 
quantities :-).

The stack could be freed/cleaned by the exiting thread before calling 
*exit() (I think) and
the above solution would "free" the space for thread object.

Of course, this is just a preliminary idea...


>One simple example (my first though):
>
>1) create a special "free threads' storage" thread, give it the lowest
>possible priority (one higher the idle thread)
>
>2) make this thread wait on mailbox, read from mailbox data mean memory
>addresses which are supposed to be freed, so free everything you receive.
>
>3) make each dynamically allocated thread to put it's stack and/or thread
>data to this mailbox and issue thread->exit right after that.
>
>You may need to modify it a little bit if you're using SMP system or if you
>cannot guarantee that the exiting thread would *not* hold for a while after
>putting data into mailbox but before final exit (normally threads'
>priorities should take care about it).
>
>
>  
>

Yes, this is a solution, but it requires another "garbage collector" 
thread. I would like
to have the similar functionality provided by e.g Linux or Solaris; one 
can create a
detached thread, and don't have to worry about its completion, as kernel 
resources are
automatically cleaned-up.



Thanks for help,
Ivan.




-- 
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss



More information about the Ecos-discuss mailing list