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