虛擬化通過提供靈活性、便捷性以及增強的IT基礎設施魯棒性,為IT帶來了巨大的變革。與物理目標硬件相比,虛擬化為那些面向普通計算機的軟件開發人員帶來了更大的幫助,其中包括下列功能: 輕松地管理多種虛擬機配置(不同的OS版本、不同的內存容量等)。 在這些不同配置上測試/調試自己的軟件。 在相互隔離的環境中進行測試/調試,不必擔心自己的工作站會崩潰。 不過,軟件開發社區的其他人員——那些開發運行在嵌入式設備、非PC/工作站/普通計算機、非x86架構上的軟件的開發人員,那些試圖去維護過時硬件上的舊版應用程序或運行在供應不足或尚未面世的硬件上的應用程序的開發人員——是否能從中受益呢? 全系統仿真 全系統仿真為這些開發人員甚至非PC硬件配置提供了虛擬化功能。顧名思義,全系統仿真提供了對整個系統進行仿真的能力,其中包括其微處理器、內存、I/O外設、磁盤驅動器、網絡連接等。 不過,與其將全系統仿真看作是設備的集合,不如將其看作是最終系統,例如,新型飛機上的航空電子設備機架、通信基站、網絡設備、汽車或工業發動機控制器、人造衛星或高端計算服務器。 利用全系統仿真,軟件開發人員能夠在自己的臺式或筆記本電腦上運行整個系統的虛擬表現。開發人員使用標準源代碼調試器、編譯器和鏈接器在虛擬系統上加載軟件的方式就像對實際目標硬件進行操作一樣。不過,一項明顯的不同在于,開發人員可以隨身攜帶虛擬系統,這樣,即使在旅途中也能夠進行開發、調試和測試。 功能 與實際硬件相比,虛擬系統提供了更多的調試功能,這是因為它具有以下特性:逆向執行、保存和重新加載完整系統狀態的功能以及窺視并控制虛擬系統設備的功能。這就為軟件工程師的調試和測試工作額外提供了一個維度。與只能查看微處理器的寄存器和程序計數器狀態的普通調試所不同的是,全系統仿真提供了查看在所有系統設備中所發生事件的功能。 例如,在調試UART驅動的問題時,可以為處理器所看不到的UART自身的特定條件設置斷點。開發人員甚至能夠改變這些設備的狀態,從而在系統中加入虛擬硬件故障,以便測試軟件如何發現硬件故障并從中恢復。 全系統仿真幫助軟件開發人員進行系統級調試,而不是單板級調試。很多工程師可能都做過以下一些嘗試: 調試在多板系統啟動時間歇性出現,且看似與電路板之間細微的時間變化有關的問題。 在完全相同的時間同時停止系統的所有電路板,以便調試出現在電路板C但很可能起源于電路板A的問題。 調試看似發生在內部SoC I/O外設的設備驅動中的軟件問題,卻發現不能完全看到SoC內部實際發生的事件。 要求 全系統仿真支持處理所有上述情況。它可以成為非常難的軟件和系統問題的一種強大的解決方案。但是,要使得全系統仿真成為現實,必須遵循一些重要的原則: ● 無論整套系統多么復雜,這種仿真需要快到足以運行完整的軟件加載。 ● 這種仿真必須可升級。如果不能仿真整套系統(無論是5塊、10塊還是100塊電路板),那么它的作用就很有限。 ● 仿真環境必須支持一套大型開箱即用的模型庫,并同時向用戶提供為自己的目標系統快速創建模型的方法。 ● 仿真環境需要提供整個仿真系統的控制和可見性。 Virtutech公司的Simics就是仿真系統的一個例子,這是一款支持上述原則的全系統仿真器。設計人員可以運行完整系統的仿真,有時會包含具有異質目標架構的數百塊不同的電路板。 目標應用程序代碼、實時操作系統、驅動和固件都可以使用虛擬化的目標硬件進行調試、測試和執行。虛擬化的軟件開發環境可以運行的二進制代碼,與實際目標上所運行的二進制代碼完全相同。這就是說,不再需要RTOS/OSAPI抽象層,stubbed-out驅動或固件,或者在生產環境和stubbed-out環境中使用不同軟件編譯方法的多編譯腳本。 虛擬化的軟件開發環境提供了: ● 適用于目標硬件中微處理器的指令集仿真器。 ● 目標硬件中與目標軟件進行交互的所有設備的行為仿真。 ● 仿真目標和現實世界內部及二者之間的連接(例如,諸如以太網、MIL-STD-1553、ARINC 429、SpaceWire、Firewire、USB、ATM等網絡以及磁盤鏡像、內存鏡像等其他機制。)。 ● 使用與軟件開發人員與實際硬件交互時相同的工具(如編譯器、鏈接器、調試器、IDE和RTOS)和方法的能力。 |