首頁 搜尋 我的知識庫
最佳能效晶片平台:ARM64架構師高度之程式開發

最佳能效晶片平台:ARM64架構師高度之程式開發

作者: 奔跑吧Linux社區
出版社: 深智數位
出版日期: 2023/02/20
ISBN-13: 9786267273159
書店 1







內容描述


★ 基於樹莓派4B開發板,詳盡介紹ARM64系統結構 ★
☆ 結合QEMU實驗平台,整理各種實戰經驗 ☆
★ 深入淺出地介紹ARMv8和ARMv9系統結構,透過ARM64進行創新實驗 ★
 
  隨著手機晶片和嵌入式晶片領域的發展,ARM64系統結構的處理器占了90%以上的市佔率,與ARM64相關的生態社群也越來越繁榮。但當面對幾千頁的英文原版ARM公司官方技術手冊時,不少開發者往往感到力不從心。
 
  全書共分23章,包含ARMv8/ARMv9系統結構基礎知識以及Cortex-A72處理器。並針對樹莓派4B開發板,用來架設實驗環境。內容涵蓋A64指令集中載入與儲存指令、算術與移位指令、比較與跳躍指令、PC相對位址載入指令、記憶體獨占存取指令、異常處理指示、系統暫存器存取指令、記憶體屏障指令等。
 
  另外GNU組譯器的語法也是本書重點,還有連結器的使用、連結指令稿以及重定位。中間還有說明GCC內嵌組合語言程式碼語法、巨集、系統結構異常處理的觸發與返回、異常向量表、異常現場、同步異常的解析。
 
  在硬體上面,則介紹了系統結構中斷處理的基本概念流程,樹莓派4B上的傳統中斷控制器、保存和恢復中斷現場。GIC部分,則介紹了中斷源分配、中斷路由、樹莓派4B上的GIC-400。
 
  有關記憶體部分,則介紹記憶體管理,頁表、頁表項等。在快取記憶體上,包括了工作原理、映射方式,虛擬快取記憶體與物理快取記憶體,名稱重複與名稱相同、共用屬性、維護指令、一致性相關問題,MESI協定、CCI與CCN快取一致性控制器、快取記憶體錯誤分享。
 
  本書最精華的地方則在於全書後段,介紹記憶體屏障指令基礎知識、原子操作基本概念、原子記憶體存取指令、獨占記憶體存取工作原理、原子記憶體存取操作指令等相關內容。
 
  在作業系統方法,則有64位元程式設計下常見的C語言陷阱、ARM64函式呼叫標準、ARM64堆疊佈局、簡易處理程序排程器、浮點運算以及NEON指令、SVE以及SVE2指令,還結合3個實際案例分析如何使用SVE/SVE2指令來進行最佳化。
 
  本書集結了華文地區優秀的工程師,以社區合作的方式撰寫了本書,結合大專院校課程特色以及實際專案經驗,精心製作了幾十個有趣的實驗,讀者可以透過實驗來深入學習和理解ARM64的系統結構與程式設計,相當推薦給需要使用ARM架構的硬體工程師或有志於此的從業人員。
 
  ※ 本書附程式碼,可至深智官網下載:deepmind.com.tw/


目錄大綱


1 ARM64 系統結構基礎知識
1.1 ARM介紹
1.2 ARMv8系統結構基礎知識
1.3 ARMv8暫存器
1.4 Cortex-A72處理器介紹
1.5 ARMv9系統結構介紹

2 架設樹莓派實驗環境
2.1 樹莓派介紹
2.2 架設樹莓派實驗環境
2.3 BenOS基礎實驗程式解析
2.4 QEMU虛擬機器與ARM64實驗平臺

3 A64 指令集1——載入與儲存指令
3.1 A64指令集介紹 
3.2 A64指令編碼格式
3.3 載入與儲存指令
3.4 載入與儲存指令的變種
3.5 存入堆疊與移出堆疊
3.6 MOV指令
3.7 陷阱:你用對載入與儲存指令了嗎
3.8 實驗

4 A64指令集2——算術與移位指令
4.1 條件操作碼
4.2 加法與減法指令
4.3 CMP指令
4.4 關於條件標識位元的範例
4.5 移位指令
4.6 位元操作指令
4.7 位元段操作指令
4.8 實驗

5 A64指令集3——比較指令與跳轉指令
5.1 比較指令
5.2 跳轉與傳回指令
5.3 陷阱:為什麼在RET指令之後系統就崩潰了
5.4 實驗

6 A64 指令集4——其他重要指令
6.1 PC相對位址載入指令
6.2 LDR和ADRP指令的區別
6.3 記憶體獨占存取指令
6.4 異常處理指示 
6.5 系統暫存器存取指令
6.6 記憶體屏障指令
6.7 實驗

7 A64 指令集的陷阱
7.1 案例7-1:載入巨集標籤
7.2 案例7-2:載入字串
7.3 案例7-3:讀寫暫存器導致樹莓派4B當機
7.4 案例7-4:LDXR指令導致樹莓派4B當機
7.5 組合語言大作業7-1:在組合語言中實現序列埠輸出功能
7.6 組合語言大作業7-2:分析Linux 5.0的啟動組合語言程式碼

8 GNU組譯器
8.1 編譯流程與ELF檔案
8.2 一個簡單的組合語言程式
8.3 組合語言語法
8.4 常用的虛擬指令
8.5 AArch64依賴特性
8.6 實驗

9 連結器與連結指令稿
9.1 連結器介紹
9.2 連結指令稿
9.3 重定位
9.4 實驗

10 GCC內嵌組合語言程式碼
10.1 內嵌組合語言程式碼基本用法
10.2 案例分析
10.3 實驗

11 異常處理
11.1 異常處理的基本概念
11.2 異常處理與傳回
11.3 異常向量表
11.4 異常現場
11.5 同步異常的解析
11.6 案例分析
11.7 實驗

12 中斷處理
12.1 中斷處理背景知識
12.2 樹莓派4B上的傳統中斷控制器
12.3 ARM核心上的通用計時器
12.4 中斷現場 
12.5 案例分析:在樹莓派4B上實現一個計時器
12.6 實驗

13 GIC-V2
13.1 GIC發展歷史
13.2 中斷狀態、中斷觸發方式和硬體中斷編號
13.3 GIC-V2
13.4 樹莓派4B上的GIC-400 
13.5 實驗

14 記憶體管理
14.1 記憶體管理基礎知識 
14.2 ARM64記憶體管理 
14.3 硬體管理存取位元和污染位元
14.4 與位址轉換相關的控制暫存器
14.5 記憶體屬性
14.6 案例分析:在BenOS裡實現恆等映射
14.7 實驗

15 快取記憶體基礎知識
15.1 為什麼需要快取記憶體
15.2 快取記憶體的存取延遲時間
15.3 快取記憶體的工作原理
15.4 快取記憶體的映射方式
15.5 虛擬快取記憶體與物理快取記憶體
15.6 名稱重複和名稱相同問題
15.7 快取記憶體策略
15.8 快取記憶體的共用屬性
15.9 快取記憶體的維護指令
15.10 快取記憶體列舉
15.11 實驗

16 快取一致性
16.1 為什麼需要快取一致性
16.2 快取一致性的分類
16.3 快取一致性的解決方案 
16.4 MESI協定 
16.5 快取記憶體錯誤分享
16.6 CCI和CCN快取一致性控制器
16.7 案例分析16-1:錯誤分享的避免
16.8 案例分析16-2:DMA和快取記憶體的一致性
16.9 案例分析16-3:自我修改程式碼的一致性
16.10 實驗

17 TLB管理
17.1 TLB基礎知識
17.2 TLB名稱重複與名稱相同問題
17.3 ASID 
17.4 TLB管理指令
17.5 TLB案例分析

18 記憶體屏障指令
18.1 記憶體屏障指令產生的原因
18.2 ARM64中的記憶體屏障指令
18.3 案例分析

19 合理使用記憶體屏障指令
19.1 儲存緩衝區與寫入記憶體屏障指令
19.2 無效佇列與讀取記憶體屏障指令
19.3 記憶體屏障指令複習
19.4 ARM64的記憶體屏障指令的區別
19.5 案例分析:Linux核心中的記憶體屏障指令

20 原子操作
20.1 原子操作介紹
20.2 獨占記憶體存取指令
20.3 獨占記憶體存取工作原理
20.4 原子記憶體存取操作指令
20.5 比較並交換指令
20.6 WFE 指令在自旋鎖中的應用

21 作業系統相關話題
21.1 C語言常見陷阱
21.2 函式呼叫標準
21.3 堆疊佈局
21.4 建立處理程序
21.5 簡易處理程序排程器
21.6 系統呼叫
21.7 系統啟動
21.8 實驗

22 浮點運算與NEON 指令
22.1 資料模型
22.2 浮點運算
22.3 NEON指令集
22.4 案例分析22-1:RGB24轉BGR24
22.5 案例分析22-2:4×4矩陣乘法運算
22.6 自動向量最佳化
22.7 實驗

23 可伸縮向量計算與最佳化
23.1 SVE指令介紹
23.2 架設SVE執行和偵錯環境
23.3 SVE特有的程式設計模式
23.4 SVE與SVE2指令集 
23.5 案例分析23-1:使用SVE指令最佳化strcmp( )函數
23.6 案例分析23-2:RGB24轉BGR24
23.7 案例分析23-3:4×4矩陣乘法運算
23.8 實驗


作者介紹


作者簡介
 
奔跑吧Linux社區
 
  「奔跑吧Linux社區」是由一群志同道合的工程師組成,致力於Linux等開源軟體與推廣,為廣大工程師和讀者提供深入的開源知識分享。






相關書籍

Kaggle 競賽攻頂秘笈 - 揭開 Grandmaster 的特徵工程心法,掌握制勝的關鍵技術

Learn Windows PowerShell in a Month of Lunches 中文版

TQC+ 電腦繪圖設計認證指南解題秘笈-Illustrator CC(第二版)

這是一本SketchUp to LayOut的書:用一半時間畫兩套彩色施工圖(增修版)