計(jì)算機(jī)體系結(jié)構(gòu)精髓(原書(shū)第2版)
定 價(jià):99 元
叢書(shū)名:計(jì)算機(jī)科學(xué)叢書(shū)
- 作者:[美]道格拉斯·科莫(Douglas Comer)
- 出版時(shí)間:2019/6/1
- ISBN:9787111626589
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP303
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)是計(jì)算機(jī)體系結(jié)構(gòu)的入門(mén)教材,從程序員的視角展開(kāi)討論,重點(diǎn)介紹基礎(chǔ)知識(shí)和概念,不深入底層技術(shù)的細(xì)節(jié)。這種視角旨在幫助程序員新手和計(jì)算機(jī)專(zhuān)業(yè)新生理解體系結(jié)構(gòu)對(duì)編程的影響,書(shū)中濃縮的核心知識(shí)點(diǎn)涵蓋了程序員需要掌握的所有硬件層面,從而有利于其更好地進(jìn)行軟件的設(shè)計(jì)、實(shí)現(xiàn)和運(yùn)維。本書(shū)分為五個(gè)部分,包括數(shù)字邏輯、門(mén)和數(shù)據(jù)通路的基礎(chǔ)知識(shí),以及體系結(jié)構(gòu)的三個(gè)主要方面——處理器、內(nèi)存和I/O系統(tǒng)。此外,書(shū)中還涉及并行、流水線、能源和性能等高級(jí)主題,以及一個(gè)動(dòng)手操作的實(shí)驗(yàn)。第2版共包含了三個(gè)全新的章節(jié),并在整體上進(jìn)行了與時(shí)俱進(jìn)的修訂。
硬件工程已經(jīng)從使用分立電子元件轉(zhuǎn)向使用可編程器件。因此,編程變得更加重要。那些理解硬件如何運(yùn)轉(zhuǎn)和熟知基本硬件原理的程序員,可以更加高效且少犯錯(cuò)誤地構(gòu)建軟件系統(tǒng)。掌握計(jì)算機(jī)體系結(jié)構(gòu)的基礎(chǔ)知識(shí)使得編程人員能夠理解軟件如何映射到硬件上,并做出更好的軟件設(shè)計(jì)選擇。掌握底層硬件知識(shí)也有助于調(diào)試,因?yàn)樗梢宰尦绦騿T快速地定位問(wèn)題的根源。
本書(shū)適用于一個(gè)學(xué)期的本科課程。在眾多計(jì)算機(jī)科學(xué)課程中,計(jì)算機(jī)體系結(jié)構(gòu)或計(jì)算機(jī)組成課程是唯一介紹計(jì)算機(jī)結(jié)構(gòu)基本概念的課程,這些概念有助于學(xué)生理解他們賴(lài)以編程的計(jì)算機(jī)結(jié)構(gòu)。遺憾的是,大多數(shù)計(jì)算機(jī)體系結(jié)構(gòu)書(shū)籍都是硬件工程師編寫(xiě)的,目標(biāo)讀者是那些想學(xué)習(xí)如何設(shè)計(jì)硬件的學(xué)生。本書(shū)則采用了不同的方法:不再專(zhuān)注于硬件設(shè)計(jì)和工程細(xì)節(jié),而是針對(duì)程序員,解釋程序員需要知道的硬件基礎(chǔ)知識(shí)。因此,本書(shū)從程序員的角度解釋主題,并強(qiáng)調(diào)其對(duì)程序員的影響。
全書(shū)分為五個(gè)部分。第一部分介紹數(shù)字邏輯、門(mén)電路、數(shù)據(jù)通路和數(shù)據(jù)表示的基礎(chǔ)知識(shí)。大多數(shù)學(xué)生喜歡這種簡(jiǎn)短的學(xué)習(xí)底層硬件的方式(特別是本書(shū)不介紹細(xì)微的硬件細(xì)節(jié))。第二至四部分涵蓋體系結(jié)構(gòu)的三個(gè)主要方面:處理器、存儲(chǔ)器和輸入/輸出系統(tǒng)。在每一章中,都為學(xué)生提供了足夠的背景知識(shí),以便他們了解相關(guān)機(jī)制如何運(yùn)作及其對(duì)程序員的影響,而無(wú)須繼續(xù)了解許多細(xì)節(jié)。最后,第五部分涵蓋并行、流水線、功耗和能耗以及性能等高級(jí)主題。
附錄A描述課程的一個(gè)重要方面——實(shí)驗(yàn),學(xué)生可以通過(guò)實(shí)踐學(xué)習(xí)。盡管大多數(shù)實(shí)驗(yàn)問(wèn)題都集中在編程上,但學(xué)生應(yīng)該在前幾周完成在面包板上連接門(mén)電路。該設(shè)備價(jià)格低廉(我們購(gòu)買(mǎi)供學(xué)生實(shí)驗(yàn)的長(zhǎng)期設(shè)備時(shí),每位學(xué)生花費(fèi)少于15美元,學(xué)生自己購(gòu)買(mǎi)實(shí)驗(yàn)設(shè)備花費(fèi)不到20美元)。
附錄C提供對(duì)x86匯編語(yǔ)言和x64擴(kuò)展的簡(jiǎn)單介紹。許多老師講授x86系統(tǒng),要求將其包含在內(nèi)。該材料位于附錄中,意味著選擇RISC匯編語(yǔ)言(例如,ARM體系結(jié)構(gòu))的老師可以將其用于比較。
第2版新增了兩章并對(duì)全書(shū)內(nèi)容做了一些修改和更新。例如,在第3章中,有關(guān)數(shù)據(jù)通路的部分展示了計(jì)算機(jī)系統(tǒng)的組件,并描述了當(dāng)指令執(zhí)行時(shí)數(shù)據(jù)是如何在這些組件間流動(dòng)的。通過(guò)簡(jiǎn)單的例子在第2章介紹的數(shù)字邏輯與接下來(lái)章節(jié)介紹的處理器之間搭建了橋梁。在第20章中,覆蓋了功耗與能耗的基本概念,讀者無(wú)須了解更多細(xì)節(jié)。它解釋了為什么以半速運(yùn)行的雙核處理器芯片的功耗要低于全速運(yùn)行的單核處理器芯片的功耗。
我們建立了一個(gè)與本書(shū)配套的網(wǎng)站:http://www.eca.cs.purdue.edu。
本書(shū)正文及實(shí)驗(yàn)練習(xí)被普渡大學(xué)用作教材,學(xué)生對(duì)這兩方面都非常積極。我們收到了大量關(guān)于本書(shū)的感謝信息。對(duì)于許多學(xué)生來(lái)說(shuō),實(shí)驗(yàn)課是他們與硬件的第一次近距離接觸,因此學(xué)習(xí)熱情高漲。
感謝許多為本書(shū)做出貢獻(xiàn)的人。Bernd Wolfinger全面審閱了本書(shū),并就主題和方向提出了一些重要建議。一些教授和學(xué)生指出了第1版中的錯(cuò)別字。George Adams為第2版提供了詳細(xì)的意見(jiàn)和建議。
最后,感謝我的妻子Chris,她耐心細(xì)致的編輯和提出的寶貴建議,改進(jìn)和完善了本書(shū)。
道格拉斯·科莫
---作者簡(jiǎn)介---
道格拉斯·科莫(Douglas Comer) 世界知名的計(jì)算機(jī)網(wǎng)絡(luò)和TCP/IP專(zhuān)家,普渡大學(xué)計(jì)算機(jī)科學(xué)杰出教授,ACM會(huì)士,獲得了包括USENIX終身成就獎(jiǎng)在內(nèi)的眾多獎(jiǎng)項(xiàng)。曾擔(dān)任思科公司首席研究副總裁,CSNET技術(shù)委員會(huì)主席,DARPA分布式系統(tǒng)架構(gòu)委員會(huì)主席,以及《Software—Practice And Experience》期刊主編。他撰寫(xiě)了一系列突破性的教科書(shū),這些書(shū)被翻譯成16種語(yǔ)言,在工業(yè)界和學(xué)術(shù)界影響甚廣。
---譯者簡(jiǎn)介---
黃智瀕 北京郵電大學(xué)計(jì)算機(jī)學(xué)院講師,計(jì)算機(jī)體系結(jié)構(gòu)博士,主講數(shù)字邏輯和計(jì)算機(jī)體系結(jié)構(gòu)課程。主要研究方向包括GPU加速及大規(guī)模并行計(jì)算等。
戴志濤 北京郵電大學(xué)計(jì)算機(jī)學(xué)院教授,主講計(jì)算機(jī)組成原理和嵌入式系統(tǒng)課程。主要研究方向包括嵌入式片上系統(tǒng)架構(gòu)等。
出版者的話
譯者序
前言
關(guān)于作者
第1章 簡(jiǎn)介及概覽 1
1.1 體系結(jié)構(gòu)的重要性 1
1.2 學(xué)習(xí)基礎(chǔ)知識(shí) 1
1.3 本書(shū)結(jié)構(gòu) 1
1.4 一筆帶過(guò)的內(nèi)容 2
1.5 術(shù)語(yǔ):體系結(jié)構(gòu)和設(shè)計(jì) 2
1.6 小結(jié) 2
第一部分 基礎(chǔ)知識(shí)
第2章 數(shù)字邏輯基礎(chǔ) 4
2.1 引言 4
2.2 數(shù)字計(jì)算裝置 4
2.3 電氣術(shù)語(yǔ):電壓和電流 4
2.4 晶體管 5
2.5 邏輯門(mén) 5
2.6 使用晶體管實(shí)現(xiàn)的“與非”邏輯門(mén)電路 7
2.7 表示邏輯門(mén)的符號(hào) 8
2.8 邏輯門(mén)互連的例子 8
2.9 實(shí)現(xiàn)二進(jìn)制加法的數(shù)字電路 10
2.10 多邏輯門(mén)的集成電路 10
2.11 不只需要組合邏輯電路 11
2.12 維持狀態(tài)的電路 11
2.13 傳播延遲 12
2.14 使用鎖存器構(gòu)建存儲(chǔ)器 12
2.15 觸發(fā)器和波形圖 13
2.16 二進(jìn)制計(jì)數(shù)器 14
2.17 時(shí)鐘和時(shí)序 15
2.18 反饋的重要概念 17
2.19 啟動(dòng)序列 18
2.20 軟件迭代與硬件復(fù)制 18
2.21 門(mén)和芯片的最簡(jiǎn)化 19
2.22 使用閑置門(mén) 19
2.23 配電和散熱 20
2.24 時(shí)序和時(shí)鐘域 20
2.25 無(wú)時(shí)鐘邏輯 21
2.26 電路規(guī)模和摩爾定律 21
2.27 電路板和層 22
2.28 抽象層次 23
2.29 小結(jié) 23
習(xí)題 23
第3章 數(shù)據(jù)和程序的表示 25
3.1 引言 25
3.2 數(shù)字邏輯與抽象的重要性 25
3.3 位和字節(jié)的定義 25
3.4 字節(jié)大小和可能的值 25
3.5 二進(jìn)制位權(quán)表示法 26
3.6 位序 27
3.7 十六進(jìn)制記法 28
3.8 十六進(jìn)制和二進(jìn)制常數(shù)記法 29
3.9 字符集 29
3.10 Unicode 30
3.11 無(wú)符號(hào)整數(shù)、溢出和下溢 30
3.12 給位和字節(jié)編號(hào) 31
3.13 有符號(hào)二進(jìn)制整數(shù) 31
3.14 一個(gè)補(bǔ)碼數(shù)字的例子 32
3.15 符號(hào)擴(kuò)展 33
3.16 浮點(diǎn)數(shù) 33
3.17 IEEE浮點(diǎn)值的范圍 34
3.18 特殊值 35
3.19 二進(jìn)制編碼的十進(jìn)制表示 35
3.20 有符號(hào)數(shù)、分?jǐn)?shù)和壓縮BCD表示法 36
3.21 數(shù)據(jù)聚合 36
3.22 程序的表示 37
3.23 小結(jié) 37
習(xí)題 37
第二部分 處理器
第4章 處理器和計(jì)算引擎的多樣性 40
4.1 引言 40
4.2 兩種基本的體系結(jié)構(gòu) 40
4.3 哈佛與馮·諾依曼體系結(jié)構(gòu) 40
4.4 處理器的定義 41
4.5 處理器的范圍 41
4.6 分層結(jié)構(gòu)和計(jì)算引擎 42
4.7 傳統(tǒng)處理器的結(jié)構(gòu) 43
4.8 處理器的分類(lèi)和角色 44
4.9 處理器技術(shù) 44
4.10 存儲(chǔ)程序 45
4.11 取指–執(zhí)行周期 45
4.12 程序轉(zhuǎn)換 46
4.13 時(shí)鐘速率和指令速率 46
4.14 控制:?jiǎn)?dòng)和停止 47
4.15 啟動(dòng)取指–執(zhí)行周期 47
4.16 小結(jié) 48
習(xí)題 48
第5章 處理器類(lèi)型和指令集 49
5.1 引言 49
5.2 數(shù)學(xué)能力、便利性和成本 49
5.3 指令集架構(gòu) 49
5.4 操作碼、操作數(shù)和結(jié)果 50
5.5 典型的指令格式 50
5.6 可變長(zhǎng)度指令與固定長(zhǎng)度指令 50
5.7 通用寄存器 51
5.8 浮點(diǎn)寄存器和寄存器標(biāo)識(shí) 51
5.9 使用寄存器編程 51
5.10 寄存器存儲(chǔ)體 52
5.11 復(fù)雜指令集和精簡(jiǎn)指令集 53
5.12 RISC設(shè)計(jì)和執(zhí)行流水線 53
5.13 流水線和指令延遲 54
5.14 引起流水線停頓的其他原因 55
5.15 對(duì)程序員的影響 56
5.16 編程、停頓和無(wú)操作指令 56
5.17 轉(zhuǎn)發(fā) 56
5.18 操作類(lèi)型 57
5.19 程序計(jì)數(shù)器、取指–執(zhí)行以及分支 57
5.20 子程序調(diào)用、參數(shù)以及寄存器窗口 58
5.21 一個(gè)示例指令集 59
5.22 極簡(jiǎn)化的指令集 61
5.23 正交性原則 61
5.24 條件碼和條件分支 62
5.25 小結(jié) 62
習(xí)題 62
第6章 數(shù)據(jù)通路和指令執(zhí)行 64
6.1 引言 64
6.2 數(shù)據(jù)通路 64
6.3 示例指令集 64
6.4 內(nèi)存中的指令 66
6.5 移到下一條指令 67
6.6 取指令 68
6.7 解碼指令 69
6.8 連接到寄存器單元 69
6.9 控制和協(xié)調(diào) 70
6.10 算術(shù)運(yùn)算和復(fù)用 70
6.11 涉及存儲(chǔ)器中數(shù)據(jù)的操作 71
6.12 執(zhí)行過(guò)程的示例 72
6.13 小結(jié) 73
習(xí)題 73
第7章 操作數(shù)尋址和指令表示 75
7.1 引言 75
7.2 零、一、二或三地址設(shè)計(jì) 75
7.3 每指令零操作數(shù) 75
7.4 每指令單操作數(shù) 76
7.5 每指令兩操作數(shù) 76
7.6 每指令三操作數(shù) 77
7.7 操作數(shù)來(lái)源和立即數(shù) 77
7.8 馮·諾依曼體系結(jié)構(gòu)的瓶頸 77
7.9 顯式和隱式操作數(shù)編碼 78
7.10 組合多個(gè)值的操作數(shù) 79
7.11 權(quán)衡操作數(shù)的選擇 79
7.12 內(nèi)存中的值和間接引用 80
7.13 操作數(shù)尋址模式的示例 80
7.14 小結(jié) 81
習(xí)題 81
第8章 CPU:微碼、保護(hù)和處理器模式 83
8.1 引言 83
8.2 中央處理器 83
8.3 CPU的復(fù)雜性 83
8.4 執(zhí)行模式 84
8.5 向后兼容性 84
8.6 改變模式 84
8.7 特權(quán)和保護(hù) 85
8.8 多級(jí)保護(hù) 85
8.9 微碼指令 86
8.10 微碼變體 87
8.11 微碼的優(yōu)勢(shì) 87
8.12 FPGA和指令集的改變 88
8.13 垂直微碼 88
8.14 水平微碼 88
8.15 水平微碼的例子 89
8.16 水平微碼程序示例 91
8.17 需要多個(gè)周期的操作 91
8.18 水平微碼和并行執(zhí)行 92
8.19 前瞻性和高性能執(zhí)行 92
8.20 并行和執(zhí)行順序 93
8.21 亂序指令執(zhí)行 93
8.22 條件分支和分支預(yù)測(cè) 94
8.23 對(duì)