- 1.Android 系统架构
- 1.1 Kernel 层(Linux内核层)
- 1.2. Native层(系统运行库层)
- 1.3. Framework (应用框架层)
- 1.4. App(应用层)
- 2.Android 系统启动架构
- 2.1 Loader 层
- 2.2 Kernel 层
- 2.3 Native 层
- 2.4 Framework 层
- Zygote进程
- System Server 进程
- Media Server 进程
- 2.5 App层
- Syscall && JNI
- 参考
Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。
1.1 Kernel 层(Linux内核层)Android其实就是一个操作系统,其底层是基于Linux Kernel的,这一层主要完成的是操作系统所具有的功能,比如这一层有许多的驱动程序,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。正是通过这些驱动程序来驱动我们设备上的硬件设备的。
1.2. Native层(系统运行库层)这一层通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持.
同样在这一层还有Android运行时库,在java里,程序的运行需要java的核心包的支持,然后通过JVM虚拟机来运行我们的应用程序,这里Android Runtime里的Core Libraries就相当于java的JDK,是运行android应用程序所需要的核心库,Dalvik Virtual Machine就相当于JVM,这时Google专为Android开发的运行android应用程序所需的虚拟机。
这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API来构建自己的应用程序。
我们学习Android也主要学的就是这一层,我们通过这些各种各样的框架来实现我们的Application。
所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的应用游戏,当然还包括你自己开发的程序,都属于应用层。
2.Android 系统启动架构Android系统启动过程从下往上的一个过程是由Boot Loader引导开机,然后依次进入 Kernel -> Native -> Framework -> App,接来下简要说说每个过程:
2.1 Loader 层- Boot Rom:当手机处于关机状态时,长按开机键开机,会引导芯片开始从固化在Rom里预设的代码开始执行,然后加载引导程序到Ram.
- Boot Loader:这是启动Android系统之前的引导程序,主要是检查Ram、初始化参数等功能。
kernel层指的就是Android内核层,到这里才刚刚进入Android系统
- 启动Kernel层的swapper进程(pid=0),系统初始化过程Kernel创建的第一个进程,用于初始化进程管理、内存管理,加载Display、Camera、Binder等驱动相关工作。
- 启动kthreadd(pid=2),这是Linux系统的内核进程,会创建内核工作线程kworkder、软中断线程ksoftirqd和thermal等内核守护进程。kthreadd是所有内核进程的鼻祖。
这里的Native层主要包括init孵化来的用户空间的守护进程、HAL层及开机动画等。启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖。
- init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
- init进程还会启动ServiceManager(Binder服务管家)、bootanim(开机动画)等重要服务。
- init进程孵化出Zygote进程,Zygote进程是Android系统第一个Java进程(虚拟机进程),zygote进程是所有Java进程的父进程。
framework主要包括Zygote进程、SystemServer进程和MediaServer进程`。
Zygote进程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等服务。
2.5 App层- Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
- Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
- 所有的App进程都是由Zygote进程fork生成的。
Native层和Kernel层有一个系统调用层,也就是Syscall。Java层和native层之间的纽带是JNI。
参考gityuan的操作系统架构开篇



