近几年来,L4微内核越来越受到大家的关注,研究和使用L4的人越来越多,但是对于L4介绍的中文资料仍然很少,本文试图收集各种基于L4的操作系统项目,以帮助大家研究学习只用。基本上,各种L4系统可以分为两种,一种是dead system,另外一种就是live system。对于dead system,如果已经丧失了研究的意义,那么也不会收入本列表当中。
关于L4系统,一般来讲,目前公认的L4系统有2个特点,Fast IPC和Sigma0协议。Sigma0是一种基于IPC的内存管理协议,使用Sigma0,内存管理呈现出一种层次状。举例:有A和B两个程序,如果程序B想使用程序A的内存。如果使用Sigma0,那么很容易实现,只要把A设置为B的pager,并提供B的page fault handler程序就可以。在这种情况下,程序A和程序B依然具有不同的Address Space,A和B之间互相隔离(关于这种层次式的内存管理,请参考
The sawmill framework for virtual memory diversity)。 但是如果使用Linux来实现这种模式,除非使用share memory,我想不出其它更好的办法,但是share memory使得A和B之间有的Address Space有了交集,从security和safety两个方面来讲,都不是很好的解决方法。近年来,越来越多的L4系统开始支持一种新的特性-Capability, Capability是为了提高操作系统安全性而设计的,Capability和要访问的Resource之间的关系类似于文件描述符号和文件之间的关系一样,要访问一个Resource,必须通过Capability来进行,Capability里面规定了那么资源可以被访问等安全特性,Capability
允许被grant(从一个用户转移到另外一个用户),总之,Capability是比Access Control List更好的一种增强系统安全性的方法。
Live System
1, PikeOS/ELinOS 德国SYSGO AG公司的商用非开源系统,它提供了很好的Resource Isolation机制,使用ParaVirtualization,让每一个OS Personality运行在一个VM里面,可以支持Java和Ada的应用程序。PikeOS不但具有Spatial Isolation,还具有很好的Temporal Isolation,因此也支持Real-Time application。ELinOS是移植到PikeOS的嵌入式Linux系统(2.4和2.6),支持众多硬件平台和开发板。PikeOS通过ARINIC 653,D0-178B认证,因此被用于军工航天等Safety-Critical和Secure Application。PikeOS是从98年开始开发的,近几年Sysgo已经成为欧洲增长最快嵌入式厂商,ELinOS也成为比较流行的嵌入式Linux开发环境。因为是商用系统,可参考的资料很少。(www.sysgo.com, http://en.wikipedia.org/wiki/PikeOS)
2,Fiasco/L4Env/L4Linux Fiasco是TUD Operating System Group (os.inf.tu-dresden.de)开发的Real-Time微内核,支持L4 V2.0和L4 X.0标准(L4的接口标准),Fiasco是由C++实现的典型L4系统,Fiasco提供众多L4系统调用以及Fiasco的实时扩展,请点击
Fiasco Syscalls。L4Env是一套基于Fiasco的服务程序,包括roottask, sigma0, log, names, dm_phys, l4vfs, l4io, dope, con等各种server,L4Env是一种典型SawMill Multi-Server OS (参考paper
The SawMill multiserver approach),关于L4Env的一些基本情况,请点击L4Env Manual。L4Linux是基于L4Env移植的Linux系统,Linux-2.0, Linux-2.2, Linux-2.4, Linux-2.6前后分别被移植到L4Env上面,目前L4Linux版本更新到2.6.26,L4Linux相当于一种基于“L4 CPU”的Linux系统,对Linux系统的修改都存放在arch/l4目录下面,较好地维持了Linux系统semantic integrity。关于Fiasco/L4Env/L4Linux的设计,请参考Paper
The Performance of µ-Kernel-Based Systems ,这个Paper也是微内核领域最著名的Paper之一。值得注意的是,基于Fiasco和L4Linux,有2个很重要的研究成果,
DROPS实时系统是一种面向服务质量需求的实时系统,可以提供某种程度的保证(guarantee)。L4/Nizza,一种面向Trusted Computing的基于微内核的系统架构,这也是最早利用L4微内核进行security system研究的工作,可以参考Paper : Security Architecture Revisited。此外,他们维护一个IDL for L4,称为Dice。
3, Pistachio/AfterBurner Pistachio是目前最好的L4微内核之一,它由
卡尔斯鲁尔大学系统体系结构研究组和
新南威尔士州立大学操作系统研究小组共同开发的微内核。跟所有的研究机构一样,一开始大家都是单干,卡尔斯鲁尔作Hazelnut,新南威尔士州立做L4/MIPS,L4/Alpha。后来,大家联合起来,做成了Pistachio。不过微内核之上的部分大家一直单干,各有各的系统。卡尔斯鲁尔的Pistachio小组在很长的时间内,一直使用来自TUD的L4Linux作为基于Pistachio的虚拟化技术,直到Pistachio的Afterburner技术出现为止才有了改观。AfterBurning是该小组研发的一种Pre-Virtulization技术(Pre-Virtualization是一种兼顾Para-Virtulization的高性能和Modularity的可维护性而出现的一种尝试,具体来说,是把一种source code可以根据需求编译出不同的系统,同样的Linux,可以编译出适用于Xen的Guest OS,也可以编译出使用L4:Pistachio的Virtual Machine。由于这项工作是在编译阶段完成的,因此诸多优化也可以同时生效,而避免了Para-Virtualization的单一性。比如L4Linux只能应用用Fiasco,XenLinux只适合于Xen等等),因为是通过编译来完成的,所以性能会更好一些。比较有趣的是,他们有一个BurnNT技术,可以支持Multi-Windows,网站上面提供源代码下载。他们关于Device Driver Virtualization有一篇Paper是OSDI的,
Unmodified Device Driver Reuse ,是近几年L4领域一篇少有的佳作。其主要思想是把每一个Virtual Linux当作一个Device Driver Server,从而提供Dependable System.
4, OKL4/Iguana OKL4是L4:Pistachio-Embedded的延续,它目前有
Open Kernel Labs公司维护,但是研究工作基本上都是在
ERTOS完成的。目前OKL4的市场化推广作的不错,已经有很多产品使用了OKL4,包括基于OKL4的OpenMoko,也已经面世。相当于TU-D和Uni Karlsruhe的L4小组,ERTOS规模显得很庞大,他们网站上面的项目也很多,各种项目都有。主要有:1)基本系统维护, OKL4+ Iguana+ Magpie+ Wombat, Iguana类似于L4Env, Magpie类似于Dice,Wombat类似于L4Linux,一一对应。2)Security seL4+L4.Verified,我分不清楚2个项目的目标有什么不同,seL4是security Embedded L4的意思,总之,其核心内容即使使用formal method来验证OKL4 is secure kernel,似乎他们现在已经达到验证机器码的程度,大概步骤就是使用Haskell重新实现OKL4的API,然后使用Isabela进行证明,在这个方面,Kernel Verification,他们作的很成功,这也是他们可以赢得众多工业厂商青睐的一个原因3)Real-Time 既然是面向Embedded的,Real-Time自然是要用;Component-based Microkernel;Power Management,这些也都是目前OS研究的一些Hotopic.
5, Coyotos 首先,Coyotos不是L4,但是Coyotos和L4之间的关系之密切远远胜过了其他微内核和L4之间的关系。比如Fast IPC, Capability-Based OS, IDL。Coyotos是KeyKOS和EROS(Extremely Reliable OS)的改进版本,从EROS的名称或许可以看出,这个系统和以上的系统有些不同,它强调reliable,所以EROS刚开始的时候,被应用于一些军用系统,但是后来发现Synchronous IPC会导致一个Denial of Service的Bug,这个Bug存在于所有基于Synchronous IPC的系统中,当然也包括所有的L4,在Vulnerability In Synchronous IPC design中有详细的描述。当然,现在这个Bug也已经被修正。Coyotos的目标应该是提供具有军用级别的(EAL7 =Evaluation Assurance Level)的microkernel, 它使用一种新的称为BitC(类似于Haskell的Safety Language)来实现这个系统,而且整个系统采用一种类似于OOP的形式(所有的L4系统都是OOP的,Fiasco和Pistachio都是C++的)。Coyotos is still persistant and transactional microkernel OS。从概念上来讲,Coyotos更为先进,Capability也是在该系统上面首次被应用,所以有志于研发3rd Microkernel的不妨多多关注这个Microkernel.
6,Mungi Mungi是ERTOS小组开发的persistant SASOS (single address space operating system), 这个项目已经停止。但是作为第一个利用L4/Microkernel来开发不同类型的OS,仍然可以给我们提供很多新的idea,尤其是persistant,即使到目前为止,应该有值得研究的价值。http://www.coyotos.org/官网上面有很多该Microkernel的设计文档,值得一看。
7, M. D. Bennett 《
A Kernel For IMA Systems》 这是University of York的以为PH.D基于L4尝试构建IMA系统,IMA全程是Integrated_Modular_Avionics,也就是面向航空航天控制的系统,这也是我能找到的基于L4所作的safety critical system的唯一一次尝试,因为我自己是倾向于作这个方向的,所以列举这个Kernel在这里。因为University Of York是safety critical system的大本营,所以这篇paper应该不错。
8, Genode OS Framework. 一个recursive hierarchical constructive os framework. 目前基于L4/Fiasco开发,主页: genode.org