博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统进程 zygote(一)—— 概述
阅读量:4707 次
发布时间:2019-06-10

本文共 1038 字,大约阅读时间需要 3 分钟。

和蔼的春光,充满鸳鸯的池塘;快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠。—— 徐志摩·醒!醒!

ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

先看一张图 (android boot sequence,出处不详):

android 的底层是 linux kernel,由 bootloader 负责加载。kernel 启动后,首先启动 init 进程,再由 init 进程依次启动系统所需的其他进程,包括 zygote 进程。

由 init 启动的进程在“system\core\rootdir\root.rc”脚本中都有描述:

 

再来看 zygote.rc (以 init.zygote32.rc 为例):

 

这段脚本要求 init 进程创建一个名为 zygote 的进程,该进程要执行的程序是“/system/bin/app_process”。并且为 zygote 进程创建一个 socket 资源 (用于进程间通信,ActivityManagerService 就是通过该 socket 请求 zygote 进程 fork 一个应用程序进程)。

后面的“--zygote”是传给 app_process 的参数,表示启动的是 zygote 进程。在 app_process 的 main 函数中会依据该参数决定执行 ZygoteInit 还是 Java 类,后面的笔记再继续学习。

zygote 进程在初始化时会启动虚拟机,并加载一些系统资源。这样 zygote fork 出子进程后,子进程也继承了能正常工作的虚拟机和各种系统资源,接下来只需装载 apk 文件的字节码就可以运行应用程序了,可以大大缩短应用的启动时间,这就是 zygote 进程的主要作用。

Java 应用程序不能直接以本地进程的形态运行,必须在一个独立的虚拟机中运行。如果每次都重新启动虚拟机,将严重拖慢应用程序的启动速度。

Linux 的进程都是 fork 出来的,fork 出的子进程与父进程共享内存映像。只有当子进程改写内存时,操作系统才会为其分配一个新页面,并将老页面上的数据复制一份到新页面,这就是“写时拷贝(Copy On Write)”。

学习资料:(1) (2)《Android 框架揭秘》(3)《深入解析 Android 5.0 系统》

转载于:https://www.cnblogs.com/ilocker/p/4651366.html

你可能感兴趣的文章
使用点符号代替溢出的文本
查看>>
fatal: remote origin already exists.
查看>>
LeetCode 242. Valid Anagram
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>
使用Siege进行WEB压力测试
查看>>
斑马为什么有条纹?
查看>>
android多层树形结构列表学习笔记
查看>>