fork()和execve()是标准的Linux系统调用,可以组合生成新的进程开始新的任务。上篇文章学习了fork()的使用,execve()呢就是执行新的文件中的main函数,开始了新的进程任务。fork出的子进程共享父进程的内存结构信息和库链接信息等,而后子进程调用execve()将新进程所需的代码加载到内存中,此时,父进程的信息将被擦除,并重新分配子进程的内存给新的任务代码。如果此时子进程所需的共享库已经被加载到内存中,就不用重新加载了,只需要跟新链接信息即可。否则还要从存储器中将库加载至内存,费时间。
这说明了,一开始fork到执行execve之间的部分也是比较费时且无用的,以为复制的父进程的内存也将由新的子进程的代码分配内存而被擦除。只有共享库是可复用的。
google声称Zygote使用了COW技术可以提高运行速度,即Copy on Write的方式对运行在内存中的进程实现了最大程度的复用,并通过库共享有效降低了内存的使用量。也就是说当fork的时候不进行内存的复制,复制内存的开销是很大的,此时子进程只需要共享父进程的内存空间即可,因为这个时候他们没有差异。而当子进程需要需要修改共享内存信息时,此时才开始将内存信息复制到自己的内存空间中,并进行修改。这就是COW技术。
也就是说跟标准Linux的差异是,fork()时是否复制内存。
反正至到execve()执行的时候肯定要复制内存了。所以这项改进对于新应用的启动速度方面肯定有提升。
当然上述是我根据一些资料总结的,甚至有自己的想象部分,请大家多指正。
分享到:
相关推荐
### Android Zygote启动流程源码解析 #### 引言 在Android系统中,Zygote进程扮演着至关重要的角色,作为所有应用进程和SystemServer进程的“始祖”。了解Zygote的启动流程对于深入理解Android底层机制具有重要...
当Zygote启动后,它会通过调用`fork()`系统调用来创建子进程,这些子进程会继承Zygote的内存状态,利用了Copy-on-Write (COW)机制。COW是一种内存管理策略,它允许多个进程共享同一块内存区域,只有当某个进程尝试...
Android启动,第二大阶段,Zygote启动。 紧接上一篇《 Android启动-init介绍》Linux内核启动之后,执行第一个进程 Init,init会启动本地服务,创建Zygote等。 这里我们就来研究一下Zygote启动过程。
标题中的“zygote”是Android操作系统中的一个关键组件,它是Android系统启动的核心部分,扮演着...对zygote的深入理解和研究对于Android开发者来说至关重要,它可以帮助我们更好地优化应用性能,解决内存泄漏等问题。
在Android操作系统中,Zygote进程是整个系统的核心部分,它是所有Android应用程序进程的始祖。Zygote的启动流程非常关键,因为它涉及到系统资源的初始化、Dalvik或ART虚拟机的预加载以及核心库的加载等。让我们深入...
Android zygote服务/SystemServer启动流程/Activity创建,本文档继承Android init的分析,继续往下分析Zygote进程、SystemServer进程的创建、Activity的建立
在这个过程中,Zygote并不会复制整个内存空间,而是采用一种称为“写时复制”(copy-on-write)的策略。这意味着,Zygote和新进程最初共享相同的内存空间,只有当两者之一对内存进行写操作时,相应的内存页才会被...
在Android系统中,Zygote进程扮演着至关重要的角色,它是所有应用程序进程和System进程的始祖,被誉为“进程孵化器”。Zygote通过自我复制的方式创建新的进程,从而确保每个新进程都能快速拥有一个预先加载好的...
process -Xzygote /system/bin --zygote --start-system-server socket zygote stream 666 onrestart write/sys/android_power/request_state wake onrestart write/sys/power/state on onrestart restart media ...
Android系统进程Zygote启动过程涉及到的源代码分析是一篇深度探讨Android平台启动机制的文章,其内容主要围绕Zygote进程在Android系统中的作用、源代码的细节以及它如何通过fork机制和其他系统服务交互的过程。...
通过对Zygote启动流程以及systemServer和Home Activity启动过程的详细解析,我们不仅了解了Android系统启动过程中的关键步骤和技术细节,还深入了解了ART虚拟机的工作原理。这些深入的理解对于开发者来说至关重要,...
Android逆向-基础与实践 (八) Zygote注入
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是Android系统中的一个核心组件,它的主要任务是孵化(zygote即受精卵之意,象征新生命的开始)Dalvik或ART虚拟机进程,并为其他Android应用提供预加载的服务。理解zygote的工作原理对于深入学习Android系统运行...
### zygote启动流程详解 #### 一、zygote概念与作用 在Android系统中,**zygote**扮演着极其重要的角色。zygote的名称来源于生物学中“受精卵”的...理解zygote的工作原理对于深入研究Android底层机制具有重要意义。
ptrace注入与zygote区别和联系.V2EEptrace注入与zygote区别和联系.V2EE
《Android Framework 开发揭秘》这本书深入剖析了Android系统的内部运作机制,是Android开发者提升技术深度的宝贵资料。它涵盖了从系统启动到服务框架的构建,再到关键组件的工作原理,旨在帮助读者理解和掌握...
这涉及到理解为什么Android选择特定的技术栈、设计模式以及系统组件,如Binder IPC机制、Zygote进程、HAL(硬件抽象层)等。设计意图的理解有助于我们更好地把握系统架构的核心理念和目标,为后续的分析提供清晰的...