內容簡介
本書是一本關於作業系統的概念、結構和機制的教材,其目的是儘可能清楚和全面地展現當代作業系統的本質和特點。本書是為高等院校師生和專業人員編寫的。作為教材,本書對應於計算機科學、計算機工程和電子工程專業一個學期的作業系統課程。書中的專題包括由IEEE和ACM計算機委員會的計算課程聯合工作組,為計算機科學專業的本科生推薦的計算機課程(ComputerCurricula2001),同時也包括由上述聯合工作組推薦的計算機科學2002聯合學位課程指南(GuidelinesforAssociate-DegreeCurriculainComputerScience2002)中的專題。本書還是一本基礎參考書,同時也適於自學。
圖書目錄
出版者的話
譯者序
前言
第0章 讀者指南 1
0.1 本書概述 1
0.2 讀者和教師的學習路線圖 1
0.3 Internet和Web資源 2
第一部分 背景
第1章 計算機系統概述 6
1.1 基本構成 6
1.2 處理器暫存器 6
1.2.1 用戶可見暫存器 7
1.2.2 控制和狀態暫存器 8
1.3 指令的執行 9
1.3.1 取指令和執行指令 9
1.3.2 I/O函式 11
1.4 中斷 11
1.4.1 中斷和指令周期 12
1.4.2 中斷處理 14
1.4.3 多箇中斷 15
1.4.4 多道程式設計 17
1.5 存儲器的層次結構 17
1.6 高速快取 20
1.6.1 動機 20
1.6.2 高速快取原理 20
1.6.3 高速快取設計 21
1.7 I/O通信技術 22
1.7.1 可程式I/O 22
1.7.2 中斷驅動I/O 22
1.7.3 直接記憶體存取 24
1.8 推薦讀物和網站 24
1.9 關鍵術語、複習題和習題 25
附錄1A 兩級存儲器的性能特徵 27
附錄1B 過程控制 30
第2章 作業系統概述 33
2.1 作業系統的目標和功能 33
2.1.1 作為用戶/計算機接口的
2.1.1 作業系統 33
2.1.2 作為資源管理器的操作
2.1.1 系統 34
2.1.3 作業系統的易擴展性 35
2.2 作業系統的發展 35
2.2.1 串列處理 35
2.2.2 簡單批處理系統 36
2.2.3 多道程式設計批處理系統 38
2.2.4 分時系統 40
2.3 主要的成就 42
2.3.1 進程 42
2.3.2 記憶體管理 44
2.3.3 信息保護和安全 46
2.3.4 調度和資源管理 46
2.3.5 系統結構 47
2.4 現代作業系統的特徵 49
2.5 微軟的Windows 概述 51
2.5.1 歷史 51
2.5.2 單用戶多任務 53
2.5.3 體系結構 53
2.5.4 客戶/伺服器模型 56
2.5.5 執行緒和SMP 57
2.5.6 Windows對象 57
2.6 傳統的UNIX系統 58
2.6.1 歷史 58
2.6.2 描述 59
2.7 現代UNIX系統 60
2.7.1 系統V版本4(SVR4) 60
2.7.2 BSD 61
2.7.3 Solaris 10 61
2.8 Linux作業系統 61
2.8.1 歷史 62
2.8.2 模組結構 63
2.8.3 核心組件 64
2.9 推薦讀物和網站 67
2.10 關鍵術語、複習題和習題 68
第二部分 進程
第3章 進程描述和控制 73
3.1 什麼是進程 73
3.1.1 背景 73
3.1.2 進程和進程控制塊 74
3.2 進程狀態 75
3.2.1 兩狀態進程模型 76
3.2.2 進程的創建和終止 77
3.2.3 五狀態模型 78
3.2.4 被掛起的進程 81
3.3 進程描述 84
3.3.1 作業系統的控制結構 85
3.3.2 進程控制結構 86
3.4 進程控制 90
3.4.1 執行模式 90
3.4.2 進程創建 91
3.4.3 進程切換 92
3.5 作業系統的執行 93
3.5.1 無進程的核心 94
3.5.2 在用戶進程中執行 94
3.5.3 基於進程的作業系統 95
3.6 安全問題 95
3.6.1 系統訪問威脅 96
3.6.2 對抗措施 96
3.7 UNIX SVR4進程管理 98
3.7.1 進程狀態 98
3.7.2 進程描述 99
3.7.3 進程控制 101
3.8 小結 102
3.9 推薦讀物 102
3.10 關鍵術語、複習題和習題 102
編程項目1:開發一個shell程式 105
第4章 執行緒、對稱多處理(SMP)
第4章 和微核心 107
4.1 進程和執行緒 107
4.1.1 多執行緒 107
4.1.2 執行緒功能特性 109
4.1.3 例子:Adobe PageMaker 111
4.1.4 用戶級和核心級執行緒 112
4.1.5 其他方案 115
4.2 對稱多處理 116
4.2.1 SMP體系結構 116
4.2.2 SMP系統的組織結構 117
4.2.3 多處理器作業系統的
4.2.3 設計思考 118
4.3 微核心 119
4.3.1 微核心體系結構 119
4.3.2 微核心組織結構的優點 120
4.3.3 微核心性能 121
4.3.4 微核心設計 121
4.4 Windows執行緒和SMP管理 122
4.4.1 進程對象和執行緒對象 123
4.4.2 多執行緒 125
4.4.3 執行緒狀態 125
4.4.4 對作業系統子系統的支持 126
4.4.5 對稱多處理的支持 126
4.5 Solaris的執行緒和SMP管理 127
4.5.1 多執行緒體系結構 127
4.5.2 動機 127
4.5.3 進程結構 128
4.5.4 執行緒的執行 129
4.5.5 把中斷當做執行緒 129
4.6 Linux的進程和執行緒管理 130
4.6.1 Linux任務 130
4.6.2 Linux執行緒 131
4.7 小結 132
4.8 推薦讀物 133
4.9 關鍵術語、複習題和習題 133
第5章 並發性:互斥和同步 138
5.1 並發的原理 139
5.1.1 一個簡單的例子 139
5.1.2 競爭條件 141
5.1.3 作業系統關注的問題 141
5.1.4 進程的互動 141
5.1.5 互斥的要求 144
5.2 互斥:硬體的支持 144
5.2.1 中斷禁用 144
5.2.2 專用機器指令 145
5.3 信號量 147
5.3.1 互斥 150
5.3.2 生產者/消費者問題 151
5.3.3 信號量的實現 154
5.4 管程 155
5.4.1 使用信號的管程 155
5.4.2 使用通知和廣播的管程 158
5.5 訊息傳遞 159
5.5.1 同步 160
5.5.2 定址 161
5.5.3 訊息格式 162
5.5.4 排隊原則 162
5.5.5 互斥 162
5.6 讀者-寫者問題 163
5.6.1 讀者優先 164
5.6.2 寫者優先 164
5.7 小結 166
5.8 推薦讀物 167
5.9 關鍵術語、複習題和習題 167
第6章 並發:死鎖和飢餓 178
6.1 死鎖的原理 178
6.1.1 可重用資源 180
6.1.2 可消耗資源 181
6.1.3 資源分配圖 182
6.1.4 死鎖的條件 183
6.2 死鎖預防 184
6.2.1 互斥 184
6.2.2 占有且等待 184
6.2.3 不可搶占 184
6.2.4 循環等待 184
6.3 死鎖避免 185
6.3.1 進程啟動拒絕 185
6.3.2 資源分配拒絕 186
6.4 死鎖檢測 189
6.4.1 死鎖檢測算法 189
6.4.2 恢復 190
6.5 一種綜合的死鎖策略 190
6.6 哲學家就餐問題 191
6.6.1 使用信號量解決方案 191
6.6.2 使用管程解決方案 192
6.7 UNIX的並發機制 192
6.7.1 管道 192
6.7.2 訊息 193
6.7.3 共享記憶體 193
6.7.4 信號量 194
6.7.5 信號 194
6.8 Linux核心並發機制 195
6.8.1 原子操作 195
6.8.2 自旋鎖 196
6.8.3 信號量 197
6.8.4 屏障 199
6.9 Solaris執行緒同步原語 199
6.9.1 互斥鎖 200
6.9.2 信號量 200
6.9.3 多讀者/單寫者鎖 201
6.9.4 條件變數 201
6.10 Windows並發機制 201
6.10.1 等待函式 201
6.10.2 分派器對象 202
6.10.3 臨界區 203
6.10.4 輕量級讀寫鎖和條件變數 203
6.11 小結 204
6.12 推薦讀物 204
6.13 關鍵術語、複習題和習題 205
第三部分 記憶體
第7章 記憶體管理 210
7.1 記憶體管理的需求 210
7.1.1 重定位 210
7.1.2 保護 211
7.1.3 共享 211
7.1.4 邏輯組織 211
7.1.5 物理組織 211
7.2 記憶體分區 212
7.2.1 固定分區 212
7.2.2 動態分區 214
7.2.3 夥伴系統 216
7.2.4 重定位 218
7.3 分頁 219
7.4 分段 222
7.5 安全問題 222
7.5.1 緩衝區溢出攻擊 222
7.5.2 預防緩衝區溢出 225
7.6 小結 225
7.7 推薦讀物 225
7.8 關鍵術語、複習題和習題 225
附錄7A 載入和連結 228
第8章 虛擬記憶體 232
8.1 硬體和控制結構 232
8.1.1 局部性和虛擬記憶體 233
8.1.2 分頁 235
8.1.3 分段 242
8.1.4 段頁式 243
8.1.5 保護和共享 244
8.2 作業系統軟體 244
8.2.1 讀取策略 245
8.2.2 放置策略 246
8.2.3 置換策略 246
8.2.4 駐留集管理 251
8.2.5 清除策略 255
8.2.6 載入控制 255
8.3 UNIX和Solaris記憶體管理 257
8.3.1 分頁系統 257
8.3.2 核心記憶體分配器 259
8.4 Linux記憶體管理 260
8.4.1 Linux虛擬記憶體 260
8.4.2 核心記憶體分配 261
8.5 Windows記憶體管理 262
8.5.1 Windows虛擬地址映射 263
8.5.2 Windows分頁 263
8.6 小結 264
8.7 推薦讀物和網站 264
8.8 關鍵術語、複習題和習題 265
附錄8A 散列表 268
第四部分 調度
第9章 單處理器調度 272
9.1 處理器調度的類型 272
9.1.1 長程調度 273
9.1.2 中程調度 274
9.1.3 短程調度 274
9.2 調度算法 274
9.2.1 短程調度準則 274
9.2.2 優先權的使用 275
9.2.3 選擇調度策略 276
9.2.4 性能比較 284
9.2.5 公平共享調度 287
9.3 傳統的UNIX調度 289
9.4 小結 290
9.5 推薦讀物 291
9.6 關鍵術語、複習題和習題 291
附錄9A 回響時間 294
附錄9B 排隊系統 296
編程項目2:主機調度shell程式 299
第10章 多處理器和實時調度 304
10.1 多處理器調度 304
10.1.1 粒度 304
10.1.2 設計問題 307
10.1.3 進程調度 308
10.1.4 執行緒調度 309
10.2 實時調度 312
10.2.1 背景 312
10.2.2 實時作業系統的特點 313
10.2.3 實時調度 315
10.2.4 限期調度 316
10.2.5 速率單調調度 319
10.2.6 優先權反轉 321
10.3 Linux調度 322
10.3.1 實時調度 322
10.3.2 非實時調度 323
10.4 UNIX SVR4調度 325
10.5 Windows調度 326
10.5.1 進程和執行緒優先權 326
10.5.2 多處理器調度 328
10.6 小結 328
10.7 推薦讀物 328
10.8 關鍵術語、複習題和習題 329
第五部分 I/O和檔案
第11章 I/O管理和磁碟調度 334
11.1 I/O設備 334
11.2 I/O功能的組織 335
11.2.1 I/O功能的發展 335
11.2.2 直接存儲器訪問 336
11.3 作業系統設計問題 337
11.3.1 設計目標 337
11.3.2 I/O功能的邏輯結構 338
11.4 I/O緩衝 339
11.4.1 單緩衝 340
11.4.2 雙緩衝 341
11.4.3 循環緩衝 341
11.4.4 緩衝的作用 341
11.5 磁碟調度 342
11.5.1 磁碟性能參數 342
11.5.2 磁碟調度策略 344
11.6 RAID 347
11.6.1 RAID級別0 349
11.6.2 RAID級別1 350
11.6.3 RAID級別2 351
11.6.4 RAID級別3 351
11.6.5 RAID級別4 352
11.6.6 RAID級別5 353
11.6.7 RAID級別6 353
11.7 磁碟高速快取 353
11.7.1 設計考慮 353
11.7.2 性能考慮 355
11.8 UNIX SVR4 I/O 355
11.8.1 緩衝區高速快取 356
11.8.2 字元佇列 356
11.8.3 無緩衝I/O 357
11.8.4 UNIX設備 357
11.9 Linux I/O 357
11.9.1 磁碟調度 358
11.9.2 Linux頁面快取 360
11.10 Windows I/O 360
11.10.1 基本I/O機制 360
11.10.2 異步I/O和同步I/O 361
11.10.3 軟體RAID 361
11.10.4 卷影複製 361
11.10.5 卷加密 362
11.11 小結 362
11.12 推薦讀物 362
11.13 關鍵術語、複習題和習題 363
附錄11A 磁碟存儲設備 365
第12章 檔案管理 371
12.1 概述 371
12.1.1 檔案和檔案系統 371
12.1.2 檔案結構 371
12.1.3 檔案管理系統 373
12.2 檔案組織和訪問 375
12.2.1 堆 376
12.2.2 順序檔案 376
12.2.3 索引順序檔案 377
12.2.4 索引檔案 377
12.2.5 直接檔案或散列檔案 378
12.3 檔案 378
12.3.1 內容 378
12.3.2 結構 379
12.3.3 命名 380
12.4 檔案共享 381
12.4.1 訪問許可權 381
12.4.2 同時訪問 381
12.5 記錄組塊 382
12.6 二級存儲管理 383
12.6.1 檔案分配 383
12.6.2 空閒空間的管理 387
12.6.3 卷 388
12.6.4 可靠性 388
12.7 檔案系統安全 389
12.8 UNIX檔案管理 390
12.8.1 索引節點 391
12.8.2 檔案分配 392
12.8.3 393
12.8.4 卷結構 393
12.8.5 傳統的UNIX檔案訪問
6.10.4 控制 393
12.8.6 UNIX中的訪問控制列表 394
12.9 Linux虛擬檔案系統 395
12.9.1 超級塊對象 397
12.9.2 索引節點對象 397
12.9.3 項對象 398
12.9.4 檔案對象 398
12.10 Windows檔案系統 398
12.10.1 NTFS的重要特徵 398
12.10.2 NTFS卷和檔案結構 399
12.10.3 可恢復性 401
12.11 小結 402
12.12 推薦讀物 402
12.13 關鍵術語、複習題和習題 403
第六部分 嵌入式系統
第13章 嵌入式作業系統 406
13.1 嵌入式系統 406
13.2 嵌入式作業系統的特點 407
13.2.1 移植現有的商業作業系統 408
13.2.2 為特定目的構建的嵌入式
6.10.4 作業系統 408
13.3 eCos 409
13.3.1 可配置性 409
13.3.2 eCos組件 411
13.3.3 eCos調度程式 414
13.3.4 eCos執行緒同步 415
13.4 TinyOS 419
13.4.1 無線感測器網路 420
13.4.2 TinyOS的目標 420
13.4.3 TinyOS的組件 421
13.4.4 TinyOS的調度程式 423
13.4.5 配置例子 423
13.4.6 TinyOS的資源接口 425
13.5 推薦讀物和網站 426
13.6 關鍵術語、複習題和習題 426
第七部分 安全
第14章 計算機安全威脅 430
14.1 計算機安全的概念 430
14.2 威脅、攻擊和資產 431
14.2.1 威脅和攻擊 431
14.2.2 威脅和資產 432
14.3 入侵者 434
14.3.1 入侵者行為模式 435
14.3.2 入侵技術 437
14.4 惡意軟體概述 437
14.4.1 後門 437
14.4.2 邏輯炸彈 438
14.4.3 特洛伊木馬 438
14.4.4 移動代碼 438
14.4.5 多威脅惡意軟體 439
14.5 病毒、蠕蟲與殭屍 440
14.5.1 病毒 440
14.5.2 蠕蟲 443
14.5.3 殭屍 445
14.6 rootkits 447
14.6.1 rootkit安裝 447
14.6.2 系統級調用攻擊 447
14.7 推薦讀物和網站 448
14.8 關鍵術語、複習題和習題 448
第15章 計算機安全技術 451
15.1 身份驗證 451
15.1.1 身份驗證方法 451
15.1.2 基於密碼的身份驗證 451
15.1.3 基於令牌的身份驗證 453
15.1.4 生物特徵識別認證 454
15.2 訪問控制 455
15.2.1 自主訪問控制 456
15.2.2 基於角色的訪問控制 458
15.3 入侵檢測 460
15.3.1 基本原則 460
15.3.2 基於主機的入侵檢測技術 461
15.3.3 審計記錄 462
15.4 惡意軟體防禦 463
15.4.1 反病毒方法 463
15.4.2 蠕蟲對策 465
15.4.3 自動代理程式的對策 466
15.4.4 rootkit對策 466
15.5 處理緩衝區溢出攻擊 467
15.5.1 編譯時防禦 467
15.5.2 運行時防禦 469
15.6 Windows Vista安全性 470
15.6.1 訪問控制方案 470
15.6.2 訪問令牌 471
15.6.3 安全描述符 471
15.7 推薦讀物和網站 474
15.8 關鍵術語、複習題和習題 475
第八部分 分散式系統
第16章 分散式處理、客戶/伺服器和
第16章 集群 481
16.1 客戶/伺服器計算模型 481
16.1.1 什麼是客戶/伺服器
16.1.1 計算模型 481
16.1.2 客戶/伺服器模型的套用 482
16.1.3 中間件 486
16.2 分散式訊息傳遞 487
16.2.1 可靠性與不可靠性 488
16.2.2 阻塞與無阻塞 488
16.3 遠程過程調用 489
16.3.1 參數傳遞 490
16.3.2 參數表示 490
16.3.3 客戶/伺服器綁定 490
16.3.4 同步和異步 490
16.3.5 面向對象機制 491
16.4 集群 491
16.4.1 集群的配置 491
16.4.2 作業系統的設計問題 493
16.4.3 集群計算機的體系結構 494
16.4.4 集群與SMP的比較 495
16.5 Windows集群伺服器 495
16.6 Sun集群 496
16.6.1 對象和通信支持 497
16.6.2 進程管理 497
16.6.3 網路連線 497
16.6.4 全局檔案系統 498
16.7 Beowulf和Linux集群 498
16.7.1 Beowulf特徵 498
16.7.2 Beowulf軟體 499
16.8 小結 500
16.9 推薦讀物和網站 500
16.10 關鍵術語、複習題和習題 501
附錄A 並發主題 503
附錄B 面向對象設計 516
附錄C 編程和作業系統項目 523
術語表 528
參考文獻 536