微内核
越大的系统潜在的bug就越多,所以微内核在减少bug方面很有优势,seL4是世界上最小的内核之一。但是seL4的性能可以与当今性能最好的微内核相比。
作为微内核,seL4为应用程序提供少量的服务,如创建和管理虚拟内存地址空间的抽象,线程和进程间通信IPC。这么少的服务靠8700行C代码搞定。seL4是高性能的L4微内核家族的新产物,它具有操作系统所必需的服务,如线程,IPC,虚拟内存,中断等。
形式验证
除了微内核,seL4另一大特色是完全的形式验证。
seL4的实现总是严格满足上一抽象层内核行为的规约,它在任何情况下都不会崩溃以及执行不安全的操作,甚至可以精确的推断出seL4 在所有情况下的行为,这是了不起的。
研究发现常用的攻击方法对seL4无效,如恶意程序经常采用的缓存溢出漏洞。
使用面向过程语言Haskell实现了一个内核原型,用它来参与形式验证,最后根据它,用C语言重新实现内核,作为最终内核。 顺便提一句,seL4有两只team,kernel team和verification team,而连接这两个team的是 Haskell prototype。
在用C开发内核的过程中,seL4对使用C进行了如下限制:
1. 栈变量不得取引用,必要时以全局变量代替
2. 禁止函数指针
3. 不支持union
对seL4的formal verification(形式验证)分为两步:abstract specifica