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