齣版者的話
譯者序
前言
第1章 概述 1
1.1 盒子裏有什麼 1
1.2 計算機係統中的抽象層次 1
1.3 操作係統的作用 3
1.4 盒子裏正在發生什麼事 5
1.4.1 在計算機上啓動應用程序 7
1.5 計算機硬件的演化 7
1.6 操作係統的演化 9
1.7 本書導讀 9
練習題 10
參考文獻注釋和擴展閱讀 10
第2章 處理器體係結構 12
2.1 處理器設計涉及什麼 12
2.2 如何設計指令集 13
2.3 常見的高級語言功能集 13
2.4 錶達式和賦值語句 14
2.4.1 操作數放在哪裏 14
2.4.2 在指令中如何指定內存地址 17
2.4.3 每個操作數應該有多寬 18
2.4.4 字節序 9
2.4.5 操作數打包以及字操作數的對齊 21
2.5 高級數據抽象 22
2.5.1 結構 23
2.5.2 數組 23
2.6 條件語句和循環 24
2.6.1 if-then-else語句 25
2.6.2 switch語句 26
2.6.3 循環語句 27
2.7 檢查點 27
2.8 編譯函數調用 27
2.8.1 調用者的狀態 28
2.8.2 過程調用剩餘的工作 30
2.8.3 軟件慣例 31
2.8.4 活動記錄 35
2.8.5 遞歸 36
2.8.6 幀指針 36
2.9 指令集體係結構選擇 38
2.9.1 額外的指令 38
2.9.2 額外的尋址模式 39
2.9.3 體係結構類型 39
2.9.4 指令格式 39
2.10 LC-2200指令集 42
2.10.1 指令格式 42
2.10.2 LC-2200寄存器組 43
2.11 影響處理器設計的問題 44
2.11.1 指令集 44
2.11.2 應用程序對指令集設計的影響 45
2.11.3 其他驅動處理器設計的問題 46
小結 47
練習題 47
參考文獻注釋和擴展閱讀 49
第3章 處理器實現 51
3.1 體係結構與實現 51
3.2 處理器實現涉及什麼 51
3.3 重要的硬件概念 52
3.3.1 電路 52
3.3.2 數據通路的硬件資源 52
3.3.3 邊沿觸發邏輯 53
3.3.4 連接數據通路元件 54
3.3.5 基於總綫的設計 57
3.3.6 有限狀態機 59
3.4 數據通路設計 60
3.4.1 ISA與數據通路寬度 61
3.4.2 時鍾脈衝寬度 62
3.4.3 檢查點 62
3.5 控製單元設計 62
3.5.1 ROM加狀態寄存器 63
3.5.2 FETCH宏狀態 65
3.5.3 DECODE宏狀態 68
3.5.4 EXECUTE宏狀態:ADD指令(R型指令部分) 68
3.5.5 EXECUTE宏狀態:NAND指令(R型指令部分) 71
3.5.6 EXECUTE宏狀態:JALR指令(J型指令部分) 71
3.5.7 EXECUTE宏狀態:LW指令(I型指令部分 72
3.5.8 EXECUTE宏狀態:SW和ADDI指令(I型指令部分) 75
3.5.9 EXECUTE宏狀態:BEQ指令(I型指令部分) 75
3.5.10 設計微程序中的條件分支 78
3.5.11 再談DECODE宏狀態 79
3.6 控製單元設計的另一種選擇 80
3.6.1 微程序控製 80
3.6.2 硬連綫控製 81
3.6.3 在兩種控製設計風格中選擇 82
小結 82
曆史迴顧 83
練習題 84
參考文獻注釋和擴展閱讀 86
第4章 中斷、陷入及異常 87
4.1 程序執行中的不連續性 88
4.2 處理程序不連續性 89
4.3 處理程序不連續性的體係結構改進 91
4.3.1 修改FSM 91
4.3.2 一個簡單的中斷處理過程 92
4.3.3 處理級聯中斷 92
4.3.4 從處理過程中返迴 95
4.3.5 檢查點 95
4.4 處理程序不連續性的硬件細節 96
4.4.1 中斷的數據通路細節 96
4.4.2 獲得處理過程地址的細節 97
4.4.3 保存/恢復棧 99
4.5 信息匯總 100
4.5.1 體係結構和硬件改進總結 100
4.5.2 工作中的中斷機製 100
小結 102
練習題 103
參考文獻注釋和擴展閱讀 104
第5章 處理器性能與流水綫處理器的設計 105
5.1 時間和空間性能指標 105
5.2 指令頻率 107
5.3 基準測試程序 108
5.4 提升處理器的性能 111
5.5 加速比 112
5.6 提升處理器的吞吐量 114
5.7 流水綫簡介 115
5.8 指令處理流水綫 115
5.9 簡單指令流水綫的問題 117
5.10 修正指令流水綫裏的問題 118
5.11 指令流水綫的數據通路元件 120
5.12 針對流水綫的體係結構與實現 121
5.12.1 指令穿過流水綫的過程詳解 122
5.12.2 流水綫寄存器的設計 124
5.12.3 各個階段的實現 125
5.13 冒險 125
5.13.1 結構性冒險 126
5.13.2 數據冒險 126
5.13.3 控製冒險 135
5.13.4 冒險總結 141
5.14 在流水綫處理器裏處理程序不連續性 142
5.15 處理器設計的高級話題 144
5.15.1 指令級並行 144
5.15.2 更深的流水綫 145
5.15.3 在亂序執行下再次討論程序不連續性 147
5.15.4 管理共享資源 148
5.15.5 功耗 149
5.15.6 多核處理器設計 149
5.15.7 Intel Core微架構:一個流水綫 150
小結 151
曆史迴顧 152
練習題 152
參考文獻注釋和擴展閱讀 156
第6章 處理器調度 157
6.1 引言 157
6.2 程序和進程 158
6.3 調度環境 161
6.4 調度基礎 162
6.5 性能指標 165
6.6 非搶占式調度算法 167
6.6.1 先到先服務 167
6.6.2 最短作業優先 170
6.6.3 優先級 171
6.7 搶占式調度算法 172
6.7.1 輪轉調度器 175
6.8 結閤優先級和搶占 178
6.9 元調度器 178
6.10 評價 179
6.11 調度對處理器體係結構的影響 180
小結和展望 181
Linux調度器—一個案例研究 181
曆史迴顧 183
練習題 185
參考文獻注釋和擴展閱讀 186
第7章 內存管理技術 187
7.1 內存管理器提供的功能 187
7.2 內存管理的簡單方案 189
7.3 內存分配方案 192
7.3.1 固定尺寸分區 192
7.3.2 變長分區 193
7.3.3 縮並 195
7.4 分頁虛擬內存 196
7.4.1 頁錶 197
7.4.2 支持分頁的硬件 199
7.4.3 頁錶的建立 199
7.4.4 虛擬和物理內存的相對大小 200
7.5 分段虛擬內存 200
7.5.1 支持分段的硬件 204
7.6 分頁和分段的比較 204
7.6.1 解讀CPU生成的地址 206
小結 207
曆史迴顧 208
MULTICS 209
Intel的內存體係結構 210
練習題 211
參考文獻注釋和擴展閱讀 212
第8章 頁式內存管理 213
8.1 按需分頁 213
8.1.1 按需分頁的硬件 213
8.1.2 頁錯誤處理程序 214
8.1.3 按需分頁內存管理的數據結構 214
8.1.4 頁錯誤解析 215
8.2 進程調度器和內存管理器間交互 217
8.3 頁替換策略 218
8.3.1 Belady的Min算法 219
8.3.2 隨機替換 219
8.3.3 先進先齣策略 219
8.3.4 最近最少使用策略 221
8.3.5 第二次機會頁替換算法 223
8.3.6 頁替換算法迴顧 225
8.4 優化內存管理 225
8.4.1 空閑頁幀池 225
8.4.2 顛簸 226
8.4.3 工作集 228
8.4.4 顛簸控製 229
8.5 其他考慮 229
8.6 旁路轉換緩存 230
8.6.1 TLB的地址轉換 231
8.7 內存管理的高級話題 232
8.7.1 多級頁錶 232
8.7.2 局部頁錶項的訪問權限 234
8.7.3 反嚮頁錶 234
小結 234
練習題 234
參考文獻注釋和擴展閱讀 236
第9章 分級存儲體係 237
9.1 緩存的概念 238
9.2 局部性原理 238
9.3 基本術語 238
9.4 多級存儲層次 239
9.5 緩存結構 241
9.6 直接映射緩存結構 241
9.6.1 緩存查找 243
9.6.2 緩存項中的字段 244
9.6.3 用於直接映射緩存的硬件 245
9.7 流水綫處理器設計的影響 247
9.8 緩存讀/寫算法 247
9.8.1 CPU對緩存的讀訪問 248
9.8.2 CPU對緩存的寫訪問 248
9.9 處理器流水綫中的緩存缺失處理 251
9.9.1 在流水綫性能上緩存缺失對內存延遲的影響 252
9.10 利用空間局部性提高緩存性能 253
9.10.1 增加塊大小對性能的影響 256
9.11 靈活的布局策略 257
9.11.1 全相關緩存 258
9.11.2 組相關緩存 259
9.11.3 組相關的極端情況 261
9.12 指令和數據緩存 263
9.13 降低缺失損失 264
9.14 緩存替換策略 264
9.15 缺失類型簡要說明 266
9.16 TLB和緩存整閤 268
9.17 緩存控製器 269
9.18 虛擬索引物理標記的緩存 270
9.19 緩存設計因素概述 271
9.20 主存的設計因素 272
9.20.1 簡單的主存 272
9.20.2 與緩存塊大小相匹配的主存和總綫 273
9.20.3 交錯式內存 273
9.21 現代主存係統分析 274
9.21.1 頁式DRAM 278
9.22 分級存儲體係的性能影響 279
小結 280
現代處理器的分級存儲體係(一個例子) 281
練習題 281
參考文獻注釋和擴展閱讀 283
第10章 輸入/輸齣和穩定性存儲 284
10.1 CPU和I/O設備間的通信 284
10.1.1 設備控製器 284
10.1.2 內存映射I/O 285
10.2 程控I/O 287
10.3 DMA 288
10.4 總綫 290
10.5 I/O處理器 291
10.6 設備驅動 292
10.6.1 例子 293
10.7 外圍設備 295
10.8 磁盤存儲器 296
10.8.1 磁盤技術的傳奇故事 302
10.9 磁盤調度算法 304
10.9.1 先到先服務 305
10.9.2 最短尋道時間優先 305
10.9.3 SCAN 305
10.9.4 C-SCAN 306
10.9.5 LOOK和C-LOOK 307
10.9.6 磁盤調度總結 307
10.9.7 算法比較 308
10.10 固態硬盤 309
10.11 I/O總綫和設備驅動的演化 310
10.11.1 設備驅動的動態負載 311
10.11.2 信息匯總 312
小結 314
練習題 314
參考文獻注釋和擴展閱讀 315
第11章 文件係統 317
11.1 屬性 317
11.2 在磁盤子係統上實現文件係統的設計選擇 321
11.2.1 連續分配 322
11.2.2 帶有溢齣區域的連續分配 324
11.2.3 鏈接分配 324
11.2.4 文件分配錶 325
11.2.5 索引分配 327
11.2.6 多級索引分配 328
11.2.7 混閤索引分配 328
11.2.8 不同分配策略的比較 331
11.3 信息匯總 331
11.3.1 索引節點 336
11.4 文件係統的組件 336
11.4.1 創建、寫入文件的剖析 337
11.5 各種子係統的交互 337
11.6 文件係統在物理媒介上的布局 340
11.6.1 內存中的數據結構 342
11.7 處理係統崩潰 343
11.8 其他物理媒介上的文件係統 343
11.9 現代文件係統一覽 344
11.9.1 Linux 344
11.9.2 Microsoft Windows 348
小結 349
練習題 350
參考文獻注釋和擴展閱讀 352
第12章 多綫程編程與多處理器 353
12.1 為什麼需要多綫程 353
12.2 綫程所需的編程支持 354
12.2.1 綫程創建和終止 354
12.2.2 綫程之間的通信 356
12.2.3 讀/寫衝突、競爭條件及不確定性 357
12.2.4 綫程之間的同步 361
12.2.5 綫程庫中數據類型的內部錶示 365
12.2.6 簡單的編程示例 366
12.2.7 死鎖和活鎖 369
12.2.8 條件變量 370
12.2.9 視頻處理示例的完整解決方案 373
12.2.10 解決方案的討論 374
12.2.11 重新檢查條件 375
12.3 綫程函數調用和多綫程編程概念總結 377
12.4 綫程編程的一些注意事項 379
12.5 使用綫程作為軟件結構抽象 379
12.6 POSIX pthread庫調用總結 379
12.7 操作係統對綫程的支持 382
12.7.1 用戶級綫程 383
12.7.2 內核級綫程 385
12.7.3 Solaris綫程:一個內核級綫程例子 386
12.7.4 綫程和庫 387
12.8 在單處理器上的多綫程的硬件支持 388
12.8.1 綫程創建、終止以及綫程間的通信 388
12.8.2 綫程之間的同步 388
12.8.3 原子的Test-and-Set指令 388
12.8.4 使用Test-and-Set指令的Lock算法 390
12.9 多處理器 391
12.9.1 頁錶 391
12.9.2 分級存儲體係 391
12.9.3 保證原子性 393
12.10 高級話題 393
12.10.1 操作係統話題 393
12.10.2 架構話題 403
12.10.3 未來之路:多核與眾核架構 412
小結 413
曆史迴顧 414
練習題 415
參考文獻注釋和擴展閱讀 417
第13章 網絡與網絡協議基礎知識 419
13.1 預備知識 419
13.2 基本術語 419
13.3 網絡軟件 423
13.4 協議棧 424
13.4.1 因特網協議棧 424
13.4.2 OSI模型 426
13.4.3 分層的實際問題 427
13.5 應用層 427
13.6 傳輸層 428
13.6.1 停止並等待協議 429
13.6.2 流水綫協議 431
13.6.3 可靠的流水綫協議 432
13.6.4 處理傳輸錯誤 436
13.6.5 因特網上的傳輸協議 437
13.6.6 傳輸層總結 438
13.7 網絡層 439
13.7.1 路由算法 439
13.7.2 因特網尋址 444
13.7.3 網絡服務模式 446
13.7.4 網絡路由與轉發 449
13.7.5 網絡層總結 450
13.8 鏈路層和局域網 450
13.8.1 以太網 451
13.8.2 CSMA/CD 451
13.8.3 IEEE 802. 3453
13.8.4 無綫局域網與IEEE 802. 11453
13.8.5 令牌環 454
13.8.6 其他鏈路層協議 456
13.9 網絡硬件 456
13.10 協議棧各層之間的關係 460
13.11 用於數據包傳輸的數據結構 460
13.11.1 TCP/IP包頭 461
13.12 消息傳輸時間 462
13.13 協議層功能總結 466
13.14 網絡軟件與操作係統 466
13.14.1 套接字庫 467
13.14.2 在操作係統中實現協議棧 468
13.14.3 網絡設備驅動程序 468
13.15 使用UNIX套接字進行網絡編程 469
13.16 網絡服務與高層協議 474
小結 475
曆史迴顧 475
練習題 480
參考文獻注釋和擴展閱讀 482
第14章 尾聲:旅途迴顧 483
14.1 處理器設計 483
14.2 進程 483
14.3 虛擬內存係統和內存管理 483
14.4 分級存儲體係 484
14.5 並行係統 484
14.6 輸入/輸齣係統 484
14.7 永久性存儲 484
14.8 網絡 485
結束語 485
附錄A 使用UNIX套接字進行網絡編程 486
參考文獻 495
索引 500
· · · · · · (
收起)