《Linux內(nèi)核探秘:深入解析文件系統(tǒng)和設(shè)備驅(qū)動的架構(gòu)與設(shè)計》從工業(yè)需求角度出發(fā),注重效率和實(shí)用性,是幫助內(nèi)核研發(fā)及調(diào)試、驅(qū)動開發(fā)等領(lǐng)域工程師正確認(rèn)識并高效利用Linux內(nèi)核的難得佳作!作者是騰訊公司資深的Linux內(nèi)核專家和存儲系統(tǒng)專家,在該領(lǐng)域工作和研究的10余年間,面試了數(shù)百位Linux內(nèi)核工程師,深知學(xué)習(xí)Linux內(nèi)核過程中經(jīng)常遇到的困惑,以及在工作中容易犯的錯誤;谶@些原因作者撰寫了本書。本書出發(fā)點(diǎn)和寫作方式可謂獨(dú)辟蹊徑,將Linux內(nèi)核分為兩個維度,一是基礎(chǔ)部分和應(yīng)用部分,二是內(nèi)核架構(gòu)和內(nèi)核實(shí)現(xiàn),將兩個維有機(jī)統(tǒng)一,深入分析了Linux內(nèi)核的文件系統(tǒng)、設(shè)備驅(qū)動的架構(gòu)設(shè)計與實(shí)現(xiàn)原理。 《Linux內(nèi)核探秘:深入解析文件系統(tǒng)和設(shè)備驅(qū)動的架構(gòu)與設(shè)計》在邏輯上分為三部分:第一部分(第1~2章)首先將內(nèi)核層劃分為基礎(chǔ)層和應(yīng)用層,講解了基礎(chǔ)層包含的服務(wù)和數(shù)據(jù)結(jié)構(gòu),以及應(yīng)用層包含的各種功能,然后對文件系統(tǒng)的架構(gòu)進(jìn)行了提綱挈領(lǐng)的介紹,為讀者學(xué)習(xí)后面的知識打下基礎(chǔ);第二部分(第3~9章)從設(shè)備到總線到驅(qū)動,逐步深入,剖析了設(shè)備的總體架構(gòu)、為設(shè)備服務(wù)的特殊文件系統(tǒng)sysfs、字符設(shè)備和input設(shè)備、platform總線、serio總線、PCI總線、塊設(shè)備的實(shí)現(xiàn)原理和工作機(jī)制;第三部分(第10~13章)對文件系統(tǒng)的讀寫機(jī)制進(jìn)行了深入分析,最后通過一個真實(shí)文件系統(tǒng)ext2,復(fù)習(xí)本書所有知識點(diǎn)。 作者簡介 高劍林,資深Linux內(nèi)核專家、存儲系統(tǒng)專家、嵌入式系統(tǒng)專家。先后就職于華為、UT斯達(dá)康、賽門鐵克等公司,從事路由器設(shè)備研發(fā)、軟件開發(fā)和存儲系統(tǒng)研究相關(guān)的工作10余年,經(jīng)驗(yàn)非常豐富,F(xiàn)就職于騰訊,負(fù)責(zé)存儲系統(tǒng)的開發(fā)和研究。
目錄: 前 言 第1章 內(nèi)核的基礎(chǔ)層和應(yīng)用層 1.1 內(nèi)核基礎(chǔ)層提供的服務(wù) 1.1.1 內(nèi)核中使用內(nèi)存 1.1.2 內(nèi)核中的任務(wù)調(diào)度 1.1.3 軟中斷和tasklet 1.1.4 工作隊(duì)列 1.1.5 自旋鎖 1.1.6 內(nèi)核信號量 1.1.7 原子變量 1.2 內(nèi)核基礎(chǔ)層的數(shù)據(jù)結(jié)構(gòu) 1.2.1 雙向鏈表 1.2.2 hash鏈表 1.2.3 單向鏈表 1.2.4 紅黑樹 1.2.5 radix樹 1.3 內(nèi)核應(yīng)用層 1.4 從Linux內(nèi)核源碼結(jié)構(gòu)縱覽內(nèi)核 1.5 內(nèi)核學(xué)習(xí)和應(yīng)用的四個階段 1.6 本章小結(jié) 第2章 文件系統(tǒng) 2.1 文件系統(tǒng)的基本概念 2.1.1 什么是VFS 2.1.2 超級塊super_block 2.1.3 目錄項(xiàng)dentry 2.1.4 索引節(jié)點(diǎn)inode 2.1.5 文件 2.2 文件系統(tǒng)的架構(gòu) 2.2.1 超級塊作用分析 2.2.2 dentry作用分析 2.2.3 inode作用分析 2.2.4 文件作用分析 2.3 從代碼層次深入分析文件系統(tǒng) 2.3.1 一個最簡單的文件系統(tǒng)aufs 2.3.2 文件系統(tǒng)如何管理目錄和文件 2.3.3 文件系統(tǒng)的掛載過程 2.3.4 文件打開的代碼分析 2.4 本章小結(jié) 第3章 設(shè)備的概念和總體架構(gòu) 3.1 設(shè)備的配置表 3.2 訪問設(shè)備寄存器和設(shè)備內(nèi)存 3.3 設(shè)備中斷和DMA 3.4 總線對設(shè)備的掃描 3.5 設(shè)備驅(qū)動管理 3.6 本章小結(jié) 第4章 為設(shè)備服務(wù)的特殊文件系統(tǒng)sysfs 4.1 文件和目錄的創(chuàng)建 4.1.1 sysfs文件系統(tǒng)的初始化 4.1.2 sysfs文件系統(tǒng)目錄的創(chuàng)建 4.1.3 普通文件的創(chuàng)建 4.2 sysfs文件的打開操作 4.2.1 real_lookup函數(shù)詳解 4.2.2 為文件創(chuàng)建inode結(jié)構(gòu) 4.2.3 為dentry結(jié)構(gòu)綁定屬性 4.2.4 調(diào)用文件系統(tǒng)中的open函數(shù) 4.3 sysfs文件的讀寫 4.3.1 讀文件的過程分析 4.3.2 寫文件的過程分析 4.4 kobject結(jié)構(gòu) 4.4.1 kobject和kset的關(guān)系 4.4.2 kobject實(shí)例:總線的注冊 4.5 本章小結(jié) 第5章 字符設(shè)備和input設(shè)備 5.1 文件如何變成設(shè)備 5.1.1 init_special_inode函數(shù) 5.1.2 def_chr_fops結(jié)構(gòu) 5.2 input設(shè)備的注冊 5.2.1 主從設(shè)備號 5.2.2 把input設(shè)備注冊到系統(tǒng) 5.2.3 設(shè)備區(qū)間的登記 5.2.4 注冊字符設(shè)備 5.2.5 打開input設(shè)備 5.3 input設(shè)備架構(gòu) 5.3.1 注冊input設(shè)備的驅(qū)動 5.3.2 匹配input管理的設(shè)備和驅(qū)動 5.3.3 注冊input設(shè)備 5.4 本章小結(jié) 第6章 platform總線 6.1 從驅(qū)動發(fā)現(xiàn)設(shè)備的過程 6.1.1 驅(qū)動的初始化 6.1.2 注冊驅(qū)動 6.1.3 為總線增加一個驅(qū)動 6.1.4 驅(qū)動加載 6.1.5 遍歷總線上已經(jīng)掛載的設(shè)備 6.2 從設(shè)備找到驅(qū)動的過程 6.2.1 注冊設(shè)備和總線類型 6.2.2 注冊設(shè)備的資源 6.2.3 增加一個設(shè)備對象 6.3 本章小結(jié) 第7章 serio總線 7.1 什么是總線適配器 7.2 向serio總線注冊設(shè)備 7.2.1 注冊端口登記事件 7.2.2 遍歷總線的驅(qū)動 7.2.3 注冊input設(shè)備 7.3 虛擬鍵盤驅(qū)動 7.3.1 鍵盤驅(qū)動的初始化 7.3.2 與設(shè)備建立連接 7.3.3 啟動鍵盤設(shè)備 7.3.4 輸入設(shè)備和主機(jī)系統(tǒng)之間的事件 7.4 鍵盤中斷 7.4.1 q40kbd設(shè)備的中斷處理 7.4.2 serio總線的中斷處理 7.4.3 驅(qū)動提供的中斷處理 7.5 本章小結(jié) 第8章 PCI總線 8.1 深入理解PCI總線 8.1.1 PCI設(shè)備工作原理 8.1.2 PCI總線域 8.1.3 PCI資源管理 8.1.4 PCI配置空間讀取和設(shè)置 8.2 PCI設(shè)備掃描過程 8.2.1 掃描0號總線 8.2.2 掃描總線上的PCI設(shè)備 8.2.3 掃描多功能設(shè)備 8.2.4 掃描單個設(shè)備 8.2.5 掃描設(shè)備信息 8.3 本章小結(jié) 第9章 塊設(shè)備 9.1 塊設(shè)備的架構(gòu) 9.1.1 塊設(shè)備、磁盤對象和隊(duì)列 9.1.2 塊設(shè)備和通用磁盤對象的綁定 9.1.3 塊設(shè)備的隊(duì)列和隊(duì)列處理函數(shù) 9.2 塊設(shè)備創(chuàng)建的過程分析 9.2.1 nbd驅(qū)動的初始化 9.2.2 為通用磁盤對象創(chuàng)建隊(duì)列成員 9.2.3 將通用磁盤對象加入系統(tǒng) 9.3 塊設(shè)備文件系統(tǒng) 9.3.1 塊設(shè)備文件系統(tǒng)的初始化 9.3.2 塊設(shè)備文件系統(tǒng)的設(shè)計思路 9.4 塊設(shè)備的打開流程 9.4.1 獲取塊設(shè)備對象 9.4.2 執(zhí)行塊設(shè)備的打開流程 9.5 本章小結(jié) 第10章 文件系統(tǒng)讀寫 10.1 page cache機(jī)制 10.1.1 buffer I/O和direct I/O 10.1.2 buffer head和塊緩存 10.1.3 page cache的管理 10.1.4 page cache的狀態(tài) 10.2 文件預(yù)讀 10.3 文件鎖 10.4 文件讀過程代碼分析 10.5 讀過程返回 10.6 文件寫過程代碼分析 10.7 本章小結(jié) 第11章 通用塊層和scsi層 11.1 塊設(shè)備隊(duì)列 11.1.1 scsi塊設(shè)備隊(duì)列處理函數(shù) 11.1.2 電梯算法和對象 11.2 硬盤HBA抽象層 11.3 I/O的順序控制 11.4 I/O調(diào)度算法 11.4.1 noop調(diào)度算法 11.4.2 deadline調(diào)度算法 11.5 I/O的處理過程 11.5.1 I/O插入隊(duì)列的過程分析 11.5.2 I/O出隊(duì)列的過程分析 11.5.3 I/O返回路徑 11.6 本章小結(jié) 第12章 內(nèi)核回寫機(jī)制 12.1 內(nèi)核的觸發(fā)條件 12.2 內(nèi)核回寫控制參數(shù) 12.3 定時器觸發(fā)回寫 12.3.1 啟動定時器 12.3.2 執(zhí)行回寫操作 12.3.3 檢查需要回寫的頁面 12.3.4 回寫超級塊內(nèi)的inode 12.4 平衡寫 12.4.1 檢查直接回寫的條件 12.4.2 回寫系統(tǒng)臟頁面的條件 12.4.3 檢查計算機(jī)模式 12.5 本章小結(jié) 第13章 一個真實(shí)文件系統(tǒng)ext2 13.1 ext2的硬盤布局 13.2 ext2文件系統(tǒng)目錄樹 13.3 ext2文件內(nèi)容管理 13.4 ext2文件系統(tǒng)讀寫 13.5 本章小結(jié)
|