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,虚拟的比原生的更快!