`
dingran
  • 浏览: 371864 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android的Zygote的COW(Copy on Write)技术研究

阅读更多

        fork()和execve()是标准的Linux系统调用,可以组合生成新的进程开始新的任务。上篇文章学习了fork()的使用,execve()呢就是执行新的文件中的main函数,开始了新的进程任务。fork出的子进程共享父进程的内存结构信息和库链接信息等,而后子进程调用execve()将新进程所需的代码加载到内存中,此时,父进程的信息将被擦除,并重新分配子进程的内存给新的任务代码。如果此时子进程所需的共享库已经被加载到内存中,就不用重新加载了,只需要跟新链接信息即可。否则还要从存储器中将库加载至内存,费时间。


       这说明了,一开始fork到执行execve之间的部分也是比较费时且无用的,以为复制的父进程的内存也将由新的子进程的代码分配内存而被擦除。只有共享库是可复用的。


       google声称Zygote使用了COW技术可以提高运行速度,即Copy on Write的方式对运行在内存中的进程实现了最大程度的复用,并通过库共享有效降低了内存的使用量。也就是说当fork的时候不进行内存的复制,复制内存的开销是很大的,此时子进程只需要共享父进程的内存空间即可,因为这个时候他们没有差异。而当子进程需要需要修改共享内存信息时,此时才开始将内存信息复制到自己的内存空间中,并进行修改。这就是COW技术。


       也就是说跟标准Linux的差异是,fork()时是否复制内存。

      

       反正至到execve()执行的时候肯定要复制内存了。所以这项改进对于新应用的启动速度方面肯定有提升。


       当然上述是我根据一些资料总结的,甚至有自己的想象部分,请大家多指正。

0
1
分享到:
评论

相关推荐

    Android Zygote启动流程源码解析

    Android Zygote启动流程源码解析

    Android启动-Zygote启动介绍

    Android启动,第二大阶段,Zygote启动。 紧接上一篇《 Android启动-init介绍》Linux内核启动之后,执行第一个进程 Init,init会启动本地服务,创建Zygote等。 这里我们就来研究一下Zygote启动过程。

    Android Zygote解析

    ( Android Zygote解析

    模拟Android系统Zygote启动流程

    模拟Android系统Zygote启动流程

    Android 8.1zygote服务 SystemServer启动流程 Activity创建

    Android zygote服务/SystemServer启动流程/Activity创建,本文档继承Android init的分析,继续往下分析Zygote进程、SystemServer进程的创建、Activity的建立

    详细分析Android中实现Zygote的

    主要介绍了详细分析Android中实现Zygote的源码,包括底层的C/C++代码以及Java代码部分入口,需要的朋友可以参考下

    Android系统进程Zygote启动过程的源代码分析.pdf

    Android系统进程Zygote启动过程的源代码分析.pdf

    zygote启动过程

    zygote启动过程zygote启动过程zygote启动过程zygote启动过程zygote启动过程

    探索Android FrameWork底层开发视频全套

    1.初探Android 2.Android开发环境搭建与编译 3.Android编译过程分析 4.android.mk初识 5.Android.mk学习1 6.Android.mk学习2 7.Android.mk学习3 8.Android启动课程大纲 9.Android启动模式 10.init启动分析 11.走入...

    zygote

    NULL 博文链接:https://yishizhu.iteye.com/blog/843632

    5.ptrace注入与zygote区别和联系.V2EE

    ptrace注入与zygote区别和联系.V2EEptrace注入与zygote区别和联系.V2EE

    Android框架揭秘.pdf

    移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...

    Android 系统启动流分析 & Zygote启动流程分析

    Zygote在Android系统扮演着不可或缺的角色,Android系统的启动首先需要Zygote参与,比如启动SystemService , 还有一个就是孵化应用的进程,比如我们创建一个Activity也是需要Zygote参与.  Zygote 启动分为两个部分: 1....

    大厂高频面试题:说说你对Zygote的理解.docx

    Zygote可以说是Android开发面试很高频的一道问题,但总有小伙伴在回答这道问题总不能让面试满意, 在这你就要搞清楚面试问你对Zygote的理解时,面试官最想听到的和其实想问的应该是哪些?下面我们通过以下几点来剖析...

    Zygote启动流程-systemServer启动流程-homeLauncher启动

    zygote启动流程源码分析, 文件包含zygote systemService activityManager启动homeLauncher. 因为本地文字较长 不方便写blog发布 所以上传一下文档

    android核心分析pdf

    Android核心分析(09)----Zygote Service Android核心分析(10)----Android GWES之基本原理篇 Android核心分析(11)----Android GWES之消息系统 Android核心分析(12)----Android GEWS窗口管理之基本架构原理.. ...

    Android框架揭秘(完整版pdf)

    移植Android以及如何开发适合各种机器的应用程序,分析Android框架所需的基础知识,JNI(Java Native Interface)与Binder基础知识,Zygote、Service Manager、Service Server等Android核心组件,Android服务框架的...

    老罗的android之旅时序图

    (Android系统进程Zygote启动过程的源代码分析UML,Android系统默认Home应用程序(Launcher)的启动过程源代码分析uml,Android系统在新进程中启动自定义服务过程(startService)的原理分析UML,Android应用程序...

Global site tag (gtag.js) - Google Analytics