注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东月之神

在单纯的观念里面,生命就容易变得比较深刻!

 
 
 

日志

 
 
关于我

别驻足,梦想要不停追逐,别认输,熬过黑暗才有日出,要记住,成功就在下一步,路很苦,汗水是最美的书!

网易考拉推荐

(转)Android核心分析--Zygote Service  

2012-04-13 10:57:17|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

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

(转)Android核心分析--Zygote Service - 东月之神 - 东月之神

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

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

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

?ZygoteInit.java
Zygote的main函数入口。

 

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 },

};

 


 

在这里我们就有了Zygote服务的全貌理解,也在Code中印证了。【应yk_hu0621修正】{由于Android中没有具体应用程序的入口,都是通过启动Actvity来启动相关的Android应用,而这个 Android应用则对应着Linux进程,Activity便Host在这个应用程序上。}

 

{原文:Activity在本质上是个什么东西,就是一个Linux进程}

 

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

 

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

 


 

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

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

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

d.有独立的存储空间。

 

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

 

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

(转)Android核心分析--Zygote Service - 东月之神 - 东月之神


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-04/33966p9.htm

  评论这张
 
阅读(108)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017