热门标签 | 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”标准广播动作将会启动。



推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
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社区 版权所有