转自Gityuan的Android开篇,对自我学习作进一步整理。

Android系统以Linux内核作为基底,上层采用Native层Java层。系统分为内核空间和用户空间,并通过系统调用(Syscall)连通。用户空间主要采用C++和Java代码实现,通过JNI技术连通Java层和Native层(C/C++)。

图片来源 GITYUAN

Loader层

  • Boot ROM: 电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行.加载引导程序到RAM,然后执行.
  • Boot Loader: 这是Android系统系统之前的引导程序,主要用来检测外部的RAM以及设置网络、内存、初始化硬件参数等.

Kernel层

Kernel层是指Android内核层,到这里才刚刚开始进入Android系统。

  • 启动Kernelswapper进程(pid=0):该进程又称为idle进程, 系统初始化过程Kernel由无到有开创的第一个进程, 用于初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作(图中kernel层蓝色区块);
  • 启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等一系列内核守护进程。kthreadd进程是所有内核进程的父进程。

Linux内核加载主要包括初始化kernel核心(内存初始化,打开中断,初始化进程表等)、初始化驱动、启动内核后台(daemons)线程、安装根(root)文件系统等。后续启动第一个用户级进程init(pid=1).

Native层

Native层主要包括启动init进程Android的第一个用户空间进程)、HAL层(硬件抽象层)以及开机动画等。init进程是所有用户进程的鼻祖。同时init进程也会孵化一系列用户进程,还会启动关键的服务以及孵化Zygote进程

  • init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
  • init进程还启动servicemanager(binder服务管家)、bootanim(开机动画)等重要服务
  • init进程孵化出Zygote进程Zygote进程是Android系统的第一个Java进程Zygote是所有Java进程的父进程Zygote进程本身是由init进程孵化而来的。
  • kthreadd进程: 是所有内核进程的父进程
  • init进程 : 是所有用户进程的父进程(或者父父进程)
  • zygote进程 : 是所有上层Java进程的父进程,另外zygote的父进程是init进程。

Framework层

如图,Framework层分为Java FramewordC++ Framework,分别由system_server进程media_server进程负责启动和管理。

Zygote本身是一个Native的应用程序,刚开始的名字为“app_process”,运行过程中,通过系统调用将自己名字改为Zygote。在图中的红色线,便是Zygote fork出来的进程,所有的App进程都是由Zygote fork产生的。

image.png

  • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
    加载ZygoteInit类,注册Zygote Socket服务端套接字;
    加载虚拟机;
    preloadClasses;
    preloadResouces。
  • System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。
  • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service,等服务。

App层

  • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
  • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
  • 所有的App进程都是由Zygote进程fork生成的。

Syscall && JNI

  • Native与Kernel之间有一层系统调用(SysCall)层,见Linux系统调用(Syscall)原理;
  • Java层与Native(C/C++)层之间的纽带JNI,见Android JNI原理分析。

Andorid的启动过程
Android进程整理

转载于:https://www.cnblogs.com/benchao/p/6243473.html

Android系统全貌 (转)相关推荐

  1. android phone驱动_一文带你掌握 Android 系统架构

    引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...

  2. Android系统架构开篇

    Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...

  3. Android系统开发总体认知

    目录 引言 Android架构分层图 Android系统启动过程 Loader层 Linux内核层 Android Runtime & 系统库 Framework层 App层 Syscall ...

  4. 深入剖析Android系统

    深入剖析Android系统(基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!) 杨长刚著 IS ...

  5. Android 系统(54)---Android系统开篇

    Android系统开篇[转 学习] 一.引言原网址 Android系统非常庞大.错中复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall ...

  6. android 系统

    Android是Google公司开发的基于Linux平台的开源手机操作系统,它包括操作系统.中间件.用户界面和应用程序,而且不存在任何以往阻碍移动产业创新的专利权障碍,并由Google公司于2007年 ...

  7. 学习Android系统

    一.引言 Android系统非常庞大.错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall)连通系统的内核空间与用户空间.用户空间主 ...

  8. Android系统开机到Launcher启动流程分析

    本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...

  9. Android系统架构开篇(深度好文,值得收藏,kotlin线程安全

    二.Android架构 Google提供的5层架构图很经典,但为了更进一步透视Android系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android系统的全貌,阐述Android内部的环环 ...

最新文章

  1. 提供一个基于.NET的加密/解密算法
  2. centos 7 lvs 负载均衡搭建部署
  3. JAVA Calendar具体解释
  4. date oracle 显示毫秒_oracle数据库to_date日期格式化到毫秒 | 学步园
  5. 6.29 Vue 第二天 学习笔记
  6. vue实例以及生命周期
  7. <input type=“file“> change事件异常处理办法
  8. viewpage滑动查看图片并再有缩略图预览
  9. GIS教程-空间分析之水文分析
  10. 服务器安装cos系统,COS(国产操作系统)安装教程
  11. Snapchat三类广告形式及收益提升技巧详解
  12. 我就发布个夏泽网注册码
  13. 现在的传奇游戏 哪个是真的传奇,真假传奇应该怎么区分?
  14. C++ explicit的使用
  15. lsof Linux
  16. python顺时针旋转_python——n*n矩阵顺时针旋转90度
  17. Android简易实战教程--第三十二话《使用Lrucache和NetworkImageView加载图片》
  18. bash脚本中出现[[:not found错误的解决方法
  19. 矢量叉乘能否反求矢量
  20. 严蔚敏数据结构习题第六章

热门文章

  1. 疫情加速人脸识别落地:多地试点AI门禁,居民刷脸核验健康码
  2. 受益终生的世界顶级八大思维
  3. linux shell顺序执行,shell 执行顺序
  4. Redis三种特殊类型
  5. 查询高考成绩2021一分一段表,一分一段表查询2021 如何查询一分一段表
  6. 利用who,w,ps和top等指令查看linux下的进程执行情况.,UNIXLINUX操作系统实验指导书...
  7. python与数据思维基础笔记_Python小课笔记--Python基础:数据和函数(二)
  8. Maven解决静态资源过滤问题
  9. java 二维数组的定义
  10. linux中opt是啥文件夹,Linux下各文件夹的含义及解释