android内核设计与思想,android内核设计思想(笔记)

一.操作系统基础

1.进程间通信。

操作系统中的各个进程通常运行于独立的内存空间,并且有严格的机制来防止进程间的非法访问,操作系统提供很多种进程间通信的方式,有共享内存,管道,Unix Domain Socket,RPC等等,android还有binder通信

a.内存寻址

简单点来说吧,举个例子,x86微处理器包含三种地址:逻辑地址(包含在机器语言指令中用来指定一个操作数或一条指令的地址及),线性地址(线性地址通常用十六进制数表示),物理地址(用于内存芯片级内存单元寻址)。等等,这TM说的是啥意思,waf。

通俗点讲比如你找一本书中的某个知识点,你可以一页页的翻着去寻找,也可以通过目录再去寻找,你可以把逻辑地址理解为书的目录,线性地址为具体的页数,物理地址为该页对应的在哪的知识点(这解释好像有点牵强,就这样吧,哈)。也就是说我们得到的机器语言最开始的逻辑地址,需要一层一层转化为物理地址。

逻辑地址转线性地址:逻辑地址由段选择符和offset组成,段选择符存在于段寄存器中,段寄存器介绍几种熟悉的,例如cs(代码寄存器),ss(栈寄存器),ds(数据段寄存器,指向包含静态数据或者全局数据段),从段寄存器中取出地址,再加上offset中的就是线性地址了(当然了,实际上还涉及到gtdr,ldtr等,不纠结这些细节)

为什么在进程通信中讲内存寻址,自己的理解就是在逻辑地址转线性地址中,会有ldtr,这个跟具体进程有关,也就是每个进程的规则是不一样的,也就是说跨进程不用别的方式是通信不了的,因为内存寻址规则都是不一样的。

b.进程通信的经典实现

共享内存:基本理念应该是打通内存寻址的同一个规则,具体实现:一:进程1 shmget函数生成共享内存块讲某个特定的key(shmget的第一个参数)进行绑定。二:shmat将共享内存映射到进程1的内存空间。三:进程2通过第一步的key,shmget得到共享内存。

管道:管道有自己的局限,适用于父子进程。可以理解为在两个进程间插了了管子,一根管子同时具有读取跟写入两端,用pipe函数

Unix Domain Socket:这个玩意使用上跟我们平时接触的TCP/IP协议中的Socket使用方法类似,内部原理不太一样

Binder:这是安卓系统中大量使用的跨进程通信方式,这个讲起来篇幅比较大,以后再写吧

二.android启动过程简析

1.第一个系统进程(init)

有时我们会听到Android系统,但安卓又是基于linux的,严格来说,Android系统实际上是运行于Linux内核之上的一系列"服务进程",并不算一个完整意义上的"操作系统",这些进程是维持设备正常工作的关键,而他们的“老祖宗”就是init。init进程PID为0,它通过init.rc脚本来构建出系统给的初始运行形态---其他Android系统服务大多是在这个脚本中描述并被相继启动的。

1.1  init.rc语法

一个完整的init.rc脚本由4种类型的声明组成。

Action(动作),Commands(命令),Services(服务),Options(选项)

.........

1.2 系统关键服务的启动

init将通过解析init.rc来陆续启动其他关键的系统服务进程——其中最重要的就是ServiceManager,Zygote和SystemServer。

1.2.1  Android的“DNS服务器”——ServiceManager

ServiceManager这个是个啥服务呢,这里就不得不先简单提下Binder了,简单来说,Binder是Android中使用最为广泛的IPC机制。

大家对TCP/IP网络应该比较熟悉,Binder中各个组成元素跟TCP/IP网络有很多相似之处。Binder驱动(路由器);ServiceManager(DNS);Binder Client(客户端);Binder Server(服务器)。ServiceManager既然是DNS,那么在用户可以浏览网页前就必须就位。SM也是同样的道理,它要保证在有人使用Binder机制前就处于正常状态。所以每次ServiceManager重启的时候,其他关键进程如zygote,media等也会restart。

1.2.2  “孕育”新的线程和进程——Zygote

和ServiceManager类似,Zygote也是有init解析rc脚本时启动的。

1.2.3 Android的"系统服务" ——SystemServer

SystemServer是Android进入Launcher前的最后准备,它提供了众多由Java语言编写的"系统服务",会生成一个新的进程,用来承载各系统服务。

三.Activity ManagerService(AMS)

AMS是Android提供的一个用于管理Activity(和其他组件)运行状态的系统进程。其中的两个核心就是ActivityStack(Activity的记录者与管理者)和ActivityTask。

1.功能概述

和WMS一样,AMS也是寄存于systemServer中的,它会在系统启动时,创建一个线程来循环处理客户的请求,而且AMS会向ServiceManager登记多种Binder server,如“activity”,“meminfo”,“cpuinfo”等——不过只有第一个“activity”才是AMS中的“主业”,并由ActivityManagerService实现,剩余服务的功能由其他类提供。

未完待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值