微内核

越大的系统潜在的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 specification(抽象规范)和executable specification(可运行规范)之间。executable specification和implementation(实现)之间。

有两个广泛的方法来进行formal verification: model checking(全自己主动)和交互式数学证明(interactive mathematical proof )。后者须要手工操作。

seL4验证使用的形式数学证明来自Isabelle/HOL,属于后者。

详细来说seL4的形式验证步骤

1. 写出IPC、syscall、调度等全部微内核对象(kernel object)的abstract specification(in Isabelle)

2. 写出如上对象的executable specification(in Haskell)。并证明其正确实现了第一步的abstract specification。利用状态机的原理,abstract specification的每一步状态转换。executable specification都产生唯一相应的状态转换。

3. 写C实现。

通过一个SML写的C-Isabelle转换器,和Haskabelle联合形式证明C代码和第二步的Haskell定义语义一致。

seL4的实现被证明是bug-free(没有bug)的。比方不会出现缓冲区溢出,空指针异常等。还有一点就是,C代码要转换成能直接在硬件上运行的二进制代码。seL4能够确保这个转换过程不出现错误,可靠。seL4是世界上第一个(到眼下也是唯一一个)从非常强程度上被证明是安全的OS。

seL4 is the first (and still only) protected-mode OS kernel with a sound and complete timeliness analysis. Among others this means that it has provable upper bounds on interrupt latencies (as well as latencies of any other kernel operations). It is therefore the only kernel with memory protection that can give you hard real-time guarantees. 从这段英文能够看出,seL4的硬实时性非常强。

实际上OS的verification(验证)早在40年前就開始了,而seL4是振奋人心的,一是它拥有非常强的属性(properties):功能正确性(functional correctness),完整性(integrity)和机密性(confidentiality)。二是这些属性已经被形式验证到代码级别,先是C,如今又到了二进制。

相比于之前人们对于OS的验证,seL4做得更彻底,但正是借助前人的工作,seL4才干如此优秀。


内核细节

seL4的API调用分两步:第一,checking,验证參数,然后确定是否授权运行这个调用; 第二,execute,运行调用。永不失败。

The combined checking phases of all kernel calls are a substantial fraction of the kernel. 看来对内核调用的检查是非常重要的部分。

接下来来了解一下kernel objects

  1. CNodes 用于存放capabilities,给线程权限去调用某个对象上的方法
  2. Thread Control Blocks 表示线程的运行
  3. IPC Endpoints 促进线程间的通信
  4. Virtual Address Space Objects 为一个或多个线程创建虚拟地址空间
  5. Interrupt Objects 让应用程序能够接收和确认来自硬件设备的中断
  6. Untyped Memory 它是seL4内存分配的基石

我们去了解一个OS,它的内存管理是不可缺少的。

内存分配模块能够被单独验证。在又一次使用一块内存之前。全部对这个内存的引用必须要无效。

seL4不动态为内核对象分配内存。内核对象要由应用程序控制的内存区域通过Untyped Memory来创建。这样能够精确控制应用程序使用的物理内存。并且能够做到程序与程序之间物理内存的isolation。

seL4是一个单内核栈的操作系统。在启动时期,seL4会预先为内核须要的内存如代码区,数据区和栈分配内存。

seL4实现了一个capability-based的訪问控制模型。每个用户空间的线程有一个相关联的capability space (CSpace),这个空间包括了这个线程处理的capabilities,也就是说它管理着这个线程訪问的资源。

CNode有一些slot,每个slot须要16字节的物理内存,它能够恰恰保存一个capability。同其它对象一样,CNode必须要通过seL4 Untyped Retype()在合适数量的untyped memory上来创建。

seL4用TCB(thread control block)描写叙述一个线程,每个TCB对一个CSpace和VSpace(它们可与其它线程共享)。一个TCB一般有一个IPC buffer。

seL4提供了消息传递机制用于线程间的通信。

seL4採用256个优先级的抢占式轮转调度机制,当一个线程创建或改动了还有一个线程,它仅仅能将还有一线程的优先级设为比它低或跟它一样。线程优先级用函数seL4 TCB Configure() 和 seL4 TCB SetPriority() 来设置。

开源微内核seL4的更多相关文章

  1. HelenOS

    HelenOS 来源 http://www.helenos.org/ 关于HELENOS HelenOS是一种基于便携式微内核的多服务器操作系统,从头开始设计和实现.它将关键操作系统功能(如文件系统, ...

  2. seL4之hello-2旅途(完成更新)

    seL4之hello-2旅途 2016/11/19 13:15:38 If you like my blog, please buy me a cup of coffee. 回顾上周 seL4运行环境 ...

  3. seL4环境配置

      转载声明:希望大家能够从这里收获知识之外,也能够体会到博主撰写博客的辛苦.个人博客势单力薄,对于强转甚至转载博客访问量高于原文的例子不在少数. 希望能够得到大家关注的同时,也能够稍微体谅一下博主的 ...

  4. 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...

  5. 2014 年最热门的国人开发开源软件TOP 100

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外认可.中国是开 ...

  6. Linux以外的开源操作系统大汇总

    开源操作系统即公开源代码的操作系统软件,它遵循开源协议使用.编译和发布.自由和开放源代码软件中最著名的是Linux,它是一种类Unix的操作系统.Linux可安装在各种计算机硬件设备中,比如手机.平板 ...

  7. AgileEAS.NET SOA 中间件平台 5.2 发布说明-包含Silverlight及报表系统的开源代码下载

    一.AgileEAS.NET SOA 中间件简介      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速 ...

  8. 2014年国人开发的最热门的开源软件TOP 100

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...

  9. 开源的49款Java 网络爬虫软件

    参考地址 搜索引擎 Nutch Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting, ...

随机推荐

  1. Mac 配置几个环境变量

    终端    open -t ~/.bash_profile  打开.bash_profile export PATH=${PATH}:/Users/maxinliang/Android/sdk/pla ...

  2. [HAOI2012]外星人

    题目大意: 告诉你一个数n,求满足φ^x(n)=1的x. 思路: 首先我们可以发现满足φ(n)=1的数只有2,也就是说你得到最终的结果,最后一步肯定是φ(2). 同时,可以发现φ(φ(2^k))=φ( ...

  3. Markdown---锚点使用

    Markdown目前还没有支持文内锚点的标记语法:但是支持html,所以锚点可以通过html语法来实现 使用方法 <a href='#jump'>第一个题目</a> 带有锚点的 ...

  4. JDK源码(1.7) -- java.util.Iterator<E>

    java.util.Iterator<E> 源码分析(JDK1.7) ----------------------------------------------------------- ...

  5. ThinkPHP -- 去除URL中的index.php

    原路径是 http://localhost/test/index.php/index/add 想获得的地址是 http://localhost/test/index/add 那么如何去掉index.p ...

  6. [转]应用服务器ApacheSocketUnixthread

    HttpClient容易忽视的细节——连接关闭 博客分类: java   HttpClient client = new HttpClient(); HttpMethod method = new G ...

  7. Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)

    F. Four Divisors 题目连接: http://www.codeforces.com/contest/665/problem/F Description If an integer a i ...

  8. 2015 百度之星 1001 超级赛亚ACMer 贪心

    超级赛亚ACMer Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1750 Descrip ...

  9. Java乱码解决

    简述 乱码是JAVA开发时经常遇到的问题.主要出现在四种情况: 1.         系统接口之间 2.         POST提交数据 3.         GET提交数据和URL路径 4.    ...

  10. 更新teaching中fdSubjectID为null的老数据

    UPDATE wkwke.tbTeachingV3 teaching SET teaching.fdSubjectID = (                    SELECT fdValue FR ...