首页 > 其他 > 详细

Clojure进阶:使用Clojure构建DSL

时间:2014-03-10 22:16:09      阅读:535      评论:0      收藏:0      [点我收藏+]

   init.c(system/core/init/init.c)

  Linux系统中用户空间的第一个进程,main函数中主要解析了两个配置文件,init.rc和硬件相关的配置文件,解析调用的是 init_parse_config_file,在Ueventd_Parser.c的Parse_config进行解析,首先找到配置文件的section,不同的section使用不同的方式去解析, section为当symbol为on或者service的时候表示section,4.3加入了import关键字,在init.rc中

 on init : on关键字,对应的section名字是init

 分析init.rc文件

1、section的内容从标识开始,到下一个section结束

        2、boot和init在on这个section中,

   解析service section:

          init.h中使用service结构体,通过Initparse.c中的parse_service和parse_line_service将配置文件的内容填充于service结构体中。

  init控制Service:

         1、启动zygote,当init进程执行到do_class_start时,即启动service,因为zygote的classname为default,因此在init.rc中 #class_start 为                    default,在init.c中zygote

               通过fork(创建子线程)和execve(执行新的service)共同创建。

          2、重启zygote,在init.rc中 poll事件中有个SVC_RESTARTING标识,设置了它,执行service中的onrestart命令,在init.c的for循环中,执                 行restart_processes,重启所有标识为SVC_RESTARTING的service。


属性服务(property service),类似于注册表,重启后键值依然存在

       1、属性服务的初始化,init_property_aera()初始化存储空间,PA_SIZE 32768个字节,PA_INFO_START(1024)个字节存储头部信息

       2、由init创建在共享内存上,而共享内存可以跨进程,(init_workspace),客户端可以直接读取属性空间,只有读权限。

       3、客户端想要设置属性,需要通过属性服务器来交互,客户端通过property_set发送请求,init进程由start_property_service启动服务,创建              了一个用来接收请求的socket,收到后调用handle_property_set_fd进行处理,检查是否有权限,如果有,调用property_set修改属性值。


Clojure进阶:使用Clojure构建DSL,布布扣,bubuko.com

Clojure进阶:使用Clojure构建DSL

原文:http://blog.csdn.net/ivan_pig/article/details/20948243

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!