[Again] Help: RTEMS Threads, Preemptation and Time slicing...

Ian Caddy ianc at microsol.iinet.net.au
Tue Nov 2 02:06:25 UTC 2004


Hi Alex,


Alex wrote:
> Mr joel,
> 
> I saw the online docs before I post my message and I realised that preemptation could be handled through posix api, so
> my program is targeted to posix but as I cant switch the preemptation flag with posix I mixed posix and rtems std api and I wrote the following:
> 
> 
> ...
> rtems_task_mode(RTEMS_PREEMPT|RTEMS_TIMESLICE, RTEMS_PREEMPT_MASK|RTEMS_TIMESLICE_MASK,&old_mode)
> ...
> 
> in the thread source code and in the main thread source code.
> As I know, the instruction turns on preemptation and time slice, right?
>

That is correct.


> We can mix posix and rtems std api in the same program, right?

That is also correct, the only problem would be that you couldn't 
perform a straight port of your code over to another posix system as it 
contains RTEMS calls in it.

> 
> Am I confusing any concepts about this?

No, I think you are getting there.

> 
> ok, but I will study the rtems scheduler source code to see what is happening,
> 

 From an earlier email, Thomas indicated that it didn't look like you 
had a clock running, and without a clock you will not be able to get 
functioning timeslicing as the clock is required for this.

regards,

Ian Caddy



> 
> http://www.rtems.org/onlinedocs/releases/rtemsdocs-
> 
>>4.6.2/share/rtems/html/c_user/c_user00050.html
>>And POSIX does not give this level of control over the threading
>>attributes.  You have SCHED_FIFO, SCHED_RR, etc.  See
>>
>>
>>http://www.rtems.org/onlinedocs/releases/rtemsdocs-
>>4.6.2/share/rtems/html/posix_users/posix_users00278.html
> 
> 
> 
> ----- Mensagem Original -----
> De: Joel Sherrill joelOARcorpcom <joel.sherrill at OARcorp.com>
> Data: Sabado, 30 de Outubro de 2004, 15:05
> Assunto: Re: [Again] Help: RTEMS Threads, Preemptation and Time slicing...
> 
> 
>>Thomas Doerfler wrote:
>>
>>>Alex,
>>>
>>>first of all: would you mind switching the "urgent" flag off, 
>>>when you send mail to the rtems mailing list? I am sure the 
>>>issue is important and maybe also urgent for you, but on a 
>>>mailing list it looks like "read my message first, the others 
>>>are not so important" and I am sure this is not what you really 
>>>want to look like :-)
>>>
>>>I am not so familiar with the POSIX API, but I would guess that  
>>>disabling preemption will also disable timeslicing. And, if you 
>>>did not modify your source code after your first mail, your 
>>>system clock driver is still not active, therefore the system 
>>>has no time information and no ability for timeslicing.
>>
>>Preemption MUST be enabled to have timeslicing.  See
>>
>>http://www.rtems.org/onlinedocs/releases/rtemsdocs-
>>4.6.2/share/rtems/html/c_user/c_user00050.html
>>And POSIX does not give this level of control over the threading
>>attributes.  You have SCHED_FIFO, SCHED_RR, etc.  See
>>
>>
>>http://www.rtems.org/onlinedocs/releases/rtemsdocs-
>>4.6.2/share/rtems/html/posix_users/posix_users00278.html
>>--joel
>>
>>>wkr,
>>>thomas.
>>>
>>>
>>>
>>>
>>>>Thank you to all of you, but let me explain better what I want:
>>>>
>>>>I know that my sample code is "dummy", but no problem, what I 
>>
>>want is to make some threading tests to rtems for i386 arch, so, 
>>sometimes, the "dummy" projects are the best to test the real 
>>capabilities of the systems, right?, because, if people always 
>>write fine and objective programs we never test the system in 
>>other (dumies, may be :-) ) conditions.
>>
>>>>So, what I want it to have one thread running (like the "dummy" 
>>
>>for cicle I wrote) and I wat to see the other thread, executing 
>>the same dummy code, to enter in the cpu DUE to time slicing. I 
>>dont want to use bloking instructions like sleeps, "wait for 
>>single object" and somethings like these. 
>>
>>>>I already tested the rtems threads with this kind of blocking 
>>
>>instructions and the systems work fine, but now I want to see 
>>thread switching between threads with same priority, due to time 
>>slicing.>>
>>
>>>>In my sample program, I think I turned off preemptation and I 
>>
>>turned on the time slicing right? But the system doesnt switch 
>>between the threads... 
>>
>>>>Is this a rtems scheduler bug?
>>>>
>>>>Is this a bug in my code? (I thing it is, but where?)
>>>>
>>>>I am a beginner in rtems and I need help from you...
>>>>
>>>>
>>>>Thanks once again...
>>>>
>>>>Alex
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>----- Mensagem Original -----
>>>>De: Joel Sherrill joelOARcorpcom <joel.sherrill at OARcorp.com>
>>>>Data: Quinta-Feira, 28 de Outubro de 2004, 12:24
>>>>Assunto: Re: Help: RTEMS Threads, Preemptation and Time slicing...
>>>>
>>>>
>>>>
>>>>>Ian Caddy wrote:
>>>>>
>>>>>
>>>>>>Hi Alex,
>>>>>>
>>>>>>If your threads are the same priority, pre-emption will not 
>>>>>
>>>>>cause one of 
>>>>>
>>>>>
>>>>>>them to stop, as it will only pre-empt for HIGHER priority 
>>
>>threads.>>>>
>>
>>>>>>In this case, you will need to configure these threads for 
>>
>>round-
>>
>>>>>robbin 
>>>>>
>>>>>
>>>>>>(or timeslicing) to achieve what you are asking.
>>>>>>
>>>>>>In saying that though, your system design should never, in 
>>>>>
>>>>>practise, 
>>>>>
>>>>>
>>>>>>consist of tasks that are continuously running as no other 
>>
>>task 
>>
>>>>>of a 
>>>>>
>>>>>
>>>>>>lower priority level will ever get to run in this sort of 
>>>>>
>>>>>system.  A 
>>>>>
>>>>>
>>>>>>normal system design will have tasks waiting on things from 
>>>>>
>>>>>other tasks, 
>>>>>
>>>>>
>>>>>>or if not, sleeps that allow the task to yield to lower 
>>
>>priority 
>>
>>>>>tasks.
>>>>>I find that often people have threads that either execute much 
>>
>>quicker>>>then the timeslicing quantum or have no scheduling 
>>points so 
>>
>>>>>unless 
>>>>>timeslicing is enabled, there is no switching.
>>>>>
>>>>>Unless you configure the system differently, the timeslice 
>>
>>quantum 
>>
>>>>>is 10 
>>>>>milliseconds which is a LOT of CPU cycles on most modern CPUs.
>>>>>
>>>>>Tasking Design Rule: Find ways for your tasks to naturally 
>>
>>block 
>>
>>>>>so they
>>>>>spent most of their life blocked.
>>>>>
>>>>>--joel
>>>>>
>>>>>
>>>>>
>>>>>>I hope this helps.
>>>>>>
>>>>>>regards,
>>>>>>
>>>>>>Ian Caddy
>>>>>>
>>>>>>
>>>>>>Alex wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>Hi all,
>>>>>>>I am making little rtems programs involving threads and the 
>>>>>
>>>>>POSIX API.
>>>>>
>>>>>
>>>>>>>I want to create a program that launchs 2 threads via posix 
>>>>>
>>>>>calls. 
>>>>>
>>>>>
>>>>>>>Then I want to split the processor attent to both threads, i 
>>>>>
>>>>>mean, 
>>>>>
>>>>>
>>>>>>>both threads must execute in "parallel" and not to
>>>>>>>wait one from another...
>>>>>>>
>>>>>>>The RTEMS manual says the scheduler look to the different 
>>
>>taks 
>>
>>>>>in this 
>>>>>
>>>>>
>>>>>>>order:
>>>>>>>Priority, preemptation (when activated) and then time slicing 
>>>>>
>>>>>(when 
>>>>>
>>>>>
>>>>>>>activated), right?
>>>>>>>
>>>>>>>So, in the rtems program I launch the 2 extra threads with 
>>>>>
>>>>>equal 
>>>>>
>>>>>
>>>>>>>priority, priority 1! For each thread, including the main 
>>>>>
>>>>>thread I 
>>>>>
>>>>>
>>>>>>>turn on the preemptation and time slicing, but the
>>>>>>>second extra thread only starts execution when the first 
>>
>>extra 
>>
>>>>>thread 
>>>>>
>>>>>
>>>>>>>finishs its execution.
>>>>>>>
>>>>>>>I cant understand why... :-(
>>>>>>>
>>>>>>>Note: If I use a, for example, the sleep() instruction in the 
>>>>>
>>>>>body of 
>>>>>
>>>>>
>>>>>>>the thread, the processor
>>>>>>>is switch to the other extra thread in a good way, but if i 
>>>>>
>>>>>dont use 
>>>>>
>>>>>
>>>>>>>functions that transfer the
>>>>>>>execution to other threads, the processor is never switched 
>>
>>to 
>>
>>>>>other 
>>>>>
>>>>>
>>>>>>>threads...
>>>>>>>Can you help me? How to execute the 2 extra threads at the 
>>
>>same 
>>
>>>>>time 
>>>>>
>>>>>
>>>>>>>while the main thread is waiting for the 2 extra threads?
>>>>>>>by the way, is there any way to turn on preemptation and time 
>>>>>
>>>>>slicing 
>>>>>
>>>>>
>>>>>>>using only posix api?
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>>-- 
>>>>>Joel Sherrill, Ph.D.             Director of Research & Development
>>>>>joel at OARcorp.com                 On-Line Applications Research
>>>>>Ask me about RTEMS: a free RTOS  Huntsville AL 35805
>>>>>  Support Available             (256) 722-9985
>>>>>
>>>>>
>>>>
>>>>________________________________________________________________________________
>>>>A protecção do e-mail contra vírus é cada vez mais necessária!
>>>>Proteja a sua Caixa de Correio: 
>>
>>http://www.iol.pt/correio/rodape.php?dst=0409301>>
>>
>>>
>>>--------------------------------------------
>>>IMD Ingenieurbuero fuer Microcomputertechnik
>>>Thomas Doerfler           Herbststrasse 8
>>>D-82178 Puchheim          Germany
>>>email:    Thomas.Doerfler at imd-systems.de
>>>PGP public key available at: http://www.imd-
>>>systems.de/pgp_keys.htm
>>>
>>
>>
>>-- 
>>Joel Sherrill, Ph.D.             Director of Research & Development
>>joel at OARcorp.com                 On-Line Applications Research
>>Ask me about RTEMS: a free RTOS  Huntsville AL 35805
>>   Support Available             (256) 722-9985
>>
>>
> 
> 
> ________________________________________________________________________________
> Um acesso à internet com anti-vírus, bloqueador de janelas e caixa de correio com 21 MB?
> IOL. Tem tudo para ser mais simples.
> Saiba como instalar: http://www.iol.pt/correio/rodape.php?dst=0409231
> 
> 



More information about the users mailing list