Android系统启动流程

在这里插入图片描述

  1. 当手机处于关机状态时,长按Power键开机,引导芯片从固化在ROM里的预设代码开始执行,然后加载引导程序到RAM,然后再去执行BootLoader。BootLoader主要是引导操作系统的启动

CPU复位会首先运行在ROM芯片内固化的一段指令(Boot ROM),这段指令会将BootLoader程序加载到内存中并且开始执行。
BootLoader也叫“引导加载程序”,是个底层代码,包含一堆指令,主要分为两部分。
第一部分,检测外部RAM,找到并加载另一段bootloader程序,之后跳到其中执行。
第二部分bootloader,设置运行内核所需的网络、内存等基本条件,之后找到对应的Kernel镜像文件,并将其加载到物理内存中。
经过这一步,Kernel的镜像已经加载到了物理内存的指定地址处,并建立了内核运行所需的基本环境。接下来BootLoader将控制权交给了Kernel,内核开始执行。

  1. 进入到Kernel层,然后启动Kernel的swapper进程(pid=0),该进程又称Idle进程,Idle进程作为系统启动的第一个进程,用于初始化进程管理、内存管理、加载Display ,Camera Driver,Binder Driver等操作。然后Idle进程又会创建两个进程:
    Kernel空间创建kthreadd进程(pid=2)、用户空间创建init进程(pid=1);
  2. init进程会解析init.rc文件后fork出Zygote进程,Zygote进程负责
    (1)加载ZygoteInit类,注册Zygote Socket服务端套接字——ZygoteServer
    (2)加载虚拟机
    (3)提前加载类preloadClasses
    (4)提前加载资源preloadResources
    (5)ZygoteServer启动Loop的死循环(zygote要一直运行,不能退出。代码模拟杀死zygote进程,Android手机会重启),用于接收AMS发来的消息,进而启动其他进程。
  3. 紧接着,Zygote进程会fork出SystemServer进程(Zygote孵化的第一个进程);SystemServer会负责启动和管理整个Java Framework,包含AMS、PMS、WMS等服务。App进程的启动时由SystemServer通过AMS通知Zygote,由Zygote进程fork出一个进程,启动app。
  4. Zygote同时会启动相关的APP进程,它启动的第一个APP进程是Launcher进程、然后启动Email、SMS等进程,所有的App进程都由Zygote进程fork生成。
  5. 一个进程分为内核空间和用户空间,每一个进程都有自己的内核空间和用户空间。JVM相当于是zygote里创建的一个功能模块,这个功能模块实现了内存管理的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值