2023年來看處理器的發展,x86_64系統結構與ARM64系統結構是目前市場上的主流處理器系統結構,而RISC-V有可能成為第三大系統結構。ARM以其RISC的優良DNA架構,慢慢已茁壯成長到一個比X86還要大的生態圈。目前市場上看得到CPU除了Windows PC之外,大部分的電子設備都是使用ARM架構,連個人電腦的創始公司蘋果也早就從x86轉向自行研發的M1/M2架構。
【ARM是什麼?】
ARM是一個整合作業系統、組合語言、C語言、電子電路技術的宏大領域。熟悉ARM架構一定是硬體工程師想要進軍CPU領域的唯一目標(當然還有一個是RISC-V)。
【ARM如何學習?】
本書特別針對ARM架構設計了一個完整的學習平台,包括了基於Linux核心以及小型OS(BenOS)講解。Linux核心採用Linux 5.0版本。書中大部分實驗以BenOS為基礎,讓讀者從最簡單的裸機程式不斷進行擴充,最終完成一個具有記憶體管理、處理程序排程、系統呼叫等現代操作基本功能的小作業系統。本書也使用了樹莓派4B開發板讓你玩個過癮。
【這本書可以帶給您…】
- ARM64系統結構,指令集、GNU組譯器、連結器、記憶體管理、快取記憶體管理
- ARMv8/ARMv9系統結構基礎知識以及Cortex-A72結構
- 樹莓派4B從頭到尾徹底剖析使用
- GIC-V2的相關內容、GIC-400
- 快取一致性的分類、MESI協定、CCI與CCN快取一致性控制器
- TLB基礎知識、ASID、TLB管理指令
- 記憶體屏障指令完整說明,講解,應用
- C語言陷阱、ARM64函式呼叫標準、ARM64堆疊佈局
- NEON指令方面、SVE以及SVE2指令
接下來,簡單介紹幾個書中提到的概念。
【樹莓派】
以低廉的價格、強大的運算能力以及豐富的教學資源得到全球技術同好的喜愛。
樹莓派截至2020 年一共發佈了4 代產品。(建議本書讀者選擇樹莓派4B作為實驗硬體平臺。)
- 2012年發佈第一代樹莓派,採用ARM11處理器核心。
- 2014年發佈第二代樹莓派,採用ARM Cortex-A7處理器核心。
- 2016 年發佈第三代樹莓派,採用 ARM Cortex-A53 處理器核心,支援ARM64 系統結構。
- 2019 年發佈第四代樹莓派,採用 ARM Cortex-A72 處理器核心,支援ARM64 系統結構。
樹莓派4B 採用性能強大的Cortex-A72 處理器核心,性能比樹莓派3B 快3 倍。
【GIC】
在早期ARM 系統(例如ARM7 和ARM9)中,採用單核心處理器設計,系統支援的中斷來源比較少並且是單核心處理器系統,使用簡單的暫存器表示每個中斷來源的啟動、關閉以及狀態。假設系統一共有64 個中斷來源,每個暫存器一共有32 位元,每位元描述一個中斷來源,那麼只需要兩個中斷啟動暫存器(Interrupt Enable Register,IER)。同理,中斷狀態暫存器(Interrupt Status Register,ISR)也只需要兩個暫存器就夠了。樹莓派4B 上傳統中斷控制器也採用了類似的實現,只不過樹莓派4B 上的中斷來源比較多,採用多級串聯的方式來實現。
在現在越來越複雜的SoC 中,中斷管理變得越來越困難,原因主要有以下幾個方面:
- 中斷來源變得越來越多,有的系統中斷來源有幾百個,甚至上千個。
- 中斷類型也越來越多,比如普通的外接裝置中斷、軟體觸發的中斷、CPU核心間的中斷,還有類似於PCIe 上基於訊息傳遞的中斷等。
- 需要考慮虛擬化的支援。
出於上面幾個原因,ARM 公司開發了GIC,專門用來管理中斷。目前最新版
本是V4,典型的IP 是GIC-700。
【SVE】
本書於第22章介紹了NEON 指令集,NEON 指令集是ARM64 系統結構中單指令多資料流程(SIMD)的標準實現。SVE 是針對高性能計算(HPC)和機器學習等領域開發的一個全新的向量指令集,它是下一代SIMD 指令集的實現,而非NEON 指令集的簡單擴充。SVE 指令集中有很多概念(例如向量、通道、資料元素等)與NEON 指令集類似。SVE 指令集定義了一個全新的概念——可變向量長度(Vector Length Agnostic,VLA)程式設計模型。
傳統的SIMD 指令集採用固定大小的向量暫存器,例如NEON 指令集採用固定的128 位元長度的向量暫存器。而支援VLA 程式設計模型的SVE 指令集支援可變長度的向量暫存器。這樣允許晶片設計者根據負載和成本來選擇一個合適的向量長度。
SVE 指令集最少支援128 位元的向量暫存器,最多支援2048 位元的向量暫存器,以128 位元為增量。SVE 設計確保同一個應用程式可以在支援不同向量暫存器長度的SVE 指令的機器上執行,而不需要重新編譯程式,這是VLA 程式設計模型的精髓。
--
基於ARM64系統結構處理器打造的產品越來越多,ARM64生態也越來越繁榮。面對幾千頁的英文原版ARM公司官方技術手冊,不少開發者感到力不從心;本書集結了華文地區優秀的工程師,以社區合作的方式撰寫了本書,結合大專院校課程特色以及實際專案經驗,精心製作了幾十個有趣的實驗,讀者可以透過實驗來深入學習和理解ARM64系統結構與程式設計。
本書後段介紹了記憶體屏障指令基礎知識、原子操作基本概念、原子記憶體存取指令、獨占記憶體存取工作原理、原子記憶體存取操作指令等相關內容。在作業系統方法,則有64位元程式設計下常見的C語言陷阱、ARM64函式呼叫標準、ARM64堆疊佈局、簡易處理程序排程器、浮點運算以及NEON指令、SVE以及SVE2指令,還結合3個實際案例分析如何使用SVE/SVE2指令來進行最佳化。
現在有了這本快速入門的ARM64系統結構程式設計圖書,期許能夠幫助讀者快速入門!
--
本文取自深智數位出版之〈最佳能效晶片平台 - ARM64架構師高度之程式開發〉