深入理解Android内核设计思想——读书笔记
来源:互联网 发布:linux vi创建c文件 编辑:程序博客网 时间:2024/06/02 04:26
- Android系统
- Android的分层
- 什么是基于OS的系统
- Android系统映像
- Android系统反编译
- 操作系统基础
- 计算机体系结构
- 什么是操作系统
- 进程间通信的经典实现
- 同步机制的经典实现
前言
这本书用我之前一个同事的话说就是无用之用,其实我也不知道有什么用,但是他能潜移默化的影响你,就比如说他曾经看过一本教你如何用灯泡制作一个内存体系的书,嗯……反正我觉得工作中不会怎么用到,但是他还是觉得那是一本无用之用的书,我没读过什么书,明白的道理也少,但是从一个粗人的角度来讲,他的职位和薪资都远超我一万个十字路口,所以听他的应该不会有太大坏处。
Android系统
巴拉巴拉一大堆,但全是在linux下做的命令行操作,这里只记录我觉得比较有用的地方。
Android的分层
早期的Android框架分为四层,然后因为版权原因,变成了五层,即:
Application
应用程序层,开发Android应用接触最多的一层了。
Application Framworck
就是用Java将C库封装了一下,提供一些接口供上层使用。
Library and Runtime
系统运行库,也有人叫“C库层”因为里面的东西都是C/C++写的,这里的重点在于,了解系统是如何与之构建关系并且稳定运行的。
Hardware Abstraction Layer
这一层跟我们应该没什么太大关系了,一方面是为了进一步降低系统层和硬件层的耦合度,更重要的是因为一些协议相关的原因。
Linux Kernel
内核层,这一层的源码不包含在Android工程中,可以单独下载,有了这样一层,在硬件适配上就方便多了
什么是基于OS的系统?
OS(Ecosystem)本是生态学中的一个概念,它体现了一定时间和空间内能量的可循环平衡流动。看完这句话心中一万只草泥马跑过……
然后根据他举出的例子来理解是,OS是生态学中用来描述类似生物链的某种名词,然后OS的系统呢,就是他的市场机制就像生物链一样,理想中的状态就像鱼池边种树,果子喂鱼,鱼便便滋润树这样的双赢模式。
Android系统映像
通过一些列的编译,Android系统就可以通过烧录写到硬件中了,书中总共列出了几个文件的介绍,看明白的只有一下几种……
ramdisk.img
存放的是root目录,在Android启动过程中发挥重要的作用。
userdata
各程序的数据存储,被挂载到 /data 目录下
recover
设备进入“恢复模式”所需要的硬件包,是音量键+开机键一起按吧,没记错吧……没怎么刷过机。
system.img
这个文件就比较亲民了,他是Android系统的运行包,被挂载到……如果理解的没有偏差的话,就是通常我们的 文件管理—>system文件夹了
Android系统反编译
嗯……这本书是在2014年出版的,算是比较老了,所以反编译这一节只当做了解Android系统
Android反编译按照目标来分的话分为:
1. APK反编译
2. Android系统包反编译
但是不论哪种方式,大致步骤都为:
操作系统基础
起初我觉得这并没有什么卵用,但了解更多总没有坏处。比如另外一本Android书籍上同样针对Android系统讲解了IPC,而这本书会一步一步的告诉你,它从哪来,到哪去。
了解发动机工作原理的驾驶员,一定能在驾驶过程中受益匪浅
计算机体系结构
冯·诺依曼结构
他的观点就是采用二进制,具有存储和控制能力。其结构包含了运算器,控制器,输入输出等元素。
哈弗结构
总而言之就是在冯·诺依曼结构上进行了优化(我是这么认为的)
这两种结构所包含的元素是相同的。
什么是操作系统
罗列了一大堆,但比较重要的我感觉就是两点。
一、面向上层
二、面向下层
是不是感觉闻到什么气味了?但这不是屁话。因为这两点就可以概括操作系统的职责,让用户更方便的使用CPU、内存、Flash、各种I/O设备等。
操作系统是负责管理系统硬件,并为上层提供稳定编程接口和人机交互界面的软件集合
进程间通信的经典实现
操作系统中的的各个进程通常运行在独立的内存空间中,并有严格的机制来防止进程间的非法访问,而并不代表不能通信,进程间的通信是操作系统中的一个重要概念,比如我们经常在两个毫不相干的程序之间使用复制粘贴。
广义的讲,进程间通信(Inter……巴拉巴拉,简称IPC)是指运行在不同进程(无论是否在同一台设备上)中的若该线程间的数据交换,
从上的定义可以看出,除了在同一设备,还能垮设备~(RPC机制)屌到屙血尿浓啊……
通信方式
- 共享内存
这是一中非常常用的通信机制,书中介绍了他的具体步骤:
1. 申请一块内存空间,生成的内存区域将与一个特定的Key进行绑定。
2. 映射内存共享区,将共享区映射到A线程中。
3. 访问内存共享区,A线程创建了共享区,那么就到B线程去拿了,怎么拿咧?就用地步生成的Key去拿
4. 进程间通信,好了,到这里两个线程都持有了这块共享内存,就可以进行数据交换了,但是这本身是没有同步机制的,需要自己去协商。
5. 撤销内存映射区,两个线程哔哩哔哩完了之后,要撤销之前的映射操作。(不太理解)
6. 删除内存共享区,用完这块内存之后要释放,这个合情合理,没毛病~
- 管道(Pipe)
这个我就用我的理解来记录吧,这种方式使用与windows系统。工作流程就像他的名字一样,管道,而且是单向管道,这就意味着两个线程之间需要建立两个单向的管道,一根管道的两端分别为读和写,这像什么?I/O流?这里要说的是,管道有容量限制,当pipe满了的时候读或者写操作则会阻塞,管道的容量为65536。而且这个管道好像只能是父子线程间的通信,如果是两个毫无关系的线程,那就要用到Named Pipe了,同学,给你种子,不,链接,自行解决吧…… - Unix Domain Socked(UDS)
这个就屌了,因为里面提到了,Android中使用最多的一中IPC机制就是Binder其次就是UDS,在2.2版本以前,Android将Binder作为这个GUI架构中的进程间通信基础,而后来弃之使用了UDS,可见他的威武程度。
他的通信流程如下:- 服务端监听IPC请求
- 客户端发起IPC申请
- 双方成功建立IIPC连接
- 客户端向服务器端送数据,证明IPC通信是有效的
这里了解个大概,作者说后面详细讲,不讲撕书……
- RPC
同步机制的经典实现
支持线程间的通信,和多线程共享一块内存,同步的问题自然而然就出现了,闲言碎语不要讲,罗列出几种同步机制。
信号量
如图所示,这里的S代表信号,PV原语的浅在理解就是,进入共享区执行P操作,离开共享区执行V操作。
P操作:
S自减1,如果仍然<=0就直接进入,否则等待别人释放资源
V操作:
S自增1,如果S>0,说明后面没有排队的线程,就直接返回就行了,否则需要唤醒后面等待的线程。
他的优点就在于只需要几个简单的元素,就能解决同步的问题。
在开发的时候经常遇到一些类似的操作,这里是不是可以借鉴PV机制?未完待续。。。。
- 深入理解Android内核设计思想——读书笔记
- 《深入理解Android内核设计思想》
- 深入理解Android内核设计思想
- <深入理解Android内核设计思想>读书笔记:Looper,Handler,Runnable,MessageQueue,ActivityThread
- 《深入理解Android内核设计思想》读书有感
- 《深入理解Android内核设计思想》学习笔记
- 《深入理解Android内核设计思想》第五章
- 《深入理解Android内核设计思想》第6章
- Android源码内核设计思想读书笔记
- android学习的几本书:深入理解Android内核设计思想
- 读后感--第二章android源码下载及编译--深入理解android内核设计思想
- 《深入理解Android内核设计思想》学习笔记:第五章 Android进程、线程管理
- 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译
- 本书版权输出到台湾地区,《深入理解Android内核设计思想》诚挚感谢大家一直以来的支持!
- 夯实java基础,深入理解Android设计思想
- 深入理解Android内核——Android启动分析
- 《 深入理解Linux内核》——第二章 内存寻址:读书笔记
- 深入理解linux内核读书笔记1--系统启动
- MarkDownPad-Pro体验
- uva11039 设计建筑物
- 今天在php中把==写成了=
- hibernate,spring,struts面试题
- md5算法详解
- 深入理解Android内核设计思想——读书笔记
- 仿微信公众平台登录页面
- XTU 1206 Dormitory's Elevator
- 使用MAT查看Android内存泄露
- UVA 11014Make a Crystal
- 51nod 1066 Bash游戏
- iOS开发-数据持久化-简书
- C# 文件操作类集合(一) 路径
- linux生产服务器有关网络状态的优化措施