Android系统架构
一、APPLACTIONS(应用程序层)
该层提供一些核心应用程序包,例如主界面,浏览器,电子邮件、联系人,短信、日历、地图等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序。
二、APPLANCTION FRAMEWORK(应用程序框架层)
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括 Activity Manager活动管理器、Window Manager窗口管理器、Content Providers内容提供者、View System视图系统、Notification Manager通知管理器、Package Manager包管理器、Telephony Manager电话管理器、Resource Manager资源管理器、Location Manager位置管理器、XMPP Services XMPP服务,一共十个部分。
这一层是API框架,开发人员可以使用这些框架来开发自己的应用,这样便简化了程序开发的结构设计,但是必须要遵守其框架的开发原则。
三、LABRARIES(系统库(C/C++库))和ANDROID RUNTIME(Android运行时)
1、LABRARIES(系统库(C/C++库))
系统库包括九个子系统,分别是Surface Manager图层管理、Media Framework媒体库、SQLite数据库、OpenGLESate开放图形库用来支持3D效果、FreeType位图和矢量、WebKit浏览器内核、SGL 2D图形引擎库、SSL为数据通信提供支持、libc C语言的函数库。
2、ANDROID RUNTIME(安卓运行时)
Android运行时包括核心库(core Labraries)和Dalvik虚拟机(Dalvik Virtual Machine)。
核心库既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。
Dalvik虚拟机是一种基于寄存器的java虚拟机,主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能
Android运行时:https://source.android.google.cn/devices/architecture/modular-system/runtime?hl=zh-cn
四、Linux Kernel(Linux内核)
提供各种驱动程序,Display Driver 显示驱动、Camra Driver 摄像头驱动、Bluetooth Driver 蓝牙驱动、Flash Memory Driver 内存驱动、Binder Driver Binder驱动、USB Driver、Audio Driver 音频驱动、Power Managemnet 电源管理、WIFI Driver 无线驱动、Keypad Driver 键盘驱动。
Android核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。
Google官方提供的新版的经典5层架构图
系统启动流程
系统启动架构图
Android系统的启动过程从整体的分层来看:Loader > Kernel > Native > Framework > Application
从细分的进程角度看:BootRom > Bootloader > Kernel > Init > Zygote > SystemServer > Launcher
接来下简要说说每个过程。
Loader层
Boot ROM: 当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设代码开始执行,然后加载引导程序到RAM;
Boot Loader:这是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数等功能。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
Linux内核层
1.启动Kernel的swapper进程(pid=0,调度进程):该进程又称为idle进程,系统初始化过程Kernel由无到有开创的第一个进程,用于初始化进程管理、内存管理,加载Camera Driver,Binder Driver,Display Driver,Input Driver等相关工作;
2.swapper进程启动init进程(pid=1):init进程是Linux系统的第一个用户空间进程。
3.swapper进程启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作进程kworkder,内核软中断进程ksoftirqd,thermal等内核守护进程。
对于内核来说,进程的“祖先”是swapper进程(也称为idle进程);
对于用户空间来说,进程“祖先”是init进程,所有用户空间进程都由init进程创建或派生。
Native层
init进程是Linux系统的第一个用户空间进程,是所有用户空间进程的“祖先”。
init进程创建servicemanager进程,servicemanager进程管理着Binder进程间通信机制相关服务。
init进程SurfaceFlinger进程,SurfaceFlinger进程管理着Android的视图显示系统
init进程创建Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程)
init进程创建mediaserver进程,mediaserver进程是android中一个非常重要的进程,音频,视频,camera都和该进程有关。
init进程还会创建ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
Framework层
Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
- 启动Dalvik虚拟机
- 创建本地socket服务
- 预加载系统类和资源
- fork SystemServer进程
zygote是受精卵的意思,它是Android中的一个非常重要的守护进程服务(Daem Service),所有的其他Dalvik虚拟机进程都是通过zygote孵化(fork)出来的。Android应用程序是由Java语言编写的,运行在各自独立的Dalvik虚拟机中。如果每个应用程序在启动之时都需要单独运行和初始化一个虚拟机,会大大降低系统性能,因此Android首先创建一个zygote虚拟机,然后通过它孵化出其他的虚拟机进程,进而共享虚拟机内存和框架层资源,这样大幅度提高应用程序的启动和运行速度。
System Server进程是Zygote创建的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。
App层
Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
所有的App进程都是由Zygote进程fork生成的。
总结
参考:
【Android】系统架构
Android启动流程简析(一)
Android系统启动流程
Android 操作系统架构开篇
Android系统整体架构
Android系统构架及Native Crash
Android图形系统(十)-SurfaceFlinger启动及图层合成送显过程
Android 显示系统:SurfaceFlinger详解
https://www.androidos.net.cn/android/9.0.0_r8/xref/system/core/rootdir/init.rc