使用 Raspberry Pi 學習電腦體系結構 (Learning Computer Architecture with Raspberry Pi)

Eben Upton, Jeff Duntemann, Ralph Roberts, Tim Mamtora, Ben Everard

買這商品的人也買了...

商品描述

《使用Raspberry Pi學習電腦體系結構》能幫助讀者
■ 瞭解Raspberry Pi每個部分的設計目的
■ 理解不同組件之間的交互方式
■ 深入瞭解系統設計的完整過程
■ 學習程序設計原理
■ 觀察硬件和操作系統之間的相互作用
■ 深入研究ARM芯片背後的機制
■ 比較和對照不同的芯片,從ARM到Intel


海報:

作者簡介

Eben Upton是Raspberry Pi基金會的創始人,也是該基金會旗下的貿易部門Raspberry 
Pi(貿易)有限公司的CEO,他與Gareth Halfacree合著了Raspberry Pi User Guide一書。Eben 
早年創辦了兩家成功的移動遊戲和中間件公司(Ideaworks 3d和Podfun),還曾擔任劍橋大
學聖約翰學院計算機科學的教學主管,並和他的父親Clive Upton教授一起編寫了牛津詩韻
詞典(Oxford Rhyming Dictionary)。Eben在劍橋大學獲得了物理學和工程學學士學位以及計
算機科學博士學位,還獲得了工商管理碩士學位。

Jeff Duntemann從1974年就開始出版各種技術類和科幻類出版物。它是Xerox公司的
程序師,同時還擔任Ziff-Davis出版社和Borland國際軟件公司的技術編輯。他編輯發行了
兩份程序師雜誌,在其名下有20本技術性書籍,包括最暢銷的Assembly Language Step By 
Step一書。在Dr. Dobb's Journal雜誌上,Jeff連續四年撰寫“Structured Programming”專
欄,並在很多雜誌上發表了大量技術性文章。1989年,Jeff和他的作傢伙伴Keith Weiskamp 
發起成立了Coriolis Group,到1998年Coriolis Group已經成為美國亞利桑那州很大的圖書出
版商。Jeff對“強”人工智能表現出持久的興趣,他的絕大部分科幻著作(包括The Cunning 
Blood和Ten Gentle Opportunities兩本小說)都在探尋強人工智能的因果邏輯。Jeff的其他興
趣包括望遠鏡和風箏,他還是一位電子學和無線電業餘愛好者(呼號K7JPD)。在過去的40 
年裡,Jeff一直和妻子Carol居住在美國亞利桑那州的菲尼克斯市,陪伴他們的還有四條捲
毛比雄犬。

Ralph Roberts是一名受過嘉獎的越戰老兵,在阿波羅登月工程期間供職於NASA。自從
1979年在Creative Computing雜誌上發表第一篇文章開始,Roberts就一直從事計算機和軟件方
面的寫作。Roberts為國家出版商撰寫了超過100本書籍,以及上千篇文章和短篇小說。總而
言之,他已經發售了超過2000萬字的專業內容。Roberts的佳暢銷書包括美國第一本關於
計算機病毒(美國國家電台由此誕生了多部相關電影)的書籍,還有過去21年裡反複印刷的
一本烹飪食譜—— Classic Cooking with Coca-Cola ,目前已經售出了50萬本。

Tim Mamtora是博通有限公司IC設計部門的總工程師,目前是美國GPU硬件團隊的技
術帶頭人。他在移動計算機圖形學方面從事了近七年的工作,此前為模擬電視和傳統DSP 硬件開發內部IP。Tim擁有劍橋大學工程學碩士學位,其中第三年在馬薩諸塞州技術學院度過,在那裡激發了Tim對數字硬件設計的興趣。他對推進工程充滿激情,並專門花費時間在劍橋大學指導學生,他還在母校發表工程學機遇方面的演講。工作之餘,Tim喜歡各類體育運動、攝影以及遊覽世界。

Ben Everard是一位作家,也是一位播客。平時為Linux編寫修補代碼,還喜歡擺弄機器人。本書是Everard的第二部著作,他還撰寫了Learning Python with Raspberry Pi一書(Wiley出版社,2014)。可以在推特@ben_everard上找到他。

目錄大綱

第1章計算機漫談1 
1.1日益繽彩紛呈的Raspberry 1 
1.2片上系統4 
1.3一台令人激動的信用卡般大小的計算機5 
1.4 Raspberry Pi的功能6 
1.5 Raspberry Pi板7 
1.5.1 GPIO引腳7 
1.5.2狀態LED 9 
1.5.3 USB插口10 
1.5.4以太網連接10 
1.5.5音頻輸出11 
1.5.6複合視頻12 
1.5.7 CSI攝像頭模塊連接器13 
1.5.8 HDMI 13 
1.5.9 micro USB電源14 
1.5.10存儲卡14 
1.5.11 DSI顯示連接15 
1.5.12裝配孔15 
1.5.13芯片16 
1.6未來16
 
第2章計算概述19 
2.1計算機與烹飪20 
2.1.1佐料與數據20 
2.1. 2基本操作21 
2.2按計劃執行的盒子22 
2.2.1執行和知曉22 
2.2.2程序就是數據23 
2.2.3存儲器24 
2.2.4寄存器25
2.2.5系統總線26 
2.2.6指令集26 
2.3電平、數字及其表示27 
2.3.1二進制:以1和0表示27 
2.3.2手指的局限性29 
2.3.3數量、編號和0 29 
2.3 .4用於二進制速記的十六進制30 
2.3.5執行二進制和十六進制運算31 
2.4操作系統:幕後老闆33 
2.4.1操作系統的功能33 
2.4.2向內核致敬34 
2.4.3多核34 

第3章電子存儲器35 
3.1存儲器先於計算機而存在35 
3.2旋轉磁存儲器(Rotating Magnetic Memory) 36 
3.3磁芯存儲器37 
3.3.1磁芯存儲器的工作過程38 
3.3.2存儲器訪問時間39 
3.4靜態隨機訪問存儲器(SRAM) 40 
3.5地址線和數據線41 
3.6由存儲器芯片構建存儲器系統42 
3.7動態隨機訪問存儲器(DRAM) 45 
3.7.1 DRAM的工作原理45 
3.7.2同步DRAM和異步DRAM47 
3.7.3 SDRAM列、行、Bank、Rank和DIMM 49 
3.7.4 DDR、DDR2、DDR3和DDR4 SDRAM50
3.7.5糾錯碼存儲器53 
3.8 Raspberry Pi的存儲器系統54 
3.8.1節能性54 
3.8.2球柵陣列封裝55 
3.9緩存55 
3.9.1訪問的局部性56 
3.9.2緩存層級56 
3.9.3緩存行和緩存映射57 
3.9.4直接映射59 
3.9.5相聯映射61 
3.9.6組相聯高速緩存62 
3.9.7回寫緩存到存儲器63 
3.10虛擬存儲器64 
3.10.1虛擬存儲器概覽64 
3.10.2虛擬存儲器到物理存儲器的映射65 
3.10.3深入了解存儲器管理單元66 
3.10.4多級頁表和TLB69 
3.10.5 Raspberry Pi的交換問題70 
3.10.6 Raspberry Pi虛擬存儲器70 

第4章ARM處理器與片上系統73 
4.1急速縮小的CPU 73 
4.1.1微處理器74 
4.1.2晶體管預算75 
4.2數字邏輯基礎75 
4.2.1邏輯門75 
4.2.2觸發器和時序邏輯76 
4.3 CPU內部78 
4.3.1分支與標誌79 
4.3.2系統棧80 
4.3.3系統時鐘和執行時間82
4.3.4流水線技術83 
4.3.5流水線技術詳解84 
4.3.6深入流水線以及流水線阻塞86 
4.3.7 ARM11中的流水線88 
4.3.8超標量執行89 
4.3.9基於SIMD的更多並行機制90 
4.3. 10字節序92 
4.4 CPU再認識:CISC與RISC 93 
4.4.1 RISC的歷史95 
4.4.2擴展的寄存器文件95 
4.4.3加載/存儲架構96 
4.4.4正交的機器指令96 
4.4.5獨立的指令和數據高速緩存97 
4.5源於艾康的ARM 97 
4.5.1微架構、內核及家族98 
4.5.2出售設計許可而非成品芯片98 
4.6 ARM11 99 
4.6.1 ARM指令集99 
4.6.2處理器模式102 
4.6.3模式和寄存器103 
4.6.4快速中斷107 
4.6.5軟件中斷108 
4.6.6中斷優先級108 
4.6.7條件指令執行109 
4.7協處理器111 
4.7.1 ARM協處理器接口112 
4.7.2系統控制協處理器113 
4.7.3向量浮點協處理器113
4.7.4仿真協處理器114 
4.8 ARM Cortex 114 
4.8.1多發和亂序執行115 
4.8.2 Thumb 2 115 
4.8.3 Thumb EE 115 
4.8.4 big.LITTLE 116 
4.8.5 NEON SIMD協處理器116 
4.8 .6 ARMv8和64位計算117 
4.9片上系統118 
4.9.1博通BCM2835 SoC 118 
4.9.2第二代和第三代博通SoC設備119 
4.9.3 VLSI芯片原理119 
4.9.4流程、製程工藝和掩膜120 
4.9.5 IP:單元、宏單元、內核120 
4.9.6硬IP和軟IP121 
4.9.7平面規劃、佈局和佈線121 
4.9.8片上通信的標準:AMBA 122 

第5章程序設計125 
5.1程序設計概述125 
5.1.1軟件開發過程126 
5.1.2瀑布、螺旋與敏捷128 
5.1.3二進製程序設計130 
5.1.4彙編語言和助記符131 
5.1.5高級語言132 
5.1.6花樣氾濫的後BASIC時代134 
5.1.7程序設計術語135 
5.2本地代碼編譯器的工作原理137
5.2.1預處理138 
5.2.2詞法分析138 
5.2.3語義分析139 
5.2.4生成中間代碼139 
5.2.5優化139 
5.2.6生成目標代碼139 
5.2.7 C編譯:一個具體示例140 
5.2.8鏈接目標代碼文件到可執行文件145 
5.3純文本解釋程序146 
5.4字節碼解釋語言148 
5.4.1 p-code 148 
5.4.2 Java 149 
5.4.3即時編譯(JIT) 150 
5.4.4 Java之外的字節碼和JIT編譯152 
5.4.5 Android 、Java和Dalvik 152 
5.5數據構建塊152 
5.5.1標識符、關鍵字、符號和操作符153 
5.5.2數值、文本和命名常量153 
5.5.3變量、表達式和賦值154 
5.5.4類型和類型定義154 
5.5.5靜態和動態類型156 
5.5.6補碼和IEEE 754 157 
5.6代碼構建塊159 
5.6.1控制語句和復合語句159 
5.6.2 if/then /else 159 
5.6.3 switch和case 161 
5.6.4 repeat循環162
5.6.5 while循環163 
5.6.6 for循環164 
5.6.7 break和continue語句166 
5.6.8函數166 
5.6.9局部性和作用域168 
5.7面向對象程序設計170 
5.7.1封裝172 
5.7.2繼承174 
5.7.3多態176 
5.7.4 OOP小結178 
5.8 GNU編譯器工具集概覽178 
5.8.1作為編譯器和生成工具的gcc179 
5.8.2使用Linux make 181 

第6章非易失性存儲器185 
6.1打孔卡和磁帶186 
6.1.1打孔卡186 
6.1.2磁帶數據存儲器186 
6.1.3磁存儲器的黎明188 
6.2磁記錄和編碼方案189 
6.2.1磁通躍遷190 
6.2.2垂直記錄191 
6.3磁盤存儲器192 
6.3.1柱面、磁軌和扇區193 
6.3.2低級格式化194 
6.3.3接口和控制器195 
6.3.4軟盤驅動器197 
6.4分區和文件系統198 
6.4.1主分區和擴展分區198 
6.4. 2文件系統和高級格式化199
6.4.3未來:GUID分區表(GPT) 200 
6.4.4 Raspberry Pi SD卡的分區201 
6.5光盤202 
6.5.1源自CD的格式203 
6.5.2源自DVD的格式204 
6.6虛擬硬盤205 
6.7 Flash存儲器206 
6.7.1 ROM、PROM和EPROM 206 
6.7.2 Flash與EEPROM 207 
6.7.3單級與多級存儲209 
6.7.4 NOR Flash與NAND Flash 210 
6.7.5損耗平衡及Flash轉換層213 
6.7.6碎片回收和TRIM 214 
6.7.7 SD卡215 
6.7.8 eMMC216 
6.7.9非易失性存儲器的未來217 

第7章有線和無線以太網219 
7.1網絡互連OSI參考模型220 
7.1.1應用層222 
7.1. 2表示層222 
7.1.3會話層223 
7.1.4傳輸層223 
7.1.5網絡層224 
7.1.6數據鏈路層226 
7.1.7物理層226 
7.2以太網227 
7.2.1粗纜以太網和細纜以太網227
7.2.2以太網的基本構想227 
7.2.3衝突檢測和規避228 
7.2.4以太網編碼系統229 
7.2.5 PAM-5編碼232 
7.2.6 10BASE-T和雙絞線233 
7.2.7從總線拓撲結構到星型拓撲結構234 
7.2.8交換以太網235 
7.3路由器和互聯網237 
7.3.1名稱與地址237 
7.3.2 IP地址和TCP端口238 
7.3.3本地IP地址和DHCP 240 
7.3.4網絡地址轉換242 
7.4 Wi-Fi 243 
7.4.1標準中的標準244 
7.4.2面對現實世界245 
7.4.3正在使用的Wi-Fi設備248 
7.4.4基礎設施網絡與Ad Hoc網絡249 
7.4.5 Wi-Fi分佈式介質訪問250 
7.4.6載波監聽和隱藏結點問題251 
7.4.7分片253 
7.4.8調幅、調相和QAM 253 
7.4.9擴頻技術256 
7.4.10 Wi-Fi調製和編碼細節256 
7.4.11 Wi-Fi連接的實現原理259 
7.4.12 Wi-Fi安全性260 
7.4.13 Raspberry Pi上的Wi-Fi 261
7.4.14更多的網絡263 

第8章
操作系統265 
8.1操作系統簡介266 
8.1.1操作系統的歷史267 
8.1.2操作系統基礎270 
8.2內核:操作系統的核心主導者274 
8.2.1操作系統控制276 
8.2.2模式276 
8.2.3存儲器管理277 
8.2.4虛擬存儲器278 
8.2.5多任務處理278 
8.2.6磁盤訪問和文件系統279 
8.2.7設備驅動程序279 
8.3操作系統的使能器和助手279 
8.3.1喚醒操作系統280 
8.3.2固件283 
8.4 Raspberry Pi上的操作系統283 
8.4.1 NOOBS 284 
8.4.2第三方操作系統285 
8.4.3其他可用的操作系統285 

第9章視頻編解碼器和視頻壓縮287 
9.1第一個視頻編解碼器288 
9.1.1利用眼睛288 
9.1.2利用數據290 
9.1.3理解頻率變換293 
9.1.4使用無損編碼技術297 
9.2時移世易298 
9.2.1 MPEG的最新標準299
9.2.2 H.265 302 
9.3運動搜索302 
9.3.1視頻質量304 
9.3.2處理能力305 

第10章3D圖形307 
10.1 3D圖形簡史307 
10.1.1圖形用戶界面(Graphical User Interface,GUI) 308 
10.1 .2視頻遊戲中的3D圖形310 
10.1.3個人計算和顯卡311 
10.1.4兩個競爭標準312 
10.2 OpenGL圖形管線314 
10.2.1幾何規範和屬性315 
10.2.2幾何變換317 
10.2.3光照和材質320 
10.2.4圖元組裝和光柵化322 
10.2.5像素處理(片段著色)324 
10.2.6紋理326 
10.3現代圖形硬件328 
10.3.1瓦片渲染329 
10.3.2幾何拒絕330 
10.3.3著色332 
10.3 .4緩存333 
10.3.5 Raspberry Pi GPU 334 
10.4 Open VG 336 
10.5通用GPU 338 
10.5.1異構體系結構338 
10.5.2 OpenCL 339 

第11章音頻341
11.1現在能聽到我的聲音嗎?341 
11.1.1 MIDI342 
11.1.2聲卡342 
11.2模擬與數字343 
11.3聲音和信號處理344 
11.3.1編輯344 
11.3.2壓縮345 
11.3.3使用特效錄製345 
11.3.4編碼和解碼通信信息346 
11.4 1位DAC 347 
11.5 I2S 349 
11.6 Raspberry Pi聲音輸入/輸出350 
11.6.1音頻輸出插孔350 
11.6.2 HDMI350 
11.7 Raspberry Pi的聲音351 
11.7.1 Raspberry Pi板載聲音351 
11.7.2處理Raspberry Pi的聲音351 

第12章輸入/輸出359 
12.1輸入/輸出簡介359 
12.2 I/O使能器362 
12.2.1通用串行總線363 
12.2.2 USB有源集線器365 
12.2.3以太網367 
12.2.4通用異步收發器368 
12.2.5小型計算機系統接口368 
12.2.6 PATA 369 
12.2.7 SATA 369 
12.2.8 RS-232串口370
12.2.9 HDMI 370 
12.2.10 I2S 371 
12.2.11 I2C 371 
12.2.12 Raspberry Pi顯示器、攝像頭接口和JTAG 372 
12.3 Raspberry Pi GPIO 373 
12.3.1 GPIO概述以及博通SoC 373 
12.3.2接觸GPIO 374 
12.3.3可編程GPIO 380 
12.3.4可選模式385 
12.3.5 GPIO實驗的簡單方法385