發表於2024-11-24
第二版銷售突破100000冊,第三版重磅上市!
理解計算機係統首*書目, 10餘萬程序員的共同選擇
卡內基-梅隆、北京大學、清華大學、上海交通大學等國內外眾多知名高校選用指定教材
從程序員視角全麵剖析的實現細節,使讀者深刻理解程序的行為,將所有計算機係統的相關知識融會貫通。
新版本全麵基於X86-64位處理器
全新的閱讀和學習體驗:由國內名師錄製章前導讀,使讀者可以瞭解各章的重點內容和知識關聯,形成關於計算機係統的知識架構。並開設瞭本書的網絡社區,讀者可加入社區,獲得本書相關學習資源,瞭解活動信息。
和第2版相比,本版內容上*大的變化是,從以IA32和x86-64為基礎轉變為完全以x86-64為基礎。主要更新如下:
基於x86-64,大量地重寫代碼,首次介紹對處理浮點數據的程序的機器級支持。
處理器體係結構修改為支持64位字和操作的設計。
引入更多的功能單元和更復雜的控製邏輯,使基於程序數據流錶示的程序性能模型預測更加可靠。
擴充關於用GOT和PLT創建與位置無關代碼的討論,描述瞭更加強大的鏈接技術(比如庫打樁)。
增加瞭對信號處理程序更細緻的描述,包括異步信號安全的函數等。
采用新函數,更新瞭與協議無關和綫程安全的網絡編程。
Randal E. Bryant,1981年於麻省理工學院獲得計算機博士學位,1984年至今一直任教於卡內基-梅隆大學。現任卡內基-梅隆大學計算機科學學院院長、教授,同時還受邀任教於電子和計算機工程係。他從事本科生和研究生計算機係統方麵課程的教學近40年。他和O’Hallaron教授一起在卡內基梅隆大學開設瞭15-213課程“計算機係統導論”,那便是本書的基礎。他還是ACM院士、IEEE院士、美國國傢工程院院士和美國人文與科學研究院院士。其研究成果被Intel、IBM、Fujitsu和Microsoft等主要計算機製造商使用,他還因研究獲得過Semiconductor Research Corporation、ACM、IEEE頒發的多項大奬。
David R. O’Hallaron卡內基梅隆大學電子和計算機工程係教授。在弗吉尼亞大學(University of Virginia)獲得計算機科學的博士學位,2007年-2010年為Intel匹茲堡實驗室主任。他教授本科生和研究生的計算機係統方麵的課程已有20餘年,並和Bryant教授一起開設瞭“計算機係統導論”課程。曾獲得CMU計算機學院頒發的Herbert Simon傑齣教學奬。他主要從事計算機係統領域的研究,與Quake項目成員一起獲得過高性能計算領域中的*高國際奬項——Gordon Bell奬。他目前的工作重點是研究自動分級(autograding)概念,即評價其他程序質量的程序。
基於該教材的北大“計算機係統導論”課程實施已有五年,得到瞭學生的廣泛贊譽,學生們通過這門課程的學習建立瞭完整的計算機係統的知識體係和整體知識框架,養成瞭良好的編程習慣並獲得瞭編寫高性能、可移植和健壯的程序的能力,奠定瞭後續學習操作係統、編譯、計算機體係結構等專業課程的基礎。北大的教學實踐錶明,這是一本值得推薦采用的好教材。本書第3版采用*新x86-64架構來貫穿各部分知識。我相信,該書的齣版將有助於國內計算機係統教學的進一步改進,為培養從事係統級創新的計算機人纔奠定很好的基礎。
—— 梅 宏 中國科學院院士/發展中國傢科學院院士
以低年級開設“深入理解計算機係統”課程為基礎,我先後在復旦大學和上海交通大學軟件學院主導瞭激進的教學改革……現在我課題組的青年教師全部是首批經曆此教學改革的學生。本科的紮實基礎為他們從事係統軟件的研究打下瞭良好的基礎……師資力量的補充又為推進更加激進的教學改革創造瞭條件。
—— 臧斌宇 上海交通大學軟件學院院長
齣版者的話
中文版序一
中文版序二
譯者序
前言
關於作者
第1章 計算機係統漫遊1
1.1 信息就是位+上下文1
1.2 程序被其他程序翻譯成不同的格式3
1.3 瞭解編譯係統如何工作是大有益處的4
1.4 處理器讀並解釋儲存在內存中的指令5
1.4.1 係統的硬件組成5
1.4.2 運行hello程序7
1.5 高速緩存至關重要9
1.6 存儲設備形成層次結構9
1.7 操作係統管理硬件10
1.7.1 進程11
1.7.2 綫程12
1.7.3 虛擬內存12
1.7.4 文件14
1.8 係統之間利用網絡通信14
1.9 重要主題16
1.9.1 Amdahl定律16
1.9.2 並發和並行17
1.9.3 計算機係統中抽象的重要性19
1.10 小結20
參考文獻說明20
練習題答案20
第一部分
程序結構和執行
第2章 信息的錶示和處理22
2.1 信息存儲24
2.1.1 十六進製錶示法25
2.1.2 字數據大小27
2.1.3 尋址和字節順序29
2.1.4 錶示字符串34
2.1.5 錶示代碼34
2.1.6 布爾代數簡介35
2.1.7 C語言中的位級運算37
2.1.8 C語言中的邏輯運算39
2.1.9 C語言中的移位運算40
2.2 整數錶示41
2.2.1 整型數據類型42
2.2.2 無符號數的編碼43
2.2.3 補碼編碼44
2.2.4 有符號數和無符號數之間的轉換49
2.2.5 C語言中的有符號數與無符號數52
2.2.6 擴展一個數字的位錶示54
2.2.7 截斷數字56
2.2.8 關於有符號數與無符號數的建議58
2.3 整數運算60
2.3.1 無符號加法60
2.3.2 補碼加法62
2.3.3 補碼的非66
2.3.4 無符號乘法67
2.3.5 補碼乘法67
2.3.6 乘以常數70
2.3.7 除以2的冪71
2.3.8 關於整數運算的最後思考74
2.4 浮點數75
2.4.1 二進製小數76
2.4.2 IEEE浮點錶示78
2.4.3 數字示例79
2.4.4 捨入83
2.4.5 浮點運算85
2.4.6 C語言中的浮點數86
2.5 小結87
參考文獻說明88
傢庭作業88
練習題答案97
第3章 程序的機器級錶示109
3.1 曆史觀點110
3.2 程序編碼113
3.2.1 機器級代碼113
3.2.2 代碼示例114
3.2.3 關於格式的注解117
3.3 數據格式119
3.4 訪問信息119
3.4.1 操作數指示符121
3.4.2 數據傳送指令122
3.4.3 數據傳送示例125
3.4.4 壓入和彈齣棧數據127
3.5 算術和邏輯操作128
3.5.1 加載有效地址129
3.5.2 一元和二元操作130
3.5.3 移位操作131
3.5.4 討論131
3.5.5 特殊的算術操作133
3.6 控製135
3.6.1 條件碼135
3.6.2 訪問條件碼136
3.6.3 跳轉指令138
3.6.4 跳轉指令的編碼139
3.6.5 用條件控製來實現條件分支…141
3.6.6 用條件傳送來實現條件分支…145
3.6.7 循環149
3.6.8 switch語句159
3.7 過程164
3.7.1 運行時棧164
3.7.2 轉移控製165
3.7.3 數據傳送168
3.7.4 棧上的局部存儲170
3.7.5 寄存器中的局部存儲空間172
3.7.6 遞歸過程174
3.8 數組分配和訪問176
3.8.1 基本原則176
3.8.2 指針運算177
3.8.3 嵌套的數組178
3.8.4 定長數組179
3.8.5 變長數組181
3.9 異質的數據結構183
3.9.1 結構183
3.9.2 聯閤186
3.9.3 數據對齊189
3.10 在機器級程序中將控製與數據結閤起來192
3.10.1 理解指針192
3.10.2 應用:使用GDB調試器193
3.10.3 內存越界引用和緩衝區溢齣194
3.10.4 對抗緩衝區溢齣攻擊198
3.10.5 支持變長棧幀201
3.11 浮點代碼204
3.11.1 浮點傳送和轉換操作205
3.11.2 過程中的浮點代碼209
3.11.3 浮點運算操作210
3.11.4 定義和使用浮點常數212
3.11.5 在浮點代碼中使用位級操作212
3.11.6 浮點比較操作213
3.11.7 對浮點代碼的觀察結論215
3.12 小結216
參考文獻說明216
傢庭作業216
練習題答案226
第4章 處理器體係結構243
4.1 Y86-64指令集體係結構245
4.1.1 程序員可見的狀態245
4.1.2 Y86-64指令245
4.1.3 指令編碼246
4.1.4 Y86-64異常250
4.1.5 Y86-64程序251
4.1.6 一些Y86-64指令的詳情255
4.2 邏輯設計和硬件控製語言HCL256
4.2.1 邏輯門257
4.2.2 組閤電路和HCL布爾錶達式257
4.2.3 字級的組閤電路和HCL整數錶達式258
4.2.4 集閤關係261
4.2.5 存儲器和時鍾262
4.3 Y86-64的順序實現264
4.3.1 將處理組織成階段264
4.3.2 SEQ硬件結構272
4.3.3 SEQ的時序274
4.3.4 SEQ階段的實現277
4.4 流水綫的通用原理282
4.4.1 計算流水綫282
4.4.2 流水綫操作的詳細說明284
4.4.3 流水綫的局限性284
4.4.4 帶反饋的流水綫係統287
4.5 Y86-64的流水綫實現288
4.5.1 SEQ+:重新安排計算階段288
4.5.2 插入流水綫寄存器289
4.5.3 對信號進行重新排列和標號292
4.5.4 預測下一個PC293
4.5.5 流水綫冒險295
4.5.6 異常處理306
4.5.7 PIPE各階段的實現308
4.5.8 流水綫控製邏輯314
4.5.9 性能分析322
4.5.10 未完成的工作323
4.6 小結325
參考文獻說明326
傢庭作業327
練習題答案331
第5章 優化程序性能341
5.1 優化編譯器的能力和局限性342
5.2 錶示程序性能345
5.3 程序示例347
5.4 消除循環的低效率350
5.5 減少過程調用353
5.6 消除不必要的內存引用354
5.7 理解現代處理器357
5.7.1 整體操作357
5.7.2 功能單元的性能361
5.7.3 處理器操作的抽象模型362
5.8 循環展開366
5.9 提高並行性369
5.9.1 多個纍積變量370
5.9.2 重新結閤變換373
5.10 優化閤並代碼的結果小結377
5.11 一些限製因素378
5.11.1 寄存器溢齣378
5.11.2 分支預測和預測錯誤處罰379
5.12 理解內存性能382
5.12.1 加載的性能382
5.12.2 存儲的性能383
5.13 應用:性能提高技術387
5.14 確認和消除性能瓶頸388
5.14.1 程序剖析388
5.14.2 使用剖析程序來指導優化390
5.15 小結392
參考文獻說明393
傢庭作業393
練習題答案395
第6章 存儲器層次結構399
6.1 存儲技術399
6.1.1 隨機訪問存儲器400
6.1.2 磁盤存儲406
6.1.3 固態硬盤414
6.1.4 存儲技術趨勢415
6.2 局部性418
6.2.1 對程序數據引用的局部性418
6.2.2 取指令的局部性419
6.2.3 局部性小結420
6.3 存儲器層次結構421
6.3.1 存儲器層次結構中的緩存422
6.3.2 存儲器層次結構概念小結424
6.4 高速緩存存儲器425
6.4.1 通用的高速緩存存儲器組織結構425
6.4.2 直接映射高速緩存427
6.4.3 組相聯高速緩存433
6.4.4 全相聯高速緩存434
6.4.5 有關寫的問題437
6.4.6 一個真實的高速緩存層次結構的解剖438
6.4.7 高速緩存參數的性能影響439
6.5 編寫高速緩存友好的代碼440
6.6 綜閤:高速緩存對程序性能的影響444
6.6.1 存儲器山444
6.6.2 重新排列循環以提高空間局部性447
6.6.3 在程序中利用局部性450
6.7 小結450
參考文獻說明451
傢庭作業451
練習題答案459
第二部分
在係統上運行程序
第7章 鏈接464
7.1 編譯器驅動程序465
7.2 靜態鏈接466
7.3 目標文件466
7.4 可重定位目標文件467
7.5 符號和符號錶468
7.6 符號解析470
7.6.1 鏈接器如何解析多重定義的全局符號471
7.6.2 與靜態庫鏈接475
7.6.3 鏈接器如何使用靜態庫來解析引用477
7.7 重定位478
7.7.1 重定位條目479
7.7.2 重定位符號引用479
7.8 可執行目標文件483
7.9 加載可執行目標文件484
7.10 動態鏈接共享庫485
7.11 從應用程序中加載和鏈接共享庫487
7.12 位置無關代碼489
7.13 庫打樁機製492
7.13.1 編譯時打樁492
7.13.2 鏈接時打樁492
7.13.3 運行時打樁494
7.14 處理目標文件的工具496
7.15 小結496
參考文獻說明497
傢庭作業497
練習題答案499
第8章 異常控製流501
8.1 異常502
8.1.1 異常處理503
8.1.2 異常的類彆504
8.1.3 Linux/x86-64係統中的異常505
8.2 進程508
8.2.1 邏輯控製流508
8.2.2 並發流509
8.2.3 私有地址空間509
8.2.4 用戶模式和內核模式510
8.2.5 上下文切換511
8.3 係統調用錯誤處理512
8.4 進程控製513
8.4.1 獲取進程ID513
8.4.2 創建和終止進程513
8.4.3 迴收子進程516
8.4.4 讓進程休眠521
8.4.5 加載並運行程序521
8.4.6 利用fork和execve運行程序524
8.5 信號526
8.5.1 信號術語527
8.5.2 發送信號528
8.5.3 接收信號531
8.5.4 阻塞和解除阻塞信號532
8.5.5 編寫信號處理程序533
8.5.6 同步流以避免討厭的並發錯誤540
8.5.7 顯式地等待信號543
8.6 非本地跳轉546
8.7 操作進程的工具550
8.8 小結550
參考文獻說明550
傢庭作業550
練習題答案556
第9章 虛擬內存559
9.1 物理和虛擬尋址560
9.2 地址空間560
9.3 虛擬內存作為緩存的工具561
9.3.1 DRAM緩存的組織結構562
9.3.2 頁錶562
9.3.3 頁命中563
9.3.4 缺頁564
9.3.5 分配頁麵565
9.3.6 又是局部性救瞭我們565
9.4 虛擬內存作為內存管理的工具565
9.5 虛擬內存作為內存保護的工具567
9.6 地址翻譯567
9.6.1 結閤高速緩存和虛擬內存570
9.6.2 利用TLB加速地址翻譯570
9.6.3 多級頁錶571
9.6.4 綜閤:端到端的地址翻譯573
9.7 案例研究:Intel Core i7/Linux內存係統576
9.7.1 Core i7地址翻譯576
9.7.2 Linux虛擬內存係統580
9.8 內存映射582
9.8.1 再看共享對象583
9.8.2 再看fork函數584
9.8.3 再看execve函數584
9.8.4 使用mmap函數的用戶級內存映 深入理解計算機係統(原書第3版) 下載 mobi epub pdf txt 電子書 格式
深入理解計算機係統(原書第3版) 下載 mobi pdf epub txt 電子書 格式 2024
深入理解計算機係統(原書第3版) 下載 mobi epub pdf 電子書有點失望。剛到就翻著看看。
評分內容豐富,還沒仔細看,就是感覺內容比較深奧,需要花許多時間來消化纔行
評分書很棒,快遞也很給力,趕上618活動買瞭好幾本,現在每天晚上有事乾瞭,工作很久能耐下心來看書也是很不容易。
評分還沒看,但是看瞭很多評價,希望自己能靜下心,好好學習進步,加油!
評分質量不錯,可以,性價比高,好用。挺好的,真的。確實不錯啊。
評分看知乎上推薦的,準備學習下C++相關的算法,書的質量也很好,物流也很快
評分經典著作,新書無誤
評分書很棒,快遞也很給力,趕上618活動買瞭好幾本,現在每天晚上有事乾瞭,工作很久能耐下心來看書也是很不容易。
評分還行,一本非常經典的書,值得一看,非常好
深入理解計算機係統(原書第3版) mobi epub pdf txt 電子書 格式下載 2024