Linux核心編程

Linux核心編程

《Linux核心編程》是2011年人民郵電出版社出版的圖書,作者是Claudia Salzberg、Rodriguez、Gordon Fischer、Steven Smolski。

基本介紹

  • 書名:Linux核心編程
  • 作者:Claudia Salzberg、Rodriguez、Gordon Fischer、 Steven Smolski
  • 譯者:陳莉君、賀炎、劉霞林
  • ISBN: 7115251940, 9787115251947
  • 頁數:400頁
  • 出版社:人民郵電出版社
  • 出版時間: 第1版 (2011年6月1日)
  • 裝幀:平裝
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

《Linux核心編程》以Linux作業系統為基礎,詳細介紹了Linux核心子系統,並輔以大量核心原始碼和示例程式進行演示,引領讀者深入Linux核心。《Linux核心編程》的主要內容包括:Linux基礎知識、核心探索工具集、進程的整個生命周期、記憶體區、頁面、Slab分配器、用於輸入/輸出的各種設備、檔案系統、搶占、自旋鎖、信號量、核心引導、構建Linux核心,以及向核心添加代碼等。同時還簡單介紹了一些套用工具和實用程式,從而可以獲取理解核心內幕所需的信息。每章末尾都給出一些練習,涉及核心運行的操作及工作原理。
《Linux核心編程》適合對Linux核心感興趣的各層次讀者,無論對Linux初學者還是Linux 程式開發人員,本書都是一本很有價值的參考書。

圖書目錄

目 錄
第1章 概述 1
1.1 UNIX的歷史 2
1.2 標準和通用接口 3
1.3 自由軟體和開放源碼 3
1.4 Linux發布版概覽 3
1.41 Debian 4
1.42 Red Hat/Fedora 4
1.43 Mandriva 4
1.44 SUSE 4
1.45 Gentoo 4
1.46 Yellow Dog 5
1.47 其他發布版 5
1.5 核心版本信息 5
1.6 基於Power的Linux 5
1.7 什麼是作業系統 6
1.8 核心組織 7
1.9 Linux核心概述 7
1.9.1 用戶接口 7
1.9.2 用戶標識符 8
1.9.3 檔案和檔案系統 8
1.9.4 進程 12
1.9.5 系統調用 15
1.9.6 Linux調度程式 15
1.9.7 Linux設備驅動程式 15
1.10 可移植性和體系結構的相關性 16
1.11 小結 16
1.12 習題 16
第2章 核心探索工具集 18
2.1 核心中常見的數據類型 18
2.1.1 鍊表 18
2.1.2 查找 21
2.1.3 樹 22
2.2 彙編 24
2.2.1 PowerPC 24
2.2.2 x86 27
2.3 彙編語言示例 29
2.3.1 x86中的彙編示例 30
2.3.2 PowerPC中的彙編示例 31
2.4 內聯彙編 33
2.4.1 輸出運算元 34
2.4.2 輸入運算元 34
2.4.3 已修改過的暫存器(已修改的元素列表) 34
2.4.4 參數的編號方式 34
2.4.5 約束條件 34
2.4.6 asm 35
2.4.7 __volatile__ 35
2.5 特殊的C 語言用法 38
2.5.1 asmlinkage 38
2.5.2 UL 39
2.5.3 內聯 39
2.5.4 const和volatile 39
2.6 核心探索工具一覽 40
2.6.1 objdump/readelf 40
2.6.2 hexdump 41
2.6.3 nm 41
2.6.4 objcopy 42
2.6.5 ar 42
2.7 核心發言:傾聽來自核心的訊息 42
2.7.1 printk() 42
2.7.2 dmesg 42
2.7.3 /var/log/messages 42
2.8 其他奧秘 43
2.8.1 __init 43
2.8.2 likely()和unlikely() 43
2.8.3 IS_ERR和PTR_ERR 44
2.8.4 通告程式鏈 44
2.9 小結 45
2.9.1 項目:Hellomod 45
2.9.2 第一步:構造Linux模組的框架 45
2.9.3 第二步:編譯模組 46
2.9.4 第三步:運行代碼 47
2.10 習題 48
第3章 進程:程式執行的基本模型 49
3.1 程式 51
3.2 進程描述符 52
3.2.1 與進程屬性相關的欄位 54
3.2.2 與調度相關的欄位 55
3.2.3 涉及進程間相互關係的欄位 58
3.2.4 與進程信任狀相關的欄位 59
3.2.5 與進程權能相關的欄位 60
3.2.6 與進程限制相關的欄位 61
3.2.7 與檔案系統及地址空間相關的欄位 63
3.3 進程的創建:系統調用fork()、vfork 和clone() 64
3.3.1 fork()函式 65
3.3.2 vfork()函式 66
3.3.3 clone()函式 67
3.3.4 do_fork()函式 68
3.4 進程的生命周期 70
3.4.1 進程的狀態 70
3.4.2 進程狀態的轉換 71
3.5 進程的終止 74
3.5.1 sys_exit()函式 75
3.5.2 do_exit()函式 75
3.5.3 通知父進程和sys_wait4() 77
3.6 了解進程的動態:調度程式的基本構架 80
3.6.1 基本結構 80
3.6.2 從等待中醒來或者激活 81
3.7 等待佇列 86
3.7.1 添加到等待佇列 88
3.7.2 等待事件 89
3.7.3 喚醒進程 91
3.8 異步執行流程 93
3.8.1 異常 93
3.8.2 中斷 95
3.9 小結 114
3.9.1 項目:系統變數current 114
3.9.2 項目源碼 115
3.9.3 運行代碼 116
3.10 習題 116
第4章 記憶體管理 117
4.1 頁 119
4.2 記憶體管理區 121
4.2.1 記憶體管理區描述符 122
4.2.2 記憶體管理區操作輔助函式 124
4.3 頁面 124
4.3.1 請求頁面的函式 124
4.3.2 釋放頁面的函式 126
4.3.3 夥伴系統 126
4.4 Slab分配器 130
4.4.1 快取描述符 133
4.4.2 通用快取描述符 135
4.4.3 Slab描述符 136
4.5 Slab分配器的生命周期 138
4.5.1 與Slab分配器有關的全局變數 138
4.5.2 創建快取 139
4.5.3 創建slab與cache_grow() 144
4.5.4 Slab的銷毀:退還記憶體與kmem_cache_destroy() 146
4.6 記憶體請求路徑 147
4.6.1 kmalloc() 147
4.6.2 kmem_cache_alloc() 148
4.7 Linux進程的記憶體結構 149
4.7.1 mm_struct 150
4.7.2 vm_area_struct 152
4.8 進程映像的分布及線性地址空間 153
4.9 頁表 155
4.10 缺頁 156
4.10.1 x86缺頁異常 156
4.10.2 缺頁處理程式 157
4.10.3 PowerPC缺頁異常 164
4.11 小結 164
4.12 項目:進程記憶體映射 165
4.13 習題 166
第5章 輸入/輸出 167
5.1 匯流排、橋、連線埠和接口的硬體實現 167
5.2 設備 171
5.2.1 塊設備概述 172
5.2.2 請求佇列和I/O 調度 173
5.2.3 示例:“通用”塊設備驅動程式 180
5.2.4 設備操作 182
5.2.5 字元設備 183
5.2.6 網路設備 184
5.2.7 時鐘設備 184
5.2.8 終端設備 184
5.2.9 直接存儲器存取 184
5.3 小結 185
5.4 項目:創建並口驅動程式 185
5.4.1 並口的硬體 185
5.4.2 運行在並口上的軟體 187
5.5 習題 192
第6章 檔案系統 194
6.1 檔案系統的基本概念 194
6.1.1 檔案和檔案名稱 194
6.1.2 檔案類型 195
6.1.3 檔案的附加屬性 195
6.1.4 目錄和路徑名 196
6.1.5 檔案操作 197
6.1.6 檔案描述符 197
6.1.7 磁碟塊、磁碟分區以及實現 197
6.1.8 性能 198
6.2 Linux虛擬檔案系統 198
6.2.1 VFS的數據結構 200
6.2.2 全局鍊表和局部鍊表的引用 211
6.3 與VFS相關的結構 212
6.3.1 fs_struct結構 212
6.3.2 files_struct結構 213
6.4 頁快取 216
6.4.1 address_space結構 217
6.4.2 buffer_head結構 219
6.5 VFS的系統調用和檔案系統層 221
6.5.1 open() 221
6.5.2 close() 227
6.5.3 read() 229
6.5.4 write() 244
6.6 小結 246
6.7 習題 246
第7章 進程調度和核心同步 247
7.1 Linux的調度程式 248
7.1.1 選擇下一個進程 248
7.1.2 上下文切換 253
7.1.3 讓出CPU 261
7.2 核心搶占 269
7.2.1 顯式核心搶占 269
7.2.2 隱式用戶搶占 270
7.2.3 隱式核心搶占 270
7.3 自旋鎖和信號量 272
7.4 系統時鐘:關於時間和定時器 274
7.4.1 實時時鐘:現在幾點了 274
7.4.2 讀取PPC的實時時鐘 276
7.4.3 讀取x86的實時時鐘 278
7.5 小結 280
7.6 習題 280
第8章 核心引導 281
8.1 BIOS和Open Firmware 282
8.2 引導載入程式 282
8.2.1 GRUB 283
8.2.2 LILO 286
8.2.3 PowerPC和Yaboot 286
8.3 與體系結構相關的記憶體初始化 287
8.3.1 PowerPC的硬體記憶體管理 287
8.3.2 基於Intel x86體系結構的硬體記憶體管理 296
8.3.3 PowerPC和x86的代碼匯集 305
8.4 原始的RAM盤 305
8.5 開始:start_kernel() 306
8.5.1 調用lock_kernel() 307
8.5.2 調用page_address_init() 309
8.5.3 調用printk(linux_banner) 311
8.5.4 調用setup_arch 311
8.5.5 調用setup_per_cpu_areas() 315
8.5.6 調用smp_prepare_boot_cpu() 316
8.5.7 調用sched_init() 317
8.5.8 調用build_all_zonelists() 319
8.5.9 調用page_alloc_init 319
8.5.10 調用parse_args() 320
8.5.11 調用trap_init() 322
8.5.12 調用rcu_init() 323
8.5.13 調用init_IRQ() 323
8.5.14 調用softirq_init() 324
8.5.15 調用time_init() 325
8.5.16 調用console_init() 326
8.5.17 調用profile_init() 326
8.5.18 調用local_irq_enable() 327
8.5.19 配置initrd 327
8.5.20 調用mem_init() 327
8.5.21 調用late_time_init() 333
8.5.22 調用calibrate_delay() 333
8.5.23 調用pgtable_cache_init() 334
8.5.24 調用buffer_init() 335
8.5.25 調用security_scaffolding_startup() 336
8.5.26 調用vfs_caches_init() 336
8.5.27 調用radix_tree_init() 343
8.5.28 調用signal_init() 344
8.5.29 調用page_writeback_init() 344
8.5.30 調用proc_root_init() 346
8.5.31 調用init_idle() 347
8.5.32 調用rest_init() 348
8.6 init執行緒(或進程1) 349
8.7 小結 353
8.8 習題 353
第9章 構建Linux核心 354
9.1 工具鏈 354
9.1.1 編譯程式 355
9.1.2 交叉編譯 355
9.1.3 連結程式 356
9.1.4 ELF二進制目標檔案 356
9.2 核心原始碼的構建 360
9.2.1 解釋原始碼 360
9.2.2 構建核心映像 364
9.3 小結 369
9.4 習題 369
第10章 向核心添加代碼 371
10.1 瀏覽原始碼 371
10.11 熟悉檔案系統 371
10.12 filp和fops 372
10.13 用戶空間和核心空間 374
10.14 等待佇列 375
10.15 工作佇列及中斷 378
10.16 系統調用 380
10.17 其他類型的驅動程式 380
10.18 設備模型和sysfs檔案系統 383
10.2 編寫代碼 386
10.2.1 設備基礎 386
10.2.2 符號輸出 388
10.2.3 IOCTL 388
10.2.4 輪詢與中斷 391
10.2.5 工作佇列和tasklet 395
10.2.6 增加系統調用的代碼 396
10.3 構建和調試 398
10.4 小結 399
10.5 習題 400

相關詞條

熱門詞條

聯絡我們