第1章 Linux進程管理
1.1 進程和進程控制塊
1.1.1 調度數據成員
1.1.2 信號處理
1.1.3 進程隊列指針
1.1.4 進程標識
1.1.5 時間數據成員
1.1.6 信號量數據成員
1.1.7 文件系統(tǒng)數據成員
1.1.8 內存數據成員
1.1.9 頁面管理
1.1.10 支持對稱多處理器方式時的數據成員
1.1.11 其他數據成員
1.1.12 進程隊列的全局變量
1.2 進程狀態(tài)和進程標志
1.3 list_head鏈表
1.4 進程調度
1.5 等待隊列及其操作
1.6 中斷與定時服務
1.6.1 中斷機制
1.6.2 定時服務
1.7 bottom half
1.8 tasklet與softirq
1.9 任務隊列
1.10 原于操作
1.11 自旋鎖
1.12 信號量
1.13 系統(tǒng)調用
1.13.1 與系統(tǒng)調用有關的數據結構和函數
1.13.2 進程的系統(tǒng)調用命令是如何轉換為INT0x80中斷請求的
1.13.3 系統(tǒng)調用功能模塊的初始化
1.13.4 Linux內部是如何分別為各種系統(tǒng)調用服務的
1.13.5 ret_from_sys_call
1.14 進程的創(chuàng)建和終止
1.15 程序的裝入和執(zhí)行
第2章 Linux存儲管理
2.1 I386體系結構對存儲管理的硬件支持
2.1.1 80386分段機制及在Linux中的應用
2.1.2 80386分頁機制
2.2 Linux的分頁管理
2.3 虛存段的組織和管理
2.3.1 建立映射
2.3.2 撤銷映射
2.3.3 修改映射
2.4 內存的加鋇和保護
2.4.1 內存加鎖
2.4.2 內存保護
2.5 Linux的AVL樹
2.6 物理空間管理
2.7 空閑物理內存管理
2.7.1 申請分配物理頁面的操作
2.7.2 釋放物理頁面的操作
2.8 slab
2.8.1 緩存區(qū)的創(chuàng)建與銷毀操作
2.8.2 緩存區(qū)的收縮與增長操作
2.8.3 對象的分配與釋放操作
2.9 內核態(tài)內存的申請與釋放kmalloc/kfree
2.9.1 內核態(tài)內存的申請
2.9.2 內核態(tài)內存的釋放
2.10 用戶態(tài)內存的申請與釋放vmalloc/vfree
2.10.1 用戶態(tài)內存的申請
2.10.2 用戶態(tài)內存的釋放
2.11 交換空間
2.12 頁交換進程和頁面換出
2.13 缺頁中斷和頁面換人
2.14 存儲管理系統(tǒng)的緩沖機制
2.14.1 Swap緩沖
2.14.2 頁緩沖
第3章 Linux文件系統(tǒng)管理
3.1 文件系統(tǒng)管理
3.1.1 register/unregister操作
3.1.2 mount操作
3.2 虛擬文件系統(tǒng)
3.2.1 VFS超級塊
3.2.2 超級塊的操作函數
3.2.3 read_super操作
3.2.4 VFSinode
3.2.5 inode的操作函數
3.2.6 VFSinode緩存
3.2.7 iget/iput操作
3.3 路徑定位
3.3.1 定位操作
3.3.2 VFSdirectory緩存
3.4 打開文件表
3.4.1 系統(tǒng)打開文件表
3.4.2 進程打開文件表
3.4.3 操作已打開的文件
3.5 文件共享與文件鎖
3.6 EXT2文件系統(tǒng)
3.6.1 EXT2的超級塊
3.6.2 EXT2的組描述符
3.6.3 EXT2的inode
3.6.4 文件擴展時的數據塊分配策略
3.7 open操作和close操作
3.8 緩沖區(qū)緩存
3.8.1 緩沖區(qū)相關數據結構
3.8.2 緩沖區(qū)操作函數
3.8.3 尋找緩沖區(qū)
第4章 Linux設備管理
4.1 概述
4.1.1 設備管理概述
4.1.2 與外設的數據交流方式
4.1.3 字符設備與塊設備
4.1.4 主設備號和次設備號
4.1.5 本章內容分配
4.2 設備文件
4.2.1 基本設備文件的設備訪問流程
4.2.2 設備驅動程序接口
4.2.3 塊設備文件接口
4.2.4 def_blk_fops中的函數分析
4.3 傳統(tǒng)方式下的設備注冊與管理
4.3.1 字符設備管理
4.3.2 塊設備管理的相關結構與變量
4.3.3 blkdevs[]的設置
4.3.4 blk_dev[]的設置
4.4 devfs注冊與管理
4.4.1 設備文件系統(tǒng)的基本概念
4.4.2 采用devfs的原因
4.4.3 啟用設備文件系統(tǒng)
4.4.4 如何使傳統(tǒng)管理方式依然有效
4.4.5 內核實現綜述
4.4.6 核心結構與變量
4.4.7 devfs節(jié)點注冊函數
4.4.8 編寫采用devfs的設備驅動程序
4,5 塊設備的請求隊列
4.5.1 相關結構及請求隊列的初始化
4.5.2 block_read()提交請求的過程
4.5.3 ll_rw_block()函數分析
4.5.4 submit_bh()與generic_make_re-quest()
4.5.5 _make_request()函數分析
4.6 ioctl
4.6.1 構造ioctl命令字
4.6.2 ioctl的實現過程
4.6.3 ioctl的上層處理函數
4.6.4 ioctl的底層處理函數
4.7 I/O端口的資源分配與操作
4.7.1 I/O端口概述
4.7.2 Linux系統(tǒng)中的I/O空間分配
4.7.3 端口操作函數
4.8 其他輔助管理功能
4.8.1 中斷處理
4.8.2 電源管理
4.8.3 緩沖區(qū)管理
4.9 字符設備驅動程序的實現
4.9.1 分析設備功能
4.9.2 編寫file_operations結構中的操控函數
4.9.3 字符設備注冊及初始化
4.9.4 設備的使用
4.9.5 驅動程序編寫實例
4.10 塊設備驅動程序的實現
4.10.1 設備功能
4.10.2 編寫塊設備的函數接口fops
4.10.3 設備接口注冊與初始化
第5章 Linux系統(tǒng)初始化
5.1 系統(tǒng)引導
5.2 其他引導方法
5.3 實模式下的系統(tǒng)初始化
5.4 保護模式下的系統(tǒng)初始化
5.4.1 初始化寄存器與數據區(qū)
5.4.2 核心代碼解壓縮
5.4.3 頁表初始化
5.4.4 初始化idt、gdt和ldt
5.4.5 啟動核心
5.5 啟動核心(init/main.c)
5.6 init進程及系統(tǒng)配置(init/main.c)
5.6.1 init進程的執(zhí)行流程
5.6.2 可執(zhí)行文件init
5.7 Linux源程序的目錄分布
5.7.1 kernel目錄
5.7.2 mm目錄
5.7.3 fs目錄
5.7.4 arch目錄
5.7.5 include目錄
5.7.6 net目錄
第6章 Linux網絡實現
6.1 概述
6.2 基本數據結構
6.2.1 數據包結構
6.2.2 連接
6.2.3 協(xié)議操作集合
6.2.4 網絡設備接口數據結構
6.2.5 路由
6.2.6 地址結構
6.3 網絡系統(tǒng)初始化
6.3.1 整個網絡系統(tǒng)啟動
6.3.2 協(xié)議初始化
6.3.3 路由初始化
6.3.4 網絡接口設備初始化
6.4 網絡設備驅動程序
6.4.1 網絡設備接口初始化函數
6.4.2 設備打開和關閉
6.4.3 接收數據分析
6.4.4 發(fā)送數據分析
6.5 網絡連接
6.5.1 連接的建立和關閉
6.5.2 數據發(fā)送
6.5.3 數據接收
6.6 路由過程
6.6.1 發(fā)送路由
6.6.2 接收路由
第7章 Linux的模塊
7.1 模塊編程
7.1.1 模塊編程基本接口
7.1.2 內核空間和用戶空間
7.1.3 內核符號表
7.1.4 模塊的使用
7.2 模塊機制內核分析
7.2.1 數據結構
7.2.2 模塊實現分析
7.3 模塊和/proc文件系統(tǒng)
7.3.1 初始化
7.3.2 支持函數
7.4 modutils介紹
7.4.1 insmod
7.4.2 rmmod
7.4.3 lsmod
7.4.4 modprlbe
7.5 kmod
7.5.1 從kerneld到Kmod
7.5.2 kmod的實現
第8章 Linux內核源代碼的調試
8.1 調試機制
8.1.1 斷點
8.1.2 信號
8.1.3 單步運行
8.1.4 系統(tǒng)調用的調試
8.1.5 暫時中斷后的繼續(xù)處理
8.2 i386提供的調試機制
8.2.1 調試斷點的分類
8.2.2 調試寄存器的結構
8.2.3 斷點地址
8.2.4 Linux調試處理
8.3 ptrace()系統(tǒng)調用
8.3.1 數據結構
8.3.2 用戶空間ptrace()系統(tǒng)調用的使用
8.3.3 ptrace調用分析
8.3.4 ptrace()調用機制及流程
8.4 /proc文件系統(tǒng)
8.4.1 /proc文件系統(tǒng)在調試中的作用
8.4.2 /proc文件系統(tǒng)實現分析
8.5 內核參數動態(tài)更改
8.5.1 數據結構
8.5.2 /proc/sys方式
8.5.3 sysctl系統(tǒng)調用方式
8.6 內核調試環(huán)境
8.6.1 內核調試的手段
8.6.2 遠程方式在內核調試中的地位
8.6.3 Kgdb的使用
8.6.4 Kgdb的實現分析