龍怡清
摘? 要:隨著計算機科學技術的快速發展,對于計算機硬件以及軟件的應用更加多元化,嵌入式虛擬機管理技術就是其中一個比較典型的使用案例。客戶操作系統順暢運行離不開嵌入式虛擬機管理器,需應用嵌入式虛擬機管理器對硬件資源(3種硬件資源)虛擬化,而支持虛擬內存的客戶操作系統則需要對CPU存儲管理單元頁表虛擬化。該文主要研究的是NXP公司的PowerPC架構處理器,以此為例來詳細地說明CPU的存儲管理單元以及管理方法,從而提出CPU的存儲管理單元虛擬化的需求。從5個典型性虛擬機管理器軟件的內存虛擬化研究方案中可得出虛擬化問題的有效解決方案,此方案包括軟件影子頁表、硬件支持特性,軟硬件結合中的多種方案,能進一步解決CPU存儲管理單元(MMU)頁表虛擬化問題。
關鍵詞:嵌入式虛擬機管理器? 客戶OS? MMU頁表? 內存虛擬化? 影子頁表
中圖分類號:TP316 ? ?文獻標識碼:A 文章編號:1672-3791(2020)02(c)-0014-02
嵌入式虛擬機管理器是一款運行在操作系統之上的軟件,在該管理器上面又同時可以運行多個操作系統,不同的操作系統運行在不同的區域,這樣就方便管理。主要的功能實現就是將物理硬件映射給客戶操作系統來使用,讓客戶操作系統有一種在真實的硬件上面運行的感覺,要想達到這個目的并非簡單,總共需要對于三大類型的硬件設備進行虛擬化操作。第一類就是CPU核,在一個原始的物理CPU核上面進行操作,就可以同時映射出多個邏輯CPU核來供客戶操作系統使用,其中的重要步驟在于對原始物理CPU核的時間分割,分割為多個時間片段來執行不同的任務,讓不同的邏輯CPU核可以占用物理CPU和上周期內的不同時間片段,就可以感覺到多個操作系統同時運行。第二類就是內存,虛擬化內存技術可以實現物理內存的分劃,不同的分區肯定不能使用同一個分區,這必然造成數據信息的混亂,出現安全事故,因此物理內存的分劃確保數據安全性。第三類就是設備,IO設備是被多個分區共同分享的,所以也需要對于各種IO設備進行虛擬化。
1? MMU硬件管理方法概述
1.1 MMU硬件
嵌入式領域在目前來看使用的比較主流的處理器架構主要有ARM、X86、PowerPC等。MMU是在CPU內部集成的一個硬件邏輯單元,可以提供4種主要的功能:MMU可以實現將邏輯地址轉換為物理地址,當MMU關閉時,邏輯地址是等同于物理地址的;MMU同時還提供了讀寫保護,不同的用戶被分配到不同的權限,也可以相同,然后不同的權限對應著不同的區域,這樣就實現了資源的權限控制。
PowerPC架構處理器可以同時支持3種類型的MMU轉換模式:利用TLB將邏輯地址轉換為物理地址的頁地址轉換模式;邏輯地址轉換為物理地址的塊地址轉換模式(充分利用BAT寄存器進行的塊地址轉換模式);平板映射模式(禁止地址轉換)。
由于并不是所有的處理器都支持MMU,并且就算硬件滿足條件,也有可能操作系統不支持虛擬內存,在這種情況下就只能采取平板映射模式。但需要注意的是,塊地址轉換只用于部分處理器。
1.2 MMU管理方法
NXP公司的核心架構處理器經歷了比較漫長的發展過程,其硬件結構隨之不斷地發生著改變,硬件的功能基本保持不變,穩定性能越來越好,主要就是實現邏輯地址到物理地址的轉換和保護工作。MMU對于存儲管理機制的實現支持主要有兩種方式,分別是塊地址轉換形式和MMU頁表形式。其中塊地址轉換形式的內存為128kB,是最小內存塊。
TLB是存在于內存中的非常重要的一塊區域,主要用于存放MMU頁表。可以用來保護經常使用的頁表項,MMU頁表加載之后就會進入到緩存,頻繁的改變就可以得到TLB表項,這個替換的過程是非常復雜的,一方面只有硬件的支持才能很好地完成,另一方面還需要優秀的算法來實現轉換。大內存塊常用BAT且地址不會因映射關系的改變而頻繁改變地址轉換。
1.3 MMU虛擬化需求
虛擬機管理器可以運行多個客戶操作系統,如果客戶操作系統是基于虛擬化的,那么客戶操作系統處于用戶態時,沒有辦法對于MMU的空間進行管理,所以,在客戶操作系統上面抽象了一個適配層,如果該適配層可以很好地支持MMU的虛擬化功能,則是非常完美的實現。MMU虛擬化主要實現了3個功能:一是實現了客戶操作系統物理內存地址到主機物理內存地址的完美轉換;二是設置了內存的權限管理,最大程度地避免內存的泄露;三是將客戶頁表已訪問的信息進行緩存,方便下次直接使用。
2? MMU虛擬化方法分析
2.1 XEN內存虛擬化方法
英國劍橋大學是XEN誕生地,人們通過不懈地鉆研,發現X86架構處理器與內存虛擬化有重要關系,通過它發現了一種優秀的內存虛擬化方法。客戶操作系統可以直接對硬件頁表進行讀操作,而更新操作則必須要有XEN的參與,如果頻繁的陷入XEN,將會有較大的開銷,因此可以使用隊列的結構來分批地對這些操作進行確認,這樣就可以在一定程度上降低開銷。
X86影子模式、X86直接模式是XEN對MMU硬件虛擬化的主要方式。X86影子模式主要就是客戶操作系統維護客戶頁表,因此會產生客戶操作系統的影子頁表,這個影子頁表由XEN來幫忙維護。MMU硬件能進行該頁表訪問,在訪問的同時也可以訪問客戶頁表、影子頁表,并且能進行信息的有效傳遞。
X86直接模式主要就是客戶操作系統維護客戶頁表,MMU可以訪問客戶頁表,客戶操作系統需要在XEN上面對于客戶頁表進行注冊,頁表基地址的改變可通過Linux客戶操作系統實現,但XEN需在提交頁表之前確認,頁表的更新也離不開XEN的陷入,并仿真寫操作。
2.2 ViMo內存虛擬化方法
韓國電子通信研究院設計的ViMo被廣泛應用于移動通信領域,能支持建立在ARM基礎上的架構處理器的全虛擬化技術。其主要把地址空間分為物理地址、機器地址、虛擬地址。毫無疑問虛擬地址是由客戶操作系統來使用的,物理地址則是主要作為客戶操作系統的物理地址,機器地址主要由ViMo來進行維護,每個虛擬機都有自己的機器地址,這段地址比較特別,具有物理上的連續性,使用起來非常的方便,一旦虛擬機進入關機狀態,這段地址可以會被分配給其他的虛擬機使用。
2.3 KVM/ARM內存虛擬化方法
KVM/ARM是第一個全系統的ARM虛擬化解決方案,工作原理為ARM架構處理器,簡言之是在多核的ARM上面運行原生客戶的操作系統。虛擬地址的訪問權對于客戶操作系統以及內核都至關重要,并且它們同時訪問的時候不能相互產生影響,所以內存虛擬化勢在必行。對于真實的物理內存而言,內核擁有著絕對的訪問控制權限,而客戶操作系統則需要通過內核才能訪問。要想實現這樣的需求就需要增加其他的內存虛擬化層,這樣客戶操作系統就可以訪問內存的虛擬化層。KVM/ARM的內存虛擬化方法比較特別,為了實現客戶虛擬地址和客戶物理地址之間的映射,這個任務由客戶操作系統來完成。內核的虛擬地址映射到真實的物理地址的原理是客戶物理地址映射到內核虛擬地址。
2.4 NOVA內存虛擬化方法
NOVA是由德國的一所大學操作系統研究小組設計的,基于Intel VT-x的支持全虛擬化的微內核架構虛擬機管理器。以下4種類型為內存的基本類型。
(1)HVA:由NOVA分配,在打開MMU時候的地址。
(2)HPA:有物理平臺提供,關閉MMU時候的地址。
(3)GPA:由NOVA分配給客戶操作系統,客戶操作系統在關閉MMU時候的地址。
(4)GVA:由客戶操作系統分配,客戶操作系統在打開MMU時候的地址。
一般GPA等同于HVA。由于處理器支持嵌套分頁,便可以運用硬件提供的特性更好地完成內存的虛擬化。需注意的是,處理器不支持嵌套分頁特性就需要使用vTLB算法,進而填充和刷新影子頁表。
2.5 MobiVMM內存虛擬化方法
韓國大學和微軟亞洲研究院聯合開發的MobiVMM內存虛擬化方法,適用范圍為消費電子領域,能有效解決資源受限、實時支持、功能高效管理。主要的設計方案就是MobiVMM和客戶操作系統共享一個地址空間,在共享空間時會把4GB空間里最高的32MB留置于MobiVMM,因此切換MobiVMM時,不用刷新TLB、Cache,一定程度上節省了大量的人力、物力、財力。
3? MMU頁表虛擬化方案
3.1 軟件方案
在軟件方案選擇時需影子頁表、其變體二選一,原因在于它們虛擬化能力較強,能實現MMU頁表虛擬化。工作主要機制為對原始CPU分頁,GVA到GPA的映射不可或缺,維護主要是由客戶操作系統的客戶頁表完成,HVA到HPA的映射關系非常重要,維護主要是由虛擬機管理器的主機頁表完成,影子頁表主要用于維護GVA到HPA的映射關系。
3.2 硬件支持
硬件條件支持有了一定基礎,便可利用這些基礎的特性進行MMU頁表虛擬化。其中的技術要點在于在硬件上引入另一個分頁級別,客戶操作系統來控制64位以及32位的頁表事件,虛擬機管理器控制擴展頁表,CPU則是使用擴展頁表和客戶頁表。
3.3 軟硬件結合
基于軟硬件結合的MMU頁表虛擬化解決方案,是根據虛擬機管理器所支持處理器的虛擬化特性生成的,需注意的是當處理器具有類似EPT特性時,可直接選擇MMU頁表虛擬化方案,如不支持則可采用類似影子頁表、其變體二選一的軟件MMU頁表虛擬化方案。
4? 結語
對嵌入式虛擬機管理器內存虛擬化方法的研究,有利于解決各種虛擬化問題,對于客戶操作系統的虛擬化需結合MMU頁表進行。解決方案包括軟件解決方案、硬件支持方案、軟硬件結合解決方案。
參考文獻
[1] 尹學淵,陳興蜀,陶術松,等.一種無代理虛擬機進程監控方法[J].南京大學學報:自然科學版,2019(2):98.
[2] 劉健,王馬龍.基于負載特征的虛擬機動態遷移決策算法[J].網絡安全技術與應用,2017(3):123.
[3] 陳佳昕.虛擬機隱藏進程檢測系統設計與實現[J].現代計算機:專業版,2019(1):93-96.
[4] 徐海燕,郭京.基于共享內存的多核虛擬機系統中的虛擬機間通信[J].電子技術與軟件工程,2014(3):78.
[5] 陳興蜀,趙成,陶術松.基于KVM的Windows虛擬機用戶進程防護[J].電子科技大學學報,2016(6):950-957.