Android 系统架构 —— Zygote 进程的启动
前言
通过 Init 进程启动的分析, 我们了解到它会读取 init.rc 脚本文件, zygote 进程启动相关的配置便是在此定义的, 这里我们系统的了解一下
Zygote 进程的作用
顾明思议, Zygote 是孵化器的意思, 在 Android 系统中, 所有的应用程序进程以及用来运行系统关键服务的 System 进程, 都是由 Zygote 创建的, 它就是孵化器进程
Android 系统架构 —— ServiceManager 进程的启动
前言
我们之前在学习 Binder 驱动的过程中就提及过 ServiceManager 是 Binder 驱动的上下文管理者
从 init 进程启动过程中我们知道 ServiceManager 服务管理进程是通过 init 进程 fork 出来的, 这里我们就分析一下 ServiceManager 的启动流程
ServiceManager 的作用
- Service Manager 是 Binder 进程间通信的核心组件之一
- 它扮演着 Binder 进程间通信机制的上下文管理者的角色
- 负责管理系统中的 Service 组件, 并且向 Client 端提供获取 Service 代理对象的服务
Android 系统架构 —— Init 进程的启动
前言
我们知道 Android 是基于 Linux 内核的, 因此 Android 系统的启动与 Linux 内核类似
当 bootloader 中的 kernel.img 选择了操作系统之后, 便会进入 Linux 内核的初始化流程了, 内核启动的初始化由 start_kernel() 开始, 在 init/main.c 文件中, 这是 Linux 的基础知识, 这里就不赘述了
Linux 的启动的参与的进程如下
- 0 号进程
- 所有进程的祖先, 这是 Linux 唯一一个没有通过 fork 或者 kernel_thread 产生的进程
- 1 号进程
- 为用户进程, 是所有用户态进程的祖先
- 2 号进程
- 为内核进程, 负责内核态所有进程的管理和调度, 是所有 Linux 内核进程的祖先
1 号进程也称之为 Init 进程, 是我们需要重点关心的对象, 接下来便着重分析一下 init 进程的启动流程
Android 系统架构 —— Ashmem 共享内存驱动
前言
Ashmen(Anonymous Shared Memory) 匿名共享内存是 Android 的 Linux 内核实现的一个驱动, 它以驱动程序的形式实现在内核空间, 用于在进程间进行数据共享
我们知道 Binder 的内核缓冲区空间最大为 4M, 因此它无法一次性传递大数据, 在 Android UI 渲染时, 我们需要将我们需要渲染的 Surface 数据发送到 SurfaceFlinger 进程进行最后的绘制, Binder 驱动传输显然是无法满足这么大的数据量, 因此这里使用到了 Ashmem 共享内存
接下来我们从下面几个部分分别来解读 Ashmem 共享内存机制
- 驱动的初始化
- open 系统调用
- mmap 系统调用
Android 系统架构 —— Binder 进程间通信的流程
前言
ServiceManager 的启动, 关于它的启动流程可以点击查看这篇文章
它是 Binder 驱动上下文的管理者, 这里便通过一次完成的 Binder 通信来对学习的知识进行一次汇总, 通过 SystemService 与 ServiceManager 进程的交互, 学习一下整个 Binder 通信的流程
Android 系统架构 —— Binder 驱动
前言
前面学习了 Binder 对象的实例化流程, 了解了 Android 运行时库中对 Binder 的封装, 为了更好的了解 Binder 驱动的工作机制, 这里我们再学习一下 Linux 内核中 Binder 驱动相关知识
// 目录结构
- ~Android/kernel/goldfish
- drivers/staging/android
- binder.h
- binder.c
Android 系统架构 —— IBinder 对象的实例化
前言
在 Binder 通信实例中我们了解到, Binder 驱动通过 IBinder 提供服务, 服务端为 Binder, 客户端未 BinderProxy
这里我们分别了解一下他们的实例化过程
Android 系统架构 —— AIDL 与 Binder
一. 什么是 AIDL?
AIDL 即 Android interface definition language, Android 接口定义语言
二. AIDL 的作用
AIDL 是 Android 提供用于快速构建支持 Binder 跨进程通信接口的一种方式, 帮助开发者快速构建 Binder 通信模型
共计 84 篇文章,11 页。