目錄
齣版者的話
譯者序
前言
作者簡介
第1章 引論 1
1.1 什麼是操作係統 2
1.1.1 作為擴展機器的操作係統 2
1.1.2 作為資源管理者的操作係統 3
1.2 操作係統的曆史 4
1.2.1 第一代(1945~1955):真空管和穿孔卡片 4
1.2.2 第二代(1955~1965):晶體管和批處理係統 4
1.2.3 第三代(1965~1980):集成電路和多道程序設計 6
1.2.4 第四代(1980年至今):個人計算機 8
1.2.5 第五代(1990年至今):移動計算機 10
1.3 計算機硬件簡介 11
1.3.1 處理器 12
1.3.2 存儲器 14
1.3.3 磁盤 15
1.3.4 I/O設備 16
1.3.5 總綫 18
1.3.6 啓動計算機 19
1.4 操作係統大觀園 20
1.4.1 大型機操作係統 20
1.4.2 服務器操作係統 20
1.4.3 多處理器操作係統 20
1.4.4 個人計算機操作係統 20
1.4.5 掌上計算機操作係統 21
1.4.6 嵌入式操作係統 21
1.4.7 傳感器節點操作係統 21
1.4.8 實時操作係統 21
1.4.9 智能卡操作係統 21
1.5 操作係統概念 22
1.5.1 進程 22
1.5.2 地址空間 23
1.5.3 文件 23
1.5.4 輸入/輸齣 25
1.5.5 保護 25
1.5.6 shell 25
1.5.7 個體重復係統發育 26
1.6 係統調用 28
1.6.1 用於進程管理的係統調用 31
1.6.2 用於文件管理的係統調用 32
1.6.3 用於目錄管理的係統調用 32
1.6.4 各種係統調用 34
1.6.5 Windows Win32 API 34
1.7 操作係統結構 35
1.7.1 單體係統 36
1.7.2 層次式係統 36
1.7.3 微內核 37
1.7.4 客戶端–服務器模式 38
1.7.5 虛擬機 39
1.7.6 外核 41
1.8 依靠C的世界 41
1.8.1 C語言 41
1.8.2 頭文件 41
1.8.3 大型編程項目 43
1.8.4 運行模型 43
1.9 有關操作係統的研究 44
1.10 本書其他部分概要 45
1.11 公製單位 45
1.12 小結 46
習題 46
第2章 進程與綫程 48
2.1 進程 48
2.1.1 進程模型 48
2.1.2 進程的創建 49
2.1.3 進程的終止 51
2.1.4 進程的層次結構 51
2.1.5 進程的狀態 51
2.1.6 進程的實現 53
2.1.7 多道程序設計模型 54
2.2 綫程 54
2.2.1 綫程的使用 54
2.2.2 經典的綫程模型 57
2.2.3 POSIX綫程 60
2.2.4 在用戶空間中實現綫程 60
2.2.5 在內核中實現綫程 63
2.2.6 混閤實現 63
2.2.7 調度程序激活機製 64
2.2.8 彈齣式綫程 64
2.2.9 使單綫程代碼多綫程化 65
2.3 進程間通信 67
2.3.1 競爭條件 67
2.3.2 臨界區 68
2.3.3 忙等待的互斥 68
2.3.4 睡眠與喚醒 71
2.3.5 信號量 73
2.3.6 互斥量 74
2.3.7 管程 78
2.3.8 消息傳遞 81
2.3.9 屏障 82
2.3.10 避免鎖:讀–復製–更新 83
2.4 調度 84
2.4.1 調度簡介 84
2.4.2 批處理係統中的調度 88
2.4.3 交互式係統中的調度 89
2.4.4 實時係統中的調度 92
2.4.5 策略和機製 93
2.4.6 綫程調度 93
2.5 經典的IPC問題 94
2.5.1 哲學傢就餐問題 94
2.5.2 讀者–寫者問題 96
2.6 有關進程與綫程的研究 97
2.7 小結 97
習題 98
第3章 內存管理 102
3.1 無存儲器抽象 102
3.2 一種存儲器抽象:地址空間 104
3.2.1 地址空間的概念 104
3.2.2 交換技術 106
3.2.3 空閑內存管理 107
3.3 虛擬內存 109
3.3.1 分頁 110
3.3.2 頁錶 112
3.3.3 加速分頁過程 112
3.3.4 針對大內存的頁錶 114
3.4 頁麵置換算法 117
3.4.1 最優頁麵置換算法 117
3.4.2 最近未使用頁麵置換算法 118
3.4.3 先進先齣頁麵置換算法 118
3.4.4 第二次機會頁麵置換算法 118
3.4.5 時鍾頁麵置換算法 119
3.4.6 最近最少使用頁麵置換算法 119
3.4.7 用軟件模擬LRU 120
3.4.8 工作集頁麵置換算法 121
3.4.9 工作集時鍾頁麵置換算法 123
3.4.10 頁麵置換算法小結 124
3.5 分頁係統中的設計問題 124
3.5.1 局部分配策略與全局分配策略 124
3.5.2 負載控製 126
3.5.3 頁麵大小 126
3.5.4 分離的指令空間和數據空間 127
3.5.5 共享頁麵 128
3.5.6 共享庫 128
3.5.7 內存映射文件 130
3.5.8 清除策略 130
3.5.9 虛擬內存接口 130
3.6 有關實現的問題 131
3.6.1 與分頁有關的工作 131
3.6.2 缺頁中斷處理 131
3.6.3 指令備份 132
3.6.4 鎖定內存中的頁麵 132
3.6.5 後備存儲 133
3.6.6 策略和機製的分離 134
3.7 分段 134
3.7.1 純分段的實現 136
3.7.2 分段和分頁結閤:MULTICS 136
3.7.3 分段和分頁結閤:Intel x86 138
3.8 有關內存管理的研究 141
3.9 小結 141
習題 142
第4章 文件係統 147
4.1 文件 148
4.1.1 文件命名 148
4.1.2 文件結構 149
4.1.3 文件類型 149
4.1.4 文件訪問 151
4.1.5 文件屬性 151
4.1.6 文件操作 152
4.1.7 使用文件係統調用的一個示例程序 152
4.2 目錄 154
4.2.1 一級目錄係統 154
4.2.2 層次目錄係統 154
4.2.3 路徑名 154
4.2.4 目錄操作 156
4.3 文件係統的實現 157
4.3.1 文件係統布局 157
4.3.2 文件的實現 157
4.3.3 目錄的實現 160
4.3.4 共享文件 162
4.3.5 日誌結構文件係統 163
4.3.6 日誌文件係統 164
4.3.7 虛擬文件係統 165
4.4 文件係統管理和優化 167
4.4.1 磁盤空間管理 167
4.4.2 文件係統備份 171
4.4.3 文件係統的一緻性 174
4.4.4 文件係統性能 176
4.4.5 磁盤碎片整理 178
4.5 文件係統實例 179
4.5.1 MS-DOS文件係統 179
4.5.2 UNIX V7文件係統 181
4.5.3 CD-ROM文件係統 182
4.6 有關文件係統的研究 185
4.7 小結 185
習題 186
第5章 輸入/輸齣 189
5.1 I/O硬件原理 189
5.1.1 I/O設備 189
5.1.2 設備控製器 190
5.1.3 內存映射I/O 190
5.1.4 直接存儲器存取 192
5.1.5 重溫中斷 194
5.2 I/O軟件原理 196
5.2.1 I/O軟件的目標 196
5.2.2 程序控製I/O 197
5.2.3 中斷驅動I/O 198
5.2.4 使用DMA的I/O 199
5.3 I/O軟件層次 199
5.3.1 中斷處理程序 199
5.3.2 設備驅動程序 200
5.3.3 與設備無關的I/O軟件 202
5.3.4 用戶空間的I/O軟件 205
5.4 盤 206
5.4.1 盤的硬件 206
5.4.2 磁盤格式化 211
5.4.3 磁盤臂調度算法 213
5.4.4 錯誤處理 215
5.4.5 穩定存儲器 216
5.5 時鍾 218
5.5.1 時鍾硬件 218
5.5.2 時鍾軟件 219
5.5.3 軟定時器 221
5.6 用戶界麵:鍵盤、鼠標和監視器 222
5.6.1 輸入軟件 222
5.6.2 輸齣軟件 225
5.7 瘦客戶機 235
5.8 電源管理 236
5.8.1 硬件問題 236
5.8.2 操作係統問題 237
5.8.3 應用程序問題 241
5.9 有關輸入/輸齣的研究 241
5.10 小結 242
習題 243
第6章 死鎖 247
6.1 資源 247
6.1.1 可搶占資源和不可搶占資源 247
6.1.2 資源獲取 248
6.2 死鎖簡介 249
6.2.1 資源死鎖的條件 249
6.2.2 死鎖建模 249
6.3 鴕鳥算法 251
6.4 死鎖檢測和死鎖恢復 251
6.4.1 每種類型一個資源的死鎖檢測 252
6.4.2 每種類型多個資源的死鎖檢測 253
6.4.3 從死鎖中恢復 254
6.5 死鎖避免 255
6.5.1 資源軌跡圖 255
6.5.2 安全狀態和不安全狀態 256
6.5.3 單個資源的銀行傢算法 257
6.5.4 多個資源的銀行傢算法 257
6.6 死鎖預防 258
6.6.1 破壞互斥條件 258
6.6.2 破壞占有並等待條件 259
6.6.3 破壞不可搶占條件 259
6.6.4 破壞環路等待條件 259
6.7 其他問題 260
6.7.1 兩階段加鎖 260
6.7.2 通信死鎖 260
6.7.3 活鎖 261
6.7.4 飢餓 262
6.8 有關死鎖的研究 262
6.9 小結 263
習題 263
第7章 虛擬化和雲 267
7.1 曆史 268
7.2 虛擬化的必要條件 268
7.3 第一類和第二類虛擬機管理程序 270
7.4 高效虛擬化技術 271
7.4.1 在不支持虛擬化的平颱上實現虛擬化 271
7.4.2 虛擬化的開銷 273
7.5 虛擬機管理程序是正確的微內核嗎 273
7.6 內存虛擬化 275
7.7 I/O虛擬化 277
7.8 虛擬裝置 279
7.9 多核CPU上的虛擬機 279
7.10 授權問題 279
7.11 雲 280
7.11.1 雲即服務 280
7.11.2 虛擬機遷移 280
7.11.3 檢查點 281
7.12 案例研究:VMware 281
7.12.1 VMware的早期曆史 281
7.12.2 VMware Workstation 282
7.12.3 將虛擬化引入x86的挑戰 282
7.12.4 VMware Workstation解決方案概覽 283
7.12.5 VMware Workstation的演變 288
7.12.6 VMware的第一類虛擬機管理程序ESX Server 288
7.13 有關虛擬化和雲的研究 289
習題 289
第8章 多處理機係統 291
8.1 多處理機 292
8.1.1 多處理機硬件 292
8.1.2 多處理機操作係統類型 298
8.1.3 多處理機同步 301
8.1.4 多處理機調度 303
8.2 多計算機 306
8.2.1 多計算機硬件 307
8.2.2 低層通信軟件 309
8.2.3 用戶層通信軟件 311
8.2.4 遠程過程調用 313
8.2.5 分布式共享存儲器 314
8.2.6 多計算機調度 317
8.2.7 負載平衡 318
8.3 分布式係統 319
8.3.1 網絡硬件 321
8.3.2 網絡服務和協議 323
8.3.3 基於文檔的中間件 325
8.3.4 基於文件係統的中間件 326
8.3.5 基於對象的中間件 329
8.3.6 基於協作的中間件 330
8.4 有關多處理機係統的研究 332
8.5 小結 332
習題 333
第9章 安全 336
9.1 環境安全 337
9.1.1 威脅 337
9.1.2 入侵者 339
9.2 操作係統完全 339
9.2.1 可信係統 339
9.2.2 可信計算基 340
9.3 保護機製 341
9.3.1 保護域 341
9.3.2 訪問控製列錶 342
9.3.3 權能字 344
9.4 安全係統的形式化模型 345
9.4.1 多級安全 346
9.4.2 隱蔽信道 348
9.5 密碼學原理 350
9.5.1 私鑰加密技術 351
9.5.2 公鑰加密技術 351
9.5.3 單嚮函數 352
9.5.4 數字簽名 352
9.5.5 可信平颱模塊 353
9.6 認證 354
9.6.1 使用物理識彆的認證方式 358
9.6.2 使用生物識彆的認證方式 360
9.7 軟件漏洞 361
9.7.1 緩衝區溢齣攻擊 361
9.7.2 格式化字符串攻擊 367
9.7.3 懸垂指針 369
9.7.4 空指針間接引用攻擊 369
9.7.5 整數溢齣攻擊 370
9.7.6 命令注入攻擊 370
9.7.7 檢查時間/使用時間攻擊 371
9.8 內部攻擊 371
9.8.1 邏輯炸彈 371
9.8.2 後門陷阱 372
9.8.3 登錄欺騙 372
9.9 惡意軟件 373
9.9.1 特洛伊木馬 374
9.9.2 病毒 375
9.9.3 蠕蟲 381
9.9.4 間諜軟件 382
9.9.5 rootkit 384
9.10 防禦 386
9.10.1 防火牆 387
9.10.2 反病毒和抑製反病毒技術 388
9.10.3 代碼簽名 392
9.10.4 囚禁 392
9.10.5 基於模型的入侵檢測 393
9.10.6 封裝移動代碼 394
9.10.7 Java安全性 396
9.11 有關安全的研究 397
9.12 小結 398
習題 398
第10章 實例研究1:UNIX、Linux和Android 403
10.1 UNIX與Linux的曆史 403
10.1.1 UNICS 403
10.1.2 PDP-11 UNIX 404
10.1.3 可移植的UNIX 404
10.1.4 Berkeley UNIX 405
10.1.5 標準UNIX 405
10.1.6 MINIX 406
10.1.7 Linux 407
10.2 Linux簡介 408
10.2.1 Linux的設計目標 408
10.2.2 到Linux的接口 409
10.2.3 shell 410
10.2.4 Linux應用程序 412
10.2.5 內核結構 413
10.3 Linux中的進程 414
10.3.1 基本概念 414
10.3.2 Linux中進程管理相關的係統調用 416
10.3.3 Linux中進程與綫程的實現 418
10.3.4 Linux中的調度 422
10.3.5 啓動Linux係統 425
10.4 Linux中的內存管理 426
10.4.1 基本概念 427
10.4.2 Linux中的內存管理係統調用 429
10.4.3 Linux中內存管理的實現 429
10.4.4 Linux中的分頁 433
10.5 Linux中的I/O係統 434
10.5.1 基本概念 434
10.5.2 網絡 435
10.5.3 Linux中的I/O係統調用 436
10.5.4 I/O在Linux中的實現 437
10.5.5 Linux中的模塊 439
10.6 Linux文件係統 439
10.6.1 基本概念 439
10.6.2 Linux中的文件係統調用 442
10.6.3 Linux文件係統的實現 444
10.6.4 NFS:網絡文件係統 449
10.7 Linux的安全性 452
10.7.1 基本概念 452
10.7.2 Linux中安全相關的係統調用 454
10.7.3 Linux中的安全實現 454
10.8 Android 455
10.8.1 Android與Google 455
10.8.2 Android的曆史 455
10.8.3 設計目標 457
10.8.4 Android體係結構 458
10.8.5 Linux擴展 459
10.8.6 Dalvik 461
10.8.7 Binder IPC 462
10.8.8 Android應用 467
10.8.9 意圖 475
10.8.10 應用程序沙箱 475
10.8.11 安全性 476
10.8.12 進程模型 479
10.9 小結 482
習題 483
第11章 實例研究2:Windows 8 487
11.1 Windows 8.1的曆史 487
11.1.1 20世紀80年代:MS-DOS 487
11.1.2 20世紀90年代:基於MS-DOS的Windows 488
11.1.3 21世紀00年代:基於NT的Windows 488
11.1.4 Windows Vista 489
11.1.5 21世紀10年代:現代Windows 490
11.2 Windows 編程 490
11.2.1 原生NT應用編程接口 493
11.2.2 Win32應用編程接口 494
11.2.3 Windows注冊錶 496
11.3 係統結構 498
11.3.1 操作係統結構 498
11.3.2 啓動Windows 506
11.3.3 對象管理器的實現 507
11.3.4 子係統、DLL和用戶態服務 513
11.4 Windows中的進程和綫程 514
11.4.1 基本概念 514
11.4.2 作業、進程、綫程和縴程管理API調用 518
11.4.3 進程和綫程的實現 521
11.5 內存管理 525
11.5.1 基本概念 525
11.5.2 內存管理係統調用 527
11.5.3 存儲管理的實現 528
11.6 Windows的高速緩存 533
11.7 Windows的I/O 534
11.7.1 基本概念 534
11.7.2 I/O的API調用 535
11.7.3 I/O實現 536
11.8 Windows NT文件係統 539
11.8.1 基本概念 540
11.8.2 NTFS文件係統的實現 540
11.9 Windows電源管理 546
11.10 Windows 8中的安全 547
11.10.1 基本概念 548
11.10.2 安全相關的API調用 548
11.10.3 安全實現 549
11.10.4 安全緩解技術 551
11.11 小結 552
習題 553
第12章 操作係統設計 556
12.1 設計問題的本質 556
12.1.1 目標 556
12.1.2 設計操作係統為什麼睏難 557
12.2 接口設計 558
12.2.1 指導原則 558
12.2.2 範型 559
12.2.3 係統調用接口 561
12.3 實現 563
12.3.1 係統結構 563
12.3.2 機製與策略 565
12.3.3 正交性 566
12.3.4 命名 566
12.3.5 綁定的時機 567
12.3.6 靜態與動態結構 567
12.3.7 自頂嚮下與自底嚮上的實現 568
12.3.8 同步通信與異步通信 568
12.3.9 實用技術 569
12.4 性能 572
12.4.1 操作係統為什麼運行緩慢 572
12.4.2 什麼應該優化 573
12.4.3 空間–時間的權衡 573
12.4.4 緩存 575
12.4.5 綫索 575
12.4.6 利用局部性 576
12.4.7 優化常見的情況 576
12.5 項目管理 576
12.5.1 人月神話 576
12.5.2 團隊結構 577
12.5.3 經驗的作用 578
12.5.4 沒有銀彈 579
12.6 操作係統設計的趨勢 579
12.6.1 虛擬化與雲 579
12.6.2 眾核芯片 580
12.6.3 大型地址空間操作係統 580
12.6.4 無縫的數據訪問 580
12.6.5 電池供電的計算機 581
12.6.6 嵌入式係統 581
12.7 小結 581
習題 582
第13章 參考書目與文獻 584
13.1 進行深入閱讀的建議 584
13.1.1 引論 584
13.1.2 進程與綫程 584
13.1.3 內存管理 585
13.1.4 文件係統 585
13.1.5 輸入/輸齣 585
13.1.6 死鎖 586
13.1.7 虛擬化和雲 586
13.1.8 多處理機係統 586
13.1.9 安全 587
13.1.10 實例研究1:UNIX、Linux和Android 588
13.1.11 實例研究2:Windows 8 588
13.1.12 操作係統設計 589
13.2 按字母順序排序的參考文獻 589
· · · · · · (
收起)