拨云见日

ISBN:9787302381992
作者:王森

作者简介

本书包括上下两篇内容。上篇在保证完整Linux内核架构分析的前提下,着重分析Android系统中强烈依赖的Linux内核机制,如多核ARM架构的支持,而略去Android系统产品化没有用到内核机制,如SWAP机制。下篇主要分析Android系统层主要架构机制,尤其注重分析这些用户态机制与内核机制的接驳与交互。本书整理自作者多年积累的笔记,形式以源代码分析为主。
本书适合相关领域工程师作为实际项目的参考,以及有志于通过研读源码掌握Android系统与Linux内核精髓的读者。

书籍目录

目    录
上篇 内核
第1章 ARM多核处理器
2
1.1 SMP相关基础数据结构
3
1.2 Percpu内存管理
6
1.2.1 内核显式定义的处理器局部数据
6
1.2.2 Percpu内存管理的建立
8
1.2.3 Percpu动态分配内存空间
13
1.3 CpuFreq
15
1.3.1 初始化
15
1.3.2 CpuFreq策略的建立
16
1.3.3 Ondemand调频算法分析
18
1.4 CPU0 bootup CPU1
19
1.4.1 CPU0侧策略和动作
19
1.4.2 CPU1侧执行路线
21
1.5 CPU1的关闭
23
1.5.1 关闭时机
23
1.5.2 CPU1关闭操作
24
1.6 ARM处理器展望
26
1.6.1 ARM架构处理器的演进
26
1.6.2 TrustZone
27
1.6.3 ARM Virtualization
28
第2章 异常
33
2.1 异常向量表
33
2.1.1 异常进入
33
2.1.2 异常表的构建
35
2.2 中断体系
37
2.2.1 Cortex A9多核处理器的中断控制器GIC
37
2.2.2 MT6577的中断体系
38
2.2.3 Exynos4的中断体系
42
2.2.4 OMAP4的中断体系
46
2.3 中断处理
49
2.3.1 中断的基本结构
49
2.3.2 中断源识别
51
2.4 数据异常
54
2.5 处理器间通信
56
第3章 调度与实时性
62
3.1 Tick
62
3.1.1 Local timer
62
3.1.2 Tick挂载
63
3.1.3 Tick产生
66
3.2 Fair调度类
67
3.2.1 Fair调度类的负载均衡
67
3.2.2 Fair调度类的处理器选择
72
3.3 RT调度类
73
3.3.1 RT调度类的基本结构
73
3.3.2 Rt_Bandwidth
76
3.3.3 负载均衡与抢占
79
3.3.4 基础操作
80
3.4 调度器
82
3.4.1 调度域的构建
82
3.4.2 调度器
86
3.5 唤醒
89
3.5.1 唤醒与抢占
89
3.5.2 跨处理器分发线程
91
3.5.3 抢占
92
第4章 Signal
99
4.1 信号发送
99
4.2 信号执行
102
4.2.1 路径切换
102
4.2.2 ARM Linux下信号执行环境的搭建
103
4.2.3 Signal处理函数的返回
107
4.2.4 系统调用重入
109
第5章 进程与进程内存
111
5.1 Linux进程
111
5.1.1 Fork
111
5.1.2 Exec新进程创建
112
5.2 CPU与MMU
117
5.2.1 ARM Linux页表页目录结构
117
5.2.2 页表页目录的建立
120
5.3 进程虚拟内存
122
5.3.1 Android进程虚拟内存的继承
122
5.3.2 进程虚拟地址空间的获得
127
第6章 缺页请页与内存Shrink
129
6.1 缺页与请页
129
6.1.1 File backed虚拟内存段操作函数
130
6.1.2 File backed内存的请页
131
6.1.3 匿名内存的请页
134
6.1.4 COW访问
135
6.2 内存Shrink
137
6.2.1 Shrink操作shrink_page_list
137
6.2.2 Clean Page
142
6.2.3 脏页的监控
143
6.3 全景图
145
第7章 块设备
148
7.1 Bdev文件系统
148
7.2 块设备基础结构
150
7.3 块设备的创建与注册
152
7.4 分区检测生成
156
7.5 块设备的打开
157
7.6 块设备驱动的层次结构
159
7.7 虚拟块设备
161
第8章 VFS
163
8.1 根目录
163
8.1.1 根目录文件系统——initramfs
165
8.1.2 Android ramdisk.img
166
8.1.3 传统根目录文件系统加载方式
166
8.2 文件打开
166
8.2.1 目录的层级查找
167
8.2.2 各层次操作函数的安装
171
8.3 文件写
172
8.3.1 文件写框架
172
8.3.2 write_begin
174
8.3.3 write_end
176
8.4 脏页的提交与回写机制
177
8.4.1 脏页的提交
177
8.4.2 回写时机
179
8.4.3 回写机制的层次操作
183
8.4.4 节点层次的回写
183
第9章 EXT4文件系统
191
9.1 Android文件系统的选择
191
9.2 EXT4文件节点
191
9.2.1 EXT4 inode基础结构
191
9.2.2 EXt4 raw inode的定位
192
9.2.3 EXT4 inode的获取
193
9.3 Mount
195
9.4 EXT4文件写操作
197
9.5 EXT4 journal
199
9.6 Extent tree
202
9.6.1 基础结构
202
9.6.2 定位逻辑块的struct ext4_extent
203
9.6.3 定位逻辑块左右侧的struct ext4_extent项
205
9.7 块分配
208
9.7.1 块组的buddy算法
208
9.7.2 分配物理块
217
9.8 逻辑块到物理块的映射
225
第10章 RCU
229
10.1 RCU tree
229
10.1.1 RCU Tree结构
229
10.1.2 RCU tree的构建
230
10.2 Grace Period
232
10.2.1 Grace Period的检测
232
10.2.2 重新启动新一轮Grace Period
235
10.3 RCU函数的执行
237
第11章 MMC Driver
238
11.1 MMC Driver
238
11.1.1 MMC协议层
238
11.1.2 MMC块设备
239
11.2 开源手机U8836D(MT6577)分区的实现
242
第12章 内核配置系统及内核调试
246
12.1 Conf
246
12.1.1 Kconfig元素
246
12.1.2 Kconfig分析
247
12.2 内核调试
248
12.2.1 senix_printk
249
12.2.2 LOG_BUF
252
下篇 Dalvik与Android用户态源码分析
第13章 内存
258
13.1 Dalvik内存管理
258
13.1.1 虚拟内存分配
258
13.1.2 内存回收
263
13.2 Ashmem
265
13.3 GC
267
13.3.1 对象Mark
267
13.3.2 从Root对象集到普通对象
268
13.3.3 GC与线程实时性
270
第14章 进程与线程
272
14.1 Dalvik虚拟机的进程
272
14.2 Dalvik线程创建机制
273
14.3 Android线程模型
276
14.3.1 主线程的生成
276
14.3.2 线程池线程的生成
276
14.4 Java线程转换
278
14.4.1 从Java到JNI
278
14.4.2 从JNI到Java
279
第15章 Bionic的动态加载机制
283
15.1 Linker——用户态入口
283
15.2 Linker主体——link_image
284
第16章 Android系统初始
287
16.1 Android入口
287
16.2 Init——OS的入口
289
16.2.1 RC文件分析
289
16.2.2 RC动作执行
294
16.2.3 RC的逻辑分析
295
16.2.4 设备探测
295
16.2.5 property库的构建
297
16.2.6 Init的调试
299
第17章 Interpreter与JIT
301
17.1 解释器编译结构
301
17.2 Dalvik寄存器编译模型
301
17.2.1 Callee寄存器分配
301
17.2.2 Caller寄存器分配
303
17.2.3 outs的处理
304
17.3 Portable Interpreter结构
305
17.4 ASM Interpreter
306
17.4.1 基本结构
306
17.4.2 运行时模型与基本操作
308
17.4.3 ASM Interpreter入口
309
17.5 Interpreter的切换
311
17.6 Dalvik运行时帧结构
312
17.7 JIT
313
17.7.1 热点检测
313
17.7.2 Mode切换
315
17.7.3 JIT提交
316
17.8 Compile
317
17.8.1 基础数据结构
317
17.8.2 dalvik指令格式分析
319
17.8.3 TraceRun分析
319
17.8.4 MIR
323
17.8.5 基本块的逻辑关系
325
17.8.6 寄存器分配
327
17.8.7 LIR
332
17.8.8 Codecache
334
17.9 Dalvik ART
335
第18章 Binder
336
18.1 Parcel
336
18.1.1 C++层的Parcel
336
18.1.2 Java层的Parcel
337
18.2 Binder驱动
338
18.2.1 Binder写
339
18.2.2 Binder读
344
18.3 C++层面
346
18.3.1 本地与远端对象
346
18.3.2 服务的建立
349
18.4 Java层面
350
18.5 service_manager
351
第19章 Class
352
19.1 系统类库
352
19.1.1 Inital class
352
19.1.2 ODEX文件的加载
353
19.1.3 系统类库
354
19.1.4 preloaded-classes
355
19.2 类加载
357
19.2.1 类加载框架
357
19.2.2 类加载
359
19.3 对象实体生成
361
第20章 Android应用框架
363
20.1 线程池线程
363
20.1.1 C++层
363
20.1.2 Java层
365
20.2 系统侧Activity与Service的生成控制
366
20.3 class ActivityThread
368
20.3.1 MainLooper
368
20.3.2 activity与service的加载
370
第21章 Android UI体系
371
21.1 窗口体系的生成
371
21.2 ViewRoot与Surface
372
21.3 编辑框实例分析
373
21.3.1 ViewRoot获得系统侧代理对象
373
21.3.2 焦点切换事件——主要Android UI机制的互动
375
21.3.3 输入事件的处理
376
21.3.4 编辑框的生成
377
第22章 ADB
379
22.1 ADB基本结构
379
22.1.1 连接
379
22.1.2 主线程
381
22.1.3 主线程监测的文件句柄
382
22.2 Transport
382
22.2.1 初始化
382
22.2.2 transport传输线程
384
22.2.3 transport的管理
386
22.3 Local服务
389
22.3.1 Local服务的种类
389
22.3.2 Local服务的形态
391
22.3.3 SYNC服务
392
第23章 Android浏览器的Webkit分析
394
23.1 Webcore
394
23.1.1 DOM与Rendering树生成
394
23.1.2 事件的产生与分发
397
23.2 V8 parser源码分析
401
23.2.1 V8 parser处理脚本的层次
402
23.2.2 Scope
406
23.2.3 语法分析的入口 Parser::ParseStatement(…)
408
23.2.4 普通语句的分析
409
23.3 指令生成
415
??
??
??
??
VIII
拨云见日——基于Android的内核与系统架构源码分析
IX
目 录


 拨云见日下载



发布书评

 
 


 

农业基础科学,时尚,美术/书法,绘画,软件工程/开发项目管理,研究生/本专科,爱情/情感,动漫学堂PDF下载,。 PDF下载网 

PDF下载网 @ 2024