[GSoC]deal with the critical region in POSIX Key

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Jul 2 11:29:26 UTC 2012


On 07/02/2012 12:50 PM, Ashi wrote:
> I'm thinking about how to deal with critical region in my POSIX key project. My
> current approach is the one-rbtree approach, that is the critical region are
> one global rbtree which contains all the keys' data value and the chain-list in
> each thread's TCB. I'm confused with _Thread_Disable_dispatch() and
> _ISR_Disable(_level). What's the difference between them? Does _ISR_Disable()
> disable thread dispatch?

Single processor RTEMS systems require one hardware mechanism to ensure 
protection of critical sections against concurrent access.  Concurrent access 
in a single processor system can only occur due to interrupts.  Thus the 
protection mechanism is disabling and enabling of interrupts.  The high level
synchronization primitives like events, semaphores, mutexes, barriers, message 
queues, etc. are based on such critical sections.

The _ISR_Disable/Enable/Flash is something like a big kernel lock.

In order to avoid some large critical sections the thread dispatch disable 
level was introduced.  It protects code sections from interruptions due to 
thread dispatching.  Sections protected by _Thread_Disable_dispatch() are not 
automatically protected from interruption by an interrupt service.  The 
_Thread_Disable_dispatch() is also a non-blocking operation.

> I also find some operations like _RBTree_Find(),
> _Chain_Insert() in the RBTree API and Chain API call _ISR_Disable(), and some
> operation like _Objects_Get() which is called by _POSIX_Keys_Get() calls
> _Thread_Diable_dispath().
> BTW, I also checked the IRC meeting log, and find Joel has said "allocating
> memory from the workspace is a different lock than thread disable dispatch".
> Joel, what are the details of the different lock?

The memory allocation uses the _RTEMS_Lock_allocator() lock.  This is a 
potentially blocking operation.

-- 
Sebastian Huber, embedded brains GmbH

Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany
Phone   : +49 89 18 90 80 79-6
Fax     : +49 89 18 90 80 79-9
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