更全的杂志信息网

基于seL4的分区操作系统健康监控设计

更新时间:2009-03-28

0 引 言

嵌入式系统具有资源相对有限、专用性强、实时性高等特点[1,2],因此应用于嵌入式系统的操作系统必须满足系统内核小、支持实时多任务、具有存储区保护功能以及可裁剪等要求。L4是基于微内核构架的操作系统内核[3],澳大利亚研究组织NICTA(national ICT australia,australia’s information communications technology)在L4的基础上开发出一个新的微内核操作系统版本Secure Embedded L4(以下简称seL4)。seL4是第一个通过形式化验证[4,5]的微内核操作系统,文献[6]通过形式化验证的手段,验证了其内核的功能的正确性和可预测性。形式化验证所带来的安全性保证使其在多领域内有广阔的应用前景。在提供安全性的同时,seL4还是现在速度最快的微内核操作系统[1]

就操作系统的健康监控来说,国内已有了一定的研究基础。比如杨晓宁等在满足ARINC653标准的分区操作系统中实现了一种基于表驱动,按照系统状态和故障具体类型对故障进行分级处理的健康监控机制[7]。NICTA的说明文档对seL4的总体架构和设计思路已经有了比较完善的理论基础,然而由于其刚开源不久以及微内核自身的特性,在其实际应用上并不尽如人意。同时对基于seL4的分区操作系统来说,国内目前处在利用seL4微内核搭建操作系统的阶段,而对基于seL4的分区操作系统健康监控的研究则处于基本空白的情况,因此需要我们对其进行研究。本文的目的就是设计与实现基于seL4分区操作系统的健康监控方法。

主壁厚2.0 mm保持不变,考虑到侧壁过厚会引起零件外观问题(如缩痕),分析时侧壁厚采用三种状态:0.9、1.2、1.5 mm,加强筋厚度及高度保持不变,注塑成型参数保持不变,塑料件翘曲变形分析结果如图4所示。

现场应用过程中水处理药剂的质量浓度为50 mg/L,加药点位于CDFU出口端。取加药前后出水水样,分别在室温及80℃加热3 h后观察水质情况,如图10所示。

1 seL4微内核

内核经过精简之后的部分叫做微内核,也就是说微内核是内核的一个子集[8]。从结构来看内核可以分为宏内核(monolithic kernel)和微内核(micro kernel)两大类。在众多常用的操作系统中[9],除MINIX和Mach等少数系统外,包括Unix、Linux等在内的众多操作系统都是采用的宏内核[10]。它们之间最大的差别在于宏内核倾向于将尽可能多的功能放在内核中实现,而微内核则仅在内核中完成操作系统最基本的功能。基于这种形式,微内核可以高效地完成它能提供的服务,而且可移植性较强。

2009年,NICTA开发出了针对实时应用的微内核seL4,它是世界上首个通过形式化验证的微内核操作系统。为了达到性能要求,seL4微内核坚持从设计上来达到小的目的,只提供了进程通信、虚拟地址空间、权能以及线程等功能,结构如图1所示。

  

图1 seL4微内核操作系统结构

在开发出seL4之后,NICTA又进一步开发了一个构建于seL4微内核的示例操作系统RefOS(reference opera-ting system),目的是为了提供一个在seL4上设计操作系统的参考。在对seL4微内核的研究过程中,有很大一部分都是对于RefOS进行的研究。RefOS在seL4微内核的基础上实现了几个原本不具有的服务(server),也就是上层应用程序所能使用的接口,而对上层应用程序则屏蔽了下层的seL4微内核实现的具体细节,大致层级结构如图2所示。

分区级健康监控在系统分区:当一个错误发生但无法调用进程级错误处理程序时,则唤醒分区级错误处理程序。该程序自行维护一个先进先出错误队列逐一处理错误,同时在操作系统设计时便维护一个健康监控表,分区级的错误信息和处理办法都存于表中。错误处理程序对每个错误的处理办法都是查表,若无表项,则上报至模块级错误处理程序;若有表项,则根据表中的处理办法进行处理,然后将错误信息发送给错误信息报告模块和错误信息记录模块。

  

图2 RefOS的结构

超融合架构是一种集成了虚拟计算和存储资源的信息基础架构。在该架构环境中,同一套单元设备中不但应用了计算、网络、存储和服务器虚拟化等资源和技术,而且多套单元设备可通过网络聚合,实现模块化的无缝横向扩展,形成统一的资源池。超融合架构由传统虚拟化演化而来,经历了融合虚拟化阶段,和传统虚拟化解决方案相比,超融合架构使用工业标准的x86服务器作为计算和存储资源载体,通过软件定义的方式来规划底层硬件,然后向用户交付需要的资源,具备了管理简单、类似积木堆栈方式弹性扩充等特性,在扩展性、灵活性、运维和成本方面都具有一定优势,是目前在各型数据中心广泛应用的技术架构[6]。超融合架构演化进程见图3。

2 健康监控模块设计

2.1 健康监控

ARINC 653(航空电子应用软件标准接口)是一种软件空间和时间上的规范,在安全关键设备的实时操作系统(RTOS)划分。它允许在一个集成的模块化的航空电子设备架构的背景下,在相同的硬件上的不同的软件层次上的多个应用程序的主机,它是数字的飞机和飞行模拟器的ARINC 600标准系列的一部分。航空电子应用软件标准接口的核心概念是分区,这也是我们要在seL4的基础上搭建符合ARINC653标准的分区操作系统的原因。

ARINC653标准规定,健康监控主要包括了以下功能:定义并分类航空电子系统中所发生的错误,同时为其设置恢复策略,以达到对系统运行状态进行监控的目的。健康监控通常可以分为3个层次,进程级、分区级和模块级:

根据ARINC653标准,健康监控模块应分为4个部分:截获、处理、报告、记录。健康监控的总体架构依据错误的级别来划分,如图3所示。

(2)分区级的错误主要有:分区初始化(配置)错误、错误处理进程错误、进程切换错误等。

(3)模块级的错误主要有:模块初始化(配置)错误、系统特定模块错误、分区切换错误等。

根据错误发生时的系统状态,健康监控模块可以对错误级别进行划分,并执行相应的错误恢复策略。对于分区级、模块级错误,健康监控系统分别会调用相应级别的健康监控任务来实现对错误的恢复策略,而进程级错误的恢复则被进程级健康监控来执行。健康监控模块是航空电子标准接口提出的要求,一个完整的操作系统必须维护一个健康监控系统,以保证系统的安全性和可靠性。

2.2 模块总体设计

(1)进程级的错误主要有:时间片用完、进程自身报错、溢出、除零、非法的系统调用、栈溢出、内存保护等。

  

图3 健康监控总体架构

进程级健康监控在应用分区:根据ARINC653标准,进程的错误处理程序是由应用程程序员编写的,操作系统只负责唤醒错误处理程序,而错误处理程序只负责重启或者关闭进程。进程级的健康监控程序将调用错误处理程序写成系统调用,当发现进程错误信息时,进程级的健康监控程序使用这个系统调用,调用进程的错误处理程序,然后将错误信息发送给错误信息报告模块和错误信息记录模块。

本文选取长春市交警支队2013年—2017年共5年的统计数据,其中含交通事故统计情况、事故甲乙双方车辆类型统计情况、肇事者个人信息统计情况,由于研究不同问题指标不同,样本量也不同,具体样本数量在文中标注。

2) 巷道本身的围岩特性、较高的水平地应力、相邻工作面采空区侧向支承压力影响及底板未采取加固措施是造成五阳矿76采区2号专用回风巷底鼓的主要因素。

模块级健康监控在系统分区:与分区级健康监控类似,当一个模块级错误发生时,唤醒模块级错误处理程序,该程序同样自行维护一个错误队列以及一个健康监控表。

每个级别的错误信息报告模块都单独实现,在获取错误信息后直接在屏幕上输出。而错误信息记录模块则是3个级别共有,将错误信息记录文件放在进程服务器的一个单独的文件中,每当处理错误信息时都将错误信息写入到这个文件并保存。

系统总共分为4个模块:错误截获模块、错误处理模块、错误报告模块以及错误记录模块,相互之间的关系如图4所示。

在这些服务中,最重要、最基本的服务就是进程服务,在进程服务的基础上构建了其它部分的服务。进程服务作为初始线程来启动运行,并且负责启动系统的其它部分,例如设备驱动、文件服务器、终端程序等其它部分的服务,这些都是由进程服务来启动的。进程服务在seL4微内核操作系统上可以不依赖其它任何的组成部分独立地运行,这就在一定程度上避免了死锁。进程服务器还实现了对于匿名内存空间的地址空间接口,并同时管理这些内存[11]

  

图4 系统功能关系

2.3 错误截获模块设计

上面提到的几种典型错误中,除零错误、进程自身报错和内存保护错误属于进程级的错误,调度程序错误数据分区级的错误。

(1)除零错误:seL4微内核基于ARM v6架构,在其汇编层面没有除法指令,只能由操作系统完成除法操作。一旦发生除零错误系统就发生死锁,检测软件层面的除数寄存器判断除数是否为零。通过对汇编代码的追踪,找到操作系统对于除零操作的处理函数,对该函数进行修改。

(2)进程自身报错:操作系统给应用进程提供接口,使得进程直接将错误信息传递至操作系统,操作系统再调用该进程错误处理模块进行处理。

通过这样的三个问题,实际上对学生的观察能力、想象力、语言运用能力、语言表达能力、写作能力都有所训练。学生通过观察并结合生活常识会发现这个故事发生在秋天的公园当中,通过对菊花的观察可以想象出一系列描写花的词语,通过自己的想象力可以形成一个比较完整的故事。

1.2.1 样品的前处理 As、Hg的前处理方法:将样品准确称取0.500 0 g,加入15 mL混酸(高氯酸:硝酸=1:4),于230℃电热板上进行硝化,待烧杯中白烟冒尽,则加入超纯水(少量多次)赶酸,直至剩余溶液清亮。同法制备2份空白对照。

(3)内存保护错误:进程向一处不可写的位置写入数据,操作系统获取到这一错误后传递错误信息,修改操作系统对于内存保护的函数,并将该危险进程关闭。

(4)调度程序错误:调度程序与错误截获模块之间互发消息进行通信,并且基于时间服务器的调用来实现。在调度程序中加入两个信息传递给错误截获模块程序,在一段时间内若只收到其中一个,说明调度程序出现问题,错误处理模块将其重启。

我们对一些操作系统中的基本错误在RefOS上进行实验并设计如下:

2.4 错误处理模块设计

错误信息首先截获到错误信息发送程序中,无论是什么分级的错误,错误信息发送程序都会将该信息添加到错误信息队列的队尾。根据队首错误的分级,错误信息发送程序分别进行以下行为:

若是进程级错误,则错误信息发送程序直接通过系统调用,调用错误处理进程处理错误,并将队首错误移出队列。若是分区级或模块级错误,则错误信息发送程序直接将错误信息发送到相应级别的健康监控表中,相应的健康监控表查询错误的处理方式后将处理方式作为返回值返回给错误信息发送程序,然后错误信息发送程序根据返回值调用系统调用,重启或者杀死出错的进程,并将队首错误移出队列。

在加入了健康监控模块后,在raise函数中插入输出“div 0”的语句,在错误信息发送程序处理完成后输出“received a div0 fault”。此时除零错误能正常处理并输出语句,最终系统能回到命令行继续运行。实际运行结果如图6所示,与预期结果相同。

2.5 错误报告模块设计

我们通过错误信息发送程序来实现错误信息报告模块。若传来进程级错误信息,错误信息发送程序通过系统调用唤醒该进程的错误处理程序,当调用成功时会报告处理了一个进程的错误。若传来分区级错误信息,该错误信息的报告则在错误信息移出队列时进行,根据相应的处理办法来报告错误。模块级错误信息的报告办法与分区级类似,也是在错误信息移出队列时进行。每个错误在处理时错误报告直接以文字形式输出在终端上,提示操作系统的使用者,然后将错误信息上传至错误记录文件,记录错误信息。

2.6 错误记录模块设计

我们在操作系统中写一个错误信息记录文件,当错误处理的信息由错误信息发送程序传来时,根据错误信息的种类、分级和处理办法进行记录,以便留给操作系统程序员日后维护系统时使用。记录的方式为二维数组a[255][3],其中a[m][0]用于记录错误种类,a[m][1]用于记录分级,a[m][2]用于记录处理方法,全都以编码的形式实现。

3 实现与测试

3.1 除零错误

seL4微内核中的除法是通过软件来实现的,当有除法指令传来时,seL4微内核在buil/arm/imx31/div/下的arm-linux-gnueabi文件中调用了应用程序二进制接口(embedded application binary interface,EABI),通过-objdump-d div.bin指令查看这个文件,就是操作系统对于除零的软件实现。当除零发生时,系统首先会在全局中搜索raise函数,随后跳转指令会使raise函数会无条件向自己跳转形成了死循环,因此在seL4上发生除零错误时系统就会崩溃。于是我们把raise函数注释掉,再把它写到别的文件里,这样每当发生除零错误时,就能知道系统将跳转的位置,然后就可以在该位置写上除零错误传递的信息了。

面瘫(PFP),即周围性面神经炎,是临床常见的多发性面部神经病变,是茎乳孔内急性非化脓性炎性病症。临床症状主要是蹙额力减弱、眼睛不能完全闭合、口角下垂等,对患者的生活造成很大影响。而难治性PFP是因多种疗法治疗效果差迁延(3个月以上)所致,是一种难治性病症。穴位针刺是治疗面瘫常用方法,报道治愈率在60%~70%[1]。近年来,NMES在临床上逐步应用开来,在改善中枢神经功能和重塑周围神经功能方面效果确切。本文主要探讨上述两种方法治疗难治性PFP的临床效果,报告如下。

在处理的过程中还使用到了RefOS提供的远程过程调用(remote process call,RPC)机制,用于调用其它程序中的函数。在这个过程中相互调用的二者并不是一个进程,原本这样的调用在高级语言层面中是做不到的,但是RPC实现了进程间的互相的功能调用,并屏蔽了实现细节,从而为开发者提供了方便。RPC的底层实现是进程间通信(inter process communication,IPC)机制,即seL4微内核提供的基于端点Endpoint的Send/Receive消息模型。接下来在错误信息发送程序中对错误类型进行判断,由于错误类型是除零错误,则直接停止该进程。将该错误挂到错误队列的队尾,移出时调用该进程的错误处理程序。对还没有加入健康监控模块的系统进行测试,让系统将执行1/0的除法,此时发生除零错误,系统停止运行,结果如图5所示。

在本文的设计中,健康监控表以静态的方式放在操作系统中,传入的参数为错误信息的序号,传出的信息为错误的处理办法。不管是错误信息还是错误处理办法,都是在操作系统启动时就存放的,外部程序没有修改的权限。健康监控表以二维数组a[m][n]的方式存放,数组的下标m代表错误的序号,a[m][2]中存放的数字代表处理方法,其中0表示不作处理,1表示重启出错的程序,2表示杀死出错的程序。若传入的错误种类在表中查询不到,则返回的处理办法为闲置并记录错误,返回值为3。本文中先将错误的处理办法归结为这几类,在今后的研究中可以逐步进行完善。

  

图5 原除零错误处理情况

  

图6 除零错误处理情况

3.2 进程自身报错

进程通过操作系统提供的健康监控接口将错误信息报告给进程服务器,将进程服务器里的进程错误信息(主要包括错误种类和进程ID)发送给错误信息发送程序。在错误信息发送程序中,先对错误类型进行判断,由于错误类型是进程自身报错,因此直接调用该进程的错误处理程序。将该错误挂到错误队列的队尾,移出时调用该进程的错误处理程序。

原始seL4操作系统不具备进程自身报错功能,在加入了健康监控模块后若处理了一个进程自身报错,则输出“received a process fault”,然后调用进程的错误处理程序。将hello_word程序作为报错程序,在apps/hello_world/src中存放文件名为a.c的程序作为错误处理程序,功能为输出一行“process handler”。此时遇到进程自身报错时能正常处理并输出语句,最终系统回到命令行继续运行。实际运行结果如图7所示,与预期结果相同。

作为带铝硅涂层的先进高强钢产品,Usibor® 2000较先前的Usibor® 1500强度增加了30%以上,最高可达2000兆帕;同时具备优秀的抗腐蚀性、制作复杂零件时冲压后无回弹等特性,能够助力汽车制造商在合理成本范围内实现车辆减重目标,相比目前的热成形解决方案,Usibor® 2000能够实现10%~15%的减重效果。

  

图7 进程自身报错处理情况

3.3 内存保护错误

一般对于操作系统而言,0x00000000到0x0000000c的内存是不可读写的,向NULL中写入内容则会引发内存保护错误,seL4中也是如此。在/src/fault_handler.c文件中可以找到操作系统对于内存保护的相关代码。当要对内存进行操作时将请求的操作种类先发送给dispatcher,其中结构体f的意义为权限请求,write表示请求进行写操作,而dispatcher通过查询文件的权限信息将其返回为值W_PERMISSION_WRITE。因此若有越权操作请求执行时,便可在此截获错误信息,并将错误信息发送给错误信息发送程序。对没有健康监控模块的系统进行测试时,操作系统虽能发现内存保护错误,但发生错误后系统崩溃,结果如图8所示。

在加入了健康监控模块后,将原操作系统对于内存保护错误的处理转移到健康监控模块进行,系统最终将不会输出原本的错误提示信息,而是输出“received a invalidmemory fault”,并且操作系统应回到命令行继续运行。实际运行结果如图9所示,与预期结果相同。

(2)法官的素质和能力各异,不同法官,受到其素质和能力的约束,适用最密切联系原则的方式往往不一致,即使对相同性质的案件也可能会选择不同国家(地域)的法律,其效果也就存在差别,缺乏法律适用的精确性。

  

图8 原内存保护错误处理情况

  

图9 内存保护错误处理情况

3.4 调度程序错误

对于调度程序发生错误,我们在调度程序开头和结尾都设置一个发送原语,当错误信息发送程序收到第一条原语时,表示调度程序开始运行。经过一段时间后若收到第二条原语,则表示调度程序运行结束;若没收到第二条原语,则表示调度程序发生故障或者死循环,这时调度程序错误发生,需对其进行处理。为了测试调度程序错误,我们在调度程序中间加入一行while(1)。在没有健康监控模块之前对系统进行测试,调度程序发生错误则系统停止响应,测试结果如图10所示。

  

图10 原调度程序错误处理情况

在健康监控模块进行处理后,调度程序运行超时,健康监控系统检测到了调度程序错误,输出一行“received a dispatcher fault”并重新启动,而调度程序重启之后还会不断产生同样的问题,因此系统将不断输出报错语句,陷入死循环。实际运行结果如图11所示,与预期结果相同。

于是,一只白鹫被一条大个儿的土狼扑到了地上,它扑腾着翅膀打算站起来,却被随后扑上来的土狼一口咬断了脖子。

综上所述,在已实现的基于seL4的分区操作系统健康监控模块中,各功能部件能够正常运行,该健康监控系统具有可行性。

4 结束语

在微内核操作系统及嵌入式技术应用越来越广泛的今天,人们不只满足于要求系统的高性能,同时也要求系统具有更高的可靠性。之前还没有过对于seL4的分区操作系统健康监控方法的相关研究成果,本文通过对该方法关键技术的研究,对比其它分区操作系统构建方法提出基于seL4的分区操作系统的健康监控设计方案,分别实现了错误截获、处理、报告以及记录功能,也为下一步深入研究seL4微内核以及系统进一步的实现提供了理论的基础。

  

图11 调度器错误处理情况

参考文献

[1]LI Peng,ZHANG Fan.Research on L4 microkernel operation system and its application technology[J].Computer Technology and Development,2014,24(4):29-32(in Chinese).[李鹏,张凡.L4微内核操作系统及其应用技术研究[J].计算机技术与发展,2014,24(4):29-32.]

[2]LIU Xiaobin,GUO Bing,SHEN Yan,et al.ARM-based embedded software statistical energy model[J].Journal of University of Electronic Science and Technology of China,2012,41(5):770-774(in Chinese).[刘啸滨,郭兵,沈艳,等.基于ARM处理器的嵌入式软件能耗统计模型[J].电子科技大学学报,2012,41(5):770-774.]

[3]Elphinstone K,Heiser G.From L3 to seL4 what have we learnt in 20 years of L4 microkernels[C]//20ty-40th ACM Symposium on Operating Systems Principles.New York:ACM,2013:133-150.

[4]QIAN Zhenjiang,LIU Wei,HUANG Hao.Survey of formal design and verification for operating system[J].Computer Engineering,2012,38(11):234-238(in Chinese).[钱振江,刘苇,黄皓.操作系统形式化设计与验证综述[J].计算机工程,2012,38(11):234-238.]

[5]Bernard B,Heiser G.Correct,fast,maintainable:Choose any three![C]//Proceedings of the Asia-Pacific Workshop on Systems.New York:ACM,2012:13.

[6]Klein G,Andronick J,Elphinstone K,et al.Comprehensive formal verification of an OS microkernel[J].ACM Transactions on Computer Systems,2014,32(1):136-156.

[7]YANG Xiaoning,CAO Yuan.Design and implementation of embedded real-time OS health monitor[J].Electronic Design Engineering,2013,21(13):101-103(in Chinese).[杨晓宁,曹原.嵌入式实时分区操作系统中健康监控机制的设计与实现[J].电子设计工程,2013,21(13):101-103.]

[8]DENG Yun,CHENG Xiaohui,WANG Xinzheng.Study and design of embedded real-time microkernel operation system[J].Microelectronics & Computer,2012,29(10):133-139(in Chinese).[邓昀,程小辉,王新政.微内核结构嵌入式实时操作系统的研究与设计[J].微电子学与计算机,2012,29(10):133-139.]

[9]Elkaduwe D.A principled approach to kernel memory management[D].Sydney:University of New South Wales,2010.

[10]WANG Huimin.Research and improvement of a micro-kernel system MINIX3 disseetation[D].Shanghai:Shanghai Jiaotong University,2012(in Chinese).[王慧敏.微内核操作系统MINIX3消息机制的研究与改进[D].上海:上海交通大学,2012.]

[11]Elphinstone K,Cheng A,Chen X.RefOS-reference design for a microkernel based operating system[DB/OL].[2016-06-16].https://github.com/seL4/refos-manifest.

 
王天辰,赵承鼎,魏鑫,高艳华
《计算机工程与设计》2018年第05期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号