[GSoC]use hash/map in POSIX key and Classic notepad

阿四 ashi08104 at gmail.com
Fri Mar 30 09:50:27 CDT 2012

Hi, all. I'm interesing in the hash/map in POSIX key and Classic notepad
project[1] and want to apply it as my GSoC this year. I've submitted my
proposal at GSoC. Here are some problems I want to figure out, thanks for
reply to any of them:

1. First, I want to be sure where the entry point of this project exactly
is in the RTEMS. For the notepad, I think RTEMS_API_Control structure,
which includes the Notepads array member, is the entry of the Notepad part
of this project. And to the POSIX key, the corresponding structure is
POSIX_Keys_Control structure, and the key area mentioned in [1] is the
Values array member of POSIX_Keys_Control. Am I missing something?

typedef struct {
  rtems_event_set          pending_events;
  rtems_event_set          event_condition;
  ASR_Information          Signal;
  uint32_t                 Notepads[ RTEMS_NUMBER_NOTEPADS ];
}  RTEMS_API_Control;

typedef struct {
   Objects_Control     Object;
   void              (*destructor)( void * );
   void              **Values[ OBJECTS_APIS_LAST + 1 ];
}  POSIX_Keys_Control;

2. I doesn't quite understand the key create procedure.First, I'm not sure
what determines the maximum variable at line4 in code below, is it equal to
CONFIGURE_MAXIMUM_POSIX_KEYS in configuration? Second, where the code also
allocates key memory for OBJECTS_INTERNAL_API, OBJECTS_CLASSIC_API, while
in my opinion, only key memory allocation for OBJECTS_POSIX_API is enough.
what are other things used for?

typedef enum {
  OBJECTS_NO_API       = 0,
} Objects_APIs;


1   for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) {
2     the_key->Values[ the_api ] = NULL;
4     bytes_to_allocate = sizeof( void * ) * (_Objects_Information_table[
the_api ][ 1 ]->maximum + 1);
5     table = _Workspace_Allocate( bytes_to_allocate );
6     if ( !table ) {
7       _POSIX_Keys_Free_memory( the_key );
9       _POSIX_Keys_Free( the_key );
10      _Thread_Enable_dispatch();
11     return ENOMEM;
12    }
14    the_key->Values[ the_api ] = table;
15   memset( table, '\0', bytes_to_allocate );
16  }

3. What's the general purpose of Notepads in RTEMS? After look at the
example in /testsuites/sptests/sp07, I feel it is used for inter-thread
communication, am I right? And the same question for POSIX key, since I
haven't found much information of it in RTEMS POSIX API User’s Guide, I
learn POSIX key knowledge from here[2], does it also apply to RTEMS?

4.As mentioned in [1], std::map can be  an example for this project. I
wonder is std::vector also appropriate for this project? Or maybe, several
differection algorithms sould be implemented, and leave the choice to user?
And I haven't study hash/map algorithm in depth, maybe, I should ask
related question after do more homework on this.

5. What's the function naming convention in RTEMS, like _POSIX_Key_Get is
an inline function, while _POSIX_Keys_Free_memory is not.


Best Regards!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.rtems.org/pipermail/rtems-users/attachments/20120330/0515f392/attachment-0001.html>

More information about the rtems-users mailing list