計算機系統(tǒng)——從應用程序到底層實現(xiàn) 趙歡 楊科華
定 價:59 元
- 作者:趙歡 楊科華
- 出版時間:2025/2/1
- ISBN:9787111756439
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP303
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書從程序員的角度來詳細說明計算機系統(tǒng)的本質(zhì)概念,并展示這些概念如何影響應用程序的正確性與性能,強調(diào)在實際系統(tǒng)的操作中發(fā)現(xiàn)問題、分析問題和解決問題,特別注意引導學生建立“計算機系統(tǒng)”的概念,將程序代碼的編寫、編譯及運行與機器內(nèi)部特性緊密結(jié)合起來。本書將講解計算機系統(tǒng)中的底層實現(xiàn)過程,引導讀者編寫更高效的程序,成為更有效率的程序員——能夠更有效的找出并消除程序中的bug,能夠更好的進行程序性能調(diào)憂,并為以后的計算機類“系統(tǒng)級”課程,如編譯原理、操作系統(tǒng)、網(wǎng)絡原理等的學習打好基礎。
計算機系統(tǒng)能力是指能夠利用計算機系統(tǒng)層面的基本原理來構(gòu)建以計算機技術(shù)為核心的應用系統(tǒng),以及解決實際工程問題的能力。對于計算機專業(yè)的學生來說,具備全棧貫通的計算機系統(tǒng)能力迫在眉睫。
本書以提升學生計算機系統(tǒng)能力為目標,從程序員的角度介紹計算機系統(tǒng)的基本原理及底層實現(xiàn)機制。在內(nèi)容編排上,通過一個自創(chuàng)的原型機系統(tǒng)與編譯工具鏈,建立計算機專業(yè)核心課程的銜接關系,幫助學生掌握從源代碼到電路級執(zhí)行全部過程的細節(jié),從而深入理解整個計算機系統(tǒng)。
本書特色:
1.通過一個自創(chuàng)的原型機系統(tǒng)與編譯工具鏈進行知識點的講解與案例演示,使讀者清晰理解代碼的底層運行機制,對照數(shù)字邏輯電路課程的學習內(nèi)容,還可以進一步理解指令的電路級行為。
2.本書采用IA-32/x86-64 + Linux + GCC + C 語言平臺,包括計算機系統(tǒng)概述、信息的表示與處理、最小系統(tǒng)與原型系統(tǒng)、數(shù)據(jù)與程序的機器級表示、鏈接、存儲、異常處理、優(yōu)化、簡單CPU設計等內(nèi)容;凇翱焖偃腴T、循序漸進”的原則進行知識點的組織,幫助學生迅速建立整體概念。
3.針對每個知識點,都提供相應的講解視頻和教學案例,這些教學素材已實際應用于國家級一流本科課程的教學中,取得了良好的效果。
前 言
隨著智能技術(shù)的飛速發(fā)展,計算機系統(tǒng)能力成為解決我國信息技術(shù)發(fā)展瓶頸和實施大型工程的關鍵。計算機系統(tǒng)能力是指能夠利用計算機系統(tǒng)層面的基本原理來構(gòu)建以計算機技術(shù)為核心的應用系統(tǒng),以及解決實際工程問題的能力。對于計算機專業(yè)的學生來說,具備計算機系統(tǒng)能力是其相對其他非計算機專業(yè)學生的一大優(yōu)勢,這一點已得到普遍認可,并已在實踐中得到證實。
本書作為“計算機系統(tǒng)”或“計算機系統(tǒng)導論”“計算機系統(tǒng)基礎”課程的教材,從程序員的角度說明了計算機系統(tǒng)的基本原理及底層實現(xiàn)機制,期望程序員能夠成為:
更有效率的程序員—能有效地找出并消除程序中的bug,更好地進行程序性能調(diào)優(yōu)。
更有“底”氣的程序員—能夠深入了解計算機系統(tǒng)中的一些底層實現(xiàn),能夠結(jié)合計算機的底層實現(xiàn)寫出更可靠、更安全的程序。
更為全面的程序員—為后續(xù)的計算機“系統(tǒng)”級課程做好準備,提高解決復雜問題、設計復雜系統(tǒng)的能力。
雖然不同計算機系統(tǒng)的硬件和軟件千差萬別,但計算機系統(tǒng)的構(gòu)建原理以及在計算機系統(tǒng)上的程序轉(zhuǎn)換和執(zhí)行機理是相通的,因而,本書僅介紹一種特定計算機系統(tǒng)平臺下的相關內(nèi)容。本書所用的環(huán)境為IA-32/x86-64 + Linux + GCC + C 語言。
全書共11章,旨在闡述計算機系統(tǒng)的核心概念。
第1章是計算機系統(tǒng)概論,介紹計算機系統(tǒng)的基本功能和基本組成、程序的開發(fā)與執(zhí)行過程、計算機系統(tǒng)層次結(jié)構(gòu)等內(nèi)容。
第2章介紹計算機系統(tǒng)是如何用二進制來表示信息的,以及如何通過上下文來將同樣的二進制字節(jié)序列識別為不同的數(shù)據(jù)對象。
第3章將實際的計算機系統(tǒng)分別抽象描述成一個最小系統(tǒng)與原型系統(tǒng),并在這兩個系統(tǒng)上討論程序的執(zhí)行過程。
第4章介紹匯編語言的概念與特點,并詳細講解了ATT匯編語言的典型指令。
第5章以整數(shù)與浮點數(shù)為例說明如何利用不同的二進制編碼來實現(xiàn)對不同數(shù)據(jù)的存儲和表達。
第6章介紹程序的機器級表示,通過對比C語言代碼及其對應的匯編代碼,從簡單操作與訪問、控制、過程、數(shù)據(jù)結(jié)構(gòu)等多個方面來探索硬件層面的程序行為,從而理解程序在機器中的執(zhí)行過程。
第7章介紹匯編代碼通過鏈接形成最終的可執(zhí)行文件的詳細過程。
第8章介紹基本的存儲技術(shù)以及存儲器在計算機系統(tǒng)中是如何被組織成層次結(jié)構(gòu)的,在此基礎上討論了程序的局部性問題。
第9章結(jié)合進程的生命周期,闡釋了源自系統(tǒng)硬件底層及操作系統(tǒng)層面軟件形式的異常(信號),及其相關異常處理。
第10章將從虛擬存儲器的功能解讀開始,闡釋虛擬地址的翻譯過程、存儲器映射,并結(jié)合實際案例研究虛擬存儲器系統(tǒng)。
第11章探討如何使用幾種不同類型的程序優(yōu)化技術(shù)讓程序運行得更快。
此外,附錄還介紹了一個簡單CPU的設計與實現(xiàn)過程,以及機器級程序(指令)的電路級行為仿真。
本書具體編寫分工如下:趙歡、張子興編寫第1章和第2章,楊科華編寫第3章和第4章,佘兢克編寫第5章和第6章,黃麗達編寫第7章、第9章和第10章,肖雄仁編寫第8章,謝國琪編寫第11章,凌純清、劉彥編寫附錄部分,全書由趙歡、楊科華統(tǒng)稿。
本書內(nèi)容基于“快速入門、循序漸進”的原則,每個知識點都提供了相應的教學視頻,讀者可以掃描書中的二維碼來訪問。同時也提供了大量的案例,盡量將每一個知識點融合到具體的案例中,建議讀者在閱讀本書的過程中按照案例的具體要求進行操作與實踐,以加深對各個知識點的理解。
為便于本書教學內(nèi)容的理解,并利于與先修后續(xù)課程“高級語言程序設計”“數(shù)字邏輯電路”“匯編語言程序”“計算機組成原理”“操作系統(tǒng)”“編譯原理”等的融會貫通,作者通過一個自創(chuàng)的原型機系統(tǒng)與編譯工具鏈來進行演示,使讀者可以理解代碼的底層運行機制,對照數(shù)字邏輯電路課程的學習內(nèi)容,讀者還可以進一步理解指令的電路級行為。但正如前所述,本書主要是為后續(xù)的計算機類“系統(tǒng)”級課程做準備,提高讀者解決復雜問題、設計復雜系統(tǒng)的能力,因此并沒有對這些原理進行深入的闡述,而只對這些內(nèi)容的聯(lián)系進行講解,讓讀者對計算機系統(tǒng)有整體了解。在后續(xù)的“數(shù)字系統(tǒng)設計”“操作系統(tǒng)”“編譯原理”“計算機體系結(jié)構(gòu)”等課程的學習過程中,讀者可以與本書內(nèi)容相互印證,最終形成比較完整的、密切關聯(lián)的計算機系統(tǒng)整體概念。
趙歡,湖南大學二級教授、博士生導師,岳麓學者領軍崗,湖南省芙蓉教學名師,寶鋼優(yōu)秀教師特等獎、霍英東教育基金會首屈教育教學獎、-華為“智能基座”優(yōu)秀教師和高校計算機專業(yè)優(yōu)秀教師獎勵計劃獲得者。國家級一流本科專業(yè)、國家級一流本科課程、國家精品課程和國家級精品資源共享課負責人,牽頭的教學成果獲2022年國家級教學成果二等獎,主編國家級規(guī)劃教材8本。帶領團隊長期致力于計算機系統(tǒng)能力培養(yǎng)教育教學改革,牽頭的“鯤鵬計算機系統(tǒng)能力培養(yǎng)課程群虛擬教研室”獲虛擬教研室建設試點,負責的“計算機系統(tǒng)”課程獲首批國家級一流本科課程。
楊科華,湖南大學副教授、博士生導師,長期致力于計算機系統(tǒng)能力培養(yǎng)教育教學改革,湖南省一流本科課程、華為智能基座金課負責人,首批華為開發(fā)者布道師,獲湖南大學優(yōu)秀教師、湖南大學教學優(yōu)秀獎等獎項。開發(fā)了miniCC工具鏈、VSPM原型機等教學案例,入選“101計劃”實踐平臺成果手冊。
目 錄
前言
第1章 概論1
1.1 計算機系統(tǒng)的基本功能和基本組成1
1.1.1 計算機系統(tǒng)的基本功能1
1.1.2 計算機硬件2
1.1.3 計算機軟件3
1.2 程序的開發(fā)與執(zhí)行過程4
1.2.1 從源程序到可執(zhí)行程序5
1.2.2 可執(zhí)行程序的執(zhí)行過程6
1.2.3 程序中每條指令的執(zhí)行7
1.3 計算機系統(tǒng)的層次結(jié)構(gòu)9
小結(jié)11
第2章 二進制以及信息的組織與表示12
2.1 二進制及進制轉(zhuǎn)換12
2.1.1 二進制的優(yōu)勢12
2.1.2 二進制與其他進制12
2.1.3 進制轉(zhuǎn)換15
2.2 信息的組織與表示17
2.2.1 位、字節(jié)、字與雙字17
2.2.2 數(shù)據(jù)與指令18
2.2.3 大小端19
小結(jié)19
習題19
第3章 最小系統(tǒng)與原型系統(tǒng)21
3.1 最小系統(tǒng)21
3.1.1 內(nèi)存21
3.1.2 中央處理器21
3.1.3 最小系統(tǒng)示例22
3.2 原型系統(tǒng)28
小結(jié)33
習題33
第4章 ATT匯編語言34
4.1 機器指令、匯編語言與高級語言34
4.2 ATT匯編語言基礎知識35
4.2.1 數(shù)據(jù)格式35
4.2.2 訪問信息36
4.2.3 操作數(shù)與指示符37
4.2.4 數(shù)據(jù)傳送指令38
4.2.5 算術(shù)與邏輯操作41
4.2.6 控制43
小結(jié)47
習題47
第5章 數(shù)的表示與處理49
5.1 整數(shù)的表示49
5.1.1 整型數(shù)據(jù)類型49
5.1.2 無符號數(shù)的編碼50
5.1.3 補碼編碼51
5.1.4 有符號數(shù)與無符號數(shù)之間
的轉(zhuǎn)換53
5.1.5 擴展與截斷55
5.2 整數(shù)的運算57
5.2.1 C語言中的相關整型運算57
5.2.2 無符號加法59
5.2.3 補碼加法59
5.2.4 無符號乘法61
5.2.5 補碼乘法61
5.2.6 除以2的冪62
5.3 浮點數(shù)62
5.3.1 二進制小數(shù)63
5.3.2 IEEE浮點表示法63
5.3.3 浮點運算66
小結(jié)69
習題70
第6章 程序的機器級表示72
6.1 控制72
6.1.1 條件碼73
6.1.2 訪問條件碼73
6.1.3 跳轉(zhuǎn)指令及其編碼74
6.1.4 條件分支76
6.1.5 條件傳送指令78
6.1.6 循環(huán)80
6.1.7 switch語句85
6.2 過程87
6.2.1 棧幀結(jié)構(gòu)88
6.2.2 轉(zhuǎn)移控制89
6.2.3 參數(shù)轉(zhuǎn)移91
6.2.4 遞歸過程95
6.3 數(shù)組分配和訪問97
6.3.1 基本原則97
6.3.2 多維數(shù)組98
6.4 其他數(shù)據(jù)結(jié)構(gòu)101
6.4.1 結(jié)構(gòu)101
6.4.2 聯(lián)合104
6.5 存儲器越界引用和緩沖區(qū)溢出107
小結(jié)111
習題111
第7章 鏈接114
7.1 不應忽略的鏈接114
7.2 編譯系統(tǒng)中的鏈接器115
7.3 靜態(tài)鏈接116
7.4 目標文件117
7.5 可重定位目標文件118
7.6 符號表和符號122
7.7 符號解析124
7.7.1 解析多重定義的符號124
7.7.2 鏈接靜態(tài)庫126
7.7.3 靜態(tài)庫解析引用的過程129
7.8 重定位130
7.8.1 重定位表項131
7.8.2 重定位符號引用131
7.9 共享庫132
小結(jié)137
習題138
第8章 存儲器層次結(jié)構(gòu)142
8.1 存儲技術(shù)142
8.1.1 存儲器的分類142
8.1.2 半導體存儲器143
8.1.3 主存儲器144
8.1.4 磁盤存儲器152
8.1.5 固態(tài)硬盤159
8.1.6 存儲技術(shù)趨勢160
8.2 局部性162
8.2.1 程序數(shù)據(jù)引用的局部性162
8.2.2 指令引用的局部性164
8.2.3 局部性小結(jié)164
8.3 存儲器層次結(jié)構(gòu)164
8.3.1 存儲器層次結(jié)構(gòu)中的緩存165
8.3.2 概念小結(jié)168
8.4 高速緩存169
8.4.1 高速緩存的組織結(jié)構(gòu)169
8.4.2 存儲器層次結(jié)構(gòu)的四個問題172
8.4.3 直接映射高速緩存174
8.4.4 組相聯(lián)高速緩存180
8.4.5 全相聯(lián)高速緩存181
8.4.6 高速緩存中的寫182
8.4.7 Intel Core i7高速緩存層次
結(jié)構(gòu)182
8.4.8 高速緩存的性能指標183
8.4.9 編寫高速緩存友好的代碼184
小結(jié)185
習題185
第9章 異?刂屏189
9.1 異常189
9.1.1 異常處理190
9.1.2 異常分類191
9.2 進程193
9.3 進程控制196
9.3.1 獲取進程標識符196
9.3.2 進程的創(chuàng)建197
9.3.3 進程的終止200
9.3.4 子進程回收200
9.3.5 加載并運行程序202
9.4 信號203
9.4.1 信號術(shù)語205
9.4.2 信號的發(fā)送206
9.4.3 信號的接收209
小結(jié)210
習題210
第10章 虛擬存儲215
10.1 地址空間215
10.1.1 物理地址空間215
10.1.2 虛擬地址空間216
10.2 虛存的功能216
10.2.1 虛存的緩存功能216
10.2.2 虛存的存儲管理功能222
10.2.3 虛存的存儲保護功能223
10.3 從虛擬地址到物理地址224
10.3.1 高速緩存結(jié)合虛擬存儲器225
10.3.2 快表225
10.3.3 多級頁表226
10.3.4 重看尋址過程227
10.4 Linu