出版時(shí)間:2002-8 出版社:人民郵電出版社 作者:陳莉君 頁(yè)數(shù):531 字?jǐn)?shù):831
Tag標(biāo)簽:無
內(nèi)容概要
自由軟件Linux 操作系統(tǒng)源代碼的開放,為我們掌握操作系統(tǒng)核心技術(shù)提供了良好的條件。本書共分13章,對(duì)Linux 內(nèi)核2.4版的源代碼進(jìn)行了較全面的分析,既包括對(duì)中斷機(jī)制、進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程間通信、虛擬文件系統(tǒng)、設(shè)備驅(qū)動(dòng)程序及網(wǎng)絡(luò)子系統(tǒng)的分析,也包括對(duì)Linux 整體結(jié)構(gòu)的把握、Linux的啟動(dòng)過程的分析及Linux獨(dú)具特色的模塊機(jī)制的分析與應(yīng)用等。其中重點(diǎn)剖析了Linux內(nèi)核中最基礎(chǔ)的部分:進(jìn)程管理、內(nèi)存管理及文件管理。
本書對(duì)于那些準(zhǔn)備進(jìn)入Linux 操作系統(tǒng)內(nèi)部,閱讀Linux 內(nèi)核源代碼以及在內(nèi)核級(jí)進(jìn)行程序開發(fā)的讀者具有非常高的參考價(jià)值。同時(shí),操作系統(tǒng)實(shí)現(xiàn)者、系統(tǒng)程序員、Linux應(yīng)用開發(fā)人員、嵌入式系統(tǒng)開發(fā)人員、系統(tǒng)管理員、在校的大學(xué)生和研究生及對(duì)Linux感興趣的用戶均可在閱讀本書中受益。
書籍目錄
第一章 走進(jìn)Linux 1
1.1 GNU與Linux的成長(zhǎng) 1
1.2 Linux的開發(fā)模式和運(yùn)作機(jī)制 2
1.3 走進(jìn)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 有助于計(jì)算機(jī)科學(xué)的教學(xué)和科研 9
1.5 Linux內(nèi)核結(jié)構(gòu) 9
1.5.1 Linux內(nèi)核在整個(gè)操作系統(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平臺(tái)下的源代碼閱讀工具(Source Insight) 17
第二章 Linux運(yùn)行的硬件基礎(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)試寄存器和測(cè)試寄存器 24
2.2 內(nèi)存地址 25
2.3 段機(jī)制和描述符 26
2.3.1 段機(jī)制 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 分頁(yè)機(jī)制 34
2.4.1 分頁(yè)機(jī)構(gòu) 36
2.4.2 頁(yè)面高速緩存 39
2.5 Linux中的分頁(yè)機(jī)制 40
2.5.1 與頁(yè)相關(guān)的數(shù)據(jù)結(jié)構(gòu)及宏的定義 41
2.5.2 對(duì)頁(yè)目錄及頁(yè)表的處理 42
2.6 Linux中的匯編語(yǔ)言 44
2.6.1 AT&T與Intel匯編語(yǔ)言的比較 44
2.6.2 AT&T匯編語(yǔ)言的相關(guān)知識(shí) 46
2.6.3 gcc嵌入式匯編 49
2.6.4 Intel386匯編指令摘要 52
第三章 中斷機(jī)制 55
3.1 中斷基本知識(shí) 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 中斷請(qǐng)求隊(duì)列的初始化 70
3.3.3 中斷請(qǐng)求隊(duì)列的數(shù)據(jù)結(jié)構(gòu) 70
3.4 中斷處理 77
3.4.1 中斷和異常處理的硬件處理。 77
3.4.2 Linux對(duì)中斷的處理 78
3.4.3 與堆棧有關(guān)的常量、數(shù)據(jù)結(jié)構(gòu)及宏 79
3.4.4 中斷處理程序的執(zhí)行 81
3.4.5 從中斷返回 85
3.5 中斷的后半部分處理機(jī)制 86
3.5.1 為什么把中斷分為兩部分來處理 86
3.5.2 實(shí)現(xiàn)機(jī)制 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
第四章 進(jìn)程描述 97
4.1 進(jìn)程和程序(Process and Program) 97
4.2 Linux中的進(jìn)程概述 99
4.3 task_struct結(jié)構(gòu)描述 100
4.4 task_struct結(jié)構(gòu)在內(nèi)存中的存放 107
4.4.1 進(jìn)程內(nèi)核?!?07
4.4.2 當(dāng)前進(jìn)程(current宏) 108
4.5 進(jìn)程組織方式 109
4.5.1 哈希表 109
4.5.2 雙向循環(huán)鏈表 110
4.5.3 運(yùn)行隊(duì)列 111
4.5.4 進(jìn)程的運(yùn)行隊(duì)列鏈表 111
4.5.5 等待隊(duì)列 112
4.6 內(nèi)核線程 115
4.7 進(jìn)程的權(quán)能 116
4.8 內(nèi)核同步 117
4.8.1 信號(hào)量 118
4.8.2 原子操作 118
4.8.3 自旋鎖、讀寫自旋鎖和大讀者自旋鎖 119
第五章 進(jìn)程調(diào)度與切換 123
5.1 Linux時(shí)間系統(tǒng) 123
5.1.1 時(shí)鐘硬件 123
5.1.2 時(shí)鐘運(yùn)作機(jī)制 124
5.1.3 Linux時(shí)間基準(zhǔn) 125
5.1.4 Linux的時(shí)間系統(tǒng) 126
5.2 時(shí)鐘中斷 126
5.2.1 時(shí)鐘中斷的產(chǎn)生 126
5.2.2 Linux實(shí)現(xiàn)時(shí)鐘中斷的全過程 127
5.3 Linux的調(diào)度程序-Schedule( ) 131
5.3.1 基本原理 132
5.3.2 Linux進(jìn)程調(diào)度時(shí)機(jī) 133
5.3.3 進(jìn)程調(diào)度的依據(jù) 135
5.3.4 進(jìn)程可運(yùn)行程度的衡量 136
5.3.5 進(jìn)程調(diào)度的實(shí)現(xiàn) 137
5.4 進(jìn)程切換 139
5.4.1 硬件支持 139
5.4.2 進(jìn)程切換 142
第六章 Linux內(nèi)存管理 147
6.1 Linux的內(nèi)存管理概述 147
6.1.1 Linux虛擬內(nèi)存的實(shí)現(xiàn)結(jié)構(gòu) 148
6.1.2 內(nèi)核空間和用戶空間 149
6.1.3 虛擬內(nèi)存實(shí)現(xiàn)機(jī)制間的關(guān)系 151
6.2 Linux 內(nèi)存管理的初始化 152
6.2.1 啟用分頁(yè)機(jī)制 152
6.2.2 物理內(nèi)存的探測(cè) 157
6.2.3 物理內(nèi)存的描述 163
6.2.4 頁(yè)面管理機(jī)制的初步建立 166
6.2.5 頁(yè)表的建立 173
6.2.6 內(nèi)存管理區(qū) 177
6.3 內(nèi)存的分配和回收 185
6.3.1 伙伴算法 186
6.3.2 物理頁(yè)面的分配和釋放 187
6.3.3 Slab分配機(jī)制 194
6.3.4 內(nèi)核空間非連續(xù)內(nèi)存區(qū)的管理 201
6.4 地址映射機(jī)制 204
6.4.1 描述虛擬空間的數(shù)據(jù)結(jié)構(gòu) 205
6.4.2 進(jìn)程的虛擬空間 209
6.4.3 內(nèi)存映射 212
6.5 請(qǐng)頁(yè)機(jī)制 218
6.5.1 頁(yè)故障的產(chǎn)生 218
6.5.2 頁(yè)錯(cuò)誤的定位 219
6.5.3 進(jìn)程地址空間中的缺頁(yè)異常處理 220
6.5.4 請(qǐng)求調(diào)頁(yè) 221
6.5.5 寫時(shí)復(fù)制 223
6.5.6 對(duì)本節(jié)的幾點(diǎn)說明 225
6.6 交換機(jī)制 225
6.6.1 交換的基本原理 225
6.6.2 頁(yè)面交換守護(hù)進(jìn)程kswapd 229
6.6.3 交換空間的數(shù)據(jù)結(jié)構(gòu) 233
6.6.4 交換空間的應(yīng)用 234
6.7 緩存和刷新機(jī)制 236
6.7.1 Linux使用的緩存 236
6.7.2 緩沖區(qū)高速緩存 237
6.7.3 翻譯后援存儲(chǔ)器(TLB) 240
6.7.4 刷新機(jī)制 242
6.8 進(jìn)程的創(chuàng)建和執(zhí)行 245
6.8.1 進(jìn)程的創(chuàng)建 245
6.8.2 程序執(zhí)行 252
6.8.3 執(zhí)行函數(shù) 255
第七章 進(jìn)程間通信 263
7.1 管道 263
7.1.1 Linux管道的實(shí)現(xiàn)機(jī)制 264
7.1.2 管道的應(yīng)用 265
7.1.3 命名管道CFIFOC 267
7.2 信號(hào)(signal) 267
7.2.1 信號(hào)種類 268
7.2.2 信號(hào)掩碼 270
7.2.3 系統(tǒng)調(diào)用 271
7.2.4 典型系統(tǒng)調(diào)用的實(shí)現(xiàn) 272
7.2.5 進(jìn)程與信號(hào)的關(guān)系 274
7.2.6 信號(hào)舉例 275
7.3 System V 的IPC機(jī)制 276
7.3.1 信號(hào)量 276
7.3.2 消息隊(duì)列 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 超級(jí)塊 292
8.2.2 VFS的索引節(jié)點(diǎn) 295
8.2.3 目錄項(xiàng)對(duì)象 297
8.2.4 與進(jìn)程相關(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é)點(diǎn)高速緩存 312
8.3.3 目錄高速緩存 315
8.4 文件系統(tǒng)的注冊(cè)、安裝與卸載 316
8.4.1 文件系統(tǒng)的注冊(cè) 316
8.4.2 文件系統(tǒng)的安裝 319
8.4.3 文件系統(tǒng)的卸載 326
8.5 限額機(jī)制 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的超級(jí)塊 346
9.2.3 Ext2的索引節(jié)點(diǎn) 349
9.2.4 組描述符 352
9.2.5 位圖 353
9.2.6 索引節(jié)點(diǎn)表及實(shí)例分析 353
9.2.7 Ext2的目錄項(xiàng)及文件的定位 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 分配一個(gè)數(shù)據(jù)塊 369
第十章 模塊機(jī)制 373
10.1 概述 373
10.1.1 什么是模塊 373
10.1.2 為什么要使用模塊? 374
10.1.3 Linux 內(nèi)核模塊的優(yōu)缺點(diǎn) 374
10.2 實(shí)現(xiàn)機(jī)制 375
10.2.1 數(shù)據(jù)結(jié)構(gòu) 375
10.2.2 實(shí)現(xiàn)機(jī)制的分析 379
10.3 模塊的裝入和卸載 385
10.3.1 實(shí)現(xiàn)機(jī)制 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 簡(jiǎn)單內(nèi)核模塊的編寫 401
10.5.2 內(nèi)核模塊的Makefiles文件 401
10.5.3 內(nèi)核模塊的多個(gè)文件 402
第十一章 設(shè)備驅(qū)動(dòng)程序 405
11.1 概述 405
11.1.1 I/O軟件 405
11.1.2 設(shè)備驅(qū)動(dòng)程序 407
11.2 設(shè)備驅(qū)動(dòng)基礎(chǔ) 409
11.2.1 I/O端口 409
11.2.2 I/O接口及設(shè)備控制器 410
11.2.3 設(shè)備文件 411
11.2.4 VFS對(duì)設(shè)備文件的處理 413
11.2.5 中斷處理 413
11.2.6 驅(qū)動(dòng)DMA工作 416
11.2.7 I/O空間的映射 417
11.2.8 設(shè)備驅(qū)動(dòng)程序框架 419
11.3 塊設(shè)備驅(qū)動(dòng)程序 420
11.3.1 塊設(shè)備驅(qū)動(dòng)程序的注冊(cè) 420
11.3.2 塊設(shè)備基于緩沖區(qū)的數(shù)據(jù)交換 422
11.3.3 塊設(shè)備驅(qū)動(dòng)程序的幾個(gè)函數(shù) 428
11.3.4 RAM 盤驅(qū)動(dòng)程序的實(shí)現(xiàn) 432
11.3.5 硬盤驅(qū)動(dòng)程序的實(shí)現(xiàn) 433
11.4 字符設(shè)備驅(qū)動(dòng)程序 437
11.4.1 簡(jiǎn)單字符設(shè)備驅(qū)動(dòng)程序 437
11.4.2 字符設(shè)備驅(qū)動(dòng)程序的注冊(cè) 438
11.4.3 一個(gè)字符設(shè)備驅(qū)動(dòng)程序的實(shí)例 440
11.4.4 驅(qū)動(dòng)程序的編譯與裝載 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ū)的特點(diǎn) 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è)備注冊(cè) 469
12.5.4 網(wǎng)絡(luò)設(shè)備數(shù)據(jù)結(jié)構(gòu) 470
12.5.5 支持函數(shù) 473
第十三章 Linux啟動(dòng)系統(tǒng) 477
13.1 初始化流程 477
13.1.1 系統(tǒng)加電或復(fù)位 478
13.1.2 BIOS啟動(dòng) 478
13.1.3 Boot Loader 479
13.1.4 操作系統(tǒng)的初始化 479
13.2 初始化的任務(wù) 479
13.2.1 處理器對(duì)初始化的影響 479
13.2.2 其他硬件設(shè)備對(duì)處理器的影響 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的運(yùn)行分析 485
13.4 進(jìn)入操作系統(tǒng) 487
13.4.1 Setup.S 487
13.4.2 Head.S 488
13.5 main.c中的初始化 491
13.6 建立init進(jìn)程 495
13.6.1 init進(jìn)程的建立 495
13.6.2 啟動(dòng)所需的Shell腳本文件 497
附錄A Linux內(nèi)核API 501
附錄B 在線文檔 529
參考文獻(xiàn) 531
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載