計(jì)算機(jī)系統(tǒng)基礎(chǔ) 第2版
定 價(jià):59 元
叢書(shū)名:計(jì)算機(jī)類(lèi)專(zhuān)業(yè)系統(tǒng)能力培養(yǎng)系列教材
- 作者:袁春風(fēng) 余子濠
- 出版時(shí)間:2018/7/1
- ISBN:9787111604891
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP3
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)主要介紹與計(jì)算機(jī)系統(tǒng)相關(guān)的核心概念,解釋這些概念如何相互關(guān)聯(lián)并終影響程序執(zhí)行的結(jié)果和性能。本書(shū)共分8章,主要內(nèi)容包括數(shù)據(jù)的表示和運(yùn)算、程序的轉(zhuǎn)換及機(jī)器級(jí)表示、程序的鏈接、程序的執(zhí)行、存儲(chǔ)器層次結(jié)構(gòu)、虛擬存儲(chǔ)器、異?刂屏骱虸/O操作的實(shí)現(xiàn)等。本書(shū)將計(jì)算機(jī)系統(tǒng)每個(gè)抽象層涉及的重要概念通過(guò)程序的開(kāi)發(fā)和運(yùn)行串聯(lián)起來(lái),內(nèi)容詳盡,反映現(xiàn)實(shí),概念清楚,通俗易懂,實(shí)例豐富,并提供大量典型習(xí)題以供讀者練習(xí)。本書(shū)可以作為計(jì)算機(jī)專(zhuān)業(yè)本科或大專(zhuān)院校學(xué)生計(jì)算機(jī)系統(tǒng)方面的基礎(chǔ)性教材,也可以作為有關(guān)專(zhuān)業(yè)研究生或計(jì)算機(jī)技術(shù)人員的參考書(shū)。
PREFACE前 言后PC時(shí)代的到來(lái),使得原先基于PC而建立起來(lái)的專(zhuān)業(yè)教學(xué)內(nèi)容已經(jīng)遠(yuǎn)遠(yuǎn)不能反映現(xiàn)代社會(huì)對(duì)計(jì)算機(jī)專(zhuān)業(yè)人才的培養(yǎng)要求,原先計(jì)算機(jī)專(zhuān)業(yè)人才培養(yǎng)強(qiáng)調(diào)“程序”設(shè)計(jì)也變?yōu)楦鼜?qiáng)調(diào)“系統(tǒng)”設(shè)計(jì)。這需要我們重新規(guī)劃教學(xué)課程體系,調(diào)整教學(xué)理念和教學(xué)內(nèi)容,加強(qiáng)學(xué)生系統(tǒng)能力培養(yǎng),使學(xué)生能夠深刻理解計(jì)算機(jī)系統(tǒng)整體概念,更好地掌握軟/硬件協(xié)同設(shè)計(jì)和程序設(shè)計(jì)技術(shù),從而更多地培養(yǎng)出滿(mǎn)足業(yè)界需求的各類(lèi)計(jì)算機(jī)專(zhuān)業(yè)人才。不管培養(yǎng)計(jì)算機(jī)系統(tǒng)哪個(gè)層面的計(jì)算機(jī)技術(shù)人才,計(jì)算機(jī)專(zhuān)業(yè)教育都要重視學(xué)生“系統(tǒng)觀”的培養(yǎng)。
本書(shū)的主要目的就是為加強(qiáng)計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的“系統(tǒng)觀”而提供一本關(guān)于“計(jì)算機(jī)系統(tǒng)基礎(chǔ)”課程教學(xué)的教材。
1.本書(shū)的寫(xiě)作思路和內(nèi)容組織本書(shū)從程序員視角出發(fā),重點(diǎn)介紹應(yīng)用程序員如何利用計(jì)算機(jī)系統(tǒng)相關(guān)知識(shí)來(lái)編寫(xiě)更有效的程序。本書(shū)以高級(jí)語(yǔ)言程序的開(kāi)發(fā)和運(yùn)行過(guò)程為主線(xiàn),將該過(guò)程中每個(gè)環(huán)節(jié)所涉及的硬件和軟件的基本概念關(guān)聯(lián)起來(lái),試圖使讀者建立一個(gè)完整的計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)框架,了解計(jì)算機(jī)系統(tǒng)的全貌和相關(guān)知識(shí)體系,初步理解計(jì)算機(jī)系統(tǒng)中的每一個(gè)抽象層及其相互轉(zhuǎn)換關(guān)系,建立高級(jí)語(yǔ)言程序、ISA、OS、編譯器、鏈接器等之間的相互關(guān)聯(lián);對(duì)指令在硬件上的執(zhí)行過(guò)程和指令的底層硬件執(zhí)行機(jī)制有一定的認(rèn)識(shí)和理解,從而增強(qiáng)讀者在程序的調(diào)試、性能優(yōu)化、移植和健壯性保證等方面的能力,并為后續(xù)的“計(jì)算機(jī)組成與設(shè)計(jì)”“操作系統(tǒng)”“編譯技術(shù)”“計(jì)算機(jī)體系結(jié)構(gòu)”等課程打下堅(jiān)實(shí)基礎(chǔ)。
本書(shū)的具體內(nèi)容包括:程序中處理的數(shù)據(jù)在機(jī)器中的表示和運(yùn)算、程序中各類(lèi)控制語(yǔ)句對(duì)應(yīng)的機(jī)器級(jí)代碼的結(jié)構(gòu)、可執(zhí)行目標(biāo)代碼的鏈接生成、可執(zhí)行目標(biāo)代碼中的指令序列在機(jī)器上的執(zhí)行過(guò)程、存儲(chǔ)訪(fǎng)問(wèn)過(guò)程、打斷程序正常執(zhí)行的機(jī)制以及程序中的I/O操作功能如何通過(guò)請(qǐng)求操作系統(tǒng)內(nèi)核提供的系統(tǒng)調(diào)用服務(wù)來(lái)完成等。
不管構(gòu)建一個(gè)計(jì)算機(jī)系統(tǒng)的各類(lèi)硬件和軟件多么千差萬(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ū)所用的平臺(tái)為IA-32/x86-64+Linux+GCC+C語(yǔ)言。
本書(shū)共有8章,分兩個(gè)部分。第一部分主要是系統(tǒng)概要并介紹可執(zhí)行目標(biāo)文件的生成,包含第1~4章;第二部分主要介紹可執(zhí)行目標(biāo)文件的運(yùn)行,包含第5~8章。第1章是計(jì)算機(jī)系統(tǒng)概述;第2章和第3章分別介紹高級(jí)語(yǔ)言程序中的數(shù)據(jù)和語(yǔ)句所對(duì)應(yīng)的底層機(jī)器級(jí)表示,展示的是高級(jí)語(yǔ)言程序到機(jī)器級(jí)語(yǔ)言程序的對(duì)應(yīng)轉(zhuǎn)換關(guān)系;第4章主要介紹如何將不同的程序模塊鏈接起來(lái)構(gòu)成可執(zhí)行目標(biāo)文件,展示的是程序的鏈接環(huán)節(jié);第5章和第6章著重介紹程序的運(yùn)行環(huán)節(jié),包括與程序運(yùn)行密切相關(guān)的硬件部分——CPU及存儲(chǔ)器的組織;第7章介紹打斷程序正常運(yùn)行的事件機(jī)制——異?刂屏;第8章主要介紹程序中I/O操作的實(shí)現(xiàn)機(jī)制。此外,附錄A中還補(bǔ)充了數(shù)字邏輯電路的基礎(chǔ)內(nèi)容,為那些沒(méi)有數(shù)字邏輯電路基礎(chǔ)知識(shí)的讀者閱讀本書(shū)提供方便。
2.讀者所需的背景知識(shí)本書(shū)假定讀者對(duì)C語(yǔ)言程序設(shè)計(jì)有一定的基礎(chǔ),已經(jīng)掌握了C語(yǔ)言的語(yǔ)法和各類(lèi)控制語(yǔ)句、數(shù)據(jù)類(lèi)型及其運(yùn)算、各類(lèi)表達(dá)式、函數(shù)調(diào)用和C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù)等相關(guān)知識(shí)。
此外,本書(shū)對(duì)于程序中指令的執(zhí)行過(guò)程進(jìn)行了介紹,這涉及布爾代數(shù)、邏輯運(yùn)算電路、存儲(chǔ)部件等內(nèi)容,因而,本書(shū)正文內(nèi)容假定讀者具有數(shù)字邏輯電路基礎(chǔ)知識(shí)。不過(guò),如果讀者不具備這些背景知識(shí)的話(huà),可以參看本書(shū)附錄A。
本書(shū)所用的平臺(tái)為IA-32/x86-64+Linux+GCC+C語(yǔ)言。書(shū)中大多數(shù)C語(yǔ)言程序?qū)?yīng)的機(jī)器級(jí)表示都是基于IA-32+Linux平臺(tái)用GCC編譯器生成的,本書(shū)會(huì)在介紹程序的機(jī)器級(jí)表示之前,先簡(jiǎn)要介紹IA-32的指令集體系結(jié)構(gòu),包括其機(jī)器語(yǔ)言和匯編語(yǔ)言的介紹,因而,讀者無(wú)須任何機(jī)器語(yǔ)言和匯編語(yǔ)言的背景知識(shí)。
XII3.使用本書(shū)作為教材的課程及教學(xué)建議目前國(guó)內(nèi)大學(xué)計(jì)算機(jī)專(zhuān)業(yè)課程設(shè)置,大多是按計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)進(jìn)行橫向切分,自下而上分解成數(shù)字邏輯電路、計(jì)算機(jī)組成原理、匯編程序設(shè)計(jì)、操作系統(tǒng)、編譯原理、程序設(shè)計(jì)等課程,而且,每門(mén)課程都僅局限在本抽象層,相互之間幾乎沒(méi)有關(guān)聯(lián),因而學(xué)生對(duì)整個(gè)計(jì)算機(jī)系統(tǒng)的認(rèn)識(shí)過(guò)程就像“瞎子摸象”一樣,很難形成一個(gè)對(duì)完整計(jì)算機(jī)系統(tǒng)的全面認(rèn)識(shí)。雖然國(guó)內(nèi)有些高校也有計(jì)算機(jī)系統(tǒng)概論、計(jì)算機(jī)系統(tǒng)入門(mén)或?qū)д撝?lèi)的課程,但通常內(nèi)容較廣且結(jié)構(gòu)較松散,基本上是計(jì)算機(jī)課程概論,因而很難使學(xué)生真正形成計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)整體框架。
筆者對(duì)美國(guó)幾所頂級(jí)大學(xué)近年來(lái)相關(guān)課程體系進(jìn)行了跟蹤調(diào)查,發(fā)現(xiàn)他們都非常注重計(jì)算機(jī)系統(tǒng)能力的培養(yǎng),都在講完高層的編程語(yǔ)言及程序設(shè)計(jì)課程后開(kāi)設(shè)一門(mén)關(guān)于計(jì)算機(jī)系統(tǒng)的基礎(chǔ)課程,如MIT的6.004、UC-Berkeley的CS 61C、CMU的CS 213、斯坦福大學(xué)的CS 107等。這些課程在內(nèi)容上特別注重計(jì)算機(jī)系統(tǒng)各抽象層的縱向關(guān)聯(lián),將高級(jí)語(yǔ)言程序、匯編語(yǔ)言程序、機(jī)器代碼及其執(zhí)行串聯(lián)起來(lái),為學(xué)生進(jìn)一步學(xué)習(xí)后續(xù)相關(guān)課程打下堅(jiān)實(shí)的基礎(chǔ)。
本書(shū)在借鑒國(guó)外相關(guān)課程教學(xué)內(nèi)容和相關(guān)教材的基礎(chǔ)上編寫(xiě),適合于在完成程序設(shè)計(jì)基礎(chǔ)課程后進(jìn)行學(xué)習(xí)。本書(shū)內(nèi)容貫穿計(jì)算機(jī)系
袁春風(fēng) 南京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系教授。主要研究領(lǐng)域?yàn)榇髷?shù)據(jù)計(jì)算與并行處理技術(shù)、Web信息檢索與文本挖掘技術(shù)等。在相關(guān)領(lǐng)域承擔(dān)科研項(xiàng)目近40項(xiàng),發(fā)表論文近70篇,兩次獲江蘇省科技進(jìn)步二等獎(jiǎng),并獲江蘇省軟件一等獎(jiǎng)。主持的“計(jì)算機(jī)組成原理”和“計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)”課程被遴選為精品課程、精品資源共享課、江蘇省精品課程;主編的《計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)》以及《計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)習(xí)題解答與教學(xué)指導(dǎo)》獲“十二五”普通高等教育規(guī)劃教材和江蘇省精品教材;作為主要成員獲2013年江蘇省教學(xué)成果特等獎(jiǎng)和2014年國(guó)家教學(xué)成果二等獎(jiǎng)!坝(jì)算機(jī)系統(tǒng)基礎(chǔ)(一):程序的表示、轉(zhuǎn)換與鏈接”獲國(guó)家精品在線(xiàn)開(kāi)放課程,“計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)”課程網(wǎng)站獲江蘇省多媒體課件特等獎(jiǎng)。
CONTENTS
目 錄
叢書(shū)序言
序 言
前 言
第一部分 系統(tǒng)概述和可執(zhí)行目標(biāo)文件的生成
第1章 計(jì)算機(jī)系統(tǒng)概述2
1.1 計(jì)算機(jī)基本工作原理2
1.1.1 馮·諾依曼結(jié)構(gòu)基本思想2
1.1.2 馮·諾依曼機(jī)基本結(jié)構(gòu)3
1.1.3 程序和指令的執(zhí)行過(guò)程4
1.2 程序的開(kāi)發(fā)與運(yùn)行7
1.2.1 程序設(shè)計(jì)語(yǔ)言和翻譯程序7
1.2.2 從源程序到可執(zhí)行文件9
1.2.3 可執(zhí)行文件的啟動(dòng)和執(zhí)行10
1.3 計(jì)算機(jī)系統(tǒng)的層次結(jié)構(gòu)12
1.3.1 計(jì)算機(jī)系統(tǒng)抽象層的轉(zhuǎn)換12
1.3.2 計(jì)算機(jī)系統(tǒng)核心層之間的關(guān)聯(lián)14
1.3.3 計(jì)算機(jī)系統(tǒng)的不同用戶(hù)16
1.4 計(jì)算機(jī)系統(tǒng)性能評(píng)價(jià)18
1.4.1 計(jì)算機(jī)性能的定義19
1.4.2 計(jì)算機(jī)性能的測(cè)試19
1.4.3 用指令執(zhí)行速度進(jìn)行性能評(píng)估21
1.4.4 用基準(zhǔn)程序進(jìn)行性能評(píng)估22
1.4.5 Amdahl定律23
1.5 本書(shū)的主要內(nèi)容和組織結(jié)構(gòu)24
1.6 小結(jié)27
習(xí)題27
第2章 數(shù)據(jù)的機(jī)器級(jí)表示與處理30
2.1 數(shù)制和編碼30
2.1.1 信息的二進(jìn)制編碼30
2.1.2 進(jìn)位計(jì)數(shù)制32
2.1.3 定點(diǎn)與浮點(diǎn)表示36
2.1.4 定點(diǎn)數(shù)的編碼表示36
2.2 整數(shù)的表示41
2.2.1 無(wú)符號(hào)整數(shù)和帶符號(hào)整數(shù)的表示41
2.2.2 C語(yǔ)言中的整數(shù)及其相互轉(zhuǎn)換42
2.3 浮點(diǎn)數(shù)的表示44
2.3.1 浮點(diǎn)數(shù)的表示范圍44
2.3.2 浮點(diǎn)數(shù)的規(guī)格化45
2.3.3 IEEE 754浮點(diǎn)數(shù)標(biāo)準(zhǔn)45
2.3.4 C語(yǔ)言中的浮點(diǎn)數(shù)類(lèi)型49
2.4 十進(jìn)制數(shù)的表示51
2.4.1 用ASCII碼字符表示51
2.4.2 用BCD碼表示51
2.5 非數(shù)值數(shù)據(jù)的編碼表示52
2.5.1 邏輯值52
2.5.2 西文字符52
2.5.3 漢字字符53
2.6 數(shù)據(jù)的寬度和存儲(chǔ)55
2.6.1 數(shù)據(jù)的寬度和單位55
2.6.2 數(shù)據(jù)的存儲(chǔ)和排列順序57
2.7 數(shù)據(jù)的基本運(yùn)算61
2.7.1 按位運(yùn)算和邏輯運(yùn)算61
2.7.2 左移運(yùn)算和右移運(yùn)算61
2.7.3 位擴(kuò)展運(yùn)算和位截?cái)噙\(yùn)算63
2.7.4 整數(shù)加減運(yùn)算64
2.7.5 整數(shù)乘除運(yùn)算68
2.7.6 常量的乘除運(yùn)算71
2.7.7 浮點(diǎn)數(shù)運(yùn)算72
2.8 小結(jié)78
習(xí)題79
第3章 程序的轉(zhuǎn)換及機(jī)器級(jí)表示87
3.1 程序轉(zhuǎn)換概述87
3.1.1 機(jī)器指令及匯編指令88
3.1.2 指令集體系結(jié)構(gòu)89
3.1.3 生成機(jī)器代碼的過(guò)程89
3.2 IA-32指令系統(tǒng)概述94
3.2.1 數(shù)據(jù)類(lèi)型及其格式95
3.2.2 寄存器組織和尋址方式96
3.2.3 機(jī)器指令格式101
3.3 IA-32常用指令類(lèi)型及其操作103
3.3.1 傳送指令103
3.3.2 定點(diǎn)算術(shù)運(yùn)算指令106
3.3.3 按位運(yùn)算指令109
3.3.4 控制轉(zhuǎn)移指令110
3.3.5 x87浮點(diǎn)處理指令115
3.3.6 MMX/SSE指令集116
3.4 C語(yǔ)言程序的機(jī)器級(jí)表示118
3.4.1 過(guò)程調(diào)用的機(jī)器級(jí)表示118
3.4.2 選擇語(yǔ)句的機(jī)器級(jí)表示132
3.4.3 循環(huán)結(jié)構(gòu)的機(jī)器級(jí)表示136
3.5 復(fù)雜數(shù)據(jù)類(lèi)型的分配和訪(fǎng)問(wèn)139
3.5.1 數(shù)組的分配和訪(fǎng)問(wèn)139
3.5.2 結(jié)構(gòu)體數(shù)據(jù)的分配和訪(fǎng)問(wèn)144
3.5.3 聯(lián)合體數(shù)據(jù)的分配和訪(fǎng)問(wèn)146
3.5.4 數(shù)據(jù)的對(duì)齊148
3.6 越界訪(fǎng)問(wèn)和緩沖區(qū)溢出151
3.6.1 緩沖區(qū)溢出151
3.6.2 緩沖區(qū)溢出攻擊153
3.6.3 緩沖區(qū)溢出攻擊的防范155
3.7 兼容IA-32的64位系統(tǒng)158
3.7.1 x86-64的發(fā)展簡(jiǎn)史158
3.7.2 x86-64的基本特點(diǎn)159
3.7.3 x86-64的基本指令和對(duì)齊159
3.7.4 x86-64的過(guò)程調(diào)用161
3.7.5 x86-64的浮點(diǎn)操作與SIMD指令165
3.8 小結(jié)166
習(xí)題167
第4章 程序的鏈接182
4.1 編譯、匯編和靜態(tài)鏈接182
4.1.1 編譯和匯編182
4.1.2 可執(zhí)行目標(biāo)文件的生成184
4.2 目標(biāo)文件格式186
4.2.1 ELF目標(biāo)文件格式186
4.2.2 可重定位目標(biāo)文件格式187
4.2.3 可執(zhí)行目標(biāo)文件格式190
4.2.4 可執(zhí)行文件的存儲(chǔ)器映像192
4.3 符號(hào)表和符號(hào)解析193
4.3.1 符號(hào)和符號(hào)表193
4.3.2 符號(hào)解析196
4.3.3 與靜態(tài)庫(kù)的鏈接199
4.4 重定位201
4.4.1 重定位信息202
4.4.2 重定位過(guò)程202
4.5 動(dòng)態(tài)鏈接206
4.5.1 動(dòng)態(tài)鏈接的特性207
4.5.2 程序加載時(shí)的動(dòng)態(tài)鏈接207
4.5.3 程序運(yùn)行時(shí)的動(dòng)態(tài)鏈接209
4.5.4 位置無(wú)關(guān)代碼210
4.6 小結(jié)214
習(xí)題215
第二部分 可執(zhí)行目標(biāo)文件的運(yùn)行
第5章 程序的執(zhí)行222
5.1 程序執(zhí)行概述222
5.1.1 程序及指令的執(zhí)行過(guò)程222
5.1.2 CPU的基本功能和組成224
5.1.3 打斷程序正常執(zhí)行的事件226
5.2 數(shù)據(jù)通路基本結(jié)構(gòu)和工作原理227
5.2.1 數(shù)據(jù)通路基本結(jié)構(gòu)227
5.2.2 數(shù)據(jù)通路的時(shí)序控制229
5.2.3 總線(xiàn)式數(shù)據(jù)通路230
5.2.4 單周期數(shù)據(jù)通路235
5.3 流水線(xiàn)方式下指令的執(zhí)行238
5.3.1