出版時間:2002-8 出版社:人民郵電出版社 作者:陳莉君 頁數(shù):531 字?jǐn)?shù):831
Tag標(biāo)簽:無
內(nèi)容概要
自由軟件Linux 操作系統(tǒng)源代碼的開放,為我們掌握操作系統(tǒng)核心技術(shù)提供了良好的條件。本書共分13章,對Linux 內(nèi)核2.4版的源代碼進行了較全面的分析,既包括對中斷機制、進程調(diào)度、內(nèi)存管理、進程間通信、虛擬文件系統(tǒng)、設(shè)備驅(qū)動程序及網(wǎng)絡(luò)子系統(tǒng)的分析,也包括對Linux 整體結(jié)構(gòu)的把握、Linux的啟動過程的分析及Linux獨具特色的模塊機制的分析與應(yīng)用等。其中重點剖析了Linux內(nèi)核中最基礎(chǔ)的部分:進程管理、內(nèi)存管理及文件管理。
本書對于那些準(zhǔn)備進入Linux 操作系統(tǒng)內(nèi)部,閱讀Linux 內(nèi)核源代碼以及在內(nèi)核級進行程序開發(fā)的讀者具有非常高的參考價值。同時,操作系統(tǒng)實現(xiàn)者、系統(tǒng)程序員、Linux應(yīng)用開發(fā)人員、嵌入式系統(tǒng)開發(fā)人員、系統(tǒng)管理員、在校的大學(xué)生和研究生及對Linux感興趣的用戶均可在閱讀本書中受益。
書籍目錄
第一章 走進Linux 1
1.1 GNU與Linux的成長 1
1.2 Linux的開發(fā)模式和運作機制 2
1.3 走進Linux內(nèi)核 4
1.3.1 Linux內(nèi)核的特征 4
1.3.2 Linux內(nèi)核版本的變化 5
1.4 分析Linux內(nèi)核的意義 7
1.4.1 開發(fā)適合自己的操作系統(tǒng) 8
1.4.2 開發(fā)高水平軟件 9
1.4.3 有助于計算機科學(xué)的教學(xué)和科研 9
1.5 Linux內(nèi)核結(jié)構(gòu) 9
1.5.1 Linux內(nèi)核在整個操作系統(tǒng)中的位置 10
1.5.2 Linux內(nèi)核的作用 11
1.5.3 Linux內(nèi)核的抽象結(jié)構(gòu) 11
1.6 Linux內(nèi)核源代碼 12
1.6.1 多版本的內(nèi)核源代碼 13
1.6.2 Linux內(nèi)核源代碼的結(jié)構(gòu) 13
1.6.3 從何處開始閱讀源代碼 14
1.7 Linux內(nèi)核源代碼分析工具 16
1.7.1 Linux超文本交叉代碼檢索工具 16
1.7.2 Windows平臺下的源代碼閱讀工具(Source Insight) 17
第二章 Linux運行的硬件基礎(chǔ) 19
2.1 i386的寄存器 19
2.1.1 通用寄存器 19
2.1.2 段寄存器 20
2.1.3 狀態(tài)和控制寄存器 20
2.1.4 系統(tǒng)地址寄存器 23
2.1.5 調(diào)試寄存器和測試寄存器 24
2.2 內(nèi)存地址 25
2.3 段機制和描述符 26
2.3.1 段機制 26
2.3.2 描述符的概念 27
2.3.3 系統(tǒng)段描述符 29
2.3.4 描述符表 30
2.3.5 選擇符與描述符表寄存器 30
2.3.6 描述符投影寄存器 32
2.3.7 Linux中的段 32
2.4 分頁機制 34
2.4.1 分頁機構(gòu) 36
2.4.2 頁面高速緩存 39
2.5 Linux中的分頁機制 40
2.5.1 與頁相關(guān)的數(shù)據(jù)結(jié)構(gòu)及宏的定義 41
2.5.2 對頁目錄及頁表的處理 42
2.6 Linux中的匯編語言 44
2.6.1 AT&T與Intel匯編語言的比較 44
2.6.2 AT&T匯編語言的相關(guān)知識 46
2.6.3 gcc嵌入式匯編 49
2.6.4 Intel386匯編指令摘要 52
第三章 中斷機制 55
3.1 中斷基本知識 55
3.1.1 中斷向量 55
3.1.2 外設(shè)可屏蔽中斷 56
3.1.3 異常及非屏蔽中斷 57
3.1.4 中斷描述符表 59
3.1.5 相關(guān)匯編指令 60
3.2 中斷描述符表的初始化 61
3.2.1 外部中斷向量的設(shè)置 61
3.2.2 中斷描述符表IDT的預(yù)初始化 63
3.2.3 中斷向量表的最終初始化 65
3.3 異常處理 68
3.3.1 在內(nèi)核棧中保存寄存器的值 68
3.3.2 中斷請求隊列的初始化 70
3.3.3 中斷請求隊列的數(shù)據(jù)結(jié)構(gòu) 70
3.4 中斷處理 77
3.4.1 中斷和異常處理的硬件處理?!?7
3.4.2 Linux對中斷的處理 78
3.4.3 與堆棧有關(guān)的常量、數(shù)據(jù)結(jié)構(gòu)及宏 79
3.4.4 中斷處理程序的執(zhí)行 81
3.4.5 從中斷返回 85
3.5 中斷的后半部分處理機制 86
3.5.1 為什么把中斷分為兩部分來處理 86
3.5.2 實現(xiàn)機制 87
3.5.3 數(shù)據(jù)結(jié)構(gòu)的定義 89
3.5.4 軟中斷、bh及tasklet的初始化 91
3.5.5 后半部分的執(zhí)行 92
3.5.6 把bh移植到tasklet 96
第四章 進程描述 97
4.1 進程和程序(Process and Program) 97
4.2 Linux中的進程概述 99
4.3 task_struct結(jié)構(gòu)描述 100
4.4 task_struct結(jié)構(gòu)在內(nèi)存中的存放 107
4.4.1 進程內(nèi)核?!?07
4.4.2 當(dāng)前進程(current宏) 108
4.5 進程組織方式 109
4.5.1 哈希表 109
4.5.2 雙向循環(huán)鏈表 110
4.5.3 運行隊列 111
4.5.4 進程的運行隊列鏈表 111
4.5.5 等待隊列 112
4.6 內(nèi)核線程 115
4.7 進程的權(quán)能 116
4.8 內(nèi)核同步 117
4.8.1 信號量 118
4.8.2 原子操作 118
4.8.3 自旋鎖、讀寫自旋鎖和大讀者自旋鎖 119
第五章 進程調(diào)度與切換 123
5.1 Linux時間系統(tǒng) 123
5.1.1 時鐘硬件 123
5.1.2 時鐘運作機制 124
5.1.3 Linux時間基準(zhǔn) 125
5.1.4 Linux的時間系統(tǒng) 126
5.2 時鐘中斷 126
5.2.1 時鐘中斷的產(chǎn)生 126
5.2.2 Linux實現(xiàn)時鐘中斷的全過程 127
5.3 Linux的調(diào)度程序-Schedule( ) 131
5.3.1 基本原理 132
5.3.2 Linux進程調(diào)度時機 133
5.3.3 進程調(diào)度的依據(jù) 135
5.3.4 進程可運行程度的衡量 136
5.3.5 進程調(diào)度的實現(xiàn) 137
5.4 進程切換 139
5.4.1 硬件支持 139
5.4.2 進程切換 142
第六章 Linux內(nèi)存管理 147
6.1 Linux的內(nèi)存管理概述 147
6.1.1 Linux虛擬內(nèi)存的實現(xiàn)結(jié)構(gòu) 148
6.1.2 內(nèi)核空間和用戶空間 149
6.1.3 虛擬內(nèi)存實現(xiàn)機制間的關(guān)系 151
6.2 Linux 內(nèi)存管理的初始化 152
6.2.1 啟用分頁機制 152
6.2.2 物理內(nèi)存的探測 157
6.2.3 物理內(nèi)存的描述 163
6.2.4 頁面管理機制的初步建立 166
6.2.5 頁表的建立 173
6.2.6 內(nèi)存管理區(qū) 177
6.3 內(nèi)存的分配和回收 185
6.3.1 伙伴算法 186
6.3.2 物理頁面的分配和釋放 187
6.3.3 Slab分配機制 194
6.3.4 內(nèi)核空間非連續(xù)內(nèi)存區(qū)的管理 201
6.4 地址映射機制 204
6.4.1 描述虛擬空間的數(shù)據(jù)結(jié)構(gòu) 205
6.4.2 進程的虛擬空間 209
6.4.3 內(nèi)存映射 212
6.5 請頁機制 218
6.5.1 頁故障的產(chǎn)生 218
6.5.2 頁錯誤的定位 219
6.5.3 進程地址空間中的缺頁異常處理 220
6.5.4 請求調(diào)頁 221
6.5.5 寫時復(fù)制 223
6.5.6 對本節(jié)的幾點說明 225
6.6 交換機制 225
6.6.1 交換的基本原理 225
6.6.2 頁面交換守護進程kswapd 229
6.6.3 交換空間的數(shù)據(jù)結(jié)構(gòu) 233
6.6.4 交換空間的應(yīng)用 234
6.7 緩存和刷新機制 236
6.7.1 Linux使用的緩存 236
6.7.2 緩沖區(qū)高速緩存 237
6.7.3 翻譯后援存儲器(TLB) 240
6.7.4 刷新機制 242
6.8 進程的創(chuàng)建和執(zhí)行 245
6.8.1 進程的創(chuàng)建 245
6.8.2 程序執(zhí)行 252
6.8.3 執(zhí)行函數(shù) 255
第七章 進程間通信 263
7.1 管道 263
7.1.1 Linux管道的實現(xiàn)機制 264
7.1.2 管道的應(yīng)用 265
7.1.3 命名管道CFIFOC 267
7.2 信號(signal) 267
7.2.1 信號種類 268
7.2.2 信號掩碼 270
7.2.3 系統(tǒng)調(diào)用 271
7.2.4 典型系統(tǒng)調(diào)用的實現(xiàn) 272
7.2.5 進程與信號的關(guān)系 274
7.2.6 信號舉例 275
7.3 System V 的IPC機制 276
7.3.1 信號量 276
7.3.2 消息隊列 282
7.3.3 共享內(nèi)存 285
第八章 虛擬文件系統(tǒng) 289
8.1 概述 289
8.2 VFS中的數(shù)據(jù)結(jié)構(gòu) 292
8.2.1 超級塊 292
8.2.2 VFS的索引節(jié)點 295
8.2.3 目錄項對象 297
8.2.4 與進程相關(guān)的文件結(jié)構(gòu) 298
8.2.5 主要數(shù)據(jù)結(jié)構(gòu)間的關(guān)系 302
8.2.6 有關(guān)操作的數(shù)據(jù)結(jié)構(gòu) 302
8.3 高速緩存 308
8.3.1 塊高速緩存 308
8.3.2 索引節(jié)點高速緩存 312
8.3.3 目錄高速緩存 315
8.4 文件系統(tǒng)的注冊、安裝與卸載 316
8.4.1 文件系統(tǒng)的注冊 316
8.4.2 文件系統(tǒng)的安裝 319
8.4.3 文件系統(tǒng)的卸載 326
8.5 限額機制 326
8.6 具體文件系統(tǒng)舉例 328
8.6.1 管道文件系統(tǒng)pipefs 329
8.6.2 磁盤文件系統(tǒng)BFS 332
8.7 文件系統(tǒng)的系統(tǒng)調(diào)用 333
8.7.1 open 系統(tǒng)調(diào)用 333
8.7.2 read系統(tǒng)調(diào)用 335
8.7.3 fcntl 系統(tǒng)調(diào)用 336
8.8 Linux 2.4文件系統(tǒng)的移植問題 337
第九章 Ext2文件系統(tǒng) 343
9.1 基本概念 343
9.2 Ext2的磁盤布局和數(shù)據(jù)結(jié)構(gòu) 345
9.2.1 Ext2的磁盤布局 345
9.2.2 Ext2的超級塊 346
9.2.3 Ext2的索引節(jié)點 349
9.2.4 組描述符 352
9.2.5 位圖 353
9.2.6 索引節(jié)點表及實例分析 353
9.2.7 Ext2的目錄項及文件的定位 358
9.3 文件的訪問權(quán)限和安全 361
9.4 鏈接文件 363
9.5 分配策略 366
9.5.1 數(shù)據(jù)塊尋址 367
9.5.2 文件的洞 368
9.5.3 分配一個數(shù)據(jù)塊 369
第十章 模塊機制 373
10.1 概述 373
10.1.1 什么是模塊 373
10.1.2 為什么要使用模塊? 374
10.1.3 Linux 內(nèi)核模塊的優(yōu)缺點 374
10.2 實現(xiàn)機制 375
10.2.1 數(shù)據(jù)結(jié)構(gòu) 375
10.2.2 實現(xiàn)機制的分析 379
10.3 模塊的裝入和卸載 385
10.3.1 實現(xiàn)機制 385
10.3.2 如何插入和卸載模塊 386
10.4 內(nèi)核版本 387
10.4.1 內(nèi)核版本與模塊版本的兼容性 387
10.4.2 從版本2.0到2.2內(nèi)核API的變化 388
10.4.3 把內(nèi)核2.2移植到內(nèi)核2.4 392
10.5 編寫內(nèi)核模塊 400
10.5.1 簡單內(nèi)核模塊的編寫 401
10.5.2 內(nèi)核模塊的Makefiles文件 401
10.5.3 內(nèi)核模塊的多個文件 402
第十一章 設(shè)備驅(qū)動程序 405
11.1 概述 405
11.1.1 I/O軟件 405
11.1.2 設(shè)備驅(qū)動程序 407
11.2 設(shè)備驅(qū)動基礎(chǔ) 409
11.2.1 I/O端口 409
11.2.2 I/O接口及設(shè)備控制器 410
11.2.3 設(shè)備文件 411
11.2.4 VFS對設(shè)備文件的處理 413
11.2.5 中斷處理 413
11.2.6 驅(qū)動DMA工作 416
11.2.7 I/O空間的映射 417
11.2.8 設(shè)備驅(qū)動程序框架 419
11.3 塊設(shè)備驅(qū)動程序 420
11.3.1 塊設(shè)備驅(qū)動程序的注冊 420
11.3.2 塊設(shè)備基于緩沖區(qū)的數(shù)據(jù)交換 422
11.3.3 塊設(shè)備驅(qū)動程序的幾個函數(shù) 428
11.3.4 RAM 盤驅(qū)動程序的實現(xiàn) 432
11.3.5 硬盤驅(qū)動程序的實現(xiàn) 433
11.4 字符設(shè)備驅(qū)動程序 437
11.4.1 簡單字符設(shè)備驅(qū)動程序 437
11.4.2 字符設(shè)備驅(qū)動程序的注冊 438
11.4.3 一個字符設(shè)備驅(qū)動程序的實例 440
11.4.4 驅(qū)動程序的編譯與裝載 445
第十二章 網(wǎng)絡(luò) 447
12.1 概述 447
12.2 網(wǎng)絡(luò)協(xié)議 448
12.2.1 網(wǎng)絡(luò)參考模型 448
12.2.2 TCP/IP 協(xié)議工作原理及數(shù)據(jù)流 449
12.2.3 Internet 協(xié)議 449
12.2.4 TCP協(xié)議 450
12.3 套接字(socket) 452
12.3.1 套接字在網(wǎng)絡(luò)中的地位和作用 452
12.3.2 套接字接口的種類 453
12.3.3 套接字的工作原理 454
12.3.4 socket 的通信過程 456
12.3.5 socket為用戶提供的系統(tǒng)調(diào)用 460
12.4 套接字緩沖區(qū)(sk_buff) 461
12.4.1 套接字緩沖區(qū)的特點 461
12.4.2 套接字緩沖區(qū)操作基本原理 461
12.4.3 sk_buff數(shù)據(jù)結(jié)構(gòu)的核心內(nèi)容 463
12.4.4 套接字緩沖區(qū)提供的函數(shù) 465
12.4.5 套接字緩沖區(qū)的上層支持例程 467
12.5 網(wǎng)絡(luò)設(shè)備接口 468
12.5.1 基本結(jié)構(gòu) 468
12.5.2 命名規(guī)則 469
12.5.3 設(shè)備注冊 469
12.5.4 網(wǎng)絡(luò)設(shè)備數(shù)據(jù)結(jié)構(gòu) 470
12.5.5 支持函數(shù) 473
第十三章 Linux啟動系統(tǒng) 477
13.1 初始化流程 477
13.1.1 系統(tǒng)加電或復(fù)位 478
13.1.2 BIOS啟動 478
13.1.3 Boot Loader 479
13.1.4 操作系統(tǒng)的初始化 479
13.2 初始化的任務(wù) 479
13.2.1 處理器對初始化的影響 479
13.2.2 其他硬件設(shè)備對處理器的影響 480
13.3 Linux的Boot Loader 480
13.3.1 軟盤的結(jié)構(gòu) 480
13.3.2 硬盤的結(jié)構(gòu) 481
13.3.3 Boot Loader 481
13.3.4 LILO 482
13.3.5 LILO的運行分析 485
13.4 進入操作系統(tǒng) 487
13.4.1 Setup.S 487
13.4.2 Head.S 488
13.5 main.c中的初始化 491
13.6 建立init進程 495
13.6.1 init進程的建立 495
13.6.2 啟動所需的Shell腳本文件 497
附錄A Linux內(nèi)核API 501
附錄B 在線文檔 529
參考文獻 531
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載