-
>
決戰(zhàn)行測(cè)5000題(言語(yǔ)理解與表達(dá))
-
>
軟件性能測(cè)試.分析與調(diào)優(yōu)實(shí)踐之路
-
>
第一行代碼Android
-
>
深度學(xué)習(xí)
-
>
Unreal Engine 4藍(lán)圖完全學(xué)習(xí)教程
-
>
深入理解計(jì)算機(jī)系統(tǒng)-原書第3版
-
>
Word/Excel PPT 2013辦公應(yīng)用從入門到精通-(附贈(zèng)1DVD.含語(yǔ)音視頻教學(xué)+辦公模板+PDF電子書)
庖丁解牛LINUX操作系統(tǒng)分析 版權(quán)信息
- ISBN:9787115619730
- 條形碼:9787115619730 ; 978-7-115-61973-0
- 裝幀:平裝
- 冊(cè)數(shù):暫無(wú)
- 重量:暫無(wú)
- 所屬分類:>>
庖丁解牛LINUX操作系統(tǒng)分析 本書特色
本書榮獲:
國(guó)家精品在線開放課程、國(guó)家一流本科課程、華為“智能基座”精品慕課、中國(guó)高校計(jì)算機(jī)教育MOOC聯(lián)盟優(yōu)秀課程,堪稱“Linux操作系統(tǒng)分析”的結(jié)晶;
涵蓋openEuler操作系統(tǒng)、ARM64匯編語(yǔ)言、虛擬化技術(shù)KVM和LXC容器技術(shù),涵蓋了Linux操作系統(tǒng)各個(gè)主要方面;
本書適合作為高等院校計(jì)算機(jī)、軟件工程專業(yè)高年級(jí)本科生和研究生教材,同時(shí)可供計(jì)算機(jī)軟件相關(guān)從業(yè)人員學(xué)習(xí)參考。
庖丁解牛LINUX操作系統(tǒng)分析 內(nèi)容簡(jiǎn)介
本書將可移植操作系統(tǒng) POSIX 標(biāo)準(zhǔn)和 CPU 指令集架構(gòu) ISA 兩層接口通過(guò) Linux 操作系統(tǒng)貫通起來(lái),涵蓋了 Linux 操作系統(tǒng)的各個(gè)主要方面,主要有以 openEuler 操作系統(tǒng)為例的 POSIX 工具集、計(jì)算機(jī)系統(tǒng)的工作原理、x86 和 ARM64 匯編語(yǔ)言、系統(tǒng)調(diào)用的工作機(jī)制、進(jìn)程描述和內(nèi)存管理、可執(zhí)行程序工作原理、內(nèi)核線程和 I/O 驅(qū)動(dòng)框架、進(jìn)程調(diào)度和進(jìn)程切換、KVM 和容器技術(shù)、Linux 安全相關(guān)技術(shù)等 Linux 系 統(tǒng)運(yùn)作的各個(gè)關(guān)鍵機(jī)制。 本書首先以 Linux 社區(qū)規(guī)則、Linux 發(fā)展的淵源、Linux 基本使用和命令工具作為導(dǎo)引;然后以存儲(chǔ)程序計(jì)算機(jī)相關(guān)的工作原理、x86 和 ARM64 匯編語(yǔ)言、指令亂序問(wèn)題、mykernel 精簡(jiǎn)內(nèi)核實(shí)驗(yàn)以及 Linux內(nèi)核源代碼編譯和系統(tǒng)構(gòu)建作為 Linux 內(nèi)核的入門基礎(chǔ);接著焦深入理解系統(tǒng)調(diào)用,并在 x86 和 ARM64系統(tǒng)調(diào)用實(shí)現(xiàn)的基礎(chǔ)上延伸到進(jìn)程的創(chuàng)建、可執(zhí)行程序的加載和進(jìn)程的切換,其中涉及了進(jìn)程描述符、進(jìn)程地址空間和程序編譯構(gòu)建等相關(guān)的內(nèi)容;*后總結(jié)了 Linux 系統(tǒng)的一般執(zhí)行過(guò)程和系統(tǒng)架構(gòu),并拓展到KVM 和容器技術(shù),以及 Linux 系統(tǒng)安全相關(guān)技術(shù)。
庖丁解牛LINUX操作系統(tǒng)分析 目錄
1.1 自由軟件江湖里的“碼頭”和規(guī)矩 1
1.1.1 自由軟件世界的“擎天大柱”Linux 1
1.1.2 江湖的由來(lái)——自由軟件運(yùn)動(dòng) 1
1.1.3 江湖的規(guī)矩——開源軟件許可證 2
1.1.4 江湖的危局——GPLv2 和 GPLv3 3
1.2 操作系統(tǒng)成長(zhǎng)記 4
1.2.1 操作系統(tǒng)誕生的背景 4
1.2.2 早期的軟件操作系統(tǒng) 5
1.2.3 系統(tǒng)調(diào)用的概念 6
1.2.4 多道程序操作系統(tǒng) 6
1.2.5 籠罩在 UNIX 上的陰影 7
1.2.6 早期個(gè)人計(jì)算機(jī)操作系統(tǒng)的大倒退 7
1.2.7 移動(dòng)互聯(lián)網(wǎng)和 AIoT 時(shí)代的操作系統(tǒng) 8
1.3 國(guó)產(chǎn)操作系統(tǒng)概述... 9
1.3.1 國(guó)產(chǎn)操作系統(tǒng)的發(fā)展歷程 9
1.3.2 openEuler 操作系統(tǒng) 10
1.4 與 Linux 的第 一次親密接觸 13
1.4.1 Linux 內(nèi)核發(fā)展簡(jiǎn)史 13
1.4.2 安裝一個(gè) Linux 系統(tǒng) 14
1.4.3 Linux 命令行簡(jiǎn)明指南 17
1.5 openEuler 操作系統(tǒng)中的常用 Linux 命令參考 19
1.5.1 查看系統(tǒng)相關(guān)信息的命令 19
1.5.2 用戶管理和權(quán)限管理相關(guān)的命令 20
1.5.3 文件和目錄相關(guān)的命令 21
1.5.4 進(jìn)程相關(guān)的命令 23
1.5.5 進(jìn)程間通信(IPC)相關(guān)的命令 24
1.5.6 基本的開發(fā)者工具 24
1.5.7 I/O 相關(guān)的命令 25
1.5.8 Shell 腳本中的常用命令 25
本章實(shí)驗(yàn) 26
第 2 章 計(jì)算機(jī)系統(tǒng)的基本工作原理 27
2.1 存儲(chǔ)程序計(jì)算機(jī) 27
2.1.1 哈佛結(jié)構(gòu)與馮·諾依曼結(jié)構(gòu) 27
2.1.2 復(fù)雜指令集和精簡(jiǎn)指令集 29
2.1.3 深入理解馮·諾依曼體系結(jié)構(gòu) 30
2.1.4 計(jì)算機(jī)的存儲(chǔ)系統(tǒng) 32
2.1.5 計(jì)算機(jī)的總線結(jié)構(gòu) 33
2.2 x86 匯編語(yǔ)言基礎(chǔ) 35
2.2.1 x86 CPU 的寄存器 35
2.2.2 基本匯編語(yǔ)言語(yǔ)法規(guī)則 39
2.2.3 匯編語(yǔ)言代碼片段分析 43
2.2.4 分析完整的 x86 匯編程序 45
2.2.5 函數(shù)調(diào)用堆?蚣 53
2.2.6 C 語(yǔ)言代碼中內(nèi)嵌匯編語(yǔ)言代碼 55
2.3 ARM64 匯編語(yǔ)言基礎(chǔ) 58
2.3.1 ARM64 CPU 的寄存器 58
2.3.2 常用的 ARM64 匯編指令 60
2.3.3 分析完整的 ARM64 匯編程序 62
2.4 指令亂序問(wèn)題65
2.4.1 可重入函數(shù)與線程安全 65
2.4.2 編譯器指令亂序問(wèn)題 69
2.4.3 CPU 指令亂序問(wèn)題 72
2.5 編寫一個(gè)精簡(jiǎn)的操作系統(tǒng)內(nèi)核 75
2.5.1 虛擬一個(gè) 64 位 x86 的硬件平臺(tái) 75
2.5.2 精簡(jiǎn)的操作系統(tǒng)內(nèi)核范例代碼 76
2.5.3 精簡(jiǎn)的操作系統(tǒng)內(nèi)核關(guān)鍵代碼分析 80
本章實(shí)驗(yàn) 87
第 3 章 Linux 內(nèi)核源代碼及調(diào)試環(huán)境 90
3.1 Linux 內(nèi)核源代碼.. 90
3.1.1 Linux 內(nèi)核源代碼概述 90
3.1.2 用 VS Code 閱讀 Linux 內(nèi)核源代碼 93
3.2 搭建 Linux 內(nèi)核調(diào)試環(huán)境 96
3.2.1 編譯配置安裝 Linux 內(nèi)核的步驟 96
3.2.2 下載編譯內(nèi)核 97
3.2.3 制作內(nèi)存根文件系統(tǒng) 98
3.2.4 跟蹤調(diào)試 Linux 內(nèi)核的基本方法 99
3.2.5 配置 VS Code 調(diào)試 Linux 內(nèi)核 101
3.3 跟蹤 Linux 內(nèi)核的啟動(dòng)過(guò)程103
3.3.1 Linux 內(nèi)核的啟動(dòng)過(guò)程概述 103
3.3.2 跟蹤分析 start_kernel 函數(shù) 105
本章實(shí)驗(yàn) 111
第 4 章 深入理解系統(tǒng)調(diào)用 112
4.1 系統(tǒng)調(diào)用概述112
4.1.1 用戶態(tài)、內(nèi)核態(tài)和中斷 112
4.1.2 系統(tǒng)調(diào)用的基本工作原理 115
4.1.3 x86 Linux 系統(tǒng)調(diào)用概述
4.1.4 ARM64 Linux 系統(tǒng)調(diào)用概述 118
4.2 觸發(fā)系統(tǒng)調(diào)用的方法 119
4.2.1 使用 C 語(yǔ)言庫(kù)函數(shù) API 觸發(fā)系統(tǒng)調(diào)用 119
4.2.2 觸發(fā)系統(tǒng)調(diào)用的 32 位 x86 匯編語(yǔ)言代碼 121
4.2.3 觸發(fā)系統(tǒng)調(diào)用的 64 位 x86 匯編語(yǔ)言代碼 122
4.2.4 觸發(fā)系統(tǒng)調(diào)用的 ARM64 匯編語(yǔ)言代碼 123
4.3 深入理解 x86 Linux 系統(tǒng)調(diào)用 124
4.3.1 x86 Linux 系統(tǒng)調(diào)用的初始化 124
4.3.2 x86 Linux 系統(tǒng)調(diào)用的執(zhí)行 127
4.3.3 x86 Linux 系統(tǒng)調(diào)用內(nèi)核處理函數(shù) 132
4.3.4 x86 Linux 系統(tǒng)調(diào)用的內(nèi)核堆棧 135
4.3.5 系統(tǒng)調(diào)用中的進(jìn)程調(diào)度時(shí)機(jī) 137
4.4 深入理解 ARM64 Linux 系統(tǒng)調(diào)用 139
4.4.1 ARM64 Linux 異常向量表的初始化 139
4.4.2 ARM64 Linux 系統(tǒng)調(diào)用的執(zhí)行 144
4.4.3 ARM64 Linux 系統(tǒng)調(diào)用內(nèi)核處理函數(shù) 149
本章實(shí)驗(yàn) 153
第 5 章 進(jìn)程的描述和創(chuàng)建 154
5.1 進(jìn)程的描述 154
5.1.1 Linux 進(jìn)程描述符概覽 154
5.1.2 Linux 進(jìn)程的狀態(tài) 156
5.1.3 Linux 進(jìn)程鏈表結(jié)構(gòu)及父子、兄弟關(guān)系 158
5.1.4 Linux 進(jìn)程關(guān)鍵上下文 159
5.2 進(jìn)程地址空間163
5.2.1 Linux 內(nèi)存管理概述 163
5.2.2 Linux 進(jìn)程地址空間 165
5.2.3 大頁(yè)內(nèi)存 169
5.3 進(jìn)程的創(chuàng)建 172
5.3.1 Linux 內(nèi)核中進(jìn)程的初始化 172
5.3.2 用戶態(tài)創(chuàng)建進(jìn)程的方法 177
5.3.3 fork 系統(tǒng)調(diào)用 179
5.3.4 Linux 內(nèi)核中進(jìn)程創(chuàng)建過(guò)程 182
5.3.5 進(jìn)程創(chuàng)建過(guò)程中 x86 相關(guān)代碼 190
5.3.6 進(jìn)程創(chuàng)建過(guò)程中 ARM64 相關(guān)代碼 193
本章實(shí)驗(yàn) 197
第 6 章 可執(zhí)行程序工作原理 198
6.1 ELF 目標(biāo)文件格式 198
6.1.1 ELF 目標(biāo)文件格式概述 198
6.1.2 ELF 文件格式 199
6.1.3 ELF 相關(guān)操作命令 203
6.2 程序的編譯過(guò)程 204
6.2.1 預(yù)處理 204
6.2.2 編譯 205
6.2.3 匯編 206
6.2.4 鏈接208
6.3 鏈接與庫(kù) 208
6.3.1 符號(hào)與符號(hào)解析 209
6.3.2 重定位 212
6.3.3 靜態(tài)鏈接與動(dòng)態(tài)鏈接 213
6.3.4 加載時(shí)動(dòng)態(tài)鏈接 214
6.3.5 運(yùn)行時(shí)動(dòng)態(tài)鏈接 215
6.3.6 動(dòng)態(tài)鏈接實(shí)驗(yàn) 216
6.4 可執(zhí)行程序的加載 218
6.4.1 程序加載概要 218
6.4.2 execve 與 fork 的區(qū)別和聯(lián)系 222
6.4.3 execve 系統(tǒng)調(diào)用的內(nèi)核處理過(guò)程 223
6.4.4 start_thread 函數(shù) 229
6.5 系統(tǒng)調(diào)用、fork 和 execve 總結(jié) 231
本章實(shí)驗(yàn) 233
第 7 章 中斷處理、內(nèi)核線程和設(shè)備驅(qū)動(dòng) 234
7.1 中斷處理概述 234
7.1.1 中斷的類型 234
7.1.2 中斷處理程序和下半部 235
7.1.3 軟中斷 239
7.2 內(nèi)核線程概述 242
7.2.1 內(nèi)核線程的概念 242
7.2.2 內(nèi)核線程的創(chuàng)建管理 244
7.3 設(shè)備驅(qū)動(dòng)程序 248
7.3.1 一切皆是文件 248
7.3.2 設(shè)備的定位和訪問(wèn) 250
7.3.3 設(shè)備驅(qū)動(dòng)程序代碼結(jié)構(gòu)示例 252
本章實(shí)驗(yàn) 254
第 8 章 進(jìn)程調(diào)度與進(jìn)程切換 255
8.1 進(jìn)程調(diào)度概述 255
8.1.1 進(jìn)程的分類 255
8.1.2 Linux 進(jìn)程調(diào)度策略 256
8.1.3 CFS 進(jìn)程調(diào)度算法 258
8.2 進(jìn)程調(diào)度的時(shí)機(jī)... 261
8.3 進(jìn)程上下文切換... 263
8.3.1 進(jìn)程執(zhí)行環(huán)境的切換 263
8.3.2 32 位 x86 架構(gòu)下進(jìn)程切換核心代碼分析 265
8.3.3 64 位 x86 架構(gòu)下進(jìn)程切換核心代碼分析 269
8.3.4 64 位 x86 架構(gòu)下 fork 和 execve 相關(guān)的進(jìn)程切換 272
8.3.5 ARM64 架構(gòu)下進(jìn)程切換核心代碼分析 274
本章實(shí)驗(yàn)282
第 9 章 Linux 操作系統(tǒng)的軟件架構(gòu) 283
9.1 Linux 操作系統(tǒng)的一般執(zhí)行過(guò)程 283
9.1.1 32 位 x86 Linux 系統(tǒng)的一般執(zhí)行過(guò)程 283
9.1.2 64 位 x86 Linux 系統(tǒng)的一般執(zhí)行過(guò)程 284
9.1.3 ARM64 Linux 系統(tǒng)的一般執(zhí)行過(guò)程 285
9.1.4 Linux 系統(tǒng)執(zhí)行過(guò)程中的 5 種特殊情況 286
9.2 Linux 操作系統(tǒng)的軟件架構(gòu)分析 287
9.2.1 Linux 操作系統(tǒng)的層次架構(gòu) 287
9.2.2 Linux 操作系統(tǒng)的地址空間結(jié)構(gòu) 288
9.2.3 Linux 操作系統(tǒng)的執(zhí)行路徑 289
本章實(shí)驗(yàn) 290
第 10 章 KVM 及虛擬機(jī)技術(shù) 291
10.1 虛擬機(jī)技術(shù)概述. 291
10.1.1 CPU 的虛擬化 292
10.1.2 內(nèi)存的虛擬化 293
10.1.3 I/O 的虛擬化 294
10.2 KVM API 的使用方法 294
10.2.1 開啟或使能 KVM 硬件輔助虛擬化 294
10.2.2 安裝配置 KVM 297
10.2.3 使用 KVM API 創(chuàng)建一個(gè)虛擬機(jī) 297
10.2.4 KVM API 總結(jié) 300
10.3 QEMU-KVM 的實(shí)現(xiàn)原理 300
10.4 StratoVirt 302
10.4.1 StratoVirt 簡(jiǎn)介 302
10.4.2 StratoVirt 和 QEMU 的區(qū)別 304
10.4.3 StratoVirt 的編譯構(gòu)建 305
10.4.4 StratoVirt 的使用方法 306
本章實(shí)驗(yàn) 308
第 11 章 Linux 容器技術(shù).. 309
11.1 容器技術(shù)概述 309
11.2 Linux 容器技術(shù)的基本原理 311
11.2.1 chroot 技術(shù) 311
11.2.2 namespace 技術(shù) 315
11.2.3 Mount namespace 316
11.2.4 PID namespace 319
11.2.5 IPC namespace 320
11.2.6 UTS namespace 323
11.2.7 Network namespace 324
11.2.8 User namespace 325
11.2.9 cgroups 技術(shù) 326
11.3 如何創(chuàng)建一個(gè)容器 331
11.3.1 創(chuàng)建 namespace 的相關(guān)系統(tǒng)調(diào)用 331
11.3.2 制作 OCI 包并運(yùn)行容器 332
11.4 Docker 334
11.4.1 Docker 技術(shù)概述 334
11.4.2 Dockerfile 和 Docker 鏡像 336
11.5 iSula 338
11.5.1 iSula 技術(shù)概述 338
11.5.2 iSula 的基本用法 339
11.5.3 iSulad 的系統(tǒng)架構(gòu) 340
本章實(shí)驗(yàn)353
第 12 章 Linux 系統(tǒng)安全相關(guān)技術(shù) 354
12.1 操作系統(tǒng)安全概述 354
12.1.1 信息安全的設(shè)計(jì)原則 354
12.1.2 操作系統(tǒng)安全的設(shè)計(jì)目標(biāo) 356
12.2 Linux 系統(tǒng)的安全機(jī)制 359
12.2.1 Linux 系統(tǒng)的用戶賬號(hào) 359
12.2.2 Linux 文件系統(tǒng)的權(quán)限 360
12.2.3 Linux 的日志文件 363
12.2.4 Linux 縱深防御體系 364
12.3 Linux 系統(tǒng)的訪問(wèn)控制 367
12.3.1 Linux 系統(tǒng)訪問(wèn)控制概述 367
12.3.2 Linux Capabilities 374
12.3.3 AppArmor 377
12.3.4 SELinux 379
12.4 可信計(jì)算和機(jī)密計(jì)算 382
12.4.1 secGear 機(jī)密計(jì)算框架 382
12.4.2 secGear 開發(fā)指南 384
本章實(shí)驗(yàn) 394
庖丁解牛LINUX操作系統(tǒng)分析 作者簡(jiǎn)介
孟寧,任職于中國(guó)科學(xué)技術(shù)大學(xué)軟件學(xué)院,夢(mèng)寧軟件創(chuàng)始人,多年來(lái)專注于自主可控基礎(chǔ)系統(tǒng)軟件研發(fā)和教學(xué)。曾榮獲華為歐拉&高斯開源貢獻(xiàn)領(lǐng)英教師獎(jiǎng)。著作有《代碼中的軟件工程》和《庖丁解牛Linux操作系統(tǒng)分析》等圖書。主講課程“軟件工程”“Linux操作系統(tǒng)分析”等,曾獲評(píng)“國(guó)家精品在線開放課程”和“國(guó)家一流本科課程”,被中國(guó)高校計(jì)算機(jī)教育MOOC聯(lián)盟評(píng)為優(yōu)秀課程,榮獲華為“智能基座”優(yōu)秀教學(xué)資源獎(jiǎng)、安徽省教學(xué)成果獎(jiǎng)二等獎(jiǎng)等獎(jiǎng)項(xiàng)。 婁嘉鵬,高校教師,研究方向包括Linux內(nèi)核及安全、密碼系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)、軟件工程等。曾承擔(dān)國(guó)家863計(jì)劃、國(guó)家科技專項(xiàng)課題多項(xiàng),榮獲省部級(jí)科技進(jìn)步獎(jiǎng)一等獎(jiǎng)、三等獎(jiǎng)多項(xiàng),擁有多項(xiàng)發(fā)明專利和軟件著作權(quán)。曾榮獲“北京市優(yōu)秀教師”稱號(hào),多次被北京藍(lán)墨大數(shù)據(jù)技術(shù)研究院授予“北京市十大魅力教師”榮譽(yù)稱號(hào)。主講Java程序設(shè)計(jì)、Linux內(nèi)核原理與分析、網(wǎng)絡(luò)攻防實(shí)戰(zhàn)、密碼系統(tǒng)設(shè)計(jì)等課程。
- >
二體千字文
- >
月亮與六便士
- >
新文學(xué)天穹兩巨星--魯迅與胡適/紅燭學(xué)術(shù)叢書(紅燭學(xué)術(shù)叢書)
- >
莉莉和章魚
- >
名家?guī)阕x魯迅:故事新編
- >
小考拉的故事-套裝共3冊(cè)
- >
有舍有得是人生
- >
推拿