使用Raspberry Pi學習計算機體係結構

使用Raspberry Pi學習計算機體係結構 pdf epub mobi txt 電子書 下載 2025

[美] Eben Upton,Jeff Duntemann 等 著
圖書標籤:
  • Raspberry Pi
  • 計算機體係結構
  • 嵌入式係統
  • 硬件
  • 教育
  • DIY
  • 學習
  • 電子工程
  • 計算機科學
  • 實踐
想要找書就要到 靜流書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302487173
版次:1
商品編碼:12252399
包裝:平裝
開本:16開
齣版時間:2017-11-01
用紙:膠版紙
頁數:404
字數:567000

具體描述

産品特色

編輯推薦

  Raspberry Pi的誕生,深受20世紀80年代價格相對低廉的高度可編程計算機(以及它們對英國高新技術産生的影響)的啓發,它激勵新一代程序設計師並為他們提供準入平颱。經濟成本和技術門檻的可接受性,使得Raspberry Pi成為學習計算機工作原理的理想工具。《使用Raspberry Pi學習計算機體係結構》將會是你整個Raspberry Pi內幕發現之旅的私人指南,也將成為你學習由Raspberry Pi完美詮釋的知識庫的專業級教練。作者Eben Upton和Jeff Duntemann是理想的導師:作為Raspberry Pi的共同創始人,Upton展現齣他的深刻洞察力;Dunteman則將復雜的技術知識凝練為易於理解的解釋。以Raspberry Pi這塊信用卡般大小的計算機(正在革新編程世界)的體係結構為基礎,Upton和Duntemann共同提供瞭隱藏在所有計算機背後的技術的專業級指導。
  《使用Raspberry Pi學習計算機體係結構》按部就班地講解每個組件,包括組件能做什麼、為何需要它、該組件與其他組件的關係,以及組件創建過程中設計者麵臨的選擇等。從內存、存儲器和處理器,到以太網、相機和音頻。Upton和Duntemann相互閤作,確保讀者紮實理解Raspberry Pi的內部結構及其整體上與計算背後的技術之間的關係。

內容簡介

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

作者簡介

  Eben Upton是Raspberry Pi基金會的創始人,也是該基金會旗下的貿易部門RaspberryPi(貿易)有限公司的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 ByStep一書。在Dr. Dobb’s Journal雜誌上,Jeff連續四年撰寫“Structured Programming”專欄,並在很多雜誌上發錶瞭大量技術性文章。1989年,Jeff和他的作傢夥伴Keith Weiskamp發起成立瞭Coriolis Group,到1998年Coriolis Group已經成為美國亞利桑那州*大的圖書齣版商。Jeff對“強”人工智能錶現齣持久的興趣,他的絕大部分科幻著作(包括The CunningBlood和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

前言/序言

  前言
  通概念——通用可編程計算機——首次齣現。
  第二次世界大戰爆發後,圖靈繼續在位於布萊切利園(Bletchley Park) 開展的盟軍代碼破解工作中發揮瞭核心作用。在這個過程中,圖靈(作為團隊一員——彆相信在電影中看到的)捲入到大量專用硬件的研發工作中,包括機電炸彈機,這颱機器加速瞭破解德國恩尼格碼密碼的自動化進程。這些設備都沒有使用圖靈初始實驗想法中的“有限狀態機加無限紙帶”這種具體架構,但與實際執行相比,卻更適於數學分析。不過,即使是純粹的電子巨人Colossus——如同炸彈機處理恩尼格碼一樣處理繁復冗雜的洛倫茲流密碼——也沒有觸及通用程序設計的邊界。盡管如此,對於這一代理論工程師而言,當他們返迴到平民生活以後,使用真空管研發用於代碼破解、雷達和火炮以及實現數字邏輯電路的大規模電子係統的經曆,使得他們極具革新能力。
  在莫裏斯·威爾剋斯(Maurice Wilkes) 的帶領下,位於劍橋大學數學實驗室的一個工程師小組著手搭建瞭電子延遲存儲自動計算機(Electronic Delay Storage Automatic Computer, EDSAC) 。1949 年投入運行時,時鍾頻率達到500KHz ,通過兩個溫度控製水箱中的32 條水印延遲綫,構成瞭一個容量為2KB的易失性存儲器。程序和代碼可以通過紙帶讀寫。美國和英國的很多機構都可以狹隘地宣稱自己首次研發齣通用數字計算機,僅僅是標榜“首次”。對於EDSAC,公開的聲明指齣,它是第一颱將應用擴展到研發團隊之外的計算機。其他學科的學者可以申請時間在這颱機器上運行他們自己的程序,並由此引入瞭以計算為服務的概念。EDSAC之後研發瞭EDSAC II,然後是泰坦(Titan) 。直到20世紀60年代,劍橋大學纔停止從底層齣發搭建自己的計算機,並開始從商業貿易商那裏購買。這項實際舉措直接影響到目前計算機部門的名稱:劍橋大學沒有計算機科學係,大學裏有一個計算機實驗室——威爾剋斯早期數學實驗室的延續。
  對於計算機工程實踐應用的專注,使得劍橋大學成為孕育新技術的沃土。很多新技術在計算機實驗室、工程係或者不同的數學和科學係(即使是我們的數學傢也懂得如何進行程序設計)中被提齣來,由此吸引瞭大量跨國公司到此尋找工程技術人纔。圍繞劍橋大學成長起來的公司網(有時被冠以劍橋産業集群、劍橋現象或矽藻等不同的稱謂)代錶瞭美國矽榖之外的少量真正的技術集群之一。那颱告訴我應當成為一名芯片設計師的BBC微型計算機就是劍橋生産的,包括其長期的競爭對手——辛剋萊頻譜。你的手機(以及Raspberry Pi)就包含幾個由立足於劍橋的ARM芯片公司設計的處理器。EDSAC問世70年之後,在英國劍橋依然是高科技的傢園。
  言歸正傳
  在我誤打誤撞所接受的計算機教育中,最大的缺失是對計算機工作過程的係統認識。在從BASIC 開始深入到匯編語言時,我被匯編層麵的抽象“睏住”瞭。我可以控製Amiga 計算機的硬件寄存器在屏幕上移動小精靈,但對於如何搭建一颱自己的計算機則一頭霧水。在我花費瞭另一個十年的時間、取得瞭幾個學位、離開學術界並到博通公司(一傢在劍橋啓動並在此尋求工程技術人纔的美國半導體公司)工作之後,我纔搞清楚這個問題。在這裏,我的名片上印著“微電子芯片設計師”(實際上是更漂亮的稱謂,“專用集成電路架構師”)的字樣。在此期間,我擁有良好的條件與大量該領域的嫻熟的從業者一起工作並嚮他們學習,包括索菲 威爾遜(Sophie Wilson)
  —
  原始ARM處理器和BBC微型計算機(和Steve Furber一起)的設計師,還有博通3D圖形硬件工程團隊的Tim Mamtora,他提供瞭本書圖形處理單元(GPU)章節的內容。
  很大程度上講,撰寫本書的目的在於闡述“它是如何工作的”這個話題,正如我18歲時期望的那樣。我們嘗試覆蓋所有現代計算機係統的主要部分,從CPU到易失性隨機訪問存儲器、穩定存儲器、網絡及接口,以一種中學學生或一年級大學生樂於閱讀的方式呈現齣來。依托對當前技術發展水平的討論,我們嘗試提供一點曆史性知識。絕大多數討論的話題(盡管不是全部,特彆是在技術細節方麵)都與1949年維爾剋斯的EDSAC工程團隊有關係。閱讀完本書後,你至少會對計算機的基本工作原理有所瞭解。我堅信你將發現加強這方麵理解的價值,即使你的目標職業是軟件工程師並且從未打算設計一颱自己的計算機。如果不瞭解cache的作用,當工作組的大小超齣cache或者分配的緩衝區耗盡瞭cache的關聯性時,程序性能的急速下降會令你很驚訝。如果對網絡的工作過程一無所知,就很難為數據中心構建一個高效網絡。
  關於哪些方麵本書不會涉及,有必要花點時間闡述一下。對於任何涉及的話題,本書都不是一本綜閤性技術參考書。關於cache設計、CPU流水綫、編譯器和網絡堆棧,可以編寫(有人已經寫過)整捲圖書。相反,對於每個話題,我們嘗試提供一種入門式的講解,並提供一些深入學習的建議。本書主要專注於通用計算機(本質上講,PC機)的架構。對於隻對特殊目的和應用領域感興趣的數字信號處理(DSP)和現場可編程陣列(Field Programmable Gate Array,FPGA)等話題,隻進行瞭有限的覆蓋。最後,涉及一點定量決策過程的知識,這是良好的計算機架構的核心:如何在訪問時間和cache大小之間摺中,或者決定是否允許某個子係統一緻訪問一個屬於其他部件的cache?我們無法教你像架構師一樣思考。對於高級讀者,Hennessy和Patterson的Computer Architecture: A Quantitative Approach是這方麵不可或缺的參考資料。
  麯綫上的拐點
  首先提齣免責聲明,此處我願意分享多年來總結齣的幾點有益的指導原則。在計算機架構中,像很多事情一樣,有一個收益遞減規律。當然,不論是以原始的CPU性能、標準化為能量消耗的CPU性能、存儲密度、晶體管尺寸還是媒介上的網絡帶寬的形式,在任何時候,硬件對所完成的東西有一個限製。但情況往往是,在達到這些理論限製前,工程應用上就會遇到收益遞減問題:每一項新增的改進都來之不易,都會引起成本和時間開銷的提升。如果將研發成本、係統復雜性 (容易受到漏洞攻擊) 或是為提升係統性能而花費的資金繪成圖,在某個位置麯綫就會急劇彎麯下來。“拐點”的左側,性能以一種可預測(甚至是直綫!)的方式響應花費支齣,在右側,隨著努力的增加性能隻是緩慢提升,並逐漸逼近由基礎技術限製帶來的“牆壁”。
  有時候找不到性能的替代品。例如阿波羅登月計劃,就是工程學上一個極具吸引力的實例。阿波羅登月計劃在“拐點”右側走齣瞭相當遠的距離,從根本上誤導瞭旁觀者對於宇航技術成熟度的認識。直到今天——火箭技術、航空電子和材料科學持續發展瞭50年以後——拐點已經移動瞭足夠遠的距離,纔允許以閤理的成本訪問太空,甚至從月球返迴。雖然如此,那些以謙卑的態度準確定位拐點位置的團隊,為市場帶來簡單、穩健而又流行的工程係統,然後迅速更新換代,這些團隊將最終戰勝登月工程。
  在對待架構方麵,保守和更迭一直銘記於心。迄今為止,我們生産的三代Raspberry Pi芯片都嚴格地采用相同的係統基礎架構、存儲器控製器和多媒體,所做的改變隻局限於ARM內核的復雜性、少量緻命缺陷的修復和時鍾頻率的提升。這裏會齣現一些博弈,因為工程師(包括我自己)是富有激情的,他們總希望打破界限。優秀架構師的任務在於精確把握顛覆性改變引發的風險代價,並與預期的利潤進行權衡。
  邁嚮基金會
  2008 年,我們創建瞭Raspberry Pi 基金會,初始目標很簡單:應對申請劍橋大學計算機科學專業的學生數量逐步下降的問題。現在,我們看到瞭令人鼓舞的復蘇信號,不論是劍橋還是其他學校,申請數量都超過瞭20世紀90年代末網絡熱潮時期的峰值。
  我們目睹的一個最顯著的變化可能是,新一代年輕人比我們在20世紀80年代時對硬件的興趣還要高。編寫一個匯編語言源程序,在屏幕上移動小精靈不再像以前那麼有吸引力,但是在地闆上移動機器人卻更令人興奮。我們看到12歲的孩子構建我在20多歲時纔引以為豪的控製和傳感器項目。我的願望是,當這些年輕人坐在我孩童時期BBC Micro的新生代麵前規劃職業生涯時,有一些人可以明白他們將成為優秀的微電子芯片設計師,本書將幫助他們完成這趟旅行。
  —Eben Upton,劍橋,2016.05


使用樹莓派學習計算機體係結構 簡介 《使用樹莓派學習計算機體係結構》是一本旨在為讀者提供深入理解計算機底層運作原理的實用指南。本書巧妙地將理論知識與動手實踐相結閤,利用普及率極高且功能強大的單闆計算機——樹莓派(Raspberry Pi)——作為核心教學工具。讀者將不再僅僅停留在對軟件編程的錶麵認知,而是能夠穿越抽象的代碼層麵,直觀地觸碰並理解計算機硬件是如何協同工作的,以及這些硬件設計如何直接影響軟件的性能和行為。 在當今這個幾乎所有行業都被軟件和數字化技術驅動的時代,深刻理解計算機體係結構的重要性日益凸顯。無論是希望成為一名更優秀的軟件工程師,還是緻力於嵌入式係統開發,又或是對高性能計算、操作係統原理、甚至硬件設計充滿好奇的愛好者,掌握計算機體係結構都是不可或缺的基石。本書正是為瞭滿足這一需求而生,它將復雜的概念拆解為易於理解的模塊,並通過一係列精心設計的實驗,讓讀者在實踐中掌握理論。 本書的核心理念在於“學以緻用”。我們相信,僅僅閱讀理論書籍難以建立直觀的認識。計算機體係結構是一個涉及硬件、固件和軟件交互的復雜領域,隻有通過實際操作,纔能真正體會到指令的執行、內存的訪問、緩存的工作機製以及各種總綫的通信方式。樹莓派以其低廉的價格、廣泛的社區支持和強大的擴展性,成為瞭理想的學習平颱。它提供瞭對底層硬件的直接訪問,使得我們可以觀察和控製CPU、內存、I/O接口等關鍵組件,從而以前所未有的方式探索計算機的內部世界。 本書內容概覽 本書的結構設計循序漸進,從最基礎的概念齣發,逐步深入到更復雜的體係結構主題。我們將首先介紹計算機體係結構的基本組成部分,包括中央處理器(CPU)、內存(RAM)、存儲設備(如SD卡)、輸入/輸齣(I/O)接口等。然後,我們將深入探討CPU的內部工作原理,包括指令集架構(ISA)、流水綫技術、緩存層次結構等。 第一部分:入門與基礎 瞭解你的工具:樹莓派深度解析 我們將詳細介紹不同型號樹莓派的硬件特性,包括其SoC(System on a Chip)架構、CPU核心、GPU、內存類型和容量、以及各種I/O接口(GPIO、USB、HDMI、以太網等)。 學習如何安裝和配置樹莓派的操作係統(如Raspberry Pi OS),並進行基本的係統設置和開發環境搭建。 介紹樹莓派上可用的開發工具鏈,包括交叉編譯器、調試器和仿真器。 從二進製到指令:計算的語言 理解數字係統的基礎:二進製、八進製、十進製和十六進製。 學習計算機如何錶示數據:整數、浮點數、字符編碼(ASCII、UTF-8)。 介紹指令集架構(ISA)的概念,以ARM架構為例,這是樹莓派CPU所使用的架構。 理解基本指令的含義和功能:加載、存儲、算術運算、邏輯運算、跳轉指令等。 第二部分:CPU核心機製 CPU的脈搏:時鍾、指令周期與執行 深入瞭解CPU的時鍾信號,以及指令如何在一個個時鍾周期內被 fetch, decode, execute, write-back。 介紹RISC(精簡指令集計算)和CISC(復雜指令集計算)的對比,以及ARM架構為何屬於RISC。 通過簡單的匯編語言程序,觀察CPU如何執行指令,並使用樹莓派上的調試工具來跟蹤程序的執行流程。 加速的秘密:流水綫技術 理解CPU流水綫的工作原理,以及如何通過將指令執行過程分解為多個階段來提高吞吐量。 分析流水綫中的潛在問題,如數據冒險、控製冒險,以及相應的解決方法(如轉發、分支預測)。 通過模擬或實際運行包含特定指令序列的程序,來觀察流水綫帶來的性能提升。 內存的層次:寄存器、緩存與主內存 詳細講解CPU內部的寄存器(通用寄存器、程序計數器、棧指針等)的作用。 深入探討緩存(Cache)的工作機製:L1, L2, L3緩存的層級結構、緩存行、地址映射、寫策略(寫迴、寫穿)。 理解緩存如何通過局部性原理(時間局部性、空間局部性)減少內存訪問延遲。 通過編寫訪問內存的程序,並利用性能分析工具來觀察緩存命中率和 miss 率,感受緩存對性能的影響。 第三部分:內存與存儲 數據的傢園:主內存(RAM) 介紹RAM(Random Access Memory)的類型(SRAM, DRAM)及其特性。 理解內存地址空間,以及CPU如何通過地址總綫訪問內存。 學習內存管理的基本概念,如分段、分頁(為後續操作係統章節鋪墊)。 通過實驗,測量不同內存訪問模式下的性能差異。 持久的記憶:存儲係統 講解不同類型的存儲設備:固態硬盤(SSD)、機械硬盤(HDD)。 介紹SD卡作為樹莓派的主要存儲介質,其工作原理和接口(SPI, SDIO)。 學習文件係統(如FAT32, ext4)的概念,以及它們如何組織和管理存儲設備上的數據。 通過模擬存儲訪問操作,理解I/O延遲對整體性能的影響。 第四部分:互聯與通信 信息高速公路:總綫係統 介紹計算機內部的各種總綫:地址總綫、數據總綫、控製總綫。 講解I2C、SPI、UART等串行通信協議,以及它們在樹莓派上的應用。 通過連接外部傳感器或設備到樹莓派的GPIO接口,並利用這些協議進行通信,直觀感受硬件通信過程。 連接世界:輸入/輸齣(I/O)接口 深入研究樹莓派的GPIO(General Purpose Input/Output)接口,以及如何通過編程控製其輸入輸齣。 學習如何使用GPIO接口連接LED、按鈕、蜂鳴器等外設,實現簡單的硬件控製。 介紹USB接口的工作原理和其在數據傳輸中的作用。 講解網絡接口(以太網、Wi-Fi)的硬件實現和基本通信過程。 第五部分:高級主題與實踐 並行與並發:多核處理與多綫程 理解多核CPU的工作原理,以及如何利用多個核心並行處理任務。 介紹並發與並行的區彆,以及多綫程編程的基本概念。 在樹莓派上編寫簡單的多綫程程序,觀察其性能提升。 指令的生命周期:指令流水綫與分支預測的深入探討 通過更復雜的實驗,量化流水綫和分支預測對程序執行時間的影響。 學習如何使用性能分析工具(如perf)來識彆代碼中的性能瓶頸,並根據體係結構知識進行優化。 從匯編到機器碼:理解編譯器的工作 瞭解編譯器如何將高級語言(如C/C++)源代碼轉換為機器碼。 通過反匯編工具,觀察生成的匯編代碼,並將其與源代碼進行對比。 理解編譯器優化選項對生成機器碼的影響。 構建你的第一個體係結構項目 本書將引導讀者完成一個或多個具有挑戰性的項目,例如: 使用GPIO控製一個簡單的機器人。 構建一個基於樹莓派的網絡服務器。 實現一個簡單的嵌入式數據采集係統。 設計一個簡單的CPU模擬器(可選,但能極大加深理解)。 這些項目將整閤本書中介紹的各項知識,讓讀者在解決實際問題的過程中鞏固和應用所學。 本書的特色 實踐導嚮:本書的核心在於動手實踐。每一個理論概念都配有相應的樹莓派實驗,讓讀者能夠親手操作,驗證理論。 循序漸進:內容設計由淺入深,確保即使是初學者也能逐步掌握復雜的概念。 實用工具:充分利用樹莓派這個廉價而強大的平颱,以及Linux係統提供的豐富開發工具。 社區支持:藉鑒和利用樹莓派龐大的社區資源,解決學習過程中遇到的問題。 理論與實踐的橋梁:本書旨在彌閤理論知識與實際應用之間的鴻溝,讓讀者真正理解“為什麼”和“怎麼樣”。 適用讀者 對計算機工作原理感到好奇的學生和愛好者。 希望提升軟件工程技能,理解代碼性能瓶頸的程序員。 從事嵌入式係統開發,需要深入瞭解硬件特性的工程師。 計算機科學、電子工程等相關專業的學生。 任何對底層技術感興趣,希望從根本上理解計算機的人。 通過《使用樹莓派學習計算機體係結構》,您將獲得超越一般編程的知識深度,能夠以全新的視角審視您所使用的計算設備,並具備解決更復雜、更底層技術挑戰的能力。這不僅是一本書,更是一次探索計算核心奧秘的旅程。

用戶評價

評分

我最近剛翻完這本書,感覺像是打開瞭一扇新世界的大門!作為一名軟件開發者,我總是在想,我寫的代碼最終是如何在硬件上運行的?它經曆瞭哪些步驟?這本書就給齣瞭一個非常棒的答案,而且是用一種我完全能理解的方式。作者沒有堆砌一堆晦澀難懂的術語,而是循序漸進地引導我一步步認識計算機的“骨骼”和“神經係統”。從最初的簡單邏輯門,到復雜的CPU設計,再到內存管理和總綫通信,每一個環節都被拆解得極其細緻。尤其是關於RISC-V的部分,我之前對它隻是有所耳聞,但這本書深入淺齣地介紹瞭它的設計哲學和優勢,並結閤Raspberry Pi的實際應用,讓我對這個新興的指令集架構有瞭更直觀的認識。我特彆喜歡書中那些“動手實驗”的環節,我跟著書中的指導,在Raspberry Pi上搭建瞭一些小項目,親眼見證瞭硬件和軟件是如何交互的。這種實踐性的學習方式,比我過去任何一次閱讀技術書籍都來得更深刻。我不再害怕那些底層的細節,反而對它們充滿瞭好奇。我相信,掌握瞭這些體係結構知識,我未來在進行性能優化、選擇閤適的硬件平颱,甚至參與芯片設計時,都會有更紮實的理論基礎和更清晰的思路。

評分

坦白說,我之前對“計算機體係結構”這個概念是有些敬而遠之的,總覺得它離我的日常工作太遠,而且充滿瞭枯燥的術語。但是,這本書徹底改變瞭我的看法!作者就像一位經驗豐富的嚮導,帶著我一步步探索計算機的心髒。從最基礎的邏輯門,到復雜的CPU指令集,再到內存控製器和總綫協議,每一個環節都被分解得清晰明瞭。特彆是書裏反復強調Raspberry Pi在學習過程中的重要性,這一點真的非常贊。我跟著書中的例子,實際操作瞭一番,感覺那些原本遙不可及的理論知識,一下子就變得觸手可及。我終於理解瞭為什麼不同的CPU架構會有不同的性能錶現,為什麼內存帶寬如此重要,以及各種I/O設備是如何通過特定的接口與CPU進行通信的。書中對並行計算和多核處理的介紹,也讓我對現代計算的強大有瞭更深的認識。這不僅僅是一本關於“是什麼”的書,更是一本關於“為什麼”的書,它迴答瞭我心中長久以來的許多疑問。我感覺自己的技術視野一下子開闊瞭很多,對計算機係統有瞭更全麵的理解。

評分

這本書真的讓我對計算機底層運作的理解發生瞭翻天覆地的變化!我一直覺得“計算機體係結構”這個詞聽起來高高在上,離我的日常編程工作很遙遠。但這本書卻巧妙地把我帶入瞭一個生動有趣的世界。從一開始,作者就用非常接地氣的方式解釋瞭CPU是怎麼處理指令的,內存是如何工作的,以及各種I/O設備是如何與主闆協同作戰的。最讓我印象深刻的是,他並沒有直接拋齣枯燥的理論,而是通過一個又一個實際的例子,特彆是利用Raspberry Pi這個小巧而強大的平颱,讓這些抽象的概念變得觸手可及。我記得有個章節是關於流水綫(pipeline)的,我以前對此隻是模模糊糊的印象,但通過書中繪製的清晰圖示和Raspberry Pi上的代碼演示,我終於明白瞭指令是如何被分解、執行、再閤並的,以及為什麼這能顯著提升性能。甚至連緩存(cache)的工作原理,也因為有瞭具體的Raspberry Pi硬件作為參照,我不再隻是死記硬背,而是真正理解瞭它為什麼存在,以及它如何影響程序的運行速度。這本書最大的價值在於,它提供瞭一種“動”起來學習體係結構的方法,而不是僅僅停留在書本上的“看”。我迫不及待地想把我學到的知識應用到更復雜的嵌入式項目裏,去優化我的代碼,去更深入地理解為什麼某些優化技巧能帶來如此顯著的效果。

評分

這本書簡直就是為我這種“紙上談兵”多年的開發者量身定做的!我一直覺得計算機體係結構是計算機科學的“內功”,但很少有書能把它講得如此通俗易懂,並且還能讓你立刻上手去驗證。作者巧妙地利用瞭Raspberry Pi這樣一個成本低廉、功能強大的平颱,讓抽象的概念瞬間具象化。比如,在解釋中斷(interrupt)的時候,書裏不僅僅是告訴你中斷是什麼,而是告訴你如何在Raspberry Pi上編寫代碼來處理一個中斷,讓你親身體驗CPU是如何從當前的任務切換到中斷服務程序的。這種“學以緻用”的感覺非常棒。我印象特彆深刻的是關於ARM架構的講解,結閤Raspberry Pi的實際芯片,我纔真正理解瞭ARM指令的特點,以及為什麼它在移動設備和嵌入式領域如此流行。書中關於存儲層次結構(memory hierarchy)的闡述也讓我受益匪淺,我終於明白瞭為什麼我們寫的代碼,在實際運行時,數據會在CPU寄存器、緩存、主內存之間不斷地來迴“搬運”,以及這種搬運的效率有多麼關鍵。總而言之,這本書不僅僅是知識的傳授,更是一種思維方式的引導,它教會瞭我如何從硬件的角度去審視軟件,如何去思考性能的瓶頸到底齣在哪裏。

評分

對於任何一個想要深入理解計算機工作原理的讀者來說,這本書都絕對是一個寶藏。作者以Raspberry Pi為載體,將復雜的計算機體係結構知識變得生動有趣且易於實踐。我一直對CPU的內部結構感到好奇,這本書就循序漸進地帶領我瞭解瞭指令譯碼、執行、寫迴等各個階段,並且通過實際的例子,讓我理解瞭流水綫和分支預測等概念的實際作用。更重要的是,書中還深入講解瞭內存管理單元(MMU)和緩存一緻性(cache coherence)等核心概念,這些對於理解現代多核處理器的行為至關重要。我尤其欣賞書中對於不同指令集架構(如ARM和RISC-V)的比較分析,這讓我能夠更好地理解不同架構的設計理念和優缺點。通過書中提供的各種實驗和代碼示例,我能夠親手驗證學到的知識,比如如何通過訪問不同大小和對齊方式的數據來觀察緩存的影響,或者如何通過編寫簡單的匯編代碼來理解CPU指令的執行流程。這不僅僅是理論的學習,更是一種“玩轉”計算機硬件的體驗。這本書讓我從一個“代碼使用者”進化成瞭一個“代碼理解者”,我對自己未來在係統優化和性能調優方麵的能力充滿瞭信心。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有