內容簡介
本書既是關於作業系統概念、結構和機制的教材,目的是儘可能清楚和全面地展示現代作業系統的本質和特點;也是講解作業系統的經典教材,不僅系統地講述了作業系統的基本概念、原理和方法,而且以當代***的作業系統Windows 10、UNIX、Android、Linux為例,展現了當代作業系統的本質和特點。全書共分背景知識、進程、記憶體、調度、輸入/輸出和檔案、嵌入式系統六部分,內容包括計算機系統概述、作業系統概述、進程描述和控制、執行緒、並發性:互斥和同步、並發:死鎖和飢餓、記憶體管理、虛擬記憶體、單處理器調度、多處理器和實時調度、I/O管理和磁碟調度、檔案管理、嵌入式作業系統、虛擬機、計算機安全技術、雲作業系統和IoT作業系統等。此外,本書配套網站提供了及時、生動的材料。
圖書目錄
第一部分 背景知識
第1章 計算機系統概述 2
1.1 基本構成 2
1.2 微處理器的發展 3
1.3 指令的執行 4
1.4 中斷 6
1.4.1 中斷和指令周期 7
1.4.2 中斷處理 8
1.4.3 多箇中斷 10
1.5 存儲器的層次結構 11
1.6 高速快取 13
1.6.1 動機 13
1.6.2 高速快取原理 13
1.6.3 高速快取設計 15
1.7 直接記憶體存取 15
1.8 多處理器和多核計算機組織結構 16
1.8.1 對稱多處理器 16
1.8.2 多核計算機 17
1.9 關鍵術語、複習題和習題 19
1.9.1 關鍵術語 19
1.9.2 複習題 19
1.9.3 習題 19
附錄1A 兩級存儲器的性能特徵 21
第2章 作業系統概述 26
2.1 作業系統的目標和功能 26
2.1.1 作為用戶/計算機接口的
作業系統 26
2.1.2 作為資源管理器的作業系統 27
2.1.3 作業系統的易擴展性 28
2.2 作業系統的演化 29
2.2.1 串列處理 29
2.2.2 簡單批處理系統 29
2.2.3 多道批處理系統 31
2.2.4 分時系統 33
2.3 主要成就 34
2.3.1 進程 34
2.3.2 記憶體管理 36
2.3.3 信息保護和安全 37
2.3.4 調度和資源管理 38
2.4 現代作業系統的特徵 39
2.5 容錯性 40
2.5.1 基本概念 41
2.5.2 錯誤 41
2.5.3 作業系統機制 42
2.6 多處理器和多核作業系統設計
考慮因素 42
2.6.1 對稱多處理器作業系統設計
考慮因素 42
2.6.2 多核作業系統設計考慮因素 43
2.7 微軟Windows系統簡介 44
2.7.1 背景 44
2.7.2 體系結構 44
2.7.3 客戶-伺服器模型 46
2.7.4 執行緒和SMP 47
2.7.5 Windows對象 47
2.8 傳統的UNIX系統 48
2.8.1 歷史 48
2.8.2 描述 49
2.9 現代UNIX系統 50
2.9.1 System V Release 4(SVR4) 51
2.9.2 BSD 51
2.9.3 Solaris 11 51
2.10 Linux作業系統 51
2.10.1 歷史 51
2.10.2 模組結構 52
2.10.3 核心組件 53
2.11 Android 55
2.11.1 Android軟體體系結構 56
2.11.2 Android運行時 57
2.11.3 Android系統體系結構 59
2.11.4 活動 60
2.11.5 電源管理 60
2.12 關鍵術語、複習題和習題 60
2.12.1 關鍵術語 60
2.12.2 複習題 61
2.12.3 習題 61
第二部分 進程
第3章 進程描述和控制 64
3.1 什麼是進程 64
3.1.1 背景 64
3.1.2 進程和進程控制塊 65
3.2 進程狀態 66
3.2.1 兩狀態進程模型 67
3.2.2 進程的創建和終止 68
3.2.3 五狀態模型 69
3.2.4 被掛起的進程 71
3.3 進程描述 74
3.3.1 作業系統的控制結構 75
3.3.2 進程控制結構 75
3.4 進程控制 79
3.4.1 執行模式 79
3.4.2 進程創建 80
3.4.3 進程切換 81
3.5 作業系統的執行 82
3.5.1 無進程核心 82
3.5.2 在用戶進程內運行 83
3.5.3 基於進程的作業系統 84
3.6 UNIX SVR4進程管理 84
3.6.1 進程狀態 84
3.6.2 進程描述 85
3.6.3 進程控制 87
3.7 小結 87
3.8 關鍵術語、複習題和習題 88
3.8.1 關鍵術語 88
3.8.2 複習題 88
3.8.3 習題 88
第4章 執行緒 91
4.1 進程和執行緒 91
4.1.1 多執行緒 91
4.1.2 執行緒的功能 93
4.2 執行緒分類 95
4.2.1 用戶級和核心級執行緒 95
4.2.2 其他方案 97
4.3 多核和多執行緒 99
4.3.1 多核系統上的軟體性能 99
4.3.2 套用示例:Valve遊戲軟體 100
4.4 Windows的進程和執行緒管理 101
4.4.1 後台任務管理和套用生命
周期 102
4.4.2 Windows進程 103
4.4.3 進程對象和執行緒對象 103
4.4.4 多執行緒 104
4.4.5 執行緒狀態 104
4.4.6 對作業系統子系統的支持 105
4.5 Solaris的執行緒和SMP管理 106
4.5.1 多執行緒體系結構 106
4.5.2 動機 106
4.5.3 進程結構 107
4.5.4 執行緒的執行 108
4.5.5 把中斷當作執行緒 108
4.6 Linux的進程和執行緒管理 109
4.6.1 Linux任務 109
4.6.2 Linux執行緒 110
4.6.3 Linux命名空間 111
4.7 Android的進程和執行緒管理 112
4.7.1 安卓套用 112
4.7.2 活動 113
4.7.3 進程和執行緒 114
4.8 Mac OS X的GCD技術 114
4.9 小結 116
4.10 關鍵術語、複習題和習題 116
4.10.1 關鍵術語 116
4.10.2 複習題 116
4.10.3 習題 117
第5章 並發:互斥和同步 121
5.1 互斥:軟體解決方法 122
5.1.1 Dekker算法 122
5.1.2 Peterson算法 125
5.2 並發的原理 126
5.2.1 一個簡單的例子 127
5.2.2 競爭條件 128
5.2.3 作業系統關注的問題 128
5.2.4 進程的互動 128
5.2.5 互斥的要求 131
5.3 互斥:硬體的支持 131
5.3.1 中斷禁用 131
5.3.2 專用機器指令 132
5.4 信號量 133
5.4.1 互斥 136
5.4.2 生產者/消費者問題 137
5.4.3 信號量的實現 142
5.5 管程 142
5.5.1 使用信號的管程 142
5.5.2 使用通知和廣播的管程 145
5.6 訊息傳遞 146
5.6.1 同步 147
5.6.2 定址 148
5.6.3 訊息格式 149
5.6.4 排隊原則 149
5.6.5 互斥 149
5.7 讀者/寫者問題 150
5.7.1 讀者優先 151
5.7.2 寫者優先 152
5.8 小結 154
5.9 關鍵術語、複習題和習題 154
5.9.1 關鍵術語 154
5.9.2 複習題 154
5.9.3 習題 155
第6章 並發:死鎖和飢餓 164
6.1 死鎖原理 164
6.1.1 可重用資源 167
6.1.2 可消耗資源 167
6.1.3 資源分配圖 168
6.1.4 死鎖的條件 169
6.2 死鎖預防 169
6.2.1 互斥 170
6.2.2 占有且等待 170
6.2.3 不可搶占 170
6.2.4 循環等待 170
6.3 死鎖避免 170
6.3.1 進程啟動拒絕 171
6.3.2 資源分配拒絕 171
6.4 死鎖檢測 174
6.4.1 死鎖檢測算法 174
6.4.2 恢復 175
6.5 一種綜合的死鎖策略 175
6.6 哲學家就餐問題 176
6.6.1 基於信號量的解決方案 177
6.6.2 基於管程的解決方案 178
6.7 UNIX並發機制 178
6.7.1 管道 179
6.7.2 訊息 179
6.7.3 共享記憶體 179
6.7.4 信號量 179
6.7.5 信號 180
6.8 Linux核心並發機制 180
6.8.1 原子操作 181
6.8.2 自旋鎖 182
6.8.3 信號量 183
6.8.4 屏障 184
6.9 Solaris執行緒同步原語 185
6.9.1 互斥鎖 186
6.9.2 信號量 186
6.9.3 多讀者/單寫者鎖 186
6.9.4 條件變數 187
6.10 Windows的並發機制 187
6.10.1 等待函式 187
6.10.2 分派器對象 187
6.10.3 臨界區 188
6.10.4 輕量級讀寫鎖和條件變數 188
6.10.5 鎖無關同步機制 189
6.11 Android進程間通信 189
6.12 小結 190
6.13 關鍵術語、複習題和習題 190
6.13.1 關鍵術語 190
6.13.2 複習題 190
6.13.3 習題 191
第三部分 記憶體
第7章 記憶體管理 196
7.1 記憶體管理的需求 196
7.1.1 重定位 196
7.1.2 保護 197
7.1.3 共享 197
7.1.4 邏輯組織 197
7.1.5 物理組織 198
7.2 記憶體分區 198
7.2.1 固定分區 198
7.2.2 動態分區 200
7.2.3 夥伴系統 202
7.2.4 重定位 203
7.3 分頁 204
7.4 分段 206
7.5 小結 207
7.6 關鍵術語、複習題和習題 207
7.6.1 關鍵術語 207
7.6.2 複習題 208
7.6.3 習題 208
附錄7A 載入和連結 210
第8章 虛擬記憶體 214
8.1 硬體和控制結構 214
8.1.1 局部性和虛擬記憶體 215
8.1.2 分頁 216
8.1.3 分段 222
8.1.4 段頁式 223
8.1.5 保護和共享 224
8.2 作業系統軟體 224
8.2.1 讀取策略 225
8.2.2 放置策略 226
8.2.3 置換策略 226
8.2.4 駐留集管理 230
8.2.5 清除策略 234
8.2.6 載入控制 234
8.3 UNIX和Solaris記憶體管理 235
8.3.1 分頁系統 235
8.3.2 核心記憶體分配器 237
8.4 Linux記憶體管理 238
8.4.1 虛擬記憶體 239
8.4.2 核心記憶體分配 240
8.5 Windows記憶體管理 240
8.5.1 Windows虛擬地址映射 241
8.5.2 Windows分頁 241
8.5.3 Windows交換 242
8.6 Android記憶體管理 242
8.7 小結 242
8.8 關鍵術語、複習題和習題 243
8.8.1 關鍵術語 243
8.8.2 複習題 243
8.8.3 習題 243
第四部分 調度
第9章 單處理器調度 248
9.1 處理器調度的類型 248
9.1.1 長程調度 249
9.1.2 中程調度 250
9.1.3 短程調度 250
9.2 調度算法 250
9.2.1 短程調度規則 250
9.2.2 優先權的使用 251
9.2.3 選擇調度策略 252
9.2.4 性能比較 258
9.2.5 公平共享調度 261
9.3 傳統的UNIX調度 263
9.4 小結 264
9.5 關鍵術語、複習題和習題 264
9.5.1 關鍵術語 264
9.5.2 複習題 264
9.5.3 習題 265
第10章 多處理器、多核和實時調度 268
10.1 多處理器和多核調度 268
10.1.1 粒度 268
10.1.2 設計問題 269
10.1.3 進程調度 270
10.1.4 執行緒調度 271
10.1.5 多核執行緒調度 275
10.2 實時調度 276
10.2.1 背景 276
10.2.2 實時作業系統的特點 276
10.2.3 實時調度 278
10.2.4 限期調度 279
10.2.5 速率單調調度 282
10.2.6 優先權反轉 284
10.3 Linux調度 285
10.3.1 實時調度 285
10.3.2 非實時調度 286
10.4 UNIX SVR4調度 287
10.5 FreeBSD調度程式 288
10.5.1 優先權 288
10.5.2 對稱多處理器與多核支持 289
10.6 Windows調度 290
10.6.1 進程和執行緒優先權 290
10.6.2 多處理器調度 291
10.7 小結 291
10.8 關鍵術語、複習題和習題 292
10.8.1 關鍵術語 292
10.8.2 複習題 292
10.8.3 習題 292
第五部分 輸入/輸出和檔案
第11章 I/O管理和磁碟調度 296
11.1 I/O設備 296
11.2 I/O功能的組織 297
11.2.1 I/O功能的發展 297
11.2.2 直接記憶體訪問 298
11.3 作業系統設計問題 299
11.3.1 設計目標 299
11.3.2 I/O功能的邏輯結構 300
11.4 I/O緩衝 301
11.4.1 單緩衝 301
11.4.2 雙緩衝 302
11.4.3 循環緩衝 302
11.4.4 緩衝的作用 302
11.5 磁碟調度 303
11.5.1 磁碟性能參數 303
11.5.2 磁碟調度策略 304
11.6 RAID 307
11.6.1 RAID級別0 310
11.6.2 RAID級別1 310
11.6.3 RAID級別2 311
11.6.4 RAID級別3 311
11.6.5 RAID級別4 312
11.6.6 RAID級別5 312
11.6.7 RAID級別6 312
11.7 磁碟高速快取 313
11.7.1 設計考慮因素 313
11.7.2 性能考慮因素 314
11.8 UNIX SVR 4 I/O 315
11.8.1 緩衝區高速緩衝 315
11.8.2 字元佇列 316
11.8.3 無緩衝I/O 316
11.8.4 UNIX設備 316
11.9 Linux I/O 317
11.9.1 磁碟調度 317
11.9.2 Linux頁面快取 319
11.10 Windows I/O 320
11.10.1 基本I/O機制 320
11.10.2 異步I/O和同步I/O 320
11.10.3 軟體RAID 321
11.10.4 卷影複製 321
11.10.5 卷加密 321
11.11 小結 321
11.12 關鍵術語、複習題和習題 322
11.12.1 關鍵術語 322
11.12.2 複習題 322
11.12.3 習題 322
第12章 檔案管理 324
12.1 概述 324
12.1.1 檔案和檔案系統 324
12.1.2 檔案結構 325
12.1.3 檔案管理系統 326
12.2 檔案組織和訪問 327
12.2.1 堆 328
12.2.2 順序檔案 328
12.2.3 索引順序檔案 329
12.2.4 索引檔案 329
12.2.5 直接檔案或散列檔案 330
12.3 B樹 330
12.4 檔案目錄 332
12.4.1 內容 332
12.4.2 結構 333
12.4.3 命名 334
12.5 檔案共享 335
12.5.1 訪問許可權 335
12.5.2 同時訪問 335
12.6 記錄組塊 336
12.7 輔存管理 337
12.7.1 檔案分配 337
12.7.2 空閒空間管理 339
12.7.3 卷 341
12.7.4 可靠性 341
12.8 UNIX檔案管理 341
12.8.1 索引節點 342
12.8.2 檔案分配 343
12.8.3 目錄 344
12.8.4 卷結構 344
12.9 Linux虛擬檔案系統 344
12.9.1 超級塊對象 345
12.9.2 索引節點對象 346
12.9.3 目錄項對象 346
12.9.4 檔案對象 346
12.9.5 快取 346
12.10 Windows檔案系統 347
12.10.1 NTFS的重要特徵 347
12.10.2 NTFS卷和檔案結構 347
12.10.3 可恢復性 349
12.11 Android檔案系統 350
12.11.1 檔案系統 350
12.11.2 SQLite 350
12.12 小結 351
12.13 關鍵術語、複習題和習題 351
12.13.1 關鍵術語 351
12.13.2 複習題 351
12.13.3 習題 352
第六部分 嵌入式系統
第13章 嵌入式作業系統 354
13.1 嵌入式系統 354
13.1.1 嵌入式系統概念 354
13.1.2 通用處理器和專用處理器 355
13.1.3 微處理器 355
13.1.4 微控制器 356
13.1.5 深度嵌入式系統 357
13.2 嵌入式作業系統的特性 357
13.2.1 主環境和目標環境 358
13.2.2 開發方法 359
13.2.3 適配現有的作業系統 359
13.2.4 根據目標建立的嵌入式
作業系統 359
13.3 嵌入式Linux 360
13.3.1 嵌入式Linux系統的特性 360
13.3.2 嵌入式Linux檔案系統 361
13.3.3 嵌入式Linux的優勢 361
13.3.4 μClinux 362
13.3.5 Android 363
13.4 TinyOS 364
13.4.1 無線感測器網路 364
13.4.2 TinyOS的目標 365
13.4.3 TinyOS的組件 365
13.4.4 TinyOS的調度程式 367
13.4.5 配置示例 367
13.4.6 TinyOS的資源接口 369
13.5 關鍵術語、複習題和習題 370
13.5.1 關鍵術語 370
13.5.2 複習題 370
13.5.3 習題 370
第14章 虛擬機 372
14.1 虛擬機概念 372
14.2 虛擬機管理程式 374
14.2.1 虛擬機管理程式 374
14.2.2 半虛擬化 375
14.2.3 硬體輔助虛擬化 376
14.2.4 虛擬設備 376
14.3 容器虛擬化 377
14.3.1 核心控制組 377
14.3.2 容器的概念 377
14.3.3 容器檔案系統 379
14.3.4 微服務 380
14.3.5 Docker 380
14.4 處理器問題 381
14.5 記憶體管理 382
14.6 輸入/輸出管理 383
14.7 VMware ESXi 384
14.8 微軟Hyper-V與Xen系列 385
14.9 Java虛擬機 386
14.10 Linux VServer虛擬機架構 386
14.10.1 架構 387
14.10.2 進程調度 387
14.11 小結 388
14.12 關鍵術語、複習題和習題 388
14.12.1 關鍵術語 388
14.12.2 複習題 389
14.12.3 習題 389
第15章 作業系統安全技術 390
15.1 入侵者與惡意軟體 390
15.1.1 系統訪問威脅 390
15.1.2 應對措施 391
15.2 緩衝區溢出 392
15.2.1 緩衝區溢出攻擊 392
15.2.2 編譯時防禦 394
15.2.3 運行時防禦 396
15.3 訪問控制 397
15.3.1 檔案系統訪問控制 397
15.3.2 訪問控制策略 399
15.4 UNIX訪問控制 402
15.4.1 傳統UNIX檔案訪問控制 402
15.4.2 UNIX中的訪問控制列表 403
15.5 作業系統加固 404
15.5.1 作業系統安裝:初始安裝
與後續更新 404
15.5.2 刪除不必要的服務、套用
與協定 405
15.5.3 對用戶、組和認證過程
進行配置 405
15.5.4 對資源控制進行配置 405
15.5.5 安裝額外的安全控制工具 406
15.5.6 對系統安全進行測試 406
15.6 安全性維護 406
15.6.1 記錄日誌 406
15.6.2 數據備份和存檔 407
15.7 Windows安全性 407
15.7.1 訪問控制方案 407
15.7.2 訪問令牌 408
15.7.3 安全描述符 408
15.8 小結 410
15.9 關鍵術語、複習題和習題 411
15.9.1 關鍵術語 411
15.9.2 複習題 411
15.9.3 習題 411
第16章 雲與物聯網作業系統 413
16.1 雲計算 413
16.1.1 雲計算要素 413
16.1.2 雲服務模型 414
16.1.3 雲部署模型 415
16.1.4 雲計算參考架構 416
16.2 雲作業系統 418
16.2.1 基礎設施即服務 419
16.2.2 雲作業系統的需求 420
16.2.3 雲作業系統的基本架構 420
16.2.4 OpenStack 424
16.3 物聯網 428
16.3.1 物聯網中的物 429
16.3.2 升級換代 429
16.3.3 物聯網支持設備的組件 429
16.3.4 物聯網和雲環境 429
16.4 物聯網作業系統 431
16.4.1 受限設備 431
16.4.2 物聯網作業系統的要求 432
16.4.3 物聯網作業系統架構 433
16.4.4 RIOT 434
16.5 關鍵術語和複習題 435
16.5.1 關鍵術語 435
16.5.2 複習題 436
附錄A 並發主題 437
附錄B 編程和作業系統項目 446
參考文獻 450