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