在嵌入式開(kāi)發(fā)中,多核嵌入式系統(tǒng)的軟件可能非常復(fù)雜。一個(gè)經(jīng)常討論的主題是如何在每個(gè)核心上實(shí)現(xiàn)代碼,從而使其得到最佳利用。在這篇短文中,有一個(gè)不同的視角:關(guān)注可以跨多個(gè)核心運(yùn)行的軟件。
多核硬件體系結(jié)構(gòu)
從硬件的角度來(lái)看,多核設(shè)備大致有兩種類(lèi)型:同質(zhì)多核(其中有多個(gè)相同類(lèi)型的核)和異質(zhì)多核(其中核的類(lèi)型不同)。異構(gòu)設(shè)備可以包括一些相同的核心。
要跨多個(gè)內(nèi)核運(yùn)行單個(gè)軟件,內(nèi)核必須相同(無(wú)論如何,從指令集的角度來(lái)看)。因此,需要一個(gè)同質(zhì)多核設(shè)備或異質(zhì)設(shè)備中的同質(zhì)“島”。
對(duì)稱(chēng)多處理
構(gòu)建多核系統(tǒng)的一個(gè)原因是以節(jié)能的方式最大化計(jì)算能力。這是個(gè)人電腦設(shè)計(jì)師所采取的方法;多核處理器在筆記本電腦和臺(tái)式機(jī)系統(tǒng)中幾乎無(wú)處不在。嵌入式開(kāi)發(fā)人員可能有同樣的目標(biāo)。最好的方法是使用支持對(duì)稱(chēng)多處理(SMP)的操作系統(tǒng)。
SMP操作系統(tǒng)將進(jìn)程分布在可用的內(nèi)核上。這通常是自動(dòng)的,但嵌入式開(kāi)發(fā)人員可能需要執(zhí)行一些控制,并可能將某些應(yīng)用程序鎖定到特定的核心。進(jìn)程不“知道”它們正在不同的內(nèi)核上運(yùn)行;操作系統(tǒng)提供它們之間的通信和同步。多種實(shí)時(shí)操作系統(tǒng)(RTOS)的SMP版本可用;Linux還提供SMP變體。
管理程序
盡管嵌入式SMP操作系統(tǒng)提供了某種程度的控制,但嵌入式開(kāi)發(fā)人員通常希望確保資源分配完全按照他們的喜好進(jìn)行配置。因此,另一種選擇是使用自己的操作系統(tǒng)實(shí)例配置每個(gè)核心,并且所有核心不必運(yùn)行相同的操作系統(tǒng)和應(yīng)用程序代碼。然后,在所有可以控制其操作(引導(dǎo)順序等)并提供內(nèi)核間(或操作系統(tǒng)間)通信的內(nèi)核上運(yùn)行虛擬機(jī)監(jiān)控程序。
要獲得更大的靈活性
到目前為止,我們已經(jīng)通過(guò)從系統(tǒng)中的單個(gè)(SMP)操作系統(tǒng)轉(zhuǎn)移到多個(gè)可能不同的操作系統(tǒng)實(shí)例來(lái)提高靈活性。但是,如果需要更大的靈活性,需要使用不同體系結(jié)構(gòu)的核心,該怎么辦?這取消了跨多核運(yùn)行代碼的選項(xiàng)–SMP操作系統(tǒng)或虛擬機(jī)監(jiān)控程序都需要一個(gè)同構(gòu)的多核環(huán)境。但是,還有另一種選擇:在每個(gè)核心上運(yùn)行多核框架(可能是基于OpenAMP的產(chǎn)品)。這種方法提供了核心間通信和生命周期管理。此外,可以選擇在“裸機(jī)”(即沒(méi)有操作系統(tǒng))上運(yùn)行應(yīng)用程序。
結(jié)論
在多核嵌入式系統(tǒng)上開(kāi)發(fā)軟件是一項(xiàng)復(fù)雜的任務(wù)。嵌入式開(kāi)發(fā)人員有必要考慮一些選項(xiàng)——相對(duì)簡(jiǎn)單性和完全靈活性之間的權(quán)衡。