[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_INTERNAL_API = 1,
  OBJECTS_CLASSIC_API  = 2,
  OBJECTS_POSIX_API    = 3
} Objects_APIs;

#define OBJECTS_APIS_LAST OBJECTS_POSIX_API


1   for ( the_api = 1; the_api <= OBJECTS_APIS_LAST; the_api++ ) {
2     the_key->Values[ the_api ] = NULL;
3
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 );
8
9       _POSIX_Keys_Free( the_key );
10      _Thread_Enable_dispatch();
11     return ENOMEM;
12    }
13
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.


links:
[1]http://www.rtems.com/wiki/index.php/UseHashOrMapInNotepadsAndKeys
[2]http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION002945000000000000000

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


More information about the rtems-devel mailing list