《拨云见日 基于android的内核与系统架构源码分析》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:王森著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302381990
  • 页数:416 页
图书介绍:linux内核源码分析、dalvik源码分析、android源码分析、webkit源码分析(作为附录,或者作为android的源码分析的一部分)

上篇 内核 2

第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用户态源码分析 258

第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