Samgr_lite——如何初始化服务?(终章)

写在前面,经过前面service和feature的一系列讲解,我们来到最后一个环节——通过samgr初始化所有注册的服务

同样先贴上系列文章的链接,方便读者查找相关内容
SA框架下的基于Publish函数的广播机制
Samgr_lite——如何初始化服务?(以广播服务为例)(知识准备)
Samgr_lite——如何初始化服务?(以广播服务为例)(服务的注册)
Samgr_lite——如何初始化服务?(feature的注册)

开始终章!

1. SAMGR_Bootstrap

在注册完系统服务和APP服务后,我们通过SAMGR_Bootstrap函数进行smagr的启动,将所有未初始化的服务进行初始化,使得整个系统进入DYNAMIC平稳运行的状态,那么这个函数实现了什么了,我们将其拆分为几个函数模块来看

1.1 void SAMGR_Bootstrap(void)

首先我们宏观把握这个函数做了哪些事,后面再深入具体函数来看它是如何实现这个功能的
首先贴上代码注释
在这里插入图片描述
函数流程:
1.得到前面创建好的g_samgrImpl并对其进行mutex的检查
2. 创建一个临时的Vector用于保存后面检查出的未初始化的服务
3. 系统对应的BootStatus进入下一个状态
4. 获取互斥锁,开始对共享数据的修改和访问
5. 遍历samgr->services中的每个服务
6. 找到其中所有没有完成初始化的服务将其serviceImpl指针添加到上面的临时Vector中
7. 互斥锁的释放
8. 调用InitializeAllServices将Vector传入,初始化所有服务
9. 调用VECTOR_Clear将临时Vector释放
10. 调用InitCompleted检查是否全部初始化完成
11. 调用HILOG_INFO返回系统状态可以往下一步

注意:函数InitializeAllServices和InitCompleted所做的工作还有很多,包括taskPool的创建,消息处理相关,后面会深入函数进行分析

1.2 SAMGR_Bootstrap函数流程

同样通过图示的方式将流程更加清晰地展现
在这里插入图片描述
限于篇幅原因,在下一篇文章中我们具体讲解函数InitializeAllServices和InitCompleted是如何具体初始化服务的

2. 服务启动三步走的总结

实际工程中的启动过程

首先我们可以注意到源码在service和feature注册init函数下面有这么一行:
在这里插入图片描述
在这里插入图片描述
可以看到这么两行:SYS_SERVICE_INTI和SYS_FEATURE_INIT
其实这才是实际应用中服务和feature注册初始化的启动函数

一个完整的服务的创建和运行需要进行三步走:

  1. 通过SYS_SERVICE_INIT进行服务的注册
  2. 通过SYS_FEATURE_INIT进行feature和featureApi的注册(如果存在feature)
  3. 通过SAMGR_BootStrap函数将服务初始化,分配taskPool并初始化messageHandle

经过以上三步一个服务就真正创建完毕了

而一个完整的系统的创建和运行也是三步走:

  1. 完成所有系统服务和相关feature的注册(包括三个系统服务:BootStrap、Broadcast和hiview)
  2. 完成所有用户自定义的APP服务和相关feature的注册
  3. 通过sendBootRequest启动SMAGR_BootStrap将所有注册但是未初始化启动的服务进行初始化启动

经过以上三步整个系统服务的框架搭建完成

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国家一级假勤奋研究牲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值