《Linux內核精析》作者長期從事Linux系統特別是嵌入式系統產品的研發,積累了豐富的經驗。書中全面、系統、深入地介紹了Linux,對Linux內核進行了深度的剖析。全書共15章,包括概述、Linux內核啟動、進程、進程地址空間、進程的調度、內存管理、進程間通信、系統調用、內核同步、設備驅動程序、中斷、時鐘、文件系統、ext文件系統和內核模塊。每一章的內容都深入淺出,文字和程序相結合,每一部分的說明都比較詳細,盡可能讓讀者看得懂、能理解。
《Linux內核精析》可作為Linux操作系統的教學參考書、嵌入式專業學生的教材或參考書,也可供Linux操作系統讀者自學和Linux產品開發者參考。
Linux是完全免費、開放、跨平臺的操作系統,越來越受到開發商和廣大師生、讀者及開發者的青睞。特別是嵌入式浪潮的出現,使學習Linux成為時尚。
一個典型的Linux發行版包括Linux內核、GNU程序庫和工具,Linux的發行版本與內核版本號是相互獨立的,Linux的發行版本號隨發布者的不同而不同。
學習Linux的關鍵在于對內核的理解和把握,全面、系統、深入介紹Linux和對Linux內核進行深度剖析的書就成為必需。本書的作者長期從事Linux系統特別是嵌入式系統產品的研發,積累了豐富的經驗。
本書共15章,包括概述、Linux內核啟動、進程、進程地址空間、進程的調度、內存管理、進程間通信、系統調用、內核同步、設備驅動程序、中斷、時鐘、文件系統、ext文件系統和內核模塊。每一章的內容都深入淺出,文字和程序相結合,每一部分的說明都比較詳細,盡可能讓讀者看得懂、能理解。
本書由南京師范大學鄭阿奇主編、孫承龍編著。參加本書編寫的還有梁敬東、顧韻華、王洪元、劉啟芬、丁有和、曹弋、徐文勝、殷紅先、張為民、姜乃松、彭作民、高茜、陳冬霞、錢曉軍、朱毅華、時躍華、周何駿、趙青松、周淑琴、陳金輝、李含光、王一莉、徐斌、王志瑞、孫德榮、周怡明、劉博宇、鄭進、劉毅、陳杰、劉友春等。
本書配有光盤1張,內含教學課件和教學、學習、開發參考源文件,其中:
arch目錄中包含與體系結構相關的核心代碼。每一個子目錄為一種支持的體系結構,其中包含該體系結構的板級通用驅動。讀者一般只需關注arch\x86子目錄內容。
include文件夾包括編譯核心所需要的大部分頭文件。與平臺無關的頭文件在include/linux子目錄下。
mm目錄包括所有獨立于CPU體系結構的內存管理代碼。
kernel目錄包括主要的核心代碼文件,它實現了大多數Linux系統的內核函數。
drivers目錄包含系統所有的設備驅動程序。
對于Windows平臺,可以使用Source Insight工具新建工程加載代碼、方便代碼跟蹤;對于Linux平臺,可以使用Kscope等工具。
由于作者水平有限,不當之處在所難免,懇請讀者批評指正。
編者
2013年1月
第1章 概述
1.1 Linux的內存管理機制
1.2 Linux的基本組成
1.2.1 進程
1.2.2 進程間通信
1.2.3 內存管理
1.2.4 設備驅動
1.2.5 中斷
1.2.6 時鐘
1.2.7 文件系統
1.2.8 內核模塊
1.3 本章小結
第2章 Linux內核啟動
2.1 BOIS啟動階段
2.2 實模式setup階段
2.3 保護模式startup_32階段
2.4 內核啟動start_kernel
2.5 本章小結
第3章 進程
3.1 進程的表示
3.1.1 進程描述符
3.1.2 命名空間
3.1.3 進程標識
3.2 進程關系
3.3 進程的復制
3.3.1 寫時復制
3.3.2 執行系統調用
3.4 新進程啟動
3.5 進程的切換
3.6 進程的退出
3.7 本章小結
第4章 進程地址空間
4.1 進程虛擬地址空間
4.1.1 進程地址空間的布局
4.1.2 進程地址空間布局的創建
4.2 線性區
4.2.1 虛擬內存區域的表示
4.2.2 虛擬內存區域的操作
4.2.3 缺頁的異常處理
4.2.4 堆的管理
4.3 本章小結
第5章 進程的調度
5.1 數據結構
5.1.1 調度器類
5.1.2 就緒隊列
5.1.3 調度實體
5.2 進程優先級
5.2.1 優先級內核表示
5.2.2 優先級的計算
5.2.3 計算負荷權重
5.2.4 核心調度器
5.3 CFS調度器
5.3.1 CFS調度器對象
5.3.2 CFS調度器的管理結構
5.3.3 CFS調度器操作
5.3.4 CFS隊列操作
5.3.5 周期性調度器
5.3.6 進程加入就緒隊列
5.3.7 選擇下一個進程
5.3.8 喚醒進程
5.3.9 新進程處理
5.4 實時調度類
5.4.1 實時進程的數據結構
5.4.2 實時調度器操作
5.5 本章小結
第6章 內存管理
6.1 內存管理的框架
6.1.1 非一致內存訪問(NUMA)
6.1.2 內存管理區
6.1.3 物理內存地址空間
6.2 內存管理初始化
6.2.1 建立數據結構
6.2.2 啟動過程內存管理的初始化
6.2.3 頁表的初始化
6.2.4 內存管理結構的初始化
6.3 伙伴算法
6.3.1 伙伴算法初始化與釋放
6.3.2 內存分配API
6.3.3 內核中不連續頁的分配
6.3.4 內核映射
6.4 slab分配器
6.4.1 slab分配器的原理
6.4.2 slab分配器的實現
6.4.3 通用對象
6.5 slub分配器
6.5.1 slub分配器的原理
6.5.2 slub分配器的初始化
6.5.3 slub內存的分配
6.5.4 slub內存的釋放
6.6 本章小結
第7章 進程間通信
7.1 管道
7.1.1 管道相關的數據結構
7.1.2 管道的創建
7.1.3 管道的撤銷
7.1.4 向管道寫入數據
7.1.5 從管道讀取數據
7.2 FIFO
7.3 System V IPC
7.3.1 IPC信號量
7.3.2 消息隊列
7.3.3 共享內存
7.4 信號
7.4.1 信號發送
7.4.2 信號傳遞與捕獲
7.5 本章小結
第8章 系統調用
8.1 系統調用簡介
8.2 系統調用的實現
8.3 系統調用的參數傳遞
8.4 異常表
8.5 本章小結
第9章 內核同步
9.1 原子操作
9.2 自旋鎖
9.3 讀/寫自旋鎖
9.4 信號量
9.5 RCU機制
9.6 屏障
9.7 互斥量
9.8 本章小結
第10章 設備驅動程序
10.1 I/O體系結構
10.2 設備文件
10.2.1 字符設備、塊設備和其他設備
10.2.2 主、從設備號的表示
10.3 字符設備注冊
10.3.1 數據結構
10.3.2 字符設備的注冊過程
10.4 與文件系統關聯
10.4.1 inode中的設備文件成員
10.4.2 標準文件操作
10.5 字符設備操作
10.5.1 字符設備的表示
10.5.2 打開設備文件
10.6 塊設備操作
10.6.1 塊設備的處理
10.6.2 塊設備的表示
10.6.3 向系統添加硬盤和分區
10.6.4 請求結構
10.6.5 BIO
10.6.6 提交請求
10.6.7 I/O調度
10.7 資源分配
10.7.1 資源管理
10.7.2 I/O內存
10.8 總線系統
10.8.1 通用驅動程序模型
10.8.2 PCI總線
10.8.3 USB總線
10.9 本章小結
第11章 中斷
11.1 中斷處理與中斷描述符
11.2 中斷的初始化
11.3 中斷請求隊列的初始化
11.4 中斷的處理
11.5 中斷與異常的返回
11.6 軟中斷
11.7 tasklet
11.8 工作隊列
11.9 本章小結
第12章 時鐘
12.1 低分辨率定時器
12.1.1 數據結構
12.1.2 動態定時器
12.2 通用時鐘框架
12.2.1 clocksource概述
12.2.2 clocksource操作
12.2.3 tickless機制
12.3 高分辨率定時器
12.3.1 高分辨率定時器管理結構
12.3.2 高分辨率定時器的初始化
12.3.3 高分辨率定時器操作
12.3.4 高分辨率定時器的實現
12.3.5 動態時鐘
12.4 時鐘中斷處理
12.5 軟件定時器
12.5.1 軟件定時器的初始化
12.5.2 軟件定時器的注冊與處理
12.6 本章小結
第13章 文件系統
13.1 虛擬文件系統管理
13.2 通用文件模型
13.2.1 VFS的超級塊對象
13.2.2 VFS的inode結構
13.2.3 VFS的文件對象
13.2.4 VFS的目錄對象
13.2.5 與進程相關的文件
13.3 文件的類型
13.3.1 磁盤文件
13.3.2 網絡文件
13.3.3 特殊文件
13.4 虛擬文件系統處理
13.4.1 文件系統類型注冊
13.4.2 文件系統的掛載
13.4.3 文件系統的卸載
13.4.4 路徑定位
13.4.5 文件的打開與關閉
13.4.6 文件的讀/寫
13.5 proc文件系統
13.5.1 數據結構
13.5.2 proc文件系統的初始化
13.5.3 安裝proc文件系統
13.5.4 proc數據項管理
13.6 sysfs文件系統
13.6.1 數據結構
13.6.2 安裝sysfs文件系統
13.6.3 文件與目錄的操作
13.7 本章小結
第14章 ext文件系統
14.1 簡介
14.2 ext2文件系統的物理結構
14.3 ext2文件系統的數據結構
14.3.1 超級塊
14.3.2 組描述符
14.3.3 索引節點表
14.3.4 目錄和文件
14.3.5 ext2文件系統內存中的結構
14.4 ext2文件系統操作
14.5 ext2磁盤空間管理
14.5.1 創建索引節點inode
14.5.2 刪除索引節點inode
14.5.3 釋放數據塊
14.6 ext3文件系統
14.7 本章小結
第15章 內核模塊
15.1 模塊的實現
15.1.1 模塊的表示
15.1.2 模塊的依賴關系
……