Android 系统启动

init 进程启动过程

init 进程是 Android 系统中用户空间的第一个进程,进程号为 1,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多及其重要的工作职责,比如创建 Zygote 孵化器和属性服务等。

但在这之前,我们先要了解 Android 系统启动流程的前几步,以引入 init 进程:

  1. 启动电源以及系统启动
  2. 引导程序 BootLoader
  3. Linux 内核启动
  4. init 进程启动

当我们按下电源时,系统启动后会加载引导程序,引导程序又启动 Linux 内核,在 Linux 内核加载完成后,第一件事就是要启动 init 进程。

init 进程启动后会 fork 出 Zygote 进程,为了防止 init 进程的子进程成为僵尸进程,系统会在子进程暂停和终止的时候发出 SIGCHLD 信号。

僵尸进程与危害:

在 Linux 中,父进程使用 fork 创建子进程,在子进程终止之后,如果父进程并不知道子进程已经终止了,这时子进程虽然已经退出了,但是在系统进程表中还为它保留了一定的信息(比如进程号,退出状态、运行时间等),这个子进程就被称为僵尸进程。系统进程表是一项有限资源,如果系统进程表被僵尸进程耗尽的话,系统就可能无法创建新的进程了。

总结:

init 进程主要做了一下三件事:

  1. 创建和挂载启动所需的文件目录
  2. 初始化和启动属性服务
  3. 解析 init.rc 配置文件并启动 Zygote 进程

Zygote 进程启动过程

在 Android 系统中,DVM 和 ART、应用程序进程以及运行系统的关键服务的 SystemServer 进程都是由 Zygote 进程来创建的,我们也将它称为孵化器。它通过 fork 的形式来创建应用程序进程和 SystemServer 进程。

总结:

Zygote 进程主要做了以下几件事:

  1. 创建 AppRuntime 并调用其 start 方法,启动 Zygote 进程
  2. 创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法
  3. 通过 JNI 调用 ZygoteInit 的 main 方法进入 Zygote 的 Java 框架层
  4. 通过 registerZygoteSocket 方法创建服务端 Socket,并通过 runSelectLoop 方法等待 AMS 的请求来创建新的应用程序进程
  5. 启动 SystemServer 进程

SystemServer 处理过程

SystemServer 进程主要用于创建系统服务,比如 AWS、WMS 和 PMS 都是由它来创建的。

总结:

SystemServer 进程被创建后,主要做了以下工作:

  1. 启动 Binder 线程池,这样就可以与其他进程进行通信
  2. 启动 SystemServiceManager,其用于对系统的服务进程创建、启动和生命周期管理
  3. 启动各种系统服务

Launcher 启动过程

系统启动的最后一步是启动一个应用程序用来显示系统中已经被安装的应用程序,这个应用程序就叫做 Launcher。Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序信息,并将这些信息封装成一个快捷图标列表展示在系统屏幕上,这样用户就可以通过点击这些快捷图标来启动相应的应用程序。

通俗的讲,Launcher 就是 Android 系统的桌面。

Android 系统启动过程

结合以上过程,就可以总结出 Android 系统启动的过程,大致有以下几部分:

  1. 启动电源以及系统启动

    当电源按下时引导芯片代码从预定义的地方开始执行。加载引导程序 BootLoader 到 RAM,然后执行。

  2. 引导程序 BootLoader

    引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把系统 OS 拉起来运行。

  3. Linux 内核启动

    当内核启动时,设置缓存、存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。

  4. init 进程启动

    初始化和启动属性服务,并且启动 Zygote 进程。

  5. Zygote 进程启动

    创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法,创建服务端 Socket,启动 SystemServer 进程。

  6. SystemServer 进程启动

    启动 Binder 线程池和 SystemServiceManager,并且启动各种系统服务。

  7. Launcher 启动

    被 SystemServer 进程启动的 AMS 会启动 Launcher,Launcher 启动后会将已安装的应用的快捷图标显示在界面上。

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容