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