庖丁解牛Linux內(nèi)核分析
鏈接:https://pan.baidu.com/s/1ynfyp00YiH3XuLhDZ0r_8w?pwd=gb84?
提取碼:gb84

基于本書內(nèi)容的在線視頻課程——“Linux操作系統(tǒng)分析”被教育部評為“國家精品在線開放課程”,被教育部高等學(xué)校計算機類專業(yè)教學(xué)指導(dǎo)委員會評為“2018年度中國高校計算機教育慕課聯(lián)盟優(yōu) 秀在線開放課程”。
內(nèi)容簡介
本書從理解計算機硬件的核心工作機制(存儲程序計算機和函數(shù)調(diào)用堆棧)和用戶態(tài)程序如何通過系統(tǒng)調(diào)用陷入內(nèi)核(中斷異常)入手,通過上下兩個方向雙向夾擊的策略,并利用實際可運行程序的反匯編代碼從實踐的角度理解操作系統(tǒng)內(nèi)核,分析Linux內(nèi)核源代碼,從系統(tǒng)調(diào)用陷入內(nèi)核、進程調(diào)度與進程切換開始,最后返回到用戶態(tài)進程。
本書配有豐富的實驗指導(dǎo)材料和練習(xí),適合作為高等院校計算機相關(guān)專業(yè)的指導(dǎo)用書,也適合Linux操作系統(tǒng)開發(fā)人員自學(xué)。
作者簡介
孟寧,高校教師、資 深碼農(nóng),主講課程獲國家精品在線開放課程認定。在讀行學(xué)、網(wǎng)易云課堂、學(xué)堂在線、實驗樓等在線教育平臺的累計注冊學(xué)員達10萬余人次,專注于Linux內(nèi)核、互聯(lián)網(wǎng)架構(gòu)、軟件工程、區(qū)塊鏈、人工智能等技術(shù)領(lǐng)域,與華為、IBM等多家國內(nèi)外知名企業(yè)和創(chuàng)業(yè)公司有技術(shù)合作。
婁嘉鵬,高校教師,曾榮獲北京市優(yōu) 秀教師,藍墨云平臺北京市十大魅力教師等稱號,講授Java程序設(shè)計、Linux內(nèi)核原理與分析、網(wǎng)絡(luò)攻防實戰(zhàn)、移動平臺開發(fā)等課程,研究方向包括Linux內(nèi)核及安全、密碼系統(tǒng)、軟件工程等。
劉宇棟,高校教師,主要研究方向包括網(wǎng)絡(luò)攻防技術(shù)、系統(tǒng)安全、社交網(wǎng)絡(luò)分析等。并講授操作系統(tǒng)、Linux內(nèi)核原理與分析、網(wǎng)絡(luò)對抗技術(shù)等課程。
目錄
第 1章 計算機工作原理 1
1.1 存儲程序計算機工作模型 1
1.2 x86-32匯編基礎(chǔ) 3
1.2.1 x86-32 CPU的寄存器 4
1.2.2 數(shù)據(jù)格式 6
1.2.3 尋址方式和常用匯編指令 7
1.2.4 匯編代碼范例解析 11
1.3 匯編一個簡單的C語言程序并分析其匯編指令執(zhí)行過程 13
1.4 單元測試題 26
1.5 實驗 27
第 2章 操作系統(tǒng)是如何工作的 29
2.1 函數(shù)調(diào)用堆棧 29
2.2 借助Linux內(nèi)核部分源代碼模擬存儲程序計算機工作模型及時鐘中斷 32
2.2.1 內(nèi)嵌匯編 32
2.2.2 虛擬一個x86的CPU硬件平臺 34
2.3 在mykernel基礎(chǔ)上構(gòu)造一個簡單的操作系統(tǒng)內(nèi)核 36
2.3.1 代碼范例 36
2.3.2 代碼分析 42
2.4 單元測試題 48
2.5 實驗 48
第3章 MenuOS的構(gòu)造 50
3.1 Linux內(nèi)核源代碼簡介 50
3.2 構(gòu)造一個簡單的Linux內(nèi)核 56
3.3 跟蹤調(diào)試Linux內(nèi)核的啟動過程 60
3.4 單元測試題 65
3.5 實驗 66
第4章 系統(tǒng)調(diào)用的三層機制(上) 67
4.1 用戶態(tài)、內(nèi)核態(tài)和中斷 67
4.2 系統(tǒng)調(diào)用概述 70
4.2.1 操作系統(tǒng)提供的API和系統(tǒng)調(diào)用的關(guān)系 70
4.2.2 觸發(fā)系統(tǒng)調(diào)用及參數(shù)傳遞方式 71
4.3 使用庫函數(shù)API和C代碼中嵌入?yún)R編代碼觸發(fā)同一個系統(tǒng)調(diào)用 72
4.3.1 使用庫函數(shù)API觸發(fā)一個系統(tǒng)調(diào)用 72
4.3.2 內(nèi)嵌匯編語法簡介 73
4.3.3 C代碼中嵌入?yún)R編代碼觸發(fā)一個系統(tǒng)調(diào)用 75
4.3.4 含兩個參數(shù)的系統(tǒng)調(diào)用范例 76
4.3.5 通用的觸發(fā)系統(tǒng)調(diào)用的庫函數(shù)syscall 78
4.4 單元測試題 79
4.5 實驗 80
第5章 系統(tǒng)調(diào)用的三層機制(下) 81
5.1 給MenuOS增加命令 81
5.2 使用gdb跟蹤系統(tǒng)調(diào)用內(nèi)核函數(shù)sys_time 83
5.3 系統(tǒng)調(diào)用在內(nèi)核代碼中的處理過程 85
5.3.1 中斷向量0x80和system_call中斷服務(wù)程序入口的關(guān)系 86
5.3.2 在system_call匯編代碼中的系統(tǒng)調(diào)用內(nèi)核處理函數(shù) 87
5.3.3 整體上理解系統(tǒng)調(diào)用的內(nèi)核處理過程 88
5.4 單元測試題 91
5.5 實驗 92
第6章 進程的描述和進程的創(chuàng)建 93
6.1 進程的描述 93
6.2 進程的創(chuàng)建 97
6.2.1 0號進程的初始化 98
6.2.2 內(nèi)存管理相關(guān)代碼 99
6.2.3 進程之間的父子、兄弟關(guān)系 100
6.2.4 保存進程上下文中CPU相關(guān)的一些狀態(tài)信息的數(shù)據(jù)結(jié)構(gòu) 101
6.2.5 進程的創(chuàng)建過程分析 103
6.3 單元測試題 120
第7章 可執(zhí)行程序工作原理 122
7.1 ELF目標文件格式 122
7.1.1 ELF概述 122
7.1.2 ELF格式簡介 123
7.1.3 相關(guān)操作指令 128
7.2 程序編譯 129
7.2.1 預(yù)處理 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 靜態(tài)鏈接與動態(tài)鏈接 139
7.4 程序裝載 143
7.4.1 程序裝載概要 143
7.4.2 fork與execve內(nèi)核處理過程 148
7.4.3 莊周夢蝶 153
7.4.4 小結(jié) 154
7.5 單元測試題 155
7.6 實驗 156
第8章 進程的切換和系統(tǒng)的一般執(zhí)行過程 158
8.1 進程調(diào)度的時機 158
8.1.1 硬中斷與軟中斷 158
8.1.2 進程調(diào)度時機 159
8.2 調(diào)度策略與算法 161
8.2.1 進程的分類 161
8.2.2 調(diào)度策略 162
8.2.3 CFS調(diào)度算法 164
8.3 進程上下文切換 165
8.3.1 進程執(zhí)行環(huán)境的切換 165
8.3.2 核心代碼分析 167
8.4 Linux系統(tǒng)的運行過程 172
8.5 Linux系統(tǒng)構(gòu)架與執(zhí)行過程概覽 174
8.5.1 Linux操作系統(tǒng)的構(gòu)架 174
8.5.2 ls命令執(zhí)行過程即涉及操作系統(tǒng)相關(guān)概念 175
8.6 進程調(diào)度相關(guān)源代碼跟蹤和分析 176
8.6.1 配置運行MenuOS系統(tǒng) 176
8.6.2 配置gdb遠程調(diào)試和設(shè)置斷點 177
8.6.3 使用gdb跟蹤分析schedule()函數(shù) 177
8.7 單元測試題 179
查看全部↓
前言/序言
序
大大小小、可見與不可見的計算機已成為現(xiàn)代人日常工作、學(xué)習(xí)和生活中必不可少的工具。操作系統(tǒng)是計算機之魂,作為用戶使用計算機的接口,它負責(zé)調(diào)度執(zhí)行各個用戶程序,使計算機完成特定的任務(wù);作為計算機硬件資源的管理者,它負責(zé)協(xié)調(diào)計算機中各類設(shè)備高效地工作。操作系統(tǒng)的重要性不言而喻。
對于軟件工程師,理解操作系統(tǒng)的工作原理和關(guān)鍵機制是設(shè)計高質(zhì)量應(yīng)用程序的前提,但要做到這一點是十分困難的。一方面,操作系統(tǒng)設(shè)計涉及計算機科學(xué)與工程學(xué)科的方方面面,包括數(shù)據(jù)結(jié)構(gòu)與算法、計算機組成與系統(tǒng)結(jié)構(gòu)、計算機網(wǎng)絡(luò),甚至程序設(shè)計語言與編譯系統(tǒng)等核心知識,以及并發(fā)、同步和通信等核心概念。另一方面,作為一個復(fù)雜龐大的軟件產(chǎn)品,理解操作系統(tǒng)更需要理論與實踐深度結(jié)合。
操作系統(tǒng)的相關(guān)學(xué)習(xí)資料十分豐富。有闡述基本原理者,有剖析典型系統(tǒng)者,還有構(gòu)造示例系統(tǒng)者;有面向?qū)I(yè)理論者,亦有面向應(yīng)用實踐者。角度多種多樣,內(nèi)容簡繁不一。
本書的最大特點在于作者結(jié)合其多年的Linux操作系統(tǒng)實際教學(xué)經(jīng)驗編撰而成。作為一位經(jīng)驗豐富的高級軟件工程師和專業(yè)教師,本書作者基于自己學(xué)習(xí)和研究Linux的心得,創(chuàng)新性地以一個mykernel和MenuOS為基礎(chǔ)實驗平臺進行教學(xué)和實驗組織,實現(xiàn)了理論學(xué)習(xí)與工程實踐的自然融合,達到了事半功倍的效果。同時,書中設(shè)計了豐富的單元測試題和實驗,引導(dǎo)讀者