嵌入式虛擬化對(duì) OEM 有幾個(gè)積極的影響。例如,一旦有一種方法可以拆分應(yīng)用程序以在多個(gè)內(nèi)核上運(yùn)行同時(shí)保持確定性,該解決方案隨后可以使實(shí)時(shí)應(yīng)用程序能夠向上或向下擴(kuò)展它們使用的內(nèi)核數(shù)量。借助可擴(kuò)展性,OEM 可以為其產(chǎn)品提供一系列性價(jià)比選項(xiàng),而無需更改軟件。
虛擬化在計(jì)算機(jī)科學(xué)中并不是一個(gè)新概念,但隨著多核處理器的出現(xiàn),它引起了新的興趣。盡管虛擬化被認(rèn)為是保持多個(gè)處理器內(nèi)核忙碌的一種方式,但需要注意的是,大多數(shù)類型的服務(wù)器或客戶端虛擬化并非旨在滿足時(shí)間關(guān)鍵型嵌入式處理的需求。這些虛擬化方法通常以相同的方式對(duì)待多核芯片上的所有處理器。在這些系統(tǒng)中,單個(gè)操作系統(tǒng) (OS) 在處理器可用時(shí)將任務(wù)分配給處理器,以試圖使所有處理器盡可能地負(fù)載處理任務(wù)。
服務(wù)器和客戶端虛擬化通常會(huì)虛擬化所有硬件,包括 I/O 接口。當(dāng) I/O 接口需要服務(wù)時(shí),虛擬機(jī)監(jiān)視器 (VMM) 會(huì)處理請(qǐng)求并將結(jié)果傳遞給它所支持的操作系統(tǒng)客戶端。沒有辦法確保在屬于該客戶端的 I/O 需要服務(wù)時(shí)加載特定的 OS 客戶端,也沒有一種全局方法可以將特定 I/O 與客戶端 OS 和在其上運(yùn)行的應(yīng)用程序相關(guān)聯(lián)。因此,無法準(zhǔn)確保證處理 I/O 事件需要多少時(shí)間。因此,這種方法不適用于處理嵌入式系統(tǒng)中的實(shí)時(shí)處理。
嵌入式系統(tǒng)設(shè)計(jì)人員希望直接控制系統(tǒng)以獲得確定性和一致的性能。雖然需要平衡整體處理器利用率并保持多核處理器盡可能繁忙,但這并不是首要任務(wù)。首先,嵌入式設(shè)計(jì)人員正在尋找能夠幫助他們?cè)谠黾庸δ芎?或降低 OEM 產(chǎn)品成本的同時(shí)保持確定性的軟件技術(shù)。
嵌入式設(shè)計(jì)人員正在尋找一種軟件平臺(tái),使他們能夠組合不同類型的操作系統(tǒng),以便針對(duì)手頭的任務(wù)優(yōu)化處理——例如,處理關(guān)鍵 I/O 時(shí)序要求的實(shí)時(shí)操作系統(tǒng)和通用操作系統(tǒng)( GPOS) 來利用 COTS 圖形豐富的應(yīng)用程序,這些應(yīng)用程序運(yùn)行人為導(dǎo)向的功能。他們還在尋找擴(kuò)展應(yīng)用程序的解決方案,以便他們可以使用相同的應(yīng)用程序代碼庫提供不同的產(chǎn)品。這降低了工程開發(fā)成本,縮短了上市時(shí)間,更重要的是,使新產(chǎn)品能夠基于經(jīng)過驗(yàn)證的軟件,這些軟件可以在性能和可靠性方面不斷升級(jí)。
嵌入式虛擬化保留了確定性
為了使嵌入式應(yīng)用程序具有確定性,它必須從開發(fā)項(xiàng)目的一開始就進(jìn)行設(shè)計(jì)。確定性不是可以在最后添加的東西。必須特別考慮以確保應(yīng)用程序線程可以直接控制它們所依賴的 I/O 接口。
圖 1 顯示了一個(gè)拾放裝配系統(tǒng),其中 TenAsys 的 Windows 實(shí)時(shí)操作系統(tǒng) (RTOS) 托管在四核處理器的三個(gè)內(nèi)核上,而人機(jī)界面 (HMI) 托管在第四個(gè)內(nèi)核上。運(yùn)行 Microsoft Windows 的核心。運(yùn)行在不同 CPU 上的實(shí)時(shí)任務(wù)在需要時(shí)通過全局對(duì)象網(wǎng)絡(luò)進(jìn)行通信。該自動(dòng)化裝配系統(tǒng)包括三個(gè)實(shí)時(shí)子系統(tǒng):引導(dǎo)裝配機(jī)器人的視覺系統(tǒng)、多軸機(jī)器人以及將組件索引到裝配位置然后運(yùn)出裝配單元的材料運(yùn)輸系統(tǒng)。開發(fā)和調(diào)試此類應(yīng)用程序以確保每個(gè)組件按要求可靠運(yùn)行的理想方法是將應(yīng)用程序拆分為單獨(dú)的組件。
圖 1:嵌入式系統(tǒng)可以節(jié)省成本并保持實(shí)時(shí)響應(yīng)能力,同時(shí)通過在多核處理器上托管多個(gè)操作系統(tǒng)來添加功能。

例如,HMI 將是一個(gè)單獨(dú)的應(yīng)用程序模塊,可以在 Windows 等非實(shí)時(shí)環(huán)境中運(yùn)行。這需要一個(gè)可以劃分平臺(tái)資源的操作系統(tǒng)環(huán)境——I/O、內(nèi)存、中斷和 CPU 內(nèi)核(在多核處理器平臺(tái)的情況下)——以允許應(yīng)用程序模塊完全獨(dú)立地運(yùn)行。嵌入式虛擬化環(huán)境支持這一點(diǎn),允許不同的實(shí)時(shí)任務(wù)在特定的處理器內(nèi)核上運(yùn)行。操作軟件對(duì)物理 I/O 接口進(jìn)行分區(qū),以便來自設(shè)備之一的中斷僅中斷處理該設(shè)備的處理器。這確保了處理實(shí)時(shí)事件的可預(yù)測響應(yīng)時(shí)間。
多核芯片上的多個(gè)操作系統(tǒng)環(huán)境的托管由稱為嵌入式虛擬化管理器的軟件或包含在 RTOS 中的特殊嵌入式虛擬化功能進(jìn)行管理。
嵌入式虛擬化可以以不同的方式實(shí)現(xiàn),具體取決于處理器提供的硬件虛擬化支持量。半虛擬化解決方案使用軟件技術(shù)來修改客戶操作系統(tǒng),允許它們并肩工作,而不會(huì)相互影響或損害系統(tǒng)的實(shí)時(shí)響應(yīng)能力。實(shí)現(xiàn)提供了不同程度的平臺(tái)分區(qū),并且通常僅限于在一個(gè)平臺(tái)上一次運(yùn)行兩個(gè)操作系統(tǒng)——一個(gè) RTOS 和一個(gè) GPOS。一些實(shí)現(xiàn)已經(jīng)發(fā)展到 GPOS 不需要任何修改并且很容易支持最新版本的 GPOS 的地步。當(dāng)將 GPOS 耦合到 RTOS 的目的是按原樣使用傳統(tǒng) RTOS 應(yīng)用軟件時(shí),這是一個(gè)真正的優(yōu)勢,無需任何修改,
多年來,其中一些實(shí)現(xiàn)已經(jīng)過優(yōu)化,可為特定的操作系統(tǒng)組合提供最佳性能。這樣做的缺點(diǎn)是每個(gè)實(shí)現(xiàn)都特定于特定的操作系統(tǒng)組合,提供通用虛擬化解決方案以支持多種操作系統(tǒng)組合是一種不切實(shí)際的方法。
最近推出的 VT(由 Intel 處理器支持)等硬件輔助虛擬化功能通過提供內(nèi)置于處理器中的硬件輔助,消除了半虛擬化的一些軟件復(fù)雜性。通過使用硬件虛擬化支持,可以構(gòu)建 VMM 以在不了解客戶操作系統(tǒng)的情況下運(yùn)行。因此,VMM 可以支持針對(duì)該平臺(tái)的任何操作系統(tǒng)。
英特爾處理器特性,如 VT-x(VT 特性的一個(gè)子集)確??蛻舨僮飨到y(tǒng)發(fā)出的任何內(nèi)存地址都自動(dòng)映射到物理內(nèi)存中的適當(dāng)?shù)刂肺恢谩M瑯?,稱為 VT-d 的硬件輔助虛擬化功能自動(dòng)映射總線主控 DMA 設(shè)備的 I/O 內(nèi)存訪問,使作為來賓 RTOS 應(yīng)用程序一部分的本機(jī) I/O 驅(qū)動(dòng)程序無需修改即可在虛擬化環(huán)境中使用。這些硬件輔助功能大大降低了 VMM 的復(fù)雜性,并使嵌入式虛擬化成為更可行的解決方案。
使可伸縮性在實(shí)時(shí)應(yīng)用程序中發(fā)揮作用
雖然嵌入式虛擬化為將實(shí)時(shí)應(yīng)用程序拆分為單獨(dú)的獨(dú)立操作組件提供了理想的環(huán)境,但拆分應(yīng)用程序需要一種機(jī)制來支持進(jìn)程間通信 (IPC)。
過去,設(shè)計(jì)人員經(jīng)常在應(yīng)用子系統(tǒng)之間建立以太網(wǎng)鏈路,并使用 TCP/IP 堆棧在子系統(tǒng)之間進(jìn)行通信,但這種方法繁瑣、速度慢,有時(shí)不可靠,并且給系統(tǒng)的行為增加了不確定性,影響了確定性。
更好的 IPC 方法是使用稱為全局對(duì)象網(wǎng)絡(luò)的概念。 全局對(duì)象網(wǎng)絡(luò)提供了一個(gè)具有內(nèi)置啟動(dòng)和發(fā)現(xiàn)服務(wù)的托管通信環(huán)境,使應(yīng)用程序能夠在加載時(shí)動(dòng)態(tài)分布在一個(gè)或多個(gè) CPU 上。自動(dòng)找到需要其他進(jìn)程服務(wù)的進(jìn)程,并且本地管理器記錄它們的位置以跟蹤已建立的 IPC 鏈接。如果通信鏈路或目標(biāo)進(jìn)程發(fā)生故障,管理器會(huì)通知啟動(dòng)進(jìn)程。此外,當(dāng)啟動(dòng)過程不再需要 IPC 鏈接時(shí),本地管理器通過清除所有記錄來保持系統(tǒng)清潔。由于全局對(duì)象網(wǎng)絡(luò)與操作系統(tǒng)集成,其開銷很低,并且不需要應(yīng)用程序開發(fā)人員創(chuàng)建任何自定義軟件。
操作系統(tǒng)管理全局對(duì)象的位置和存在,進(jìn)程通過這些對(duì)象傳遞信息以確保系統(tǒng)的完整性。例如,一個(gè)進(jìn)程在多個(gè)處理器上使用的對(duì)象是“保持活動(dòng)狀態(tài)”的,只有在所有進(jìn)程都終止時(shí)才會(huì)被刪除。這需要底層管理基礎(chǔ)架構(gòu)來確保不會(huì)過早刪除對(duì)象,或者不會(huì)因?yàn)槲词褂觅Y源清理不當(dāng)而導(dǎo)致內(nèi)存泄漏。同樣,如果一個(gè)處理節(jié)點(diǎn)在其進(jìn)程終止之前發(fā)生故障,管理器需要通知所有其他處理節(jié)點(diǎn)上的全局對(duì)象管理器它們應(yīng)該清除對(duì)故障節(jié)點(diǎn)上對(duì)象的任何本地引用。
GOBSnet 通信示例
圖 2 顯示了圖 1 所示系統(tǒng)的軟件架構(gòu)的高度簡化視圖。除了 RTOS 和實(shí)時(shí)過程軟件,Cores 0-2 還運(yùn)行 INtime GOBS manager 軟件,其功能是管理全局對(duì)象通信。(GOBSnet 是 TenAsys 的全球?qū)ο缶W(wǎng)絡(luò),由公司的 INtime Distributed RTOS 和 INtime for Windows RTOS 支持。)
圖 2: GOBSnet 促進(jìn)了在不同處理器內(nèi)核上運(yùn)行的實(shí)時(shí)進(jìn)程之間的通信。

使用 GOBSnet,一個(gè)內(nèi)核上的進(jìn)程可以使用全局內(nèi)存對(duì)象與另一個(gè)內(nèi)核上的另一個(gè)進(jìn)程通信。啟動(dòng)進(jìn)程,圖 2 中的“進(jìn)程 1”,創(chuàng)建內(nèi)存對(duì)象并將其編入該內(nèi)核的根進(jìn)程中。完成此操作后,運(yùn)行在其他處理節(jié)點(diǎn)上的進(jìn)程可以找到內(nèi)存對(duì)象,從而為所有進(jìn)程提供高效的共享內(nèi)存接口。這同樣適用于 IPC 使用的所有對(duì)象范圍(包括信號(hào)量和郵箱)。
第二步是讓其他進(jìn)程定位內(nèi)存對(duì)象并獲取其內(nèi)存位置。這是通過指定處理器名稱來開始搜索來完成的。當(dāng)進(jìn)程找到對(duì)象時(shí),它將其位置、類型和參數(shù)存儲(chǔ)在處理器節(jié)點(diǎn)的 GOBS 管理器中的引用對(duì)象中,并保留該引用對(duì)象的句柄。從那時(shí)起,當(dāng)遠(yuǎn)程進(jìn)程(本例中的進(jìn)程 2 或進(jìn)程 3)想要寫入或讀取內(nèi)存對(duì)象時(shí),它會(huì)使用引用對(duì)象的句柄來檢索適當(dāng)?shù)膬?nèi)存對(duì)象信息以訪問它。
當(dāng)進(jìn)程 2 或進(jìn)程 3 終止其節(jié)點(diǎn)的 GOBS 管理器時(shí),該管理器會(huì)清除有關(guān)遠(yuǎn)程內(nèi)存對(duì)象的所有引用對(duì)象信息。當(dāng)進(jìn)程 1 終止時(shí),它會(huì)刪除它創(chuàng)建的所有對(duì)象,包括內(nèi)存對(duì)象。如果這不是最佳操作,則可以選擇使用計(jì)數(shù)器創(chuàng)建內(nèi)存對(duì)象。每當(dāng)另一個(gè)進(jìn)程連接到內(nèi)存對(duì)象時(shí),計(jì)數(shù)器就會(huì)增加,而每當(dāng)這些關(guān)聯(lián)的進(jìn)程之一終止時(shí),計(jì)數(shù)器就會(huì)減少。結(jié)果是內(nèi)存對(duì)象僅在與其連接的所有進(jìn)程都終止時(shí)才被刪除。這允許遠(yuǎn)程進(jìn)程進(jìn)程 2 和進(jìn)程 3 可以繼續(xù)通過內(nèi)存對(duì)象傳遞信息的情況,即使啟動(dòng)進(jìn)程進(jìn)程 1 已經(jīng)終止。
無論實(shí)時(shí)應(yīng)用程序分布在同一多核芯片上的 CPU 之間,還是網(wǎng)絡(luò)在一起的不同微處理器組件上的不同 CPU 內(nèi)核之間,都可以使用 GOBSnet 通信。通過圍繞這種靈活的系統(tǒng)軟件架構(gòu)設(shè)計(jì)系統(tǒng),嵌入式系統(tǒng)開發(fā)人員有足夠的空間來提高其產(chǎn)品的處理能力或相應(yīng)地縮小其處理能力,以應(yīng)對(duì)未來的挑戰(zhàn)。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
20275瀏覽量
252962 -
嵌入式
+關(guān)注
關(guān)注
5200文章
20506瀏覽量
334913 -
cpu
+關(guān)注
關(guān)注
68文章
11293瀏覽量
225331
發(fā)布評(píng)論請(qǐng)先 登錄
arm嵌入式主板優(yōu)缺點(diǎn)
什么是嵌入式操作系統(tǒng)?
嵌入式軟件分層架構(gòu)設(shè)計(jì)原則
嵌入式實(shí)時(shí)操作系統(tǒng)的特點(diǎn)
如何評(píng)估電能質(zhì)量在線監(jiān)測裝置的擴(kuò)展性?
NetApp助力對(duì)象存儲(chǔ)現(xiàn)代化,提升速度、可擴(kuò)展性和安全性
嵌入式工程師為什么要學(xué)QT?
RISC-V 虛擬化堆棧和硬件的最新進(jìn)展
一文讀懂:嵌入式Linux實(shí)時(shí)性進(jìn)階
嵌入式軟件開發(fā)常用的軟件有哪些?
Linux嵌入式和單片機(jī)嵌入式的區(qū)別?
瑞薩電子RA系列微控制器的可擴(kuò)展性強(qiáng)的配置軟件包 (FSP)安裝下載與使用指南
飛凌嵌入式ElfBoard ELF 1板卡-Regmap的優(yōu)勢
瑞芯微RK3288解決方案:高性能、高擴(kuò)展性的嵌入式系統(tǒng)設(shè)計(jì)理念與應(yīng)用分析
嵌入式虛擬化支持多核實(shí)時(shí)應(yīng)用程序的可擴(kuò)展性
評(píng)論