读书笔记:android设计与实现第二…

启动:
android 正常模式启动流程:
1,系统加电:执行bootloader,负责初始化硬件,并最后加载内核到内存中,bootloader由硬件厂商提供
2,进入内核引导阶段(主要由汇编语言编写),之后调用start_kernel进入内核启动阶段(C语言编写),start_kernel最终启动用户空间的init程序。
3,init程序负责解析init.rc配置文件,开启系统守护进程,最重要的两个:zygote和servicemanager,前者是android启动的第一个dalvik虚拟机,负责启动java世界的进程,后者是binder通信的基础。

init的执行过程分为4个阶段:
1,初始化文件系统和日志系统,为之后的执行阶段做准备,主要是linux标准函数的调用
2,解析init.rc和init..rc初始化文件
解析init.rc后,生成 action和service链表
3,触发执行action 和 service
4,init循环监听处理事件

4,zygote虚拟机启动子进程 system_server,在system_server中开启了android核心系统服务并将系统服务添加到Servicemanager,然后进入systemReady状态
5,systemready状态下,ActivityManagerService与zygote中的socket通信,通过zygote启动home应用,进入系统桌面。

底层只能看个大概,知道具体的步骤   

下面是上层的启动实现:
zygote是android中一个非常重要的守护进程服务,其他的dalvik虚拟机进程都是通过zygote孵化出来的。App运行在各自独立的dalvik虚拟机中,如果每个应用程序在启动时都需要单独运行和初始化一个dalvik虚拟机会大大降低系统性能,因此android首先创建一个zygote虚拟机,然后通过它孵化出其他的虚拟机进程,进而共享虚拟机内存和框架层的资源,提高应用程序启动和运行速度

因为上层是用Java语言写的下层是c,虚拟机中需要注册jni函数,java环境通过这些函数调用C,在注册前,已经加载了所有的so库。











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章