分享

property_init

 jemeen 2011-12-05

在android系统里,设计有一种系统叫做属性系统,它是用来做什么呢?这样设计有什么优势呢?其实这个属性系统主要是用来保存系统配置,或者用来交换不同进程的信息。这样的系统最大的优势是统一了系统配置的方式,统一了信息交换方式,通过共享内存的方式提高系统的性能。

下面就来分析属性系统的初始化函数,代码如下:

#001  void property_init(void)

#002  {

#003      init_property_area();

这行代码是调用函数init_property_area来设置属性内存的区域。

 

#004      load_properties_from_file(PROP_PATH_RAMDISK_DEFAULT);

这行代码是从ramdisk盘里加载属性文件。

 

#005  }

 

在这个函数里,需要查看一下宏定义,如下:

#define PROP_PATH_RAMDISK_DEFAULT "/default.prop"

也就是从内存盘里加载属性文件/default.prop,并把这些属性放到属性系统里。

 

 

接着来分析函数init_property_area是怎么创建共享内存,并把属性放到里面给所有进程共享使用的,代码如下:

#001  static int init_property_area(void)

#002  {

#003      prop_area *pa;

#004 

#005      if(pa_info_array)

#006          return -1;

这段代码是判断当属性信息数组已经初始化,就直接返回。

 

#007 

#008      if(init_workspace(&pa_workspace, PA_SIZE))

#009          return -1;

这段代码是调用函数init_workspace创建共享内存。

 

#010 

#011      fcntl(pa_workspace.fd, F_SETFD, FD_CLOEXEC);

这行代码是设置共享内存的执行结束后关闭。

 ///FD_CLOEXEC,表示执行exec函数集时关闭FD(比如fork子进程时可以用FD,执行execl不再能访问FD)

#012 

#013      pa_info_array = (void*) (((char*) pa_workspace.data) + PA_INFO_START);

这行代码是保存创建共享内存指针。

 

#014 

#015      pa = pa_workspace.data;

#016      memset(pa, 0, PA_SIZE);

这段代码是清空属性共享的内存。

 

#017      pa->magic = PROP_AREA_MAGIC;

#018      pa->version = PROP_AREA_VERSION;

这段代码是设置属性共享内存的版本号。

 

#019 

#020          /* plug into the lib property services */

#021      __system_property_area__ = pa;

这行代码是设置属性共享内存可以给库的属性共享服务使用。

 

#022 

#023      return 0;

#024  }

#025 

 

从上面的函数里可以看到一个创建共享内存的函数,它是怎么样实现创建共享内存的呢?现在来分析它的代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多