內容簡介
本書在詳細介紹作業系統發展歷史的基礎上,系統地闡述了傳統作業系統五大基本功能的實現原理、所需的結構和主要涉及的技術,具體包括用戶接口、進程與處理器管理、記憶體管理、I/O系統管理和檔案系統等內容。全書共12章,前11章每章的*後一節對Linux作業系統的核心進行了詳細剖析,第12章引入了國產優秀作業系統華為EulerOS的基礎內容,目的在於使讀者通過本書的學習,能夠對一個完整的作業系統的整體框架結構和工作原理有比較透徹的了解,為以後在開源作業系統核心中進行開發打下基礎。
本書每章章末都有小結和習題。附錄部分提供了課程配套的實驗指導書。
本書可作為計算機類專業本科生的教材,還可供計算機及相關專業從業人員參考。
圖書目錄
目錄
Contents
篇 作業系統基本原理
第 1 章 緒論 ……………………………………2
1.1 作業系統的定義 …………………………2
1.2 作業系統的功能 …………………………4
1.2.1 處理器管理 ………………………4
1.2.2 存儲器管理 ………………………5
1.2.3 設備管理 …………………………6
1.2.4 檔案管理 …………………………7
1.2.5 用戶接口 …………………………8
1.3 作業系統的發展歷史 …………………10
1.3.1 無作業系統階段 ………………11
1.3.2 監督程式階段 …………………13
1.3.3 多道程式系統 …………………14
1.3.4 快速發展階段 …………………15
1.4 Linux系統簡介 ………………………19
1.4.1 Linux發展歷史 ………………19
1.4.2 Linux核心版本 ………………22
1.4.3 Linux核心構架 ………………22
1.4.4 Linux核心開發的特點 ………24
1.4.5 Linux核心中GNU C和
標準C的區別 …………………25
1.4.6 Linux核心中常用的數據結構
和算法 …………………………29
小結 …………………………………………36
習題 …………………………………………37
第 2 章 作業系統的結構 ……………………38
2.1 作業系統接口 …………………………39
2.1.1 命令接口基本概念 ……………39
2.1.2 Linux的命令接口 ……………39
2.2 系統調用 ………………………………41
2.2.1 系統調用的基本原理 …………41
2.2.2 系統調用與API的關係 ………43
2.2.3 系統調用的工作過程 …………43
2.3 作業系統結構 …………………………44
2.3.1 整體式結構 ……………………44
2.3.2 層次式結構 ……………………44
2.3.3 微核心 …………………………45
2.3.4 模組化結構 ……………………46
2.4 虛擬機 …………………………………47
2.4.1 虛擬機的實現原理 ……………47
2.4.2 虛擬機的主要實例 ……………49
2.5 Linux 系統調用 ………………………50
2.5.1 Linux系統調用的原理 ………50
2.5.2 Linux上的系統調用實現過程 …51
2.5.3 系統調用的實例分析 …………53
2.5.4 一個簡單的系統調用的實現 …54
2.6 Linux模組的實現機制及其管理 ……55
小結 …………………………………………57
習題 …………………………………………57
第 3 章 進程與執行緒 …………………………58
3.1 進程基礎 ………………………………58
3.1.1 程式的順序執行和並發執行 …58
3.1.2 進程的定義與特徵 ……………59
3.1.3 進程的狀態及其轉換 …………61
3.2 進程控制 ………………………………63
3.2.1 進程的執行模式 ………………63
3.2.2 進程切換 ………………………63
3.2.3 進程的創建與終止 ……………64
3.3 執行緒 ……………………………………68
3.3.1 執行緒的引入 ……………………68
3.3.2 執行緒與進程的比較 ……………69
3.3.3 用戶級執行緒與核心級執行緒 ……70
3.3.4 執行緒庫 …………………………71
3.4 進程與執行緒比較舉例 …………………75
3.5 與進程或執行緒相關的其他技術 ………77
3.5.1 寫時複製 ………………………77
3.5.2 執行緒池 …………………………79
3.5.3 進程間的遠程通信 ……………79
3.6 Linux系統中的進程與執行緒 …………86
3.6.1 Linux進程簡介 ………………86
3.6.2 進程狀態及轉換 ………………86
3.6.3 Linux進程控制 ………………89
3.6.4 Linux中的執行緒 ………………93
小結 …………………………………………97
習題 …………………………………………98
第 4 章 進程同步 ……………………………99
4.1 進程的互斥 ……………………………99
4.1.1 臨界資源和臨界區 ……………99
4.1.2 使用硬體實現互斥 ……………101
4.1.3 信號量實現互斥 ………………103
4.2 進程的同步 ……………………………106
4.2.1 信號量與同步 …………………106
4.2.2 生產者/消費者問題 …………108
4.2.3 讀者/寫者問題 ………………109
4.2.4 信號量機制的其他套用 ………110
4.3 進程之間的通信 ………………………113
4.3.1 共享記憶體方式 …………………113
4.3.2 管道通信 ………………………114
4.3.3 訊息傳遞通信 …………………116
4.4 管程 ……………………………………119
4.4.1 管程的概念 ……………………119
4.4.2 使用管程解決生產者-消費
者問題 …………………………122
4.5 Linux核心同步機制 …………………123
4.5.1 原子操作 ………………………124
4.5.2 per-CPU變數 …………………125
4.5.3 自旋鎖 …………………………125
4.5.4 讀寫自旋鎖 ……………………127
4.5.5 信號量 …………………………128
4.5.6 互斥體 …………………………130
4.5.7 順序鎖 …………………………130
4.5.8 記憶體屏障 ………………………132
小結 …………………………………………133
習題 …………………………………………135
第 5 章 死鎖 …………………………………137
5.1 死鎖的原理 ……………………………137
5.1.1 資源分配圖 ……………………137
5.1.2 死鎖的條件 ……………………138
5.2 死鎖的處理方法 ………………………139
5.2.1 死鎖的預防 ……………………139
5.2.2 死鎖的避免 ……………………141
5.2.3 死鎖的檢測 ……………………145
5.3 死鎖的解除 ……………………………146
5.4 經典死鎖問題——哲學家進餐問題 …147
5.5 Linux作業系統中的死鎖解決方案 …149
5.5.1 D狀態死鎖 ……………………149
5.5.2 R狀態死鎖 ……………………150
小結 …………………………………………151
習題 …………………………………………152
第 6 章 處理器調度 …………………………154
6.1 處理器調度算法的目標 ………………154
6.2 分級調度 ………………………………155
6.2.1 長程調度 ………………………155
6.2.2 中程調度 ………………………155
6.2.3 短程調度 ………………………156
6.3 常用的調度算法 ………………………156
6.3.1 先來先服務調度算法 …………156
6.3.2 優先權調度算法 ………………157
6.3.3 短作業優先調度算法 ………158
6.3.4 回響比優先調度算法 ……160
6.3.5 輪轉調度算法 …………………161
6.3.6 多級反饋輪轉調度算法 ………162
6.3.7 實時系統的調度算法 …………162
6.4 多處理器調度 …………………………165
6.4.1 多處理器調度原理 ……………165
6.4.2 處理器親和性 …………………166
6.4.3 負載均衡 ………………………166
6.5 Linux系統的進程調度 ………………167
6.5.1 Linux調度器的簡史 …………167
6.5.2 Linux進程調度的優先權表示 …168
6.5.3 Linux核心調度策略 …………169
6.5.4 CFS調度算法 …………………171
6.5.5 實時調度策略 …………………173
小結 …………………………………………173
習題 …………………………………………174
第 7 章 記憶體管理 ……………………………177
7.1 記憶體相關基本概念 ……………………177
7.1.1 什麼是記憶體 ……………………177
7.1.2 指令運行的原理 ………………177
7.1.3 地址重定位 ……………………178
7.1.4 程式連結 ………………………179
7.2 記憶體的覆蓋與交換 ……………………180
7.2.1 記憶體覆蓋 ………………………180
7.2.2 記憶體交換 ………………………181
7.3 記憶體空間連續分配方案 ………………182
7.3.1 單一連續分配 …………………182
7.3.2 固定分區分配 …………………182
7.3.3 動態分區分配 …………………184
7.4 分頁存儲管理 …………………………187
7.4.1 分頁存儲管理的基本思想 ……187
7.4.2 地址變換機構 …………………189
7.4.3 兩級或多級頁表 ………………191
7.4.4 頁的共享 ………………………192
7.5 段式存儲管理 …………………………193
7.5.1 段式存儲管理的基本思想 ……193
7.5.2 段式存儲管理的地址轉換 ……193
7.5.3 段的共享 ………………………194
7.6 段頁式存儲管理 ………………………196
7.7 存儲保護的實現 ………………………197
7.8 虛擬存儲技術 …………………………198
7.8.1 請求分頁存儲管理 ……………199
7.8.2 頁面置換算法 …………………201
7.8.3 頁面緩衝算法 …………………205
7.8.4 頁幀分配算法 …………………205
7.8.5 頁幀分配策略 …………………206
7.9 Linux系統記憶體管理 …………………208
7.9.1 Linux進程地址空間 …………208
7.9.2 物理記憶體管理 …………………210
7.9.3 Linux核心高端記憶體 …………213
7.9.4 進程用戶空間管理 ……………215
小結 …………………………………………227
習題 …………………………………………228
第 8 章 檔案系統 ……………………………230
8.1 檔案和檔案系統 ………………………230
8.1.1 檔案 ……………………………230
8.1.2 檔案系統層次結構 ……………231
8.2 檔案的邏輯結構 ………………………233
8.2.1 堆結構檔案 ……………………233
8.2.2 順序結構檔案 …………………234
8.2.3 散列結構檔案 …………………234
8.2.4 檔案的讀寫方式 ………………236
8.3 檔案的物理結構與組織 ………………238
8.3.1 磁碟的成組與分解 …………238
8.3.2 連續檔案 ………………………239
8.3.3 連結檔案 ………………………240
8.3.4 索引檔案 ………………………241
8.4 目錄管理 ………………………………243
8.4.1 檔案控制塊 ……………………243
8.4.2 檔案目錄 ………………………243
8.4.3 目錄結構 ………………………244
8.5 空閒空間的管理 ………………………246
8.5.1 位示圖 ………………………246
8.5.2 空閒塊列表 ……………………247
8.5.3 空閒鍊表法 ……………………247
8.6 檔案的存取控制 ………………………249
8.6.1 檔案共享 ………………………249
8.6.2 檔案保護 ………………………251
8.7 檔案系統的其他功能 …………………253
8.7.1 檔案系統調用的實現 …………253
8.7.2 虛擬檔案系統 …………………255
8.8 Linux檔案系統 ………………………255
8.8.1 Linux支持的常見檔案系統 …256
8.8.2 VFS中的數據結構 …………256
8.8.3 檔案系統相關的數據結構 ……265
8.8.4 和進程相關的數據結構 ………267
小結 …………………………………………269
習題 …………………………………………270
第 9 章 I/O系統 ………………………………271
9.1 I/O系統概述 …………………………271
9.2 I/O設備與控制器 ……………………272
9.2.1 I/O設備的分類 ………………272
9.2.2 設備控制器的結構 ……………273
9.2.3 設備控制器的I/O連線埠 ………273
9.2.4 設備控制器的基本功能 ………274
9.3 設備數據傳輸控制方法 ………………275
9.3.1 輪詢方式 ………………………275
9.3.2 中斷控制方式 …………………276
9.3.3 DMA方式 ……………………277
9.3.4 通道方式 ………………………278
9.4 緩衝技術 ………………………………279
9.4.1 緩衝區的引入 …………………279
9.4.2 緩衝區的分類 …………………280
9.4.3 緩衝技術的種類 ………………281
9.4.4 虛擬設備的實現 ………………283
9.5 設備的分配 ……………………………284
9.5.1 設備分配的原則 ………………284
9.5.2 設備分配相關的技術 …………285
9.5.3 設備分配相關的數據結構 ……286
9.6 I/O相關軟體 …………………………287
9.6.1 I/O軟體的基本概念 …………287
9.6.2 中斷服務程式 …………………288
9.6.3 設備驅動程式 …………………290
9.6.4 設備獨立性軟體 ………………290
9.6.5 用戶層I/O軟體 ………………291
9.7 Linux系統I/O相關技術 ……………291
9.7.1 Linux系統設備及驅動
程式簡介 ……………………291
9.7.2 Linux系統支持的I/O數據
傳輸方式 ………………………295
9.7.3 I/O 相關重要數據結構 ………296
9.7.4 Linux系統中斷處理機制 ……300
小結 …………………………………………307
習題 …………………………………………308
第 10 章 大容量存儲器 ………………………309
10.1 大容量存儲器簡介 …………………309
10.1.1 硬碟 …………………………309
10.1.2 光碟 …………………………311
10.1.3 磁帶 …………………………312
10.2 磁碟基礎知識 ………………………313
10.2.1 磁碟結構 ……………………313
10.2.2 磁碟工作原理 ………………314
10.2.3 磁碟讀寫原理 ………………315
10.3 磁碟調度 ……………………………316
10.3.1 FCFS調度算法 ………………317
10.3.2 SSTF調度算法 ………………317
10.3.3 SCAN調度算法 ……………318
10.3.4 C-SCAN 調度算法 …………319
10.3.5 LOOK 調度算法 ……………320
10.3.6 磁碟調度算法的選擇 ………320
10.4 磁碟初始化 …………………………321
10.5 初始引導 ……………………………321
10.5.1 引導相關概念 ………………321
10.5.2 初始引導過程 ………………323
10.6 網路存儲技術 ………………………325
10.6.1 直接連線存儲 ………………325
10.6.2 網路附加存儲 ………………326
10.6.3 存儲區域網路 ………………327
10.6.4 新的網路存儲技術IP-SAN …327
10.6.5 雲存儲 ………………………328
10.7 Linux磁碟調度算法 …………………329
10.7.1 NOOP調度算法 ……………329
10.7.2 CFQ調度算法 ………………330
10.7.3 DEADLINE調度算法 ………330
10.7.4 ANTICIPATORY調度算法 …331
小結 …………………………………………331
習題 …………………………………………332
第11章 系統安全 ……………………………334
11.1 系統安全的定義 ……………………334
11.1.1 安全需求 ……………………334
11.1.2 安全層次 ……………………336
11.1.3 安全問題 ……………………337
11.2 系統威脅的分類 ……………………339
11.2.1 系統漏洞 ……………………339
11.2.2 惡意代碼 ……………………340
11.2.3 連線埠掃描威脅 ………………343
11.3 系統安全防禦 ………………………343
11.3.1 密碼術 ………………………343
11.3.2 用戶驗證 ……………………347
11.3.3 安全策略 ……………………348
11.3.4 入侵檢測 ……………………349
11.3.5 病毒防護 ……………………351
11.3.6 審計、會計和日誌 …………351
11.3.7 防火牆 ………………………352
11.4 Linux安全基礎 ………………………354
11.4.1 Linux 安全模組 ………………354
11.4.2 Linux許可權系統 ………………355
小結 …………………………………………358
習題 …………………………………………358
第二篇 國產作業系統實例
第12章 EulerOS 作業系統 …………………360
12.1 EulerOS系統概述 …………………360
12.1.1 EulerOS系統的特點 …………360
12.1.2 系統架構 ……………………362
12.1.3 典型套用場景 ………………362
12.2 EulerOS系統的相關術語 …………364
12.2.1 虛擬機和容器 ………………364
12.2.2 STaaS解決方案 ……………365
12.3 EulerOS系統的架構支持 …………366
12.4 EulerOS系統的主要軟體支持 ……368
12.4.1 虛擬化平台 …………………368
12.4.2 資料庫服務 …………………369
12.4.3 分散式服務 …………………370
12.4.4 其他軟體 ……………………370
12.5 EulerOS系統功能特性 ……………371
12.5.1 系統管理 ……………………371
12.5.2 網路 …………………………374
12.5.3 記憶體管理 ……………………375
12.5.4 處理器調度 …………………375
12.5.5 調測運維 ……………………376
12.5.6 性能/開關說明 ………………377
12.6 容器的介紹 …………………………378
12.6.1 iSula自研容器 ………………378
12.6.2 容器存儲Elara ………………379
12.6.3 雲核IVS場景 ………………381
12.7 安全的管理 …………………………382
附錄A EulerOS系統部分接口 ……………384
附錄B Linux常用命令 ………………………385
附錄C 作業系統實驗指導書 …………………386
參考文獻…………………………………………388