傳統的計算機課程體係人為地割裂瞭解決問題時所需技能的綜閤性。例如匯編語言、計算機原理、計算機係統結構、操作係統和編譯原理分彆從不同角度介紹瞭計算機的硬件和軟件係統,但是隨著多核係統日漸成為主流,這種軟硬件分離的教學方法變得不切實際。
國內外大學都在這方麵展開瞭探索,即如何用一種綜閤的方法來介紹計算機係統的相關內容。卡內基·梅隆大學 的《深入理解計算機係統》是目前比較成功的探索,它主要從程序員視角來講解計算機係統,內容偏嚮係統軟件(特彆是操作係統),國內外很多大學已采用該教材作為課程的基礎。而佐治亞理工學院的這本教材則是另一個有益的嘗試,書中計算機係統結構和操作係統的內容基本平衡,旨在讓學生瞭解計算機體係結構和係統軟件之間的關係,為進一步深入學習計算機體係結構、操作係統和網絡的高級課程或研究生課程,在這些領域進一步深造奠定良好的基礎。
《計算機係統:係統架構與操作係統的高度集成》采用集成方法,係統地講解瞭計算機係統的軟件和硬件知識。全書分為5個模塊:處理器、內存係統、存儲係統、並行係統和網絡,分彆介紹並討論瞭處理器及其相關的軟件問題、內存係統和內存分級體係、I/O和文件係統、操作係統問題及支持並行編程的多處理器中相應體係結構特點、網絡硬件的發展和處理各種網絡行為的網絡協議堆的特點等。
Umakishore Ramachandran,
擁有威斯康星大學麥迪遜分校計算機科學專業博士學位。現在是佐治亞理工學院計算機係教授,STAR Center & Korean Programs中心主任。主要研究興趣是體係結構設計、程序設計和並行分布式係統分析。曾獲得NSF授予的美國總統青年研究人員奬、佐治亞理工學院優秀博士論文指導奬、傑齣教師奬等。 2014年,他被選為IEEE會士。
William D. Leahy Jr.
現為佐治亞理工學院計算機係講師,講授計算機科學的入門課程。他擁有佐治亞理工學院計算機科學碩士學位,在加入學術界之前,他有24年工業界的從業經驗。
陳文光,
清華大學計算機係教授。現為ACM中國理事會副主席;中國計算機學會傑齣會員和傑齣講者,副秘書長。主要研究領域為操作係統、編譯器與並行計算。講授《計算機原理與係統結構》《計算機係統性能分析》等本科生、研究生課程。獲國傢科技進步二等奬一次,部級科技一等奬兩次,部級科技進步二等奬兩次。在計算機係統結構、程序設計語言與編譯器、並行計算和軟件的國際一流會議(如PLDI、PPoPP、PACT、ICSE、OOPSLA、Supercomputing CGO等)上連續發錶多篇論文。PLDI 2012、PPoPP 2013、2014和CGO 2014程序委員會委員。任《Communication of ACM China Edition》主編,《Journal of Computer Science and Technology》《軟件學報》等學術期刊編委。
齣版者的話
譯者序
前言
第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 修改FSM91
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
MULTICS209
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 頁式DRAM278
9.22 分級存儲體係的性能影響279
小結280
現代處理器的分級存儲體係(一個例子)281
練習題281
參考文獻注釋和擴展閱讀283
第10章 輸入/輸齣和穩定性存儲284
10.1 CPU和I/O設備間的通信284
10.1.1 設備控製器284
10.1.2 內存映射I/O285
10.2 程控I/O287
10.3 DMA288
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 SCAN305
10.9.4 C-SCAN306
10.9.5 LOOK和C-LOOK307
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 Linux344
11.9.2 Microsoft Windows348
小結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/CD451
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
Computer Systems: An Integrated Approach to Architecture and Operating Systems
為什麼在計算機係統領域需要有一本新書
和高中生談論計算機會讓人感到興奮。人們對“盒子(計算機機箱)裏”有什麼東西有一種神秘感,正是那個盒子裏的東西使計算機能夠完成諸如讓用戶玩有很棒圖形的視頻遊戲、播放音樂(不管是RAP還是交響樂)、發送即時消息給用戶的朋友等功能。本書的目的就是與讀者一起開展一段揭示盒子裏有什麼秘密的旅程。作為即將開展的旅程的一瞥,讓我們在一開始就錶明,讓這個盒子變得有趣的並不僅僅是硬件,還包括軟件和硬件是如何結閤起來完成各種功能的。因此,本書所采用的途徑是把軟件和硬件放在一起觀察,看它們是如何相互幫助以及如何協同起來讓計算機變得有趣而且有用的。我們把這個過程稱作“打開盒子”—即揭開盒子裏有什麼這個秘密:我們查看盒子內部並理解如何設計關鍵的硬件單元(處理器、內存以及外設控製器),理解要管理計算機中的所有硬件資源,包括處理器、內存、I/O和硬盤、多處理器以及網絡所需的操作係統抽象。因此,這是一本計算機係統教學的入門課程教材,采用瞭一種新穎的集成教學法來介紹相關內容。
本書的目標是讓學生在本科生涯(計算機科學或計算機工程專業)的早期就在相關主題方麵接觸足夠寬泛的知識。本書的內容是為用軟硬件集成的方式進行課程教學而寫的,這種方式使得學生可以瞭解計算機體係結構和係統軟件之間的關係。書中的材料可以作為4學分的半年學期課程教材,或者作為5學分的季度課程教材,或是作為每季度3學分的兩季度的課程係列的教材。基於本書的課程可以為學生打下很好的基礎,以進一步深入學習計算機體係結構、操作係統和網絡的高級課程或研究生課程,在這些領域進一步深造。此外,這類課程可以盡早激發學生對計算機係統的興趣,對學生在本科期間參加研究工作也有幫助。
本書的主要特點(除瞭處理器和內存係統之外)如下:
1)詳細介紹瞭存儲係統;
2)專門用一章介紹瞭網絡問題;
3)專門用一章介紹瞭多綫程和多進程編程。
教學風格
本書采用的教學風格是“發現”而非“教導”或“灌輸”。此外,內容是以“自頂嚮下”的方式展現的,讀者首先看到我們要解決的問題,然後看到解決方案。以內存管理部分(第8章)為例。我們首先提齣問題“什麼是內存管理”,一旦理解瞭內存管理的需求,我們再開始探討內存管理所需的軟件技術和相應的硬件支持。因此,本書是以一種講故事的方式來進行概念展現,學生們看起來很喜歡這種方式。在適當的地方,我們在不同章節用一些例題來闡明觀點。
我們在撰寫本書的時候始終以學生為中心。書中包含大量例題,可以幫助學生固化剛剛討論過的概念。從我們作為教師的經驗來看,學生確實喜歡瞭解曆史背景(那些對計算的演化起到重要影響的著名的計算機科學傢和機構)和現狀,以及我們是怎麼一步一步發展過來的。這些曆史片段遍布在全書中。除此之外,在必要的時候,在若乾章我們都包括瞭一節從曆史角度進行的迴顧。我們從學生那裏學到並采用的另一個措施是在文中直接給齣參考文獻,而不是在文末纔給齣。讀者可以看到貫穿本書的大量腳注。此外,我們在每章末尾專門有一節給齣外部鏈接(教材和開創性的著作),包括參考文獻和擴展閱讀的建議,這些內容在正文中不一定都被引用瞭,但是有助於增強學生的知識基礎。今天,隨著因特網上的信息日益豐富,為附加的信息提供URL鏈接是一件很有誘惑力的事情。但是,我們拒絕瞭這一誘惑(除瞭那些權威信息源的可靠鏈接)。盡管如此,我們知道現在學生在去圖書館之前會先搜索因特網,當然他們也應該這麼做。在這種情況下,我們給學生一個提示:在利用因特網作為信息源的時候要慎重。通常,使用Google搜索是獲取某種信息的最快方法。但是,必須對這些信息進行篩選以保證其準確性。作為經驗法則,使用因特網上的信息來滿足好奇心或是迴答與流言有關的問題。(DEC是如何衰落的?為什麼Linux成功瞭而Unix BSD卻沒有?Burroughs公司的曆史是什麼?計算機係統的真正先驅是哪些人?)對於技術問題(Pentium 4處理器的流水綫結構是什麼?VAX 11/780的指令集體係結構是什麼?)則要從已齣版的書籍、相關會議和期刊論文(當然它們中的大多數也可以在綫獲取)中尋求答案。
佐治亞理工學院計算機學院從1999年鞦季學期開始,每學期都開設這門軟硬件集成的課程,本教材就是這門課程的副産品。在一開始,本書作者為課程開發瞭完整的講義和幻燈片,並使用兩本標準的教材(一本體係結構教材和一本操作係統教材)作為課程的背景參考資料來補充課程的材料。從2005年春季開始,我們將課件轉換成瞭本教材的手稿,因為學生一直想要一本與課程內容和風格匹配的教材。本教材的在綫版本從2005年春季開始在佐治亞理工學院用於本課程,使用集成的方法介紹計算機係統。本課程每年開設3次(包括夏季學期),每學期有80多名學生選課。因此,書稿在付印之前經過瞭連續15個學期的教學,從選修本課的學生那裏接受瞭持續不斷的反饋與改進意見。
在設計産生本書的課程時,以及在撰寫本書的時候,我們從其他機構開設的係統入門課程以及一些優秀教材中學到瞭很多東西。例如,MIT的計算機係統入門課程擁有很長的曆史和傳統,而且是真正獨一無二的。從這門課程中總結的教材[Saltzer,2009]對激發學生深入學習計算機係統來說是極好的資源。在撰寫本書的時候,我們坦承受到瞭[Ward,1989]和[Kurose,2006]的教學法的啓發。
本書的結構和可能的閱讀路徑
本書的知識內容可以分為5個模塊。下麵的路綫圖建議瞭一些可能的閱讀路徑。這些路徑假設關於體係結構和操作係統的內容一樣多。
1)處理器 本書的第一個模塊是關於處理器以及與處理器相關的軟件問題的。我們從探索如何設計盒子中的大腦(處理器)開始。有哪些軟件問題?既然計算機的大部分部件主要是使用高級語言編程的,我們考慮瞭高級語言結構是如何影響處理器的指令集的(第2章)。一旦理解瞭指令集的設計,我們就開始關注實現處理的硬件技術。我們從實現一個簡單的處理器開始(第3章),然後考慮實現一個使用流水綫技術的性能優化的處理器(第5章)。處理器是計算機係統中的寶貴資源,因此必須在多個相互競爭的程序間復用,正如第1章中視頻遊戲的例子所揭示的一樣(見1.3節)。操作係統的職責就是保證資源的有效使用。本模塊以用於處理器調度的操作係統算法結束(第6章)。
我們預計第2、3、5和6章每章需要3小時的課堂講授時間和1小時的練習題時間。
2)內存係統 第二個模塊介紹瞭內存係統和內存層次。計算機程序包括代碼和數據,並且都需要存放的空間。計算機的內存係統可能是決定性能最為關鍵的因素。如果內存係統不能以匹配處理器速度的方式提供執行程序所需的代碼和數據,處理器速度(現在以Ghz為量度)就毫無意義。由於技術的進步,內存係統的大小一直在跨越式發展,但應用程序使用內存的胃口也在以同樣的速度增長著,如果不是增長得更快的話。因此,內存也是寶貴資源,操作係統的作用就是保證用好資源。本模塊的第一部分是關於有效管理內存的操作係統算法以及相應的體係結構支持的(第7章和第8章);第二部分則介紹內存層次,可以幫助降低處理器在訪問代碼和數據時的延遲(第9章)。
我們預計第7、8和9章每章需要3小時的課堂講授時間和1小時的練習題時間。
3)存儲係統 第三個模塊是關於I/O(特彆是穩定存儲)和文件係統的。隻有與計算機進行交互纔能讓計算機有用且有趣。首先,我們討論能夠把處理器的注意力從當前執行的程序中脫離齣來的硬件機製(第4章)。這些機製既包括外部事件也包括處理器執行程序時遇到的內部異常。與硬件機製相關的軟件問題是解決正常程序執行的“不連續”性,包括記錄原有程序的執行位置以及程序的當前執行狀態。然後,我們介紹處理器與I/O設備的接口機製以及相應的底層軟件技術(第10章),並特彆強調瞭磁盤子係統。隨後,我們完整地介紹瞭在穩定的存儲設備(如磁盤)上如何構建文件係統(第11章)。
我們預計第4章和第10章每章需要3小時的課堂講授時間和1小時的練習題時間,第11章需要6小時的課堂講授時間和2小時的練習題時間。
4)並行係統 計算機體係結構是一個快速變化的領域。芯片密度、處理器速度、內存容量等在過去20年中都呈現齣指數增長速度,並在可預見的未來仍然保持這樣的增長速度。並行處理已不再是超級計算機獨有的深奧概念。隨著在一個芯片上集成多個CPU的多核技術的到來,並行性已經變得很常見。因此,理解與並行性有關的軟件和硬件技術對於迴答“盒子裏有什麼”這樣的問題十分必要。這個模塊包括多處理器中支持並行編程的操作係統問題以及相應的體係結構功能(第12章)。
我們預計第12章需要6小時的課堂講授時間和2小時的練習題時間。
5)網絡 在我們生活的世界上,單獨一個盒子幾乎沒有任何用處,除非它與外部世界相連。與你的朋友在網絡上對戰多人視頻遊戲(在第1章介紹)是一個很好的例子。但即使在日常生活中,我們也需要利用網絡來收發電子郵件或瀏覽因特網等。網絡與其他輸入/輸齣設備的不同之處在於,現在你的盒子得以連接世界瞭!你需要一種語言讓你的盒子與外部世界交談,並處理網絡的各種情況,例如暫時或永久的連接中斷。這一模塊討論瞭網絡硬件的進化,以及用來處理各種網絡狀況的網絡協議棧(操作係統的一部分)的功能(第13章)。
我們預計第13章需要6小時的課堂講授時間和2小時的練習題時間。
總而言之,第2章~第10章每章需要用1周時間授課;第11章~第13章每章需要2周時間授課,正好在15周的一個學期裏講完。五個模塊中的軟件和硬件問題在本書中是一起介紹的,上述建議的閱讀路徑也是按照這種處理方式進行的。
讀者也可以選擇在體係結構和操作係統主題之間重點關注某部分的內容,而不會損失連續性。以處理器模塊為例,第3章和第5章都是關於處理器的硬件實現問題的。對於偏重操作係統的課程,可以考慮少講授或者完全跳過介紹流水綫處理器實現(從5.7節開始)的第5章,而不會損失課程的連續性。類似地,在偏重體係結構的課程裏,可以跳過介紹處理器調度算法的第6章,而不會損失課程的連續性。
在內存模塊中,第8章從操作係統角度涉及頁式內存管理的細節。偏重體係結構的課程可以跳過這一章,而不會損失連續性。類似地,偏重操作係統的課程可以選擇淡化第9章中對緩存的細節描述。
在存儲模塊中,麵嚮體係結構的課程可以選擇淡化第11章中文件係統的內容,而不必擔心損失連續性。
在並行模塊中(第12章),麵嚮體係結構的課程可以跳過多綫程的操作係統支持,以及一些高級主題,包括多處理器調度、死鎖以及並發性的經典問題和解決方案;類似地,麵嚮操作係統的課程可以選擇跳過體係結構方麵的高級主題,例如多處理器緩存一緻性、並行機的分類以及互連網絡等。考慮到並行性的重要性,在任何課程中,隻要時間許可,應盡量覆蓋這一章的全部內容。
在網絡模塊中(第13章),麵嚮體係結構的課程可以跳過傳輸層和網絡層的細節(分彆是13.6節和13.7節)。麵嚮操作係統的課程可以選擇少講一些協議棧的鏈路層(13.8節)和網絡硬件(13.9節)的內容。
本教材在計算機科學課程體係中的位置
圖P-1顯示瞭計算機係統的抽象層次。我們可以嘗試將圖P-1中的不同層次的抽象與傳統計算機科學課程體係中的課程相關聯。諸如基礎程序設計、麵嚮對象程序設計、圖形學以及HCI(人機交互)的課程通常使用較高層次的抽象。通常計算機科學和計算機工程的課程體係中包含數字電路和邏輯電路設計的基礎課程,然後是計算機組成原理,介紹計算機的硬件設計。在計算機組成原理課程之上(在圖P-1的抽象層次級彆之上),大部分課程使用煙囪方法:不同的課程分彆覆蓋計算機體係結構、操作係統和計算機網絡的高級概念。
應用程序(高級語言錶示的算法) 更高
係統軟件(編譯器和操作係統)
計算機體係結構
機器組成原理(數據通路和控製)
時序和組閤邏輯器件
邏輯門
晶體管
固體物理 更低
圖P-1 計算機係統中的抽象層次
今天,設計計算機係統已經是軟硬件集成的過程,這使人們對煙囪模式提齣瞭質疑,特彆是對計算機科學本科的課程體係中學生發展專業技能的早期。
以本書為基礎圍繞上述主題的課程是一種獨特的嘗試,用集成的方法在計算機係統的入門課程中介紹中間層次的概念(覆蓋瞭圖P-1中的深色區域—係統軟件及其與計算機體係結構的關係)。這門課程將為渴望學習計算機體係結構、操作係統和網絡中的高級主題(圖P-2)的學生提供堅實的基礎。
圖P-2 係統課程係列
使用本書內容的課程的先修課程很直接:邏輯設計基礎和高級語言程序設計(最好是C語言)基礎。換句話說,對在本書內容之上和之下的抽象層次需要有基本的理解(見圖P-1)。
在數字電路和邏輯設計基礎以及程序設計基礎方麵都有非常優秀的教科書。類似地,在計算機體係結構、操作係統和計算機網絡的高級主題方麵,也有優秀的教科書。唯獨缺少的是對計算機係統進行簡單、集成化的介紹,使其成為基礎課程和高級主題之間橋梁的圖書。本書的目標就是成為這樣一座橋梁。
計算機科學作為一門學科其邊界已經擴展瞭。相應地,學習計算機科學的學生的興趣也各不同。計算機科學的課程需要為學生在本科階段的學習提供不同的選擇。另一方麵,課程也有責任保證,不論學生的選擇是什麼,都能學到計算機係統(廣義)的核心知識。我們相信基於本書的課程可以滿足這樣一種係統核心知識的要求。如果正確地講授本課程,可以給學生提供充足的機會,通過其他課程來深入學習計算機係統。例如,我們建議在大學二年級開設將本書作為教材的課程。在大三的時候,學生可能可以學習更加麵嚮設計的課程—針對體係結構、操作係統或是網絡—以他們在大二從本書中學到的基本概念為基礎。最後,在大四的時候,學生可以選修在這些領域中更具概念性的高級主題課程。
本書在體係結構和操作係統的內容方麵是大緻平衡的。我們認為,計算機科學專業的學生在本科期間應該對這兩方麵同等重視,不管他們的職業目標是什麼。當然,希望成為係統架構師的學生必須瞭解本書中介紹的軟件和硬件之間的互動。即使是希望進行軟件開發的學生,瞭解這些知識對於成為更好的程序員也是必需的。但是,這取決於每個老師對這兩個主題強調的程度。好消息是,本教材允許教師選擇他們認為必需的課程深度,以與他們所在學校的課程結構相適應。例如,如果教師選擇減少體係結構方麵的內容,可以很輕鬆地簡單介紹處理器實現的有關章節(第3章和第5章),而不必擔心內容的銜接問題。在討論本書結構的時候,我們已經對五個模塊給齣瞭類似的建議。
講授係統的集成課程的補充材料
我們充分理解教師在講授需要介紹體係結構、操作係統和網絡的計算機係統的集成課程時所麵臨的挑戰。
為此,我們已經提供瞭一組在綫資源。我們已經講授瞭11年本課程,每年3次,作為所有計算機專業學生的必修課,因此我們已經積纍瞭相當多的在綫資源。
1)我們有本課程所有內容的PowerPoint講稿,使得準備課程和轉換(從原有的煙囪模型)更加容易。
2)每個模塊都有一個重要的實驗部分。我們提供瞭這些已經迭代過多次的實驗的詳細描述,以及用於實驗特定方麵的軟件模塊(例如模擬器)。
3)除瞭每章後的練習題之外,我們針對本課程的不同模塊還有附加的問題集、傢庭作業以及本課程迄今為止的期中和期末考試題。
在補充材料中包含的樣例實驗
處理器設計
我們給學生提供一個完成瞭90%的處理器數據通路設計。通過完成數據通路可以幫助學生熟悉相關設計。然後他們要設計基於微碼的控製邏輯(使用類似LogicWorks的邏輯設計工具),利用數據通路實現一個簡單的指令集。這能幫助學生理解數據通路的工作原理並體會一些設計權衡。學生會得到真實電路設計的經驗,並通過邏輯設計軟件內置的模擬器對設計進行功能測試。
中斷和輸入/輸齣
學生在第一個實驗的基礎上增加電路以實現中斷係統。然後他們(使用匯編語言)寫一個中斷處理程序。實驗的電路設計部分再次通過LogicWorks軟件係統實現並進行功能模擬。此外,我們還給學生提供瞭處理器模擬器,他們需要在其中增加中斷支持,並與他們用匯編語言寫的中斷處理器程序一起工作。這個實驗不僅可使中斷係統的操作變得清晰,還展示瞭底層設備輸入/輸齣的基本概念。
虛存子係統
學生在處理器模擬器上實現虛存子係統。在這個實驗中,學生可通過實現和實驗不同的頁替換策略,獲得開發操作係統中內存管理部分的經驗。這個實驗是用C語言實現的。
多綫程操作係統
在我們提供的模擬器上,學生實現多綫程操作係統的基本模塊,包括CPU和I/O調度隊列等。他們可實驗不同的處理器調度策略。這個模塊是用C語言和pthread實現的。學生可從實驗中獲得並行編程經驗,並接觸不同的CPU調度算法。
可靠傳輸層
學生在我們提供的一個模擬的網絡層上實現一個簡單的可靠傳輸層。在傳輸層必須處理的問題包括損壞的包、丟包以及亂序到達。這個實驗也是用C語言和pthread實現的。
注意
在開始探索計算機係統內部的旅程之前,我們要提醒讀者注意:在展示計算機係統設計的教科書中,習慣上會通過有數字的例子來說明和支持相關概念。曆史可以揭示未來。如果說在技術發展中有什麼東西不變的話,那就是變化。當你買瞭一輛新車,在車駛齣展廳的那一刻,這輛車就變成瞭二手車。同樣地,我們使用的任何有數字的例子中的數字,如處理器速度、內存容量或是外設的傳輸速率馬上就會過時。真正不變的是原理,這也是本書的核心內容。一個讓人欣慰的因素是,盡管絕對數字可能會隨時間變化,從MHz到GHz,從MB到GB,相對數字隨著技術的發展相對保持不變,這使得書中的數字示例也具有持久性。
緻謝
我們極大地受惠於若乾國內外同行,他們直接或間接促成瞭本書的齣現。首先,我們要感謝Yale Patt,從2004年夏天我們介紹瞭在佐治亞理工學院開設的這門課程後,他用具有無與倫比的說服力的方式告訴我們應該把課程的內容寫成教材,因為大傢迫切需要一本用集成方式介紹係統概念的圖書。我們可以很誠實地說,如果沒有他的鼓勵,我們可能不會走上寫書這條路。下麵這些其他學校的同行也鼓勵我們進行本書的寫作,因此需要特彆緻謝:Jim Goodman(威斯康辛大學麥迪遜分校和新西蘭奧剋蘭大學),Liviu Iftode(Rutger大學),Phil McKinley(密歇根州立大學)以及Anand Sivasubramaniam(賓州州立大學和TCS)。我們要特彆感謝Jim Goodman,他仔細閱讀瞭本書手稿的早期草稿,並提齣瞭詳細的反饋,使本書的敘述得到瞭極大的改進。除瞭這些人以外,我們還從其他學校的一些同行那裏得到瞭很多對本書實驗的積極支持。
寫書的第一步是創建一份書稿供佐治亞理工學院的學生內部使用。對選擇佐治亞理工學院CS 2200課程的學生,我們怎麼感謝也不為過。從2005年春季學期開始,幾代學生使用瞭本書的在綫版本,並提齣瞭反饋意見,對改進本書錶達的清晰性、精煉例題、提供讀者可能有興趣的曆史鏈接等起到瞭重要的作用。此外,有3名本科生幫助繪製瞭本書中的部分插圖:Kristin Champion、John Madden和Vu Ha。
計算機學院的部分同事,包括Nate Clark、Tom Conte、Constantine Dovrolis、Gabriel Loh、Ken Mackenzie以及Milos Prvulovic,對本書給予瞭建議和有洞察力的評論,幫助本書的敘述更加清晰。我們受惠於Constantine Dovrolis對本書網絡一章早期版本的建議和反饋,使得我們不僅改進瞭內容,還改變瞭這一章的敘述順序。Ken Mackenzie的建議讓我們在第3章的處理器設計中給齣瞭一種簡單的控製方法。Tom Conte對流水綫一章給齣瞭詳細的評論,幫助我們更清晰地錶達內容。北卡州立大學的Eric Rotenberg為流水綫一章的早期草稿提齣瞭非常有意義的反饋。Junsuk Shin寫瞭本書附錄中的簡單客戶端-服務器的套接字代碼。我們嚮他們所有人錶示特彆的感謝。
我們要感謝佐治亞理工學院,以及計算機學院的遠見卓識,鼓勵我們在教學方麵進行創新。實際上,從1996年開始對本科課程體係的改革使得我們開始批判性地思考應該如何教育本科生並瞭解在課程體係中缺少瞭什麼,這最終導緻我們開發瞭第一門集成方式的係統課程,包括體係結構、操作係統和網絡等。
作為圖書齣版方麵的新手,我們從成功的教科書作者那裏學到瞭經驗。我們需要特彆感謝Yale Patt(德州大學)、Jim Kurose(麻省大學)、Jim Foley(佐治亞理工學院)、Andy van Dam(布朗大學)、Sham Navathe(佐治亞理工學院)、Rich LeBlanc(佐治亞理工學院)和Larry Synder(華盛頓大學)等。我們怎麼感謝他們都不為過,他們分享瞭很多經驗,包括齣版社的選取、與編輯的閤作、為可能的評閱人編製問題,以及如何有效地利用評閱意見修訂書稿。
書稿經過瞭幾輪的外部評審。大部分匿名評閱人深思熟慮而且有技巧地精準指齣瞭改進書稿的方式。我們對匿名審稿人付齣時間和精力幫助本書最後成型錶示非常感謝。
特彆感謝Addison-Wesley齣版我們這本教科書。Matt Goldstein是一個極好的編輯,他負責本書的評閱流程,並建議我們如何修改書稿。他具有一種既能督促我們工作,又不顯得傲慢的獨特風格。當我們沒有按計劃完成任務時他錶現齣瞭極大的耐心,並對本書背後的願景給予瞭毫無保留的支持。我們要感謝Marilyn Lloyd,Pearson的高級産品經理,他負責我們的教科書産品。我們還要感謝Pearson的Jeff Holcomb、Chelsea Bell和 Dan Parker。作為管理産品流程日常事務的項目經理,Aptara公司的Dennis Freee 以及Apatara公司的職員,包括Jawwad Ali Khan和Rajshri Walia,以及Write With公司的Brian Baker,都值得特彆提及。他們為本書盡快生産印刷做齣瞭貢獻。
最後,我們要感謝我們的傢人,他們的愛、理解與支持使我們能夠持續撰寫本書。補充一點,Umakishore的父親是一位著名的小說傢(筆名“Umachandran”),他著有多本小說,對他的迴憶是寫作本書的靈感。
專業書籍,值得細品
評分書是很好,包裝的質量有待提高啊,每次買書都會有一點損傷。
評分一般
評分寫的比較深
評分gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
評分這本書寫的還是不錯的,需要細讀
評分內容不錯,很實用
評分不錯不錯不錯
評分hao
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有