2024年Android最新Android Zygote 从何而来?揭开Android系统启动的面纱,2024年最新android面试app

学习分享

①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

bootloader程序分两个阶段执行。第一阶段,它检测外部RAM并加载第二阶段的辅助程序。在第二阶段,bootloader设置网络、内存等,设置内核运行参数等,即为kernel运行做准备。

你可以在aosp中找到这部分代码(android版本2.xx,后面有改动),

aosp/bootable/bootloader/legacy/usbloader(看源码需翻墙)

其中包含两个重要文件,

  1. Init.s,负责初始化堆栈,清空BSS(Block Started by Symbol segment),最终调用main.c中的_main()方法。
  2. main.c,负责初始化硬件(时钟,主板,键盘,控制台),并且创建linux标签。

3. Kernel(内核) android内核启动与linux相似,例如设置高速缓存、受保护的内存、调度和加载驱动程序。当内核完成系统设置工作,它会在系统文件夹中寻找需要初始化的服务。

android与linux启动的不同点有哪些?

  • Binder:它是android特有的进程间通信机制和远程方法调用系统。
  • ashmem(Android Shared Memory):它是一个新的共享内存分配器,类似于POSIX SHM,但具有不同的行为,并支持更简单的基于文件的API。
  • pmem(Process memory allocator):它用于管理用户空间和内核驱动程序之间共享的大量(1-16+MB)物理上连续的内存区域。
  • logger:这是对logcat命令的内核支持。
  • wakelocks:用于电源管理文件。它使机器在每个事件的基础上保持唤醒,直到唤醒锁被释放。
  • oom handling:当可用内存过低时它会杀死进程。
  • alarm manager:从用户态通知内核唤醒。
  • RAM_CONSOLE:允许将内核printk消息保存到RAM中的缓冲区,以便在内核死机后可以在下一次内核调用中查看它们。
  • 用于ADB的USB小工具驱动程序
  • yaffs2闪存文件系统(作者也不知道这是啥)

4. Init进程

Init是系统的第一个进程,它是所有进程的父进程。它有两个主要任务,

  1. 挂载目录,例如/sys , /dev or /proc。
  2. 运行init.rc脚本

init.rc中语言的规则是特定的,可以在这里查询,community.nxp.com/t5/i-MX-Pro…

在这个过程中,你可以看到android启动画面。

5. Zygote和Dalvik(终于到了这一步)

在java中,每个程序运行在一个单独的内存隔离的虚拟机实例中,每个虚拟机实例都要消耗一部分内存,我们知道android通常是手持设备,内存有限,如果采用同样的策略,虚拟机实例就会消耗掉大量内存。

为了克服内存问题,android中才出现了zygote。zygote实现了跨Dalvik虚拟机的代码共享,实现了更低的内存占用和启动时间。zygote是在系统引导时启动的虚拟机进程。zygote预加载并初始化核心库类。

zygote加载过程如下,

  1. 加载zygote初始化类,aosp/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
  2. registerZygoteSocket(),为zygote命令通道注册一个套接字服务。
  3. preloadClasses(), 初始化zygote进程,加载并初始化常用类。
  4. preloadResources(),加载可以在进程间共享的资源。

在此过程,你可以看到启动动画。

6. System Service(系统服务)

完成上面的工作后,zygote会fork一个新的进程去启动系统服务。

核心服务如下:

  • Starting power manager
  • Creating the Activity Manager
  • Starting telephony registry
  • Starting package manager
  • Set activity manager service as system process

文末

那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试

  • 技能
  • 面试技巧+面试题

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值