设为首页 加入收藏

TOP

Android Zygote Service
2014-11-24 12:21:31 来源: 作者: 【 】 浏览:0
Tags:Android Zygote Service

在本章我们会接触到这两个单词:


通过这两个单词,我们就可以大体知道Zygote是干什么的了,就是叫老母鸡下蛋。通过“Zygote”产出不同的子“Zygote”。从大的架构上讲,Zygote是一个简单的典型C/S结构。其他进程作为一个客服端向Zygote发出”孵化”请求,Zygote接收到命令就“孵化”出一个Activity进程来。




Zygote系统代码组成及其调用结构:


提供访问Dalvik “zygote”的接口。主要是包装Linux系统的Fork,以建立一个新的VM实例进程。


Zygote的套接口连接管理及其参数解析。其他Actvitiy建立进程请求是通过套接口发送命令参数给Zygote


Zygotemain函数入口。


Zygote系统代码层次调用


main()


startSystemServer()…


runSelectLoopMode()


Accept socket connection


Conntecion.RunOnce()


Read argument


folkAndSpecialize


folkAndSpecialize使用Native函数Dalvik_dalvik_system_Zygote_forkAndSpecialize


//native 的获取


dalvik/vm/native


//dalvik_system_Zygote.c


const DalvikNativeMethod dvm_dalvik_system_Zygote[] = {


{ "fork", "()I",


Dalvik_dalvik_system_Zygote_fork },


{ "forkAndSpecialize", "(II[II[[I)I",


Dalvik_dalvik_system_Zygote_forkAndSpecialize },


{ "forkSystemServer", "(II[II[[I)I",


Dalvik_dalvik_system_Zygote_forkSystemServer },


{ NULL, NULL, NULL },


};




从分析中我们可以看到,Android使用了Linuxfork机制。在LinuxFork是很高效的。


一个Android的应用实际上一个Linux进程,所谓进程具备下面几个要素,


a.要有一段程序供该进程运行,程序是可以被多个进程共享的。


b..进程专用的系统堆栈空间。


c.进程控制块,在linux中具体实现是task_struct


d.有独立的存储空间。


fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,在复制过程中,子进程复制了父进程的task_struct,系统堆栈空间和页面表,而当子进程改变了父进程的变量时候,会通过copy_on_write的手段为所涉及的页面建立一个新的副本。所以只有子进程有改变变量时,子进程才新建了一个页面 制原来页面的内容,基本资源的复制是必须的,整体看上去就像是父进程的独立存储空间也复制了一遍。


再看看下面Google在讲解Dalvik虚拟机的图片,我们就大体有了Android系统中Actvitiy的实际映射状态有了基本的认识。



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android GWES分析 下一篇Android 启动过程详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)