深刻分析Linux內核源碼oss.org.cn/kernel-book/

本html頁面地址: http://oss.org.cn/kernel-book/

深刻分析 Linux 內核源碼

前言        html

第一章 走進linuxlinux

1.1 GNU與Linux的成長算法

1.2 Linux的開發模式和運做機制緩存

1.3走進Linux內核安全

           1.3.1 Linux內核的特徵網絡

         1.3.2 Linux內核版本的變化數據結構

1.4 分析Linux內核的意義框架

        1.4.1 開發適合本身的操做系統socket

        1.4.2 開發高水平軟件函數

        1.4.3 有助於計算機科學的教學和科研

1.5 Linux內核結構

        1.5.1  Linux內核在整個操系統中的位置

        1.5.2 Linux內核的做用

        1.5.3 Linux內核的抽象結構

1.6 Linux內核源代碼

       1.6.1 多版本的內核源代碼

       1.6.2  Linux內核源代碼的結構

       1.6.3 從何處開始閱讀源代碼

1.7 Linux內核源代碼分析工具

       1.7.1 Linux超文本交叉代碼檢索工具

       1.7.2 Windows平臺下的源代碼閱讀工具Source Insight

第二章 Linux運行的硬件基礎

2.1  i386的寄存器

       2.1.1通用寄存器

       2.1.2段寄存器      

       2.1.3狀態和控制寄存器

       2.1.4 系統地址寄存器

       2.1.5 調試寄存器和測試寄存器

2.2 內存地址

2.3 段機制和描述符

2.3.1 段機制

2.3.2  描述符的概念

2.3.3系統段描述符

2.3.4 描述符表

2.3.5 選擇符與描述符表寄存器

2.3.6 描述符投影寄存器

2.3.7 Linux中的段

   2.4 分頁機制

2.4.1 分頁機構

2.4.2頁面高速緩存

2.5 Linux中的分頁機制 

2.5.1 與頁相關的數據結構及宏的定義

2.5.2 對頁目錄及頁表的處理

2.6 Linux中的彙編語言

2.6.1 AT&T與Intel彙編語言的比較

2.6.2 AT&T彙編語言的相關知識

2.6.3 Gcc嵌入式彙編

2.6.4 Intel386彙編指令摘要

 

第三章中斷機制

3.1 中斷基本知識

3.1.1 中斷向量

3.1.2 外設可屏蔽中斷

3.1.3異常及非屏蔽中斷

3.1.4中斷描述符表

3.1.5 相關彙編指令

3.2中斷描述符表的初始化

3.2. 1 外部中斷向量的設置

3.2.2中斷描述符表IDT的預初始化

3.2.3 中斷向量表的最終初始化

3.3異常處理

3.3.1 在內核棧中保存寄存器的值

3.3.2 中斷請求隊列的初始化

3.3.3中斷請求隊列的數據結構

3.4 中斷處理

3.4.1中斷和異常處理的硬件處理

3.4.2 Linux對異常和中斷的處理

3.4.3 與堆棧有關的常量、數據結構及宏

3.4.4 中斷處理程序的執行

3.4.5 從中斷返回

3.5中斷的後半部分處理機制

3.5.1 爲何把中斷分爲兩部分來處理

3.5.2 實現機制

3.5.3數據結構的定義

3.5.4 軟中斷、bh及tasklet的初始化

3.5.5後半部分的執行

3.5.6 把bh移植到tasklet

 

第四章 進程描述

4.1 進程和程序(Process and Program)

4.2 Linux中的進程概述

4.3 task_struct結構描述

4.4 task_struct結構在內存中的存放

4.4.1 進程內核棧

4.4.2 當前進程(current宏)

4.5 進程組織的方式

4.5.1哈希表

4.5.2雙向循環鏈表

4.5.3 運行隊列

4.5.4 等待隊列

4.6 內核線程

4.7 進程的權能

4.8 內核同步

4.8.1信號量

4.8.2原子操做

4.8.3 自旋鎖、讀寫自旋鎖和大讀者自旋鎖

4.9 本章小節

 

 

第五章進程調度

5.1 Linux時間系統

5.1.1 時鐘硬件

5.1.2 時鐘運做機制

5.1.3  Linux時間基準

5.1.4 Linux的時間系統

       5.2 時鐘中斷

5.2.1 時鐘中斷的產生

5.2.2.Linux實現時鐘中斷的全過程

       5.3 Linux的調度程序-Schedule( )

5.3.1 基本原理

5.3.2 Linux進程調度時機

5.3.3 進程調度的依據

5.3.4 進程可運行程度的衡量

5.3.5 進程調度的實現

       5.4 進程切換

5.4.1 硬件支持

5.4.2 進程切換

第六章 Linux內存管理

6.1 Linux的內存管理概述

6.1.1 Linux虛擬內存的實現結構

6.1.2 內核空間和用戶空間

6.1.3 虛擬內存實現機制間的關係

6.2 Linux內存管理的初始化

6.2.1 啓用分頁機制

6.2.2  物理內存的探測

6.2.3 物理內存的描述

6.2.4 頁面管理機制的初步創建

6.2.5頁表的創建

6.2.6內存管理區

6.3 內存的分配和回收

6.3.1 夥伴算法

6.3.2 物理頁面的分配和釋放

6.3.3 Slab分配機制

6.4 地址映射機制

6.4.1 描述虛擬空間的數據結構

6.4.2 進程的虛擬空間

6.4.3 內存映射

6.5 請頁機制

6.5.1  頁故障的產生

6.5.2 頁錯誤的定位

6.5.3 進程地址空間中的缺頁異常處理

6.5.4 請求調頁

6.5.5 寫時複製

6.6 交換機制

6.6.1 交換的基本原理

6.6.2 頁面交換守護進程kswapd

6.6.3 交換空間的數據結構

6.6.4 交換空間的應用

6.7 緩存和刷新機制

6.7.1 Linux使用的緩存

6.7.2 緩衝區高速緩存

6.7.3 翻譯後援存儲器(TLB)

6.7.4 刷新機制

6.8 進程的建立和執行

6.8.1 進程的建立

6.8.2 程序執行

6.8.3 執行函數

 

第七章 進程間通訊

7.1 管道

7.1.1 Linux管道的實現機制

7.1.2 管道的應用

7.1.3 命名管道(FIFO)

7.2  信號(signal)

7.2.1 信號種類

7.2.2 信號掩碼

7.2.3 系統調用

7.2.4 典型系統調用的實現

7.2.5 進程與信號的關係

7.2.6 信號舉例

7.3 System V 的IPC機制

7.3.1 信號量

7.3.2 消息隊列

7.3.3 共享內存

第八章 虛擬文件系統

8.1  概述

8.2 VFS中的數據結構

8.2.1 超級塊

8.2.2 VFS的索引節點

8.2.3 目錄項對象

8.2.4 與進程相關的文件結構

8.2.5 主要數據結構間的關係

8.2.6 有關操做的數據結構

8.3 高速緩存

8.3.1 塊高速緩存

8.3.2 索引節點高速緩存

8.3.3 目錄高速緩存

8.4 文件系統的註冊、安裝與拆卸

8.4.1 文件系統的註冊

8.4.2  文件系統的安裝

8.4.3  文件系統的卸載

8.5 限額機制

8.6 具體文件系統舉例

8.6.1 管道文件系統pipefs

8.6.2 磁盤文件系統BFS

8.7 文件系統的系統調用

8.7.1  open 系統調用

8.7.2  read 系統調用

8.7.3  fcntl 系統調用

8 .8  Linux2.4文件系統的移植問題

 

 

 

 

 

第九章 Ext2文件系統

9.1 基本概念

9.2 Ext2的磁盤佈局和數據結構

9.2.1 Ext2的磁盤佈局

9.2.2 Ext2的超級塊

9.2.3 Ext2的索引節點

9.2.4 組描述符

9.2.5 位圖

9.2.6 索引節點表及實例分析

9.2.7 Ext2的目錄項及文件的定位

9.3 文件的訪問權限和安全

9.4 連接文件

9.5 分配策略

9.5.1 數據塊尋址

9.5.2 文件的洞

9.5.3 分配一個數據塊

第十章 模塊機制

10.1 概述

10.1.1 什麼是模塊

10.1.2 爲何要使用模塊?

10.2 實現機制

10.2.1 數據結構

10.2.2 實現機制的分析

10.3 模塊的裝入和卸載

10.3.1 實現機制

10.3.2 如何插入和卸載模塊

10.4 內核版本

10.4.1 內核版本與模塊版本的兼容性

10.4.2 從版本2.0到2.2內核API的變化

10.4.3 把內核2.2移植到內核2.4

10.5 編寫內核模塊

10.5.1 簡單內核模塊的編寫

10.5.2 內核模塊的Makefiles文件

10.5.3  內核模塊的多個文件

 

第十一章  設備驅動程序

11.1 概述

11.1.1 I/O軟件

11.1.2 設備驅動程序

11.2 設備驅動基礎

11.2.1 I/O端口

11.2.2 I/O接口及設備控制器

11.2.3 設備文件

11.2.4 VFS對設備文件的處理

11.2.5 中斷處理

11.2.6 驅動DMA工做

11.2.7 I/O 空間的映射

11.2.8 設備驅動程序框架

11.3 塊設備驅動程序

11.3.1 塊設備驅動程序的註冊

11.3.2 塊設備基於緩衝區的數據交換

11.3.3 塊設備驅動程序的幾個函數

11.3.4 RAM 盤驅動程序的實現

11.3.5 硬盤驅動程序的實現

11.4 字符設備驅動程序

11.4.1 簡單字符設備驅動程序

11.4.2 字符設備驅動程序的註冊

11.4.3 一個字符設備驅動程序的實例

11.4.4 驅動程序的編譯與裝載

 

 

 

 

第十二章 網絡

12.1 概述

12.2 網絡協議

12.2.1 網絡參考模型

12.2.2 TCP/IP 協議工做原理及數據流

12.2.3 Internet 協議

12.2.4 TCP協議

12.3 套接字(socket)

12.3.1 套接字在網絡中的地位和做用

12.3.2 套接字接口的種類

12.3.3 套接字的工做原理

12.3.4 socket 的通訊過程

12.3.5 socket爲用戶提供的系統調用

12.4 套接字緩衝區(sk_buff)

12.4.1 套接字緩衝區的特色

12.4.2 套接字緩衝區操做基本原理

12.4.3  sk_buff數據結構的核心內容

12.4.4 套接字緩衝區提供的函數

12.4.5 套接字緩衝區的上層支持例程

12.5 網絡設備接口

12.5.1 基本結構

12.5.2 命名規則

12.5.3 設備註冊

12.5.4 網絡設備數據結構

12.5.5 支持函數

第十三章 啓動系統

13.1 初始化流程     

13.1.1 系統加電或復位

13.1.2 BIOS啓動

13.1.3 Boot Loader

13.1.4 操做系統的初始化

13.2 初始化的任務

13.2.1 處理器對初始化的影響

13.2.2 其餘硬件設備對處理器的影響

13.3 Linux 的Boot Loarder

13.3.1 軟盤的結構

13.3.2 硬盤的結構

13.3.3 Boot Loader

13.3.4 LILO

13.3.5 LILO的運行分析

13.4 進入操做系統

13.4.1 Setup.S

13.4.2 Head.S

13.5 main.c中的初始化

13.6 創建init進程

13.6.1 init進程的創建

13.6.2 啓動所需的Shell腳本文件

 

附錄:

1  Linux 2.4內核API

 2.1 驅動程序的基本函數

2.2  雙向循環鏈表的操做

2.3  基本C庫函數

2.4  Linux內存管理中Slab緩衝區

2.5  Linux中的VFS

2.6  Linux的連網

2.7  網絡設備支持

2.8  模塊支持

2.9  硬件接口

2.10 塊設備

2.11  USB 設備

2  參考文獻

相關文章
相關標籤/搜索