1
关注中国自动化产业发展的先行者!
2024
2024中国自动化产业年会
2023年工业安全大会
OICT公益讲堂
当前位置:首页 >> 资讯 >> 企业资讯

资讯频道

微内核操作系统的发展与 关键技术解析
  • 厂商:和利时集团
  • 作者:王训,周东红
  • 点击数:1631     发布时间:2022-03-31 21:32:38
  • 分享到:
本文针对工业物联网操作系统的特征要求,对最适合的微内核操作系统的技术发展进行了深入调研,并对其中涉及的如任务实时调度、进程间高效通信、高效安全的内存管理、信息安全等关键技术进行了深入剖析。

文献标识码:B 文章编号:1003-0492(2022)03-056-06 中图分类号:TP316

★王训,周东红(宁波和利时智能科技有限公司,浙江宁波315048)

摘要:工业物联网领域的设备具有配置多样的硬件环境特点,这种“碎片化”的特征催生了对应操作系统很强的伸缩性需求,以实现不同底层硬件和功能部件进行抽象,对上层提供统一的编程接口,为工业物联网打造良好生态环境提供基础。

1   引言

工业物联网系统中适配的操作系统特殊的使用场景决定了其除具备传统操作系统的设备资源管理功能外,还具备下列功能:屏蔽工业物联网碎片化的特征,提供统一的编程接口;工业物联网生态环境培育;降低工业物联网应用开发的成本和时间;为工业物联网统一管理奠定基础。由此可见,工业物联网操作系统对实现智能制造、智能工厂等当前热门领域均起着至关重要的作用。

对工业物联网操作的技术要求包括:内核尺寸伸缩性强,能适应不同配置的硬件平台;内核实时性强,以满足关键应用的需要;内核架构可扩展性强,且足够安全和可靠;操作系统核心、设备驱动程序或应用程序均可远程升级;支持文件系统和外部存储;支持远程配置、远程管理等维护功能;支持完善的网络功能等。而微内核架构的操作系统可完全满足上述应用需求,故本文针对微内核操作系统的技术发展及关键技术进行深入研究。

2   微内核操作系统技术发展

2.1 传统操作系统介绍

目前常见的EMO S(嵌入式操作系统)有几十种,但很多数是在物联网兴起之前就有,随着物联网概念的提升,这些操作系统都宣称加入了物联网特性的支持,而专门针对物联网全新研发的嵌入式操作系统还是刚刚起步。

目前主流的嵌入式实时操作系有:Linux及实时性或轻量化的变种、uCOS—II、FreeRTOS、eCos、VxWorks、Nucleus、ThreadX、QNX等。它们主要特点是面向控制、通信等领域的实时性,轻量化,可定制裁剪,部分安全。但很少有一个操作系统同时拥有上述所有特点,比如具有强实时性的,可能安全性上有所减弱;具有安全特性的,可能在性能上做出牺牲等。

如今几乎所有的操作系统都声称有一些物联网连接功能,现有的操作系统大多数符合下列属性:使用内存少、电源效率高、模块化可配置通信堆栈,对特定的无线和传感器技术提供强有力的支持。一些项目注重物联网安全,许多非Linux操作项目专注于实时确定性(Real-time Determinism),这也是工业物联网的一个要求。

2.2 微内核操作系统的发展历程

内核按照软件架构可以分为微内核(Micro kernel)和宏内核(Monolithic kernel)两种概念。

微内核结构是由一个非常简单的硬件抽象层和一组比较关键的原语或系统调用组成。这些原语,仅仅包括了建立一个系统必需的几个部分,如线程管理、地址空间和进程间通信等。微内核的目标是将系统服务的实现和系统的基本操作规则分离开来。例如,进程的输入/ 输出锁定服务可以由运行在微内核之外的一个服务组件 来提供。这些非常模块化的用户态服务器用于完成操作 系统中比较高级的操作,使最内核部分的设计更简单。 一个服务组件的失效并不会导致整个系统的崩溃,内核 需要做的,仅仅是重新启动这个组件,而不必影响其它 的部分。微内核将许多OS服务放入分离的进程,如文件系统、设备驱动程序,而进程通过消息传递调用OS服务。

宏内核架构的特性是整个内核程序都是以内核空间(Kernel Space)的身份及监管者模式(Supervisor Mode)来运行。相对于其它类型的操作系统架构,如微内核架构或混内核架构等,会附加一些后台服务以及系统调用,通过这种方式来实现各种操作系统服务,如进程管理、共时(Concurrency)控制、存储器管理等。即使有的宏内核将其运作从整体性运作拆分成几个服务模块,并让各模块各自运作,其操作系统的代码依然是高度紧密的,很难修改成其他类型的操作系统架构。此外,所有的模块也都在同一块定址空间内运行,倘若某个模块有错误,运行时就会损及整个操作系统运行。Linux就是比较典型的宏内核操作系统。

轻量化、可裁剪,适用于工业现场的稳定性和安全性等指标,意味着微内核架构是个不错的选择。

在微内核刚兴起时,学术界普遍认为其优点是显而易见的:

(1)支持更加模块化的设计;

(2)小的内核更易于更新与维护,bug会更少。正如大家知道Windows的死机很多是由D evice Drivers造成的。如果把它们移出内核,它们中的bug很可能就不会造成死机;

(3)许多模块的bug可被封闭在其模块内,更加易于调试。如果文件系统、内存管理和设备驱动成为一个个独立的进程,则会让Kernel维护更加高效,也十分有利于缩短整个操作系统的研发时间。

基于上述原因,很多学术研究人员和软件厂家开始尝试使用微内核的概念设计操作系统。第一代微内核操作系统的代表作品是Mach,由卡内基梅隆大学(CMU)设计,Mach发布了2个版本,主要完成了以下工作:从概念上验证了微内核技术的可行性;在多处理器计算机上进行移植验证了微内核在多处理器计算机上的运行;使用共享内存机制完成进程间通信(InterProcess Communication,IPC),从而提高了IP C的效率。后期甚至微软也有所动作,在设计Windows NT时,他们把UI (User Interface)从Windows kernel中整个拿了出来。但是这一热潮很快就冷了下来,原因就是性能问题。微软在Windows NT后续版本中,又把部分底层UI放回了Windows kernelo正如在Java刚开始流行时,由于其具有许多C/ C++没有的优点,很多人认为它会很快取代C/C++成为第一编程语言。但直至今天也没有发生,其中一个重要原因就是Java程序的性能落后于C程序,至今还限制着它在许多场合的应用。

第一代的微内核操作系统的性能,包括Mach在内,远不及宏内核操作系统。所以大多数人又回到传统技术中去了。但在九十年代后期,微内核迎来了其生命中的第二春。一些研究人员认真分析了微内核系统性能差的原因,指出其性能差并非由根本内在的因素造成,而是设计实现的失误。为证明其论点,他们设计并实现了几个性能远超第一代的微内核操作系统,我们把它们称为第二代微内核系统。其中的一个代表作品就是德国计算科学家Jochen Liedtke设计的L4OL4不再是传统Unix操作系统的简单重构,而是一种全新的设计。L4微内核高性能的关键就是使用了同步IPC技术,并且使用寄存器传递消息,而不是内存拷贝。基于L4微内核,Jochen Liedtke提出了一种构建服务器模式操作系统的方法,整个系统服务由一系列服务器组成,比如内存管理服务器、文件系统服务器等,每个服务器在对外提供服务的同时也可以调用其他服务器提供的服务。

由于第二代微内核设计为了追求高性能,线程ID是一种全局共享静态资源,任何任务中的线程都可以通过线程ID向其他服务器线程发起服务请求,造成了安全上的隐患。第三代微内核应运而生,引入了Capability机制。任何操作系统内核对象,比如线程、中断和内存等,都不能直接进行操作,而是通过一种类似对象引用的机制即Capability进行调用。目前,比较经典支持Capability机制的第三代微内核seL40seL4是在第二代微内核L4基础上发展而来,因而其不仅继承了L4微内核高性能的优点,还具备基于断点的IPC机制。这种机制最大的特点就是使用了能力空间的概念,进程在使用IPC请求系统服务时必须具备相对应的能力,并持有不可伪造的令牌来表示拥有请求某种服务的能力。令牌可以被复制,可以被转移,还可以通过IPC进行传输oSeL4是一个操作系统微内核,也就是说,seL4本身不是一个完整的操作系统,它提供很有限的API,没有提供像传统的操作系统Linux那样的内存管理、页内外交换、驱动程序等oSeL4微内核设计针对实时应用,可潜在应用于强调安全和关键性任务的领域内,如军用和医疗行业。研究发现常用的攻击方法对seL4无效,如恶意程序经常采用的缓存溢出漏洞。

正因为微内核原生的诸多优势,目前其内核架构越来越被人们重视,被认为其是一种面对未来的操作系统架构。互联网巨头公司,同时也是操作系统研发的龙头公司Google,在其以Linux宏内核为操作系统内核开发的Android操作系统成功以后,它已经在积极地开发全新内核的操作系统fuchsia,这一操作系统将不再是Linux宏内核系统的衍生版,而是真正意义上的微内核操作系统。并且,它将是一款基于权能安全机制的操作系统。无独有偶,国内通信巨头华为公司,在完成自主研发的处理器芯片麒麟系列以后,其自主研发的微内核架构操作系统鸿蒙系统也正式推向市场。从全球性公司研发目标中可以看到,微内核是被当代各大全球性公司认可的内核架构,也是未来非常有前景的一种内核架构,其发展将会越来越标准化0而且,据称无论是fuchsia系统还是鸿蒙系统都将会大大发挥微内核中内核服务分离的优势,它将在多种平台上运行,包括智能手机的嵌入式设备和个人PC,并且还将兼容Android系统上的各种应用。这种高分离性是微内核架构的优势,同时也是宏内核架构为何始终无法将PC和智能移动终端进行统一的一大原因。从宏内核U NIX发展的起点——标准化和轻便型,到Google最终选择摒弃宏内核而使用微内核来开发下一代全新操作系统,不难看出,微内核的思想是非常符合包括工业物联网在内的未来社会发展的需要。在未来,微内核发展有望开发出颠覆传统操作系统环境,将PC、移动智能终端以及嵌入式设备进行统一的,具有跨时代意义的微内核操作系统[1]

3   微内核操作系统关键技术解析

3.1 实时任务调度技术

为了满足工业物联网产品应用需求,该微内核操作系统支持两种任务调度策略:基于优先级的抢占式调度策略、时间片轮转策略,并支持多级优先级配置。

应用任务可以通过接口创建另一个任务,并设置该任务的优先级。出于安全性考虑,当一个任务创建另外一个任务时,只能把另外一个任务优先级设置不高于该任务,即任务不能创建比自己优先级还高的子任务。

基于优先级的抢占式调度策略采用基于位图的调度算法,该调度算法将每个任务的优先级映射到了一个调度的二维表,该二维表用32个字节表示,每个字节8位,一共256位,共代表256个优先级,如图1所示。

image.png

图1 微内核操作系统任务优先级示意图

将操作系统所有处于Ready状态的任务按照上 述关系映射到该优先级位图中。操作系统在每次进 行任务(假定其优先级为prio)调度时,首先从位图 中选择出优先级最高的任务,选择过程通过上图中 的ScheduleRdyGrp映射优先级最高组Y,然后通过ScheduleRdyBitMap进行映射确定在Y组中X列中的最高 优先级。任务就绪时需要计算其对应的ScheduleRdyGrp和ScheduleRdyTbl[n]值,其具体算法为:ScheduleRdyGrp |= ScheduleRdyBitMap[prio>>3]; ScheduleRdyTbl[prio>>3] |=  ScheduleRdyBitMap[prio&0x07]; 上面所述的X、Y映射关系表OSPriHighMap,伪 代码如图2所示。

image.png

图2 微内核操作系统基于位图的优先级映射关系

这样无论系统负载高低,都能够使系统任务调度切换时间复杂度相同,从而提高系统调度的确定性。查询任务就绪态下的优先级可以最终抽象为如下表示。对于相同优先级的任务进行采用轮转调度算法,每个优先级任务对应一组任务队列,依次进行轮转调度。

Y = OSPriHighMap[ScheduleRdyGrp]; 

X = OSPriHighMap[ScheduleRdyTbl[Y]];

prio = Y<<3 + X;

3.2 进程间高效IP C通信技术

为了解决进程间通信效率问题,微内核操作系统设计了一种基于用户空间共享内存的进程间通信机制,该机制采用进程间内存授权管理的方法,建立了高效的消息队列、事件、信号量通信机制。通过该技术的应用,能够有效避免进程通信过程中内核空间与用户空间切换频繁问题,并提升进程间通信安全性。

seL4微内核提供了线程间传递消息的机制,这个机制也用来传递用户程序与内核提供的服务之间的通信。消息被传送到同步或异步IPC端点,这些端点由其它线程约定,其它消息类型由内核[2]

每个消息包含一些消息字,还可以包含一些句柄。消息的传递是尽量通过通用寄存器来完成,但是硬件平台的通用寄存器的数量是十分有限的,在寄存器放不下的就要放到被称为IPC缓存(IPC buffer)的内存中,每个线程控制块有一个IPC通信用的缓存区buffer,用来在IPC或内核对象调用时传递额外的参数,所谓额外的参数,即无法存储在寄存器里的数据,不同的平台可以使用的寄存器不同,所以这个定义与平台相关。每个IPC消息包含一个标识,其数据结构包含标签label、消息长度length、句柄数量extraCaps、接收句柄capsUnwrapped等4个字段。消息的长度和句柄的数量决定了消息寄存器的使用及发送线程想要传递的句柄的数量。内核不解释label字段°label字段只是被当作消息的第一个数据被传送。用户程序可以对label字段进行自定义°capsUnwrapped字段只被接收方使用,用来指明哪个句柄被接收。

同步端点允许少量的数据及句柄在线程间同步传递。所谓同步,即信息发出去后发送者要等待应答。如果发送者不是要发送的状态,而且接收者正好处于接收状态,这个消息就不被传递。如果发出IP C同步请求,没有接收者准备好,则阻塞,排队等待,直到有接收者,则消息发送给第一个准备好了的接收者。如果发出等待请求给内核,但没有线程向它发消息,则阻塞并排队等待请求,直到有发送者,就接收第一个发送者的消息。同步消息中可以有句柄,消息中的句柄必须有Grant权限,没有Grant权限的句柄,不会随消息的传递而传递。句柄存在于消息的caps字段,caps中的每一项被当作CPTR解释为线程句柄空间中的一个句柄。消息中句柄的数量存于消息标记(message tag)中的extraCaps字段中。基本的IPC概念是端点(EndPoint)之间的任务。端点是一个内核对象,其中包含了一个线程队列和一个状态(state)标志,该标志用来记录队列中的线程是处于要发送(Send)消息的状态,还是处于等待接收消息(Wait)的状态。它扮演了一个“一个或多个发送者”与“一个或多个接收者”之间单向通信的作用。这个全局的标识符是不暴露给参与IPC的各方的,无论是发送者,还是接收者,都是使用一个本地端点地址来工作。一个端点上,可能有多个线程用来发送或接收消息。当一个线程对调用端点发送与接收消息时,内核将扮演在它们之间传递消息的角色。没有伙伴的线程,即仅有发送任务无接收任务,或仅有接收任务无发送任务,将被挂起(suspend),算法中并未规定,哪些线程首先被唤醒(resume),一般是先进先出(FIFO)。

异步端点(Asynchronous EndPoint,AsyncEP)允许非阻塞异步发送消息,但异步消息中不能有句柄。

因为同一时间一个端点(EndPoint)只能接收一个消息,而一个服务者希望为N个客户端提供服务,于是每个客户端都拿到了这个端点的一个引用,内核提供了一个标记(badge)的办法,有标记的句柄就是标记句柄(badged endpoint capability)。每个标记由产生它的服务线程(Server)定义,因为这个句柄就是服务线程通过C Node_Mint()之类的手段得到的。

在一些应用场景中,一个动作涉及到多个请求方,如果这时权限符合配置策略规则,这些请求任务就会同时发出同样的消息,可是,只有一个句柄是接收方所调用的,所以作为接收者,当接通收到消息后,要检査一下标记,看是哪个请求方标识。也就是作为服务接收者在解析服务请求时,要通过标记的方式检査一下来源,检测消息发送者的合法性。内核提供了标识(identify)系统,可以通过査看标识的方式追溯消息来源。

3.3 安全内存管理技术

为了解决工业嵌入式产品软件内存异常带来的安全故障问题,在微内核操作系统软件架构中利用内存管理单元硬件,建立内核与用户内存空间隔离的管理机制。该机制能够将内核空间与用户所占用的内存空间、用户空间的进程与进程之间内存隔离。经验证测试,该技术能够有效解决某一软件模块内存溢出所带来的整体系统内存数据故障问题,从而提高内存管理的安全性。

微内核架构下不为内核对象动态分配内存,内核对象必须在用户程序控制的内存区中通过U ntyped Memory句柄创建。这个机制可以显式地控制应用程序能够使用的内存数量,提供应用程序间的内存隔离。在系统启动的时候,先预申请一块内存给内存用,包括代码、数据、栈等段。余下的内存留给初始化线程,初始线程启动时,还有一些其它的内核句柄传给它。新创建的原始内存对象都是最初的这个原始内存对象的子对象。用户态程序利用Untyped_Retype()创建对象,得到的是句柄,通过这个句柄进行后续操作。把虚拟地址管理、虚实映射管理、物理内存(原始内存)管理等分开,每一部分都允许应用程序自己决定如何使用的内存管理策略,对于应用程序申请内核对象,在客户程序间分享授权信息。内核也提供原始内存重用机制,重用一段内存区域是允许的,但要求那段原始内存上没有摇摆的引用,即没有别的句柄指向这段内存空间,跟踪对象的引用、继承关系。其不允许页表共享,但允许页共享。

内核启动过程建立虚拟地址与物理地址的映射关系。以ZYNQ7000芯片为例,操作系统内核建立的地址映射关系如图3所示。

image.png

图3  微内核操作系统虚拟地址与物理地理映射实例

线程(Thread)是程序执行单位,程序通过管理线程来管理CPU时间及程序执行的上下文环境。线程管理数据结构是线程控制块(Thread Control Block, TCB)。每个线程控制块都有一个句柄空间cspace和虚拟地址空间vspace与之关联。虚拟地址空间vspace可以同时被多个线程共享°vspace分配虚拟内存时,首先选择一个合适的虚拟地址,然后找到一块合适的物理内存,接下来标记物理内存被使用,然后将虚拟地址返回给用户ovspace实现的虚拟内存,类似于Linux系统的虚拟内存映射(mmap),所以当申请的空间小于4kB时会分配4kB空间。

微内核操作系统的内存共享是基于页的,要共享页必须将页加入对应程序的页表。一个页被N个程序加入自己的页表,这个页就是共享内存。cspace用于创建每个内核对象对应的句柄空间。每个内核对象必须对应一个句柄空间,每次创建内核对象,必须先分配句柄空间,App随后创建并初始化alloc.cspace。

4   典型应用

和利时集团基于微内核架构已经设计出自己的面向工业物联网的微内核操作系统,并成功应用于公司的DCS、SIS、PLC、MC等系列产品,目前已经支持了ARM.MIPS.POWERP等主流嵌入式处理器平台,并分别在基于ZYNQ7000系列芯片、龙芯2K1000系列芯片、MPC83XX系列芯片的控制器硬件基础上,完成了操作系统的开发与验证测试工作。

具体的微内核操作系统的设计方案如图4所示。

image.png

图4 基于微内核操作系统的应用开发分层图

5   结论

本文通过研究微内核操作系统的技术发展过程及关键技术,得出其具备易于扩充、易于移植、可提高系统的可靠性、提供多种操作环境、适宜于分布式计算、有助于多处理器系统的实现、支持实时服务等特点,因此其是当前完全适用于工业物联网应用场景的轻量级操作系统。

作者简介:

王训(1983-),男,北京人,高级工程师,学士,现就职于宁波和利时智能科技有限公司,主要研究方向为工业自动化软件。

周东红(1970-),男,浙江东阳人,高级工程师,博士,现就职于宁波和利时智能科技有限公司,主要研究方向为工业自动化控制及工业物联网。

参考文献:

[1]彭星海.基于X86架构的微内核操作系统的研究和实现[D].成都:电子科技大学,2020.

[2]林禹清.面向控制领域的微内核系统服务的设计与实现[D].成都:电子科技大学,2019.

[3]钱振江.微内核架构内存管理的形式化设计和验证方法研究[J].电子学报,2017, 45⑴:251 -256.

摘自《自动化博览》2022年第三期

热点新闻

推荐产品

x
  • 在线反馈
1.我有以下需求:



2.详细的需求:
姓名:
单位:
电话:
邮件: