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