Android系统全貌 (转)
转自Gityuan的Android开篇,对自我学习作进一步整理。
Android系统以
Linux内核
作为基底,上层采用Native层
和Java层
。系统分为内核空间和用户空间,并通过系统调用(Syscall
)连通。用户空间主要采用C++和Java代码实现,通过JNI
技术连通Java层和Native层(C/C++)。
![](http://upload-images.jianshu.io/upload_images/93730-e21785f4cc750511.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Loader层
- Boot ROM: 电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行.加载引导程序到
RAM
,然后执行. - Boot Loader: 这是
Android
系统系统之前的引导程序,主要用来检测外部的RAM
以及设置网络、内存、初始化硬件参数等.
Kernel层
Kernel层是指Android
内核层,到这里才刚刚开始进入Android
系统。
- 启动
Kernel
的swapper进程(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 Frameword
和C++ Framework
,分别由system_server进程
和media_server进程
负责启动和管理。
Zygote
本身是一个Native
的应用程序,刚开始的名字为“app_process”
,运行过程中,通过系统调用将自己名字改为Zygote
。在图中的红色线,便是Zygote fork
出来的进程,所有的App进程
都是由Zygote fork
产生的。
![](http://upload-images.jianshu.io/upload_images/93730-2418675df6ca7aab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
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系统全貌 (转)相关推荐
- android phone驱动_一文带你掌握 Android 系统架构
引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...
- Android系统架构开篇
Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...
- Android系统开发总体认知
目录 引言 Android架构分层图 Android系统启动过程 Loader层 Linux内核层 Android Runtime & 系统库 Framework层 App层 Syscall ...
- 深入剖析Android系统
深入剖析Android系统(基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!) 杨长刚著 IS ...
- Android 系统(54)---Android系统开篇
Android系统开篇[转 学习] 一.引言原网址 Android系统非常庞大.错中复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall ...
- android 系统
Android是Google公司开发的基于Linux平台的开源手机操作系统,它包括操作系统.中间件.用户界面和应用程序,而且不存在任何以往阻碍移动产业创新的专利权障碍,并由Google公司于2007年 ...
- 学习Android系统
一.引言 Android系统非常庞大.错综复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统调用(Syscall)连通系统的内核空间与用户空间.用户空间主 ...
- Android系统开机到Launcher启动流程分析
本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...
- Android系统架构开篇(深度好文,值得收藏,kotlin线程安全
二.Android架构 Google提供的5层架构图很经典,但为了更进一步透视Android系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android系统的全貌,阐述Android内部的环环 ...
最新文章
- mysql有那些存储引擎_MySQL有那哪些存储引擎
- sqoop连接hive和mysql_用Sqoop进行Hive和MySQL之间的数据互导
- Toolbar-5.0新特性
- 为什么C++(来自C++之父的观点)
- 【C语言简单说】十四:for循环
- eclipse maven打包_maven的通俗易懂的用法
- IPS与IDS部署场景(直路部署,单臂部署,旁路部署,阻断)
- 史上最快! 10小时大数据入门(一)-大数据概述
- 九连环_儿子的玩具—九连环
- Spring+MyBatis多数据源配置实现
- mysql学习day05—子查询 / CASH语句 / 连接查询
- java我们一起打雪仗_一起打雪仗作文(通用5篇)
- tcp 11种状态转换图
- 西门子触摸屏脚本程序_西门子触摸屏实例程序
- AMD显卡怎么设置玩游戏更流畅
- 如何辅导孩子做学前班数学题?
- 2022-2027年中国仓储物流机器人行业发展前景及投资战略咨询报告
- SML-Abridgelab
- Java 利用Graphics2D 合并图片(png格式可设置透明)
- 高德地图-缩放比例尺控件
热门文章
- C# WinForm编程之System.Windows.Forms.DataGridViewRow.DataBoundItem Property
- Fedora 31 Beta 准时发布,带来许多激动人心的更新
- 从入门到高阶,读懂机器学习需要哪些数学知识
- sysctl mysql_服务器优化——Sysctl、Apache、MySQL
- SSM框架的搭建(idea)
- 026_JavaScript数组排序
- 006_CSS类选择器
- 如何为linux 桌面文件内存,linux - 桌面Linux发行版中.desktop文件的功能是什么? - 堆栈内存溢出...
- 2000坐标转换成经纬度_ArcGIS中的坐标问题快问快答
- MySQL数据库:SQL语句