Android:启动流程

news2025/1/20 16:32:53

Android启动流程

在这里插入图片描述

第一步:启动电源以及系统启动

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

第二步:引导程序

引导程序是在Android操作系统开始运行前的一个小程序。引导程序是运行的第一个程序,因此它是针 对特定的主板与芯片的。设备制造商要么使用很受欢迎的引导程序比如redboot、uboot、qi bootloader或者开发自己的引导程序,它不是Android操作系统的一部分。引导程序是OEM厂商或者运 营商加锁和限制的地方。
引导程序分两个阶段执行。
第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序; 第二阶段,引导程序设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,引导程 序可以根据配置参数或者输入数据设置内核。 Android引导程序可以在\bootable\bootloader\legacy\usbloader找到。传统的加载器包含两个文件, 需要在这里说明:
init.s初始化堆栈,清零BBS段,调用main.c的_main()函数; main.c初始化硬件(闹钟、主板、键盘、控制台),创建linux标签

第三步:内核

Android内核与桌面linux内核启动的方式差不多。内核启动时,设置缓存、被保护存储器、计划列表, 加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第 一个进程

第四步:init进程 (搭建环境+启动zygote)

init进程是Linux系统中用户空间的第一个进程,进程号固定为1。Kernel启动后,在用户空间启动init进程,并调用init中的main()方法执行init进程的职责。

  1. 创建和挂载启动所需的文件目录
  2. 初始化和启动属性服务
  3. 解析init.rc配置文件并 启动zygote进程
    3.1 ----》SystemServers—》开启一系列服务(AMS、WMS、PKMS、PMS、、、、)
    3.2 ----》Launcher --> app —> 从 zygote fork 子进程 app

第五步:启动Lancher App

fork函数

pid_t fork(void)

返回值分两种情况:

  • 返回0表示成功创建子进程,并且接下来进入子进程执行流程
  • 返回PID(>0),成功创建子进程,并且继续执行父进程流程代码
  • 返回非正数(<0),创建子进程失败,失败原因主要有: 进程数超过系统所能创建的上限,errno会被设置为EAGAIN系统内存不足,errno会被设置为 ENOMEM

在这里插入图片描述

使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空 间:包括进程上下文(进程执行活动全过程的静态描述)、进程堆栈、打开的文件描述符、信号控 制设定、进程优先级、进程组号等。子进程所独有的只有它的进程号,计时器等(只有小量信 息)。因此,使用 fork() 函数的代价是很大的

子进程与父进程的区别:

  1. 除了文件锁以外,其他的锁都会被继承
  2. 各自的进程ID和父进程ID不同
  3. 子进程的未决告警被清除;
  4. 子进程的未决信号集设置为空集。

相关面试题

你了解Android启动流程吗

当按电源键触发开机,首先会从ROM中预定义的地方加载引导程序BootLoader到RAM中,并执行BootLoader程序启动Linux kernel,然后启动用户级别的第一个进程:init进程。init进程会解析init.rc脚本并做一些初始化工作,包括挂载文件系统、创建工作目录以及启动系统服务进程等,其中系统服务进程包括Zygote、system manger、media等。在zygote中会进一步启动system_server进程,并启动AMS、WMS、PMS等服务,等这些服务启动后AMS就会打开Launcher应用的home activity,然后看到了手机的“桌面”

system_server为什么要在zygote中启动,而不是由init启动

zygote作为孵化器可以提前加载一些资源,这样fork()时基于Copy_On_Write 机制创建的其他进程就能直接使用这些资源而不用重新加载。比如system_server可以直接使用Zygote中的JNI函数、共享库、常用的类、以及主题资源

zygote为什么不用Binder机制进行IPC通信

Binder 机制中存在 Binder 线程池,是多线程的,如果 Zygote 采用 Binder 的话就存在上面说的fork() 与 多线程的问题了。其实严格来说,Binder 机制不一定要多线程,所谓的 Binder 线程只不过是在循环读取 Binder 驱动的消息而已,只注册一个 Binder 线程也是可以工作的,比如 service manager就是这样的。实际上 Zygote 尽管没有采取 Binder 机制,它也不是单线程的,但它在 fork() 前主动停止了其他线程,fork() 后重新启动了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何防止设备被重复控制

1. 引言 在一个物联网的系统中&#xff0c;主要有三部分组成&#xff1a;云端、WiFi、电控。当用户在APP上控制设备时&#xff0c;其控制下发链路是&#xff1a;云端>>WIFI>> 电控。当电控收到控制指令后&#xff0c;执行设备控制&#xff0c;控制成功后&#xff…

如何使用Midjourney辅助建筑平面设计,常用的建筑平面效果图提示和使用效果展示(内附Midjourney提示词网站)

文章目录一、室内建筑平面设计1.AutoCAD图纸&#xff08;别墅首层图&#xff09;2.平面效果图3.三维平面透视图二、建筑室内设计1.现代简约2.波西米亚风格3.工业风格4.沿海风格5.法国风格6.现代风格7.提示增加颜色倾向8.提示中增加设计师9.其它一些尝试三、好用的Midjourney提示…

Redis 6.x哨兵模式部署(五)

目录 一、主从复架构搭建 二、哨兵模式搭建 2.1背景 2.2哨兵模式介绍 2.3 Sentinel三大工作任务 1监控&#xff08;Monitoring&#xff09; 2提醒&#xff08;Notification&#xff09; 3自动故障迁移&#xff08;Automatic failover&#xff09; 4核心流程 2.4 安装…

企业如何实现数字化转型?

企业如何实现数字化转型&#xff1f; 首先&#xff0c;我需要先跟各位明确&#xff0c;企业数字化转型中很重要的3个“先行”条件&#xff1a; 第一、企业一把手的眼光和格局 一把手的视野、格局、定力是最重要的因素&#xff0c;没有之一。能不能放下自己过去的执念与经验&a…

信息与计算科学有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是信息与计算科学领域的一些知名SCI期刊推荐&#xff1a; Information Sciences&#xff1a; 该期刊是信息科学领域的重要期刊&#xff0c;涵盖了信息科学、计算科学、人工智能、数据挖掘、模式识别、多媒体技术、网络通信、智能系统等方面的研究。 IEEE Transactions on…

电子文件的线上存储工具,你了解多少?

信息化时代的来临&#xff0c;企业也纷纷跟随时代步伐进入现代化办公。信息时代最显著的特征就是纸质文件到电子文件的转变。企业一天的办公中&#xff0c;可能就会产出无数的电子文件&#xff0c;其中很多文件都是珍贵的业务经验&#xff0c;因此线上存储是企业需要考虑的问题…

网页解析--bs4--01

python爬虫之bs4模块&#xff08;超详细&#xff09; Beautiful Soup 4.4.0 文档 — Beautiful Soup 4.2.0 documentation (crummy.com) 可以看到bs4库将网页文件变成了一个soup的类型&#xff0c; 事实上&#xff0c;bs4库 是解析、遍历、维护、“标签树“的功能库。 通俗一点…

redis基础总结-常用命令

redis常用指令3. 常用指令3.1 key 操作分析3.1.1 key应该设计哪些操作&#xff1f;3.1.2 key 基本操作3.1.3 key 扩展操作&#xff08;时效性控制&#xff09;3.1.4 key 扩展操作&#xff08;查询模式&#xff09;3.2 数据库指令3.2.1 key 的重复问题3.2.2 解决方案3.2.3 数据库…

001:Mapbox GL加载基础的地图

第001个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载最基础的 Mapbox GL地图 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共59行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

无限制翻译软件-中英互译字数无限

翻译软件是我们工作及学习中必不可少的工具&#xff0c;然而许多翻译软件在使用时常常会出现字数限制的问题,这使得用户在处理长文本和大量文本时变得十分麻烦。如果你也遇到了类似的问题&#xff0c;那么哪个翻译软件不限制字数将为您带来全新的翻译体验。 以下是我们的哪个翻…

人人都是ChatGPT prompt 工程师

关于 Prompt ​ 解释这个词之前&#xff0c;首先需要解释 prompt 这个词&#xff1a; 简单的理解它是给 AI 模型的指令。 它可以是一个问题、一段文字描述&#xff0c;甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息&#xff0c;生成对应的文本&…

Spark SQL join操作详解

一、 数据准备 本文主要介绍 Spark SQL 的多表连接&#xff0c;需要预先准备测试数据。分别创建员工和部门的 Datafame&#xff0c;并注册为临时视图&#xff0c;代码如下&#xff1a; val spark SparkSession.builder().appName("aggregations").master("lo…

腾讯云服务器CVM标准型S5和S6区别性能评测

腾讯云服务器CVM标准型S5是次新一代云服务器规格&#xff0c;标准型S6是最新一代的云服务器&#xff0c;S6实例的CPU处理器主频性能要高于S5实例&#xff0c;同CPU内存配置下的标准型S6实例要比S5实例性能更好一些&#xff0c;但是目前标准型S5实例活动较多&#xff0c;云服务器…

【ChatGPT】预训练模型微调及其应用(ChatGLM-6B、duckduckgo_search、GPT在科研的应用等)

note instructGPT&#xff08;基于提示学习的系列模型&#xff09;——>GPT3.5&#xff08;大规模预训练语言模型&#xff09;——>ChatGPT模型&#xff08;高质量数据标注反馈学习&#xff09;。chatGPT三大技术&#xff1a;情景学习、思维链、自然指令学习。GPT4飞跃式…

ASEMI代理AD9833BRMZ-REEL原装ADI车规级AD9833BRMZ-REEL

编辑&#xff1a;ll ASEMI代理AD9833BRMZ-REEL原装ADI车规级AD9833BRMZ-REEL 型号&#xff1a;AD9833BRMZ-REEL 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;MSOP-10 批号&#xff1a;2023 引脚数量&#xff1a;10 安装类型&#xff1a;表面贴装型 AD9833BRMZ-REEL汽车…

【都2023年了,还在问网络安全怎么入门】

前言 【都2023年了&#xff0c;还在问网络安全怎么入门】所以这一期就出一一个怎么学习网络安全的学习路线和方法&#xff0c;觉得有用的话点赞收藏下 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有…

数据库系统概论--第二章课后习题

1.试述关系模型的三个组成部分。 答&#xff1a; 关系模型由关系数据结构、&#xff08;关系操作集合&#xff09;和&#xff08;关系完整性约束&#xff09;三部分组成。 2. 简述关系数据语言的特点和分类。 答:特点:1)集合操作方式; 2)高度非过程化; 3)集查询、DDL、DML、…

【C++STL精讲】string类的基本使用与常用接口

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;为什么要学习string类&#xff1f;&#x1f337;string类的基本使用&#x1f337;string类的常用接口&#x1f33a;数据访问函数&#x1f33a;容量相关函数&#x1f33a;操作函数&#x1f337;迭代器与范围for…

“三步走”推动云原生转型之路

对于企业而言&#xff0c;如何平稳的从传统研发模式过渡到云原生时代&#xff0c;除了坚持结合云原生应用的特点&#xff0c;持续推动基础架构和应用架构的转型&#xff0c;还需要围绕“深度融合云技术能力、做厚业务基础能力、提升内建质量”等三个步骤&#xff0c;推进云原生…

SpringBoot 防护XSS攻击

目录 一、前言 1.1、XSS攻击流程 1.2、XSS攻击分类 1.3、攻击方式 二、解决方案 2.1、SPRINGBOOT XSS过滤插件&#xff08;MICA-XSS&#xff09; 2.2、MICA-XSS 配置 三、项目实战 3.1、项目环境 3.2、测试 3.2.1、测试GET请求 3.2.2、测试POST请求 3.2.3、测试POS…