吳利生
摘要:隨著芯片技術的飛速發(fā)展,與過去幾年相比,多核處理器的售價目前已非常便宜,在linux等平臺的支持之下,多核芯片在人們日常的生產和生活之中應用已經非常普遍。但是多核處理器操作系統(tǒng)原理的研究相比單核處理器就顯得復雜,本文分析了嵌入式操作系統(tǒng)的理論和硬件,提出了基于Zynq-7000的嵌入式多核操作系統(tǒng)設計與實現(xiàn)辦法,以供參考。
關鍵詞:ARM Cortex-A9 MPCore;嵌入式;性能研究
中圖分類號:TP316 文獻標識碼:A 文章編號:1007-9416(2020)03-0134-02
1 嵌入式操作系統(tǒng)的理論和硬件分析
ARM Cortex-A9 MPCore嵌入式多核操作系統(tǒng)的實現(xiàn)必須要通過理論和硬件進行分析,本小節(jié)的理論方面包括對稱多處理器架構的介紹,在硬件方面則詳細分析了ARM Cortex-A9 MPCore架構芯片的主要的組成結構[1]。
1.1 架構理論介紹
本次研究的芯片屬于典型的對稱性多核架構,也就是一個芯片之內集成了許多個相同的中央處理器(CPU),且各個CPU之間有著相等的優(yōu)先級,都具備同樣的內存,且對外設資源的訪問權限都相等。多核處理器中的CPU與集中的存儲器以及I/O總線相互連接,這樣的連接可以使多核處理器可以同時訪問一個相同的物理存儲器,這樣的內存結構被稱之為一致內存訪問結構(UMA)。圖1就展示了一個典型的雙核對稱性架構(SMP),通過該圖我們可以看到兩個CPU通過與同一個I/O總線相連實現(xiàn)對共享物理內存的范文相連來訪問相同的物理內存,從硬件結構圖中還可以看出可以通過中控制器實現(xiàn)設備的中斷[2]。
本研究中發(fā)現(xiàn)由于內存的限制,在SMP系統(tǒng)中CPU的數量為2~4時,利用率最佳。在本研究中應用的還有:(1)控制主、次級CPU休眠、檢查以及初始化的多核系統(tǒng)啟動技術;(2)實現(xiàn)多數支持SMP選擇每個CPU維護私有的就緒任務隊列的任務調度技術;(3)控制多核處理器實現(xiàn)核間中斷的中斷處理技術;(4)保證完整總線交易之中完成CPU對內存中某一數據的讀取、修改以及回寫而不被其他CPU打擾的互斥同步技術。
1.2 硬件分析
為了能夠在保證足夠的多核文檔數量的情況下對本實驗所選取芯片實施開放硬件調試,所以選取Zynq-7000平臺作為硬件研究對象。本研究所選取的每一個A9處理器都能夠在相同時間或者某段時間處理兩條指令,實驗中的ARM Cortex A9處理器實現(xiàn)了ARM v7-A結構,這樣可以確保整個架構獲得完整的虛擬存儲支持,可設置執(zhí)行16位以及32位的Thumb代碼指令,除此之外還有兩種解決辦法,即:(1)執(zhí)行32位的ARM代碼指令;(2)在Jazelle的狀態(tài)之下使用8位Java代碼指令。在本文設計的硬件系統(tǒng)中還包括了通用中斷控制器、scu以及定時器等部件,具體的結構圖如圖2所示。
2 基于Zynq-7000的嵌入式多核操作系統(tǒng)設計與實現(xiàn)
2.1 多核啟動模塊
本設計中操作系統(tǒng)之中啟動的絕大部分工作都是通過主核串行來進行的,在合適的時機會發(fā)出指令,將次級核激活,達到主核和次核同時工作的目的。具體步驟如下:第一步是完成主核CPU、板級以及操作系統(tǒng)內核三者的初始化,初始化完成之后主核就會發(fā)出指令并準備啟動次級核,在一系列的初始化工作的最終目的就是實現(xiàn)次級核啟動地址玩出完成裝載;第二部就是進行上鎖,主要的目的就是為了實現(xiàn)主核、次核在同一應用場景下實現(xiàn)任務的調度,主要是實現(xiàn)方法就是設計主核初始化全局自旋鎖smp_lock進行上鎖,這個模塊中的核心代碼如下:
SECONDARY_CORES_START_FUNC_REG = (unsigned long) OS_secondary_cpu_start;
os_spin_init_lock(&smp_lock);
第三步就是實現(xiàn)次級核的初始化,當主核執(zhí)行完激活的指令之后,次級核接收到主核激活指令,就會立刻退出休眠狀態(tài),并讀取和驗證相關的驗證地址,驗證合法之后,就會執(zhí)行次級核的啟動函數的代碼。由于在次級核進行初始化的過程中要牽扯到C語言的讀取和調入,因此再次之前還需要匯編函數,使目前狀態(tài)的處理器處于一個SVC模式并設置臨時堆棧[3]。
2.2 核間通信模塊
核間通信屬于多核系統(tǒng)之中特有且又十分重要的一個模塊,借助此模塊就能夠實現(xiàn)不同處理器之間任務和信息的交互。核間通信在實現(xiàn)上可以劃分為兩部,分別是發(fā)送與接收處理。同樣的這些信息由不同處理器發(fā)送也可以分為兩個部分,也即是通信信息寫入內存以及中斷發(fā)送兩部分。在發(fā)送中斷前必須要向目標CPU的通信命令變量存儲通信信息,這一部分實現(xiàn)的具體的數據代碼在下面給出:
typedef struct{
os_spinlock ? ? lock;
CPU_INT32U ? ipi_cmd;
OS_TCB ? ? ? *tcb;
void ? ? ? ? ? *data;
}os_ipi_cmd;
因為此次研究使用了中斷對應所有核間通信的命令,所以在接收到核間通信中斷之后,此核核間中斷處理函數就要進一步讀取相關函數,并依照這些來執(zhí)行相應命令的函數[4]。
2.3 任務管理模塊
在多核的系統(tǒng)之中,因為任務能夠在主核以及次核之上分別運行,因此任務準備、準備完成以及運行狀態(tài)上就擁有了所屬CPU的屬性。本研究中的Per-CPU能夠達到每個核均衡負荷的效果,隊列模型因為分配了CPU私有隊列在每以個模型之中,所以能夠實現(xiàn)并行調度的目的,而且在一個任務時間里,更傾向在單獨的CPU上運行,這樣可以使CPU上的cache熱度得到充分的利用。本研究中可以通過兩種方式實現(xiàn)一個CPU上任務對另一個CPU上的任務的一些操作,比如準備完成、掛起、優(yōu)先級上調或下調等。這里有兩種方法可以實現(xiàn),第一種解決策略就是允許直接進行操作。由于多核共享主存儲器,所以該策略是可行的是可以實現(xiàn)的。第二種解決策略就是該CPU不對本CPU之外的所屬任務進行調度和管理,而是通過發(fā)送信息的方式由任務所屬COU去進行處理和操作,采取該辦法處理時則要借助核間通信機制[5]。
3 結語
文章首先介紹了對稱多處理器架構,并對所選取的Zynq-7000開發(fā)平臺進行額硬件分析。然后份多核啟動模塊、核間通信模塊以及任務管理模塊三個部分闡述了基于Zynq-7000的嵌入式多核操作系統(tǒng)設計與實現(xiàn)的具體辦法,通過一些列模塊的整合實現(xiàn)了多核操作系統(tǒng)設計與實現(xiàn)。
參考文獻
[1] 張洋,虞志益.引領多核處理器創(chuàng)新之路[J].中國發(fā)明與專利,2018(01):117-118.
[2] 羽路.多核處理器悄然崛起[J].集成電路應用,2019(05):22-24.
[3] 多核處理器強調多任務并行處理[J].每周電腦報,2018(35):86.
[4] 馮磊.多核處理器的數量裸奔[J].信息系統(tǒng)工程,2016(11):82-85.
[5] 張浩,蘭峰.多核處理器基本原理及其在汽車領域中應用的展望[J].汽車科技,2017(03):37-41.
Abstract:With the rapid development of chip technology, compared with the past few years, the price of multi-core processor has been very cheap. Under the support of Linux and other platforms, multi-core chip has been widely used in people's daily production and life. However, the principle of multi-core processor operating system is more complex than that of single-core processor. Firstly, this paper introduces the theory of embedded operating system and the hardware used in this experiment, and analyzes the specific methods of multi-core operation in three modules for reference.
Key words:ARM Cortex-A9 MPCore; embedded; performance research