吳利生
摘要:隨著芯片技術(shù)的飛速發(fā)展,與過(guò)去幾年相比,多核處理器的售價(jià)目前已非常便宜,在linux等平臺(tái)的支持之下,多核芯片在人們?nèi)粘5纳a(chǎn)和生活之中應(yīng)用已經(jīng)非常普遍。但是多核處理器操作系統(tǒng)原理的研究相比單核處理器就顯得復(fù)雜,本文分析了嵌入式操作系統(tǒng)的理論和硬件,提出了基于Zynq-7000的嵌入式多核操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)辦法,以供參考。
關(guān)鍵詞:ARM Cortex-A9 MPCore;嵌入式;性能研究
中圖分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)03-0134-02
1 嵌入式操作系統(tǒng)的理論和硬件分析
ARM Cortex-A9 MPCore嵌入式多核操作系統(tǒng)的實(shí)現(xiàn)必須要通過(guò)理論和硬件進(jìn)行分析,本小節(jié)的理論方面包括對(duì)稱多處理器架構(gòu)的介紹,在硬件方面則詳細(xì)分析了ARM Cortex-A9 MPCore架構(gòu)芯片的主要的組成結(jié)構(gòu)[1]。
1.1 架構(gòu)理論介紹
本次研究的芯片屬于典型的對(duì)稱性多核架構(gòu),也就是一個(gè)芯片之內(nèi)集成了許多個(gè)相同的中央處理器(CPU),且各個(gè)CPU之間有著相等的優(yōu)先級(jí),都具備同樣的內(nèi)存,且對(duì)外設(shè)資源的訪問(wèn)權(quán)限都相等。多核處理器中的CPU與集中的存儲(chǔ)器以及I/O總線相互連接,這樣的連接可以使多核處理器可以同時(shí)訪問(wèn)一個(gè)相同的物理存儲(chǔ)器,這樣的內(nèi)存結(jié)構(gòu)被稱之為一致內(nèi)存訪問(wèn)結(jié)構(gòu)(UMA)。圖1就展示了一個(gè)典型的雙核對(duì)稱性架構(gòu)(SMP),通過(guò)該圖我們可以看到兩個(gè)CPU通過(guò)與同一個(gè)I/O總線相連實(shí)現(xiàn)對(duì)共享物理內(nèi)存的范文相連來(lái)訪問(wèn)相同的物理內(nèi)存,從硬件結(jié)構(gòu)圖中還可以看出可以通過(guò)中控制器實(shí)現(xiàn)設(shè)備的中斷[2]。
本研究中發(fā)現(xiàn)由于內(nèi)存的限制,在SMP系統(tǒng)中CPU的數(shù)量為2~4時(shí),利用率最佳。在本研究中應(yīng)用的還有:(1)控制主、次級(jí)CPU休眠、檢查以及初始化的多核系統(tǒng)啟動(dòng)技術(shù);(2)實(shí)現(xiàn)多數(shù)支持SMP選擇每個(gè)CPU維護(hù)私有的就緒任務(wù)隊(duì)列的任務(wù)調(diào)度技術(shù);(3)控制多核處理器實(shí)現(xiàn)核間中斷的中斷處理技術(shù);(4)保證完整總線交易之中完成CPU對(duì)內(nèi)存中某一數(shù)據(jù)的讀取、修改以及回寫(xiě)而不被其他CPU打擾的互斥同步技術(shù)。
1.2 硬件分析
為了能夠在保證足夠的多核文檔數(shù)量的情況下對(duì)本實(shí)驗(yàn)所選取芯片實(shí)施開(kāi)放硬件調(diào)試,所以選取Zynq-7000平臺(tái)作為硬件研究對(duì)象。本研究所選取的每一個(gè)A9處理器都能夠在相同時(shí)間或者某段時(shí)間處理兩條指令,實(shí)驗(yàn)中的ARM Cortex A9處理器實(shí)現(xiàn)了ARM v7-A結(jié)構(gòu),這樣可以確保整個(gè)架構(gòu)獲得完整的虛擬存儲(chǔ)支持,可設(shè)置執(zhí)行16位以及32位的Thumb代碼指令,除此之外還有兩種解決辦法,即:(1)執(zhí)行32位的ARM代碼指令;(2)在Jazelle的狀態(tài)之下使用8位Java代碼指令。在本文設(shè)計(jì)的硬件系統(tǒng)中還包括了通用中斷控制器、scu以及定時(shí)器等部件,具體的結(jié)構(gòu)圖如圖2所示。
2 基于Zynq-7000的嵌入式多核操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1 多核啟動(dòng)模塊
本設(shè)計(jì)中操作系統(tǒng)之中啟動(dòng)的絕大部分工作都是通過(guò)主核串行來(lái)進(jìn)行的,在合適的時(shí)機(jī)會(huì)發(fā)出指令,將次級(jí)核激活,達(dá)到主核和次核同時(shí)工作的目的。具體步驟如下:第一步是完成主核CPU、板級(jí)以及操作系統(tǒng)內(nèi)核三者的初始化,初始化完成之后主核就會(huì)發(fā)出指令并準(zhǔn)備啟動(dòng)次級(jí)核,在一系列的初始化工作的最終目的就是實(shí)現(xiàn)次級(jí)核啟動(dòng)地址玩出完成裝載;第二部就是進(jìn)行上鎖,主要的目的就是為了實(shí)現(xiàn)主核、次核在同一應(yīng)用場(chǎng)景下實(shí)現(xiàn)任務(wù)的調(diào)度,主要是實(shí)現(xiàn)方法就是設(shè)計(jì)主核初始化全局自旋鎖smp_lock進(jìn)行上鎖,這個(gè)模塊中的核心代碼如下:
SECONDARY_CORES_START_FUNC_REG = (unsigned long) OS_secondary_cpu_start;
os_spin_init_lock(&smp_lock);
第三步就是實(shí)現(xiàn)次級(jí)核的初始化,當(dāng)主核執(zhí)行完激活的指令之后,次級(jí)核接收到主核激活指令,就會(huì)立刻退出休眠狀態(tài),并讀取和驗(yàn)證相關(guān)的驗(yàn)證地址,驗(yàn)證合法之后,就會(huì)執(zhí)行次級(jí)核的啟動(dòng)函數(shù)的代碼。由于在次級(jí)核進(jìn)行初始化的過(guò)程中要牽扯到C語(yǔ)言的讀取和調(diào)入,因此再次之前還需要匯編函數(shù),使目前狀態(tài)的處理器處于一個(gè)SVC模式并設(shè)置臨時(shí)堆棧[3]。
2.2 核間通信模塊
核間通信屬于多核系統(tǒng)之中特有且又十分重要的一個(gè)模塊,借助此模塊就能夠?qū)崿F(xiàn)不同處理器之間任務(wù)和信息的交互。核間通信在實(shí)現(xiàn)上可以劃分為兩部,分別是發(fā)送與接收處理。同樣的這些信息由不同處理器發(fā)送也可以分為兩個(gè)部分,也即是通信信息寫(xiě)入內(nèi)存以及中斷發(fā)送兩部分。在發(fā)送中斷前必須要向目標(biāo)CPU的通信命令變量存儲(chǔ)通信信息,這一部分實(shí)現(xiàn)的具體的數(shù)據(jù)代碼在下面給出:
typedef struct{
os_spinlock ? ? lock;
CPU_INT32U ? ipi_cmd;
OS_TCB ? ? ? *tcb;
void ? ? ? ? ? *data;
}os_ipi_cmd;
因?yàn)榇舜窝芯渴褂昧酥袛鄬?duì)應(yīng)所有核間通信的命令,所以在接收到核間通信中斷之后,此核核間中斷處理函數(shù)就要進(jìn)一步讀取相關(guān)函數(shù),并依照這些來(lái)執(zhí)行相應(yīng)命令的函數(shù)[4]。
2.3 任務(wù)管理模塊
在多核的系統(tǒng)之中,因?yàn)槿蝿?wù)能夠在主核以及次核之上分別運(yùn)行,因此任務(wù)準(zhǔn)備、準(zhǔn)備完成以及運(yùn)行狀態(tài)上就擁有了所屬CPU的屬性。本研究中的Per-CPU能夠達(dá)到每個(gè)核均衡負(fù)荷的效果,隊(duì)列模型因?yàn)榉峙淞薈PU私有隊(duì)列在每以個(gè)模型之中,所以能夠?qū)崿F(xiàn)并行調(diào)度的目的,而且在一個(gè)任務(wù)時(shí)間里,更傾向在單獨(dú)的CPU上運(yùn)行,這樣可以使CPU上的cache熱度得到充分的利用。本研究中可以通過(guò)兩種方式實(shí)現(xiàn)一個(gè)CPU上任務(wù)對(duì)另一個(gè)CPU上的任務(wù)的一些操作,比如準(zhǔn)備完成、掛起、優(yōu)先級(jí)上調(diào)或下調(diào)等。這里有兩種方法可以實(shí)現(xiàn),第一種解決策略就是允許直接進(jìn)行操作。由于多核共享主存儲(chǔ)器,所以該策略是可行的是可以實(shí)現(xiàn)的。第二種解決策略就是該CPU不對(duì)本CPU之外的所屬任務(wù)進(jìn)行調(diào)度和管理,而是通過(guò)發(fā)送信息的方式由任務(wù)所屬COU去進(jìn)行處理和操作,采取該辦法處理時(shí)則要借助核間通信機(jī)制[5]。
3 結(jié)語(yǔ)
文章首先介紹了對(duì)稱多處理器架構(gòu),并對(duì)所選取的Zynq-7000開(kāi)發(fā)平臺(tái)進(jìn)行額硬件分析。然后份多核啟動(dòng)模塊、核間通信模塊以及任務(wù)管理模塊三個(gè)部分闡述了基于Zynq-7000的嵌入式多核操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的具體辦法,通過(guò)一些列模塊的整合實(shí)現(xiàn)了多核操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。
參考文獻(xiàn)
[1] 張洋,虞志益.引領(lǐng)多核處理器創(chuàng)新之路[J].中國(guó)發(fā)明與專利,2018(01):117-118.
[2] 羽路.多核處理器悄然崛起[J].集成電路應(yīng)用,2019(05):22-24.
[3] 多核處理器強(qiáng)調(diào)多任務(wù)并行處理[J].每周電腦報(bào),2018(35):86.
[4] 馮磊.多核處理器的數(shù)量裸奔[J].信息系統(tǒng)工程,2016(11):82-85.
[5] 張浩,蘭峰.多核處理器基本原理及其在汽車領(lǐng)域中應(yīng)用的展望[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