深入理解Android内核设计思想

时间:2022-02-20 21:57:17

第四章 操作系统基础

操作系统的实质是向下负责管系统理硬件,并为上层应用提供稳定编程接口和人机交换界面的软件集合。

进程间通信方式:共享内存,管道(pipe),sockst,rpc。

第五章 Android进程/线程管理

四大组件并不是程序(进程)的全部,而只是它的“零件”,应用程序启动后,将创建ActicityThread主线程,一个Activity启动后至少有3个线程:即1个主线程和2个Binder线程。

第六章 Binder

1 Binder驱动——路由器

Service Manager——DNS

Binder Client——客户端

Binder Server——服务器

Binder的本质是:进程1(客户端)希望与进程2(服务器)进行互访。但因为它们之间是跨进程(跨网络)的,所以必须借助Binder驱动(路由器)来吧请求正确投递到对方所在进程(网络)中。而参与通信的进程们需要持有Binder颁发的唯一标志(IP地址)。和TCP/IP网络中类似,Binder中的DNS并不是必须的,前提是客户端能记住它要访问的进程的Binder标志(IP地址);而且要特别注意这个标志是动态的,这意为这即使客户端记住了本次通信过程目标进程的唯一标志,下一次访问仍然需要重新 获取,这无疑加大了客户端的难度。DNS的出现可以完美地解决这个问题,用于管理Binder标志与可读性更强的“域名”间的对应关系,并向用户提供查询功能,在BInder机制中,DNS的角色由Service Manager来扮演。

第七章 Android启动过程简析

Android系统实际上是运行在Linux内核之上的一系列“服务进程”,并不算一个完整意义上的操作系统。这些进程是维持设备正常工作的关键,而它们的老祖宗就是init。Ini是linux系统用户空间的第一个进程,也就是Android系统中用户空间的第一个进程,PID=0。init通过解析init.rc来陆续启动其他关键的系统进程服务——其中最重要的ServiceManager,Zygote和SystemServer。

1 ServiceManager :Binder机制中的“DNS服务器”,负责域名(某Binder服务在ServiceManager注册时提供的名称)到IP地址(由底层Binder驱动分配的值)得解析。

2 Zygote: 预载各种系统类(在ZygoteInte这个函数中),启动SystemServer。

3 SystemServer:完成本地层服务的启动,例如:SurfaceFlinger,AudioFlinger;启动java层的各种服务,例如ActivityManagerService等。