闡述Android的核心和系統架構源碼分析,目標是分析Android核心源碼和架構
基本介紹
- 書名:撥雲見日:基於android的核心與系統架構源碼分析
- 作者:王森
- ISBN:9787302381990
- 定價:69元
- 出版社:清華大學出版社
- 出版時間:2015.01.01
內容簡介,目錄,
內容簡介
本書包括上下兩篇內容。上篇在保證完整Linux核心架構分析的前提下,著重分析Android系統中強烈依賴的Linux核心機制,如多核ARM架構的支持,而略去Android系統產品化沒有用到核心機制,如SWAP機制。下篇主要分析Android系統層主要架構機制,尤其注重分析這些用戶態機制與核心機制的接駁與互動。
目錄
上篇 核心
第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