微内核操作系统在嵌入式平台上的应用
扫描二维码
随时随地手机看文章
所谓嵌入式系统是指为特定应用而设计的专用电脑系统,通常执行的是带有特定要求的预先定义的任务。说到嵌入式系统上的操作系统,人们首先想到的是各种经过裁剪的Linux以及WinCE。但是Linux和WinCE本身作为单内核(monolithickernel)操作系统,内核部分过于复杂,并不适用于嵌入式平台。而μC/Os-II和eCos等又过于简单,不能提供完整的功能。而随着微内核(microkernel)操作系统的理论和实现越来越成熟,微内核操作系统开始成为嵌入式平台一个很好的选择。
图1 嵌入式平台操作系统占有率比较图
嵌入式平台对操作系统的需求
嵌入式平台上运行的操作系统一方面会根据嵌入式平台所执行的功能对内核组件进行裁剪,在满足系统的应用功能的基础上去除不必要的部分;另一方面,嵌入式平台对操作系统的可靠性,实时性和安全性特性有很高的要求。
可靠性是指嵌入式设备特别是工业设备中的嵌入式系统经常需要连续运行数以年计的时间而不出差错。可以想像如果飞机中的嵌入式系统在飞机飞行时崩溃重启,会造成多么大的危害。这就要求嵌入式系统上的操作系统的运行完全没有错误,或者在错误出现的时候可以快速自动复位,并且避免在操作系统中使用不稳定的模块。
实时性是指系统能在确定的时间内执行操作并对外部的异步事件做出响应,比如汽车发生车祸时安全气囊必须在极短的时间内打开。一次正确的操作不仅要求逻辑功能上的正确,而且要求完成这些操作所花费的时间在限定之内。实时又分成硬实时和软实时,硬实时要求任务在规定时间内必须完成,这由操作系统来保证;而软实时要求事件响应是实时的,并按照任务的优先级,尽可能在短时间内完成任务。实时操作系统需要调度一切可利用的资源完成有实时性要求的任务,其次才着考虑提高操作系统的整体效率。
随着嵌入式系统越来越多得与外部连接,甚至是通过互联网连接,其安全性也越来越受到关注。比如用掌上电脑进行网上购物的时候,用户的银行帐号信息必须得到严格的保护。安全性具体是指要求嵌入式设备在与外部连接的过程中,其内部的数据不会偶然或被恶意地破坏、更改或者泄露,维持嵌入式系统中信息的保密性和完整性。
微内核操作系统
所谓微内核是一种最小的的计算机操作系统内核,其设计思想是内核本身不提供操作系统的相关服务,而是提供实现这些服务的机制,诸如底层的地址空间管理,线程调度以及进程间通信。一般的硬件都有执行权限级别,比如IntelIA32架构有Ring0到Ring3的特权级,而一般的操作系统至少会用到两个,称之为内核态和用户态。而对于微内核操作系统来说,并非操作系统服务都运行于内核态,而是提供服务实现的机制部分运行于内核态;而操作系统的服务,包括设备驱动,文件系统和用户界面等则作为用户态的服务应用程序运行。
图2 单内核操作系统(左)和微内核操作系统结构比较图
如图2所示,左边的是单内核操作系统的结构示意图。我们常用的Windows操作系统和Linux操作系统都属于这个类型。单内核操作系统的内核提供完整的操作系统服务,比如图中所示的文件系统,进程间通信,进程调度器,内存管理,设备驱动程序等等。而应用程序则运行在用户态,应用程序想要使用操作系统提供的服务,需要通过内核提供的接口,我们称之为系统调用。当应用程序进程执行系统调用时,会陷入到内核的代码去执行,进程此时运行于内核态,处理器处于特权级最高的Ring0状态执行。当应用程序需要的操作系统服务调用完成,进程回到原本的应用程序代码中继续执行,也同时回到了用户态,在Ring3的特权级上运行。
而对于右边的微内核操作系统,操作系统的内核部分被大大简化,只包括基本的IPC机制,虚拟内存映射和调度机制,这些仅仅是用于实现操作系统服务的基本机制。真正的操作系统服务,比如设备驱动,文件系统,应用程序间通信等,通过用户态服务程序的方式实现。当普通的应用程序需要操作系统的相关服务时,通过发送IPC消息给这个服务程序,这些服务程序进行相关的操作,必要时也会通过内核提供的系统调用陷入到内核态去执行基本的操作,并把结果再通过IPC返回给请求服务的应用程序。
微内核操作系统特点
微内核操作系统特有的架构带来的很多优点,这些特点正好匹配了嵌入式平台对操作系统的需求,非常适合于嵌入式环境的应用。
首先是可靠性,按照单内核操作系统的设计,内核包括所有的操作系统服务,其中任何一个服务出错,就会造成整个系统的崩溃。微内核操作系统的设计思想是在内核中留尽量少的东西,只保留实现操作系统服务的最基本机制,而把具体服务的实现放到用户态的服务应用程序中去。这就大大降低了内核崩溃的几率。特别是目前操作系统的许多错误都是因为不规范,并且没有经过严格测试的驱动程序造成的。图3显示了Linux内核代码不同目录的错误分布,显然驱动程序的错误是主要原因。
图3 操作系统中的错误在各模块中的分布
然后是实时性。实时性是指操作系统对响应时间有严格的要求,不仅要求成功执行还要求在规定的时间内完成所有操作。一般会要求操作系统内核是抢占式的,并且内核的代码是可重入的。微内核操作系统内核较小也意味着需要实时化的部分较少。而且微内核之上也可以很方便同时运行实时的程序和一般的非实时的程序。
此外还不能忘了安全性。设计安全系统的准则是最小权限准则,也即所有的部件都只拥有执行相关功能所必须的权限,而没有额外的权限。最小权限准则需要系统的可信计算基础尽可能地小。可信计算基础(TrustedComputingBase)是指整个系统中对安全性最关键的部分,在可信计算基础内的漏洞会危及整个系统的安全性。因为操作系统内核是可信计算基础中最重要的一部分,微内核操作系统内核较小的特点使之在安全性应用方面很有优势。[!--empirenews.page--]
上面说了很多微内核操作系统的优点,但微内核架构也不是完美的,它有一个很大的缺点那就是性能。我们知道对于单内核操作系统,调用系统服务的方式是用过系统调用,需要的仅仅是用户态和内核态的两次转换,每个进程都同时有用户栈和内核栈可以存放执行过程中的信息。而对于微内核操作系统,调用系统服务需要通过发送IPC消息给服务应用程序,服务应用程序通过系统调用完成服务请求后再通过另一个IPC消息把结果返回给调用者。这涉及到了进程的上下文切换,并且由于没有内核栈这样简单的机制,传送消息需要额外的拷贝开销。因此性能对于微内核架构操作系统成了一个很大的问题。事实上第一代微内核操作系统诸如 Mach之上运行的系统的性能让人难以接受。然而以L4为首的第二代微内核操作系统通过合理的架构设计,将IPC的开销相对Mach成数量级级别得减少。有分析表明在L4微内核操作系统之上运行的L4Linux的性能相对原本的Linux只有几个百分点的损失。[5]
结语
综上文所述,微内核操作系统的可靠性、实时性和安全性特点很好得匹配了嵌入式平台对操作系统的需求。随着对微内核操作系统研究的深入,其相应技术将会不断地成熟,性能也会不断地提高,可以预见不久的将来,我们将会见到越来越多的微内核操作系统被应用到嵌入式平台上。