虛擬化技術在智慧終端的應用

suipingsp發表於2014-07-31

伺服器和桌面機虛擬化一直佔據有相當大的版面,隨著雲端計算和儲存的興起,虛擬化技術更被熱捧,還有一種虛擬化技術發展迅猛--嵌入式虛擬化。嵌入式虛擬化是指嵌入式系統中部署虛擬機器監控程式。儘管嵌入式裝置一直受到嚴格的資源限制,但今天的裝置範圍廣泛--從擁有伺服器級功能(比如對虛擬化的硬體支援)的強大處理器到擁有計較少容量和資源的功耗優化系統。如果向嵌入式系統新增一個虛擬機器監控程式,將新增靈活性和一些高階功能,將嵌入式裝置轉變為一種新型系統。

嵌入式領域包含幾個有用的虛擬化應用領域:移動裝置、安全性核心和併發性嵌入式作業系統。本文介紹了智慧終端中虛擬化技術的應用。

(一)虛擬化技術概述

虛擬化是指計算機軟體在一個虛擬的平臺上而不是真實的硬體平臺上執行。虛擬化技術可以擴大硬體的容量,簡化軟體的重新配置過程。其中CPU的虛擬化可以單CPU模擬多CPU並行執行,允許一個平臺同時執行多個作業系統,並且應用程式可以在相互獨立的空間內執行而互不影響。虛擬化技術在降低硬體成本的同時,還可以顯著提高系統的工作效率和安全性。

虛擬化系統的實現通常是在作業系統和硬體之間加入一個虛擬機器監控程式,稱為Hypervisor(如圖1所示)。由Hypervisor主要負責各個作業系統之間的硬體資源協調。虛擬機器監控程式是一種特殊作業系統,直接在裸機上執行(針對完全虛擬化技術)。虛擬機器監控程式建立一個底層硬體平臺抽象,一個或多個虛擬機器(VM)共享這個底層硬體平臺。在這種環境中,VM 只是作業系統及其應用程式的容器,一個 VM 與虛擬機器監控程式上執行的其他 VMs 隔離,這支援多個作業系統或多個配置不同的相似作業系統。

圖1  虛擬化系統結構

智慧終端虛擬化技術也是通過Hypervisor來實現多個作業系統的硬體資源共享。現有的虛擬化技術方案主要有VirtualLogix的VLX、Open Kernel Labs的OKL4等,這些技術方案雖然實現了不同的Hypervisor,但總體結構相似。

(二)智慧終端領域的虛擬化

虛擬化技術使得軟體和硬體通過虛擬化技術實現了較鬆的耦合,系統軟體只需要實現很少的改動就能移植到新的硬體平臺上。智慧終端可以在虛擬平臺上執行多個相互隔離的作業系統,提高手機系統的安全性。如將重要資料和安全需求高的應用專門隔離保護起來,即使某作業系統上的應用軟體甚至整個智慧作業系統因中毒等崩潰,虛擬化技術可以將重要資料隔離保護起來。另外虛擬化技術還可能減少硬體成本,如果一顆CPU計算能力足夠,可以在一顆CPU上模擬多顆邏輯CPU的執行,將智慧作業系統和基帶的RTOS執行在同一個CPU上,減少主晶片數量,節約大量成本。多核平臺中也可以通過將CPUs虛擬成虛擬CPU池,所有軟體部分都通過虛擬化技術共享這些硬體資源。

如果虛擬化技術在嵌入式領域高度發展,應該可以實現軟硬體的極鬆耦合--所有軟體(作業系統,WIFi、藍芽等微控制程式)共享硬體平臺、執行在虛擬硬體層,邏輯硬體間形成統一的邏輯介面,硬體平臺支援方便的替換、升級。那時,智慧終端將可任意定製。

(三)ARM架構上基於OKL4的Android虛擬化

OKL4是Open Kernel Labs公司的一款虛擬化產品,作為針對嵌入式系統的Hypervisor,OKL4支援經過虛擬化處理的作業系統(包括智慧作業系統和RTOS),一些作業系統的核心元件也進行虛擬化處理,獨立執行在OKL4的輕量級執行環境下。OKL4既支援粗粒度的作業系統虛擬機器,又支援細粒度的輕量級執行環境。驅動程式或檔案系統等核心元件可直接執行在輕量級執行環境中,其它子系統可以共享該元件,提高了系統的安全性,也提高程式碼的複用率。基於OKL4的手機虛擬化結構如圖2所示。


圖2 OKL4虛擬化系統結構

虛擬機器VMM(虛擬機器監控器)執行在物理CPU的最高特權級,對物理資源虛擬的三個主要任務:處理器虛擬化、記憶體虛擬化和I/O虛擬化。本節通過CPU虛擬化、記憶體虛擬化介紹ARM架構上基於OKL4的虛擬化Android。

1,CPU虛擬化的設計

OKL4 Hypervisor執行在特權級(6 種特權模式)上,負責管理CPU資源,負責虛擬機器的排程和切換,而輕量級執行環境和虛擬機器均位於使用者模式下,使用OKL4提供的IPC機制進行通訊。

在基於OKL4的虛擬化Android系統中,當Android試圖訪問CPU暫存器時,該請求不會真正發生在物理暫存器上,相反,OKL4會將訪問定位到“虛擬暫存器”。根據不同的處理器體系結構,OKL4定義了一套存放在記憶體中的“虛擬暫存器”,這些虛擬暫存器作為執行緒的本地變數位於執行緒的使用者執行緒控制塊中。通過“虛擬暫存器”,Android不會訪問到真實的物理資源,從而實現了作業系統與CPU資源的隔離。

2,虛擬記憶體管理

在OKL4虛擬化系統中,Android作業系統使用的記憶體地址空間其實是OKL4建立的虛擬地址空間,是由一些實體記憶體對映而生成的虛擬記憶體。在OKL4 Hypervisor啟動時,一個稱為__okl4_environ的全域性變數會被初始化,__okl4_environ的成員okl4_virtmem_item為一個結構體陣列,它代表了各個虛擬化子系統(包括作業系統和虛擬化元件)的虛擬記憶體地址空間。子系統可以通過OKL4提供的介面OKL4_ENV_GET_ STATIC()訪問該結構體陣列,獲取虛擬記憶體地址。

相關文章