Semaphore Issue

Joel Sherrill joel.sherrill at OARcorp.com
Tue Aug 14 21:46:30 UTC 2012


On 08/14/2012 04:15 PM, Kirspel, Kevin wrote:
>
> I have a situation with semaphores that I thought someone may have a 
> quick explanation for.  The scenario consists of 2 semaphore/mutexes 
> and priority inheritance.  The first semaphore is created by the 
> application (S1) and is of type: RTEMS_BINARY_SEMAPHORE | 
> RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY.  The second (S2) is the 
> allocator lock mutex that is used by malloc().  My scenario is as follows.
>

> Task 1 has priority 36.  Task 2 has priority 34.
>
> 1.Task 1 obtains S1.
>
> 2.Task 1 obtains S2
>
> 3.Task 2 preempts Task 1.
>
> 4.Task 2 tries to obtain S2 but can’t get it.  Task 1 priority is 
> changed to 34.
>
> 5.Task 1 begins running again.  Task 1 releases S2.  Task 1 priority 
> is not changed back to 36 and continues to run.
>
> 6.Task 1 continues operating for 3 more seconds.
>
> 7.Task 1 releases S1.  Task 1 priority is now changed back to 36.
>
> 8.Task 2 now preempts Task 1 and begins operating again.
>
What RTEMS version is this?

This sounds like the priority inheritance release algorithm described here:

http://rtems.org/onlinedocs/doc-current/share/rtems/html/c_user/c_user_208.html#Semaphore-Manager-Priority-Inheritance

Priority inherited is not lowered until ALL mutexes are released.

There is an optional algorithm (don't recall if it is turned on by 
default) that
is guarded by the __RTEMS_STRICT_ORDER_MUTEX__ conditional.
configure with ENABLE_STRICT_ORDER_MUTEX=1 on the command line to
try this algorithm which should properly step down as each mutex is 
released.

> Task 1 is the main user of Semaphore S1.  During normal operation no 
> other task will try to obtain it.  It is there to protect against some 
> custom shell commands that may access the same data.  Semaphore S2 is 
> widely used since it protects memory allocation.  If 
> obtaining/releasing S1 is removed from the scenario above then 
> everything works OK.
>
> 1.Task 1 obtains S2
>
> 2.Task 2 preempts Task 1.
>
> 3.Task 2 tries to obtain S2 but can’t get it.  Task 1 priority is 
> changed to 34.
>
> 4.Task 1 begins running again.  Task 1 releases S2.  Task 1 priority 
> is now changed back to 36.
>
> 5.Task 2 now preempts Task 1 and begins operating again.
>
> 6.Task 2 enters wait condition.
>
> 7.Task 1 continues operating for 3 more seconds and then enters wait 
> condition.
>
> I am going to try and duplicate this scenario using a small test 
> program but I wanted to see if anyone had any ideas of what may be 
> causing the issue.  I have a mixed RTEMS source base between versions 
> 4.10 and 4.11.   I started with 4.10 and upgraded just enough to get 
> USB support.
>
Any chance you want to pitch in and help resolve some issues on the 
TCP/IP side?
We are now up to the IPV4 loopback test and would LOVE to have help. :)
>
> Kevin Kirspel
>
> Senior Research Engineer
>
> Opti Medical
>
> 235 Hembree Park Drive
>
> Roswell GA 30076
>
> Tel: (770)-510-4444 ext. 81642
>
> Direct: (770)-688-1642
>
> Fax: (770)-510-4445
>


-- 
Joel Sherrill, Ph.D.             Director of Research&   Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
     Support Available             (256) 722-9985


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20120814/31fc1219/attachment-0001.html>


More information about the users mailing list