庖丁解牛 Linux 內核分析
內容描述
本書從理解電腦硬件的核心工作機制(存儲程序電腦和函數調用堆棧)和用戶態程序如何通過系統調用陷入內核(中斷異常)入手,通過上下兩個方向雙向夾擊的策略,並利用實際可運行程序的反匯編代碼從實踐的角度理解操作系統內核,分析Linux內核源代碼,從系統調用陷入內核、進程調度與進程切換開始,最後返回到用戶態進程。
本書配有豐富的實驗指導材料和練習,適合作為高等院校電腦相關專業的指導用書,也適合Linux操作系統開發人員自學。
目錄大綱
第1章計算機工作原理1
1.1存儲程序計算機工作模型1
1.2 x86-32彙編基礎3
1.2.1 x86-32 CPU的寄存器4
1.2.2數據格式6
1.2.3尋址方式和常用彙編指令7
1.2. 4彙編代碼範例解析11
1.3彙編一個簡單的C語言程序並分析其彙編指令執行過程13
1.4單元測試題26
1.5實驗27
第2章操作系統是如何工作的29
2.1函數調用堆棧29
2.2借助Linux內核部分源代碼模擬存儲程序計算機工作模型及時鐘中斷32
2.2.1內嵌彙編32
2.2.2虛擬一個x86的CPU硬件平台34
2.3在mykernel基礎上構造一個簡單的操作系統內核36
2.3.1代碼範例36
2.3 .2代碼分析42
2.4單元測試題48
2.5實驗48
第3章MenuOS的構造50
3.1 Linux內核源代碼簡介50
3.2構造一個簡單的Linux內核56
3.3跟踪調試Linux內核的啟動過程60
3.4單元測試題65
3.5實驗66
第4章系統調用的三層機制(上) 67
4.1用戶態、內核態和中斷67
4.2系統調用概述70
4.2.1操作系統提供的API和系統調用的關係70
4.2.2觸發系統調用及參數傳遞方式71
4.3使用庫函數API和C代碼中嵌入彙編代碼觸發同一個系統調用72
4.3.1使用庫函數API觸發一個系統調用72
4.3.2內嵌彙編語法簡介73
4.3.3 C代碼中嵌入彙編代碼觸發一個系統調用75
4.3.4含兩個參數的系統調用範例76
4.3.5通用的觸發系統調用的庫函數syscall 78
4.4單元測試題79
4.5實驗80
第5章系統調用的三層機制(下) 81
5.1給MenuOS增加命令81
5.2使用gdb跟踪系統調用內核函數sys_time 83
5.3系統調用在內核代碼中的處理過程85
5.3.1中斷向量0x80和system_call中斷服務程序入口的關係86
5.3.2在system_call彙編代碼中的系統調用內核處理函數87
5.3.3整體上理解系統調用的內核處理過程88
5.4單元測試題91
5.5實驗92
第6章進程的描述和進程的創建93
6.1進程 描述93
6.2進程的創建97
6.2.1 0號進程的初始化98
6.2.2內存管理相關代碼99
6.2.3進程之間的父子、兄弟關係100
6.2.4保存進程上下文中CPU相關的一些狀態信息的數據結構101
6.2.5進程的創建過程分析103
6.3單元測試題120
第7章可執行程序工作原理122
7.1 ELF目標文件格式122
7.1.1 ELF概述122
7.1.2 ELF格式簡介123
7.1.3相關操作指令128
7.2程序編譯129
7.2.1預處理129
7.2.2編譯130
7.2.3彙編131
7.2.4鏈接133
7.3鏈接與庫134
7.3.1符號與符號解析134
7.3.2重定位137
7.3.3靜態鏈接與動態鏈接139
7.4程序裝載143
7.4.1程序裝載概要143
7.4.2 fork與execve內核處理過程148
7.4.3莊周夢蝶153
7.4.4小結154
7.5單元測試題155
7.6實驗156
第8章進程的切換和系統的一般執行過程158
8.1進程調度的時機158
8.1. 1硬中斷與軟中斷158
8.1.2進程調度時機159
8.2調度策略與算法161
8.2.1進程的分類161
8.2.2調度策略162
8.2.3 CFS調度算法164
8.3進程上下文切換165
8.3.1進程執行環境的切換165
8.3.2核心代碼分析167
8.4 Linux系統的運行過程172
8.5 Linux系統構架與執行過程概覽174
8.5.1 Linux操作系統的構架174
8.5.2 ls命令執行過程即涉及操作系統相關概念175
8.6進程調度相關源代碼跟踪和分析176
8.6.1配置運行MenuOS系統176
8.6.2配置gdb遠程調試和設置斷點177
8.6.3使用gdb跟踪分析schedule()函數177
8.7單元測試題179
作者介紹
孟寧,高校教師、資深碼農,主講課程獲國家精品在線開放課程認定。在讀行學、網易云課堂、學堂在線、實驗樓等在線教育平台的累計註冊學員達10萬餘人次,專注於Linux內核、互聯網架構、軟件工程、區塊鏈、人工智能等技術領域,與華為、IBM等多家國內外知名企業和創業公司有技術合作。
婁嘉鵬,高校教師,曾榮獲北京市優秀教師,藍墨雲平台北京市十大魅力教師等稱號,講授Java程序設計、Linux內核原理與分析、網絡攻防實戰、移動平台開發等課程,研究方向包括Linux內核及安全、密碼系統、軟件工程等。
劉宇棟,高校教師,主要研究方向包括網絡攻防技術、系統安全、社交網絡分析等。並講授操作系統、Linux內核原理與分析、網絡對抗技術等課程。