热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓开机流程

安卓开机流程原文:https://www.geeksforgee

安卓开机流程

原文:https://www.geeksforgeeks.org/android-boot-process/

启动过程

在计算中,引导是启动计算机或计算机设备,直到它可以使用。它可以由硬件启动,如按钮按下,或由软件命令。接通电源后,电脑就相对哑了,只能读取其存储的一部分称为只读存储器。那里存储着一个叫做固件的小程序。它进行开机自检,最重要的是,它允许访问其他类型的内存,如硬盘和主内存。固件将更大的程序加载到计算机的主内存中并运行它。在通用计算机中,以及在智能手机、平板电脑中,可选地运行引导管理器。

安卓开机流程

安卓启动过程包括以下六个步骤:


  1. 引导 ROM: 这一步称为开机和系统启动。这意味着每当我们按下电源按钮时,引导只读存储器代码就从预定义的位置开始执行,该位置是硬连线在只读存储器中的。引导只读存储器将引导加载程序加载到内存中并开始执行。

  2. BootLoader: Bootloaders is a low-level code contains the instructions that tell a device how to start up and find the system kernel. A Bootloader is a place where manufacturers put their locks and restrictions.

    引导加载程序是在任何操作系统开始运行之前执行的代码。引导加载程序分两个阶段执行:
    (a)在第一阶段,它检测外部内存并加载程序,这在第二阶段有所帮助。
    b) 在第二阶段,引导加载程序设置运行内核所需的网络、内存等。


  3. 内核:内核启动后,启动设置缓存、保护内存、调度、加载驱动、启动内核守护进程、挂载根文件系统、初始化 Input/Output、启动中断、初始化进程表。内核是与我们设备中的硬件接口的最低级的易替换软件。当内核完成系统设置后,它首先会在系统文件中查找“init”,并启动根进程或系统的第一个进程。


  4. Init: Init is the very first process or we can say that it is the grandfather of all the processes.

    初始化过程有两个职责:


    • 挂载目录,如/sys、/dev 或/proc

    • 运行/init.rc 脚本。init.rc 负责系统的初始设置。

    初始化过程将设置所有本地服务,这类似于常规的 Linux 系统引导。


  5. Zygote and Dalvik VM: The Zygote is a VM process that starts as the system boots. When app_process launces Zygote, it first creates the Dalvik VM and then calls Zygote’s main() method. Zygote receives a request to launch an App through/dev/socket/zygote. Once it happens, it triggers a fork() call.

    当一个进程是一个分叉时,它会为自己创建一个克隆。它在另一个内存空间复制自己。这是非常有效的。当这种情况发生在合子身上时,它会创建一个精确而干净的新 Dalvik VM 作为线程,预加载任何应用程序都需要的所有必要的类和资源。这使得创建虚拟机和加载资源的过程非常高效。

    它支持跨 Dalvik 虚拟机的代码共享,这有助于实现最短的启动时间。


  6. System Servers: After zygote preloads all necessary Java Classes and resources, it starts System Server. The System server is the core of the Android system. The first thing that happens is that the server will load a native library called android_servers that provides interfaces to native functionalities.

    然后调用本机 init 方法来设置本机服务。设置本机服务后,它会创建服务器线程。该线程将根据必要的启动顺序启动系统中剩余的服务。

    每个服务都在系统服务器的一个单独的 Dalvik 线程中运行。

    一旦系统服务启动并在内存中运行,安卓就完成了引导过程,此时“ACTION_BOOT_COMPLETED”标准广播动作将会启动。



推荐阅读
  • spring boot使用jetty无法启动 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • IO流——字符流 BufferedReader / BufferedWriter 进行文件读写
    目录节点流、处理流读文件:BufferedReader的使用写文件:BufferedWriter的使用节点流处理流节点流和处理流的区别和联系字符流Buf ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • 深入解析JVM内存模型与分配机制
    本文详细探讨了JVM内存结构的主要组成部分,包括Java虚拟机栈、Java堆、方法区等,并深入分析了HotSpot虚拟机的分代收集策略及其对不同内存区域的管理方式。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
author-avatar
123456ws1043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有