【IT168评测中心】手机虚拟化技术已经出现许多年了,不过和服务器上火热的状况相比,手机虚拟化的实际产品却不多见,直到现在,多数厂商仍然在开发、测试或者观望中(只有上一年末传统虚拟化软件厂商VMware推出了MVP——Mobile Virtualization Platform移动虚拟化平台软件),在市面上,你可以买到的搭载虚拟化技术的手机大概只有下面这一款:
Motorola Evoke QA4
Motorola Evoke QA4是摩托罗拉在MWC2009大会开幕前曝光的一款滑盖手机。该机整体设计相当简洁,圆滑的曲线搭配狭长的机身显得与众不同,金属边框的使用则为手机增添了几分时尚气质,给人一种滑盖版iPhone的感觉。具体规格参数如下:
1. 装载分辨率为240 x 400像素的液晶屏幕,并支持触控操作
2. 内置200万像素摄像头,并支持视频摄录功能
3. 支持电子邮件收发, 网上即时通信服务(Instant Messaging)
4. 支持USB2.0、立体声蓝牙功能以及MicroSD/SDHC存储卡扩展
5. 支持CDMA / EV-DO Rev网络
6. 拥有108x50.5x17.5mm三围尺寸,重量为128g
Motorola Evoke QA4
Evoke QA4从今年的4月1日开始正式销售,它由Open Kernel Labs(OK Labs)的OKL4 Microvisor产品实现了虚拟化。在谈论OKL4之前,我们先要看看手机虚拟化技术能带来什么,这一点其实和服务器上经常谈论的虚拟化是一样的:
OKL4的产品也分很多种,Motorola Evoke QA4使用的是OKL4 Microvisor,这是专门为移动嵌入系统开发的一个Virtualization Hypervisor,侧重于较小的体积以及对移动平台更好的支持。和其他OKL产品一样,它是基于Microkernel架构(微内核)的。
采用微内核架构主要是为了安全性考虑——所谓的微内核就是和单内核相对,思想就是尽量保持内核要小。微内核只实现基本的如进程调度、内存管理这样的功能,微内核架构通常只有一个很小的内核运行于特权模式(或者说,内核模式),其它的服务等都运行于非特权模式(用户模式)。只将需要的部件(Microvisor本身)运行于特权模式有很多好处,它可以降低TCB(Trusted Computing Base,可信任计算基础)的维护量,不可信任的代码放在非特权模式运行,即使受到攻击,也不会引起系统级别的损坏。进一步地,OKL4 Microvisor将设备驱动也放在了非特权(用户)模式,不合理设计的驱动程序是传统系统崩溃的一个主要原因之一,在OKL Microvisor模型下,设备驱动运行在非特权模式,这样有问题的驱动程序将不会导致整个系统不可用。现代操作系统多少都实现了类似的东西(如Windows Vista上开始具有)。
关于微内核和单内核的区别,可以看这里:虚拟化风暴前夕 微软HyperV技术分析。
OKL4 Microkernel:小TCB提供更好的安全性并易于维护,通过MMU(Memory Management Unit,内存管理单元)硬件隔离地址空间,提供快速的消息传递机制(IPC,Inter-Process Communication,进程内通信)并提供了传统意义的微内核没有提供的真正共享内存特性,最重要的是:它是开源的!
OKL4实现了本地的、用户模式下的驱动模型;如同为微内核Hypervisor的Microsoft Hyper-V实现的就不是本地的驱动,它的驱动寄生于一个特别的客户Windows Server 2008操作系统
Motorola Evoke QA4使用的是ARM处理器——一个ARM9处理器,在ARM上实现虚拟化并不是那么容易的事情,因为ARM9使用基于虚拟地址的Cache而其TLB(Translation Lookaside Buffer)且缺乏ASID(address-space ID,地址空间ID) tag(大部分现代处理器都有这样的机制),这样,在运行通常的操作系统(所有的进程都具有独立的虚拟地址空间)的时候,进行上下文切换都会需要刷新TLB和Cache,对于切换很频繁应用——特别是虚拟化来说,这无疑会导致很低下的运行性能。
OKL4实现了一个机制来解决这个ARM问题:FASS(Fast Address Space Switching,快速地址空间切换)技术,它基于ARM的两个特别机制:Domains(域)和FCSE(Fast Context Switch Extension,快速上下文切换扩展),前者允许最多16个以MB为粒度的内存区域使用DID(Domains ID)标识并通过DACR(Domain Access Controll Register)管理其权限,通过给予不同的进程同一个DID的权限即可以实现叫做Domain Sharing(域共享)的内存共享技术;FCSE则是从ARMv4开始提供的用于支持Windows CE的技术,它使用一个6位(ARMv5使用7位) PID(process identifier)来重映射最低地址空间,这个重映射发生于虚拟地址转换结果送到TLB和缓存之前,通过Domains和FCSE的结合,FASS就在ARM架构上实现了一个以Segment(段)为基础的内存共享特性:
共享的x和y内存段:通过定义一个Domain并给予进程相应的DID权限实现;
在进程A切换到进程B的时候,它们不需要刷新TLB和对应的Cache;
由于地址不同,切换到进程C仍然需要刷新TLB和Cache
很奇妙地,在ARM硬件支持下,通过FASS实现的内存共享技术可以在不同的进程间直接共享内存区域,避免了ARM没有ASID的问题,并实现了通常微内核难以实现的直接内存共享技术,FASS宣称在ARM上可以达到Faster than native,虚拟的比原生的更快!
在Motorola Evoke QA4的ARM926ejs处理器上层,运行着特权模式的OKL4 Microvisor,在非特权模式下,则运行着两个虚拟机,一个是Linux虚拟机,运行着各种Linux应用程序(主要是界面程序),另一个BREW虚拟机(运行BREW RTOS)则运行着各种BREW应用(Binary Runtime Environment for Wireless,无线应用运行环境)。