鉴源论坛·观擎丨浅谈操作系统的适航符合性(上)

作者 | 蔡喁 上海控安可信软件创新研究院副院长

版块 | 鉴源论坛 · 观擎

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

源头和现状​​​​​​​

微信截图_20230706102331.png

在越来越多的国产机载系统研制中,操作系统软件的选择对后续开展研制以及适航举证活动带来很大的影响。与其他行业不同的是,民用飞机的适航对飞机上所有安装的功能及其组成部分都有着具体的适航符合性要求。这就使得研制单位因为采用第三方开发的操作系统从而无法免除适航符合性责任。另一方面,前期的文章中我们也已经介绍过,民用飞机保证安全的核心手段,是详尽的安全性分析【详见:浅谈民用飞机机载系统的安全性】。对每种可能的功能根据其失效后果精确地分析可能的产生原因,针对每种可能的失效源头,分别适用不同的适航要求。操作系统作为机载软件的底层,其功能异常往往会引起上层应用软件异常,进而引发飞机功能异常,因此,研制单位在系统中使用的操作系统不但应该具体分析其潜在的安全影响,而且还是机载软件适航标准DO-178B/C所适用的对象。

实际上,DO-178B/C标准并没有将应用程序和包括操作系统在内的底层软件模块区分对待,也就是说,所有装载在飞机上可能引起功能异常的代码,均需满足相应的适航符合性要求。除操作系统外,函数库、以代码形式呈现的BSP组件等模块实际上也是需要满足适航要求的,也就是在采用DO-178B/C标准表明符合性的机载项目中,嵌入式操作系统也需要满足标准对于软件计划过程、软件开发过程、软件综合过程(验证、构型、质量、审定)的目标【详见:民用飞机机载软件是如何表明适航符合性的】。

由于民机软件适航标准较高的要求,实际上使得大部分嵌入式操作系统没有或者无法应用于民用飞机中。目前国内外民用飞机中常见的操作系统研发模式有两种,按照航空标准专门研制或由第三方专业操作系统开发单位对实时操作系统进行适航改造。在上世纪90年代到本世纪初,部分研制单位通过自己开发操作系统的方式来确保底层软件完全可适航。典型的代表有霍尼韦尔公司的DEOS、HeartOS系统等。其中DEOS系统在上世纪90年代取得了DO-178B A级软件的适航认可。在那个航空机载软件有自己的编程语言(Ada)的年代,采用自研满足适航标准的操作系统似乎也是一种高效的解决方案。实际上,在那个时期,机载系统厂商不仅自研操作系统,很多研制单位甚至会自己定制处理器。本世纪初,随着美军表对强制使用Ada语言要求的废除,越来越多的研制单位选择采用C语言开发,这也就减少了对Ada编译环境以及实时内核等的需求,同时,其他嵌入式领域内基于C语言的工具和库极大地降低了机载软件的开发成本,但也推高了航空专用操作系统的开发和维护难度。自此,由机载研制单位开发专用操作系统逐渐减少。

面对航空市场,通用操作系统提供商从另一条路径实现其操作系统的适航化。那就是将通用操作系统按照DO-178B/C标准进行生命周期改造,并提供相关适航符合性证据。目前,包括WindRiver、GreenHill在内的嵌入式操作系统研发企业,同时也包括中航工业操作系统研发单位均采取这种方法实现对民机机载研制环境的支持。所谓的适航鉴定包指的是操作系统研制单位,在其开发操作系统的过程中严格按照DO-178B/C的生命周期过程进行开发,并保留和记录了所有用于表明DO-178B/C适航标准符合性的生命周期数据证据,从而确保在应用程序开发和适航取证过程中无需反复对操作系统进行验证和审查。国际上也有将开源或者简单操作系统逆向工程的方法,补齐对应的需求、设计等生命周期数据并通过基线迭代的方法表明操作系统适航符合性的例子。

实际上,适航鉴定包是操作系统开发方的一种说法,不论是中国、美国还是欧洲的民航局方几乎没有给操作系统单独颁发适航认可的先例。哪怕是相同的操作系统运用在不同的机载系统中,或者运行在不同的硬件环境上,其潜在的失效源头、影响等并不一定相同,从而造成适航审定无法将操作系统和应用软件分开。特别是,不同系统中调用和使用操作系统的方式也存在差异,这也造成了操作系统很难单独地评价其适航符合性。换句话来说,在每一个机载系统审定项目中(包括TC和TSO),操作系统必须和应用软件一同表明符合性。适航鉴定包的主要意义在于通过实现固化的生命周期证据,在每个取证项目中减少了大量重复举证的成本。同时,较为成熟的操作系统也有助于提高局方审查信心,减少审查开销。

02

如何简单快速预计操作系统适航性

针对国内外大大小小的数百个实时操作系统,研制单位往往难以判断其满足适航要求的程度以及后续举证的复杂度。笔者在适航审查工作中,往往通过以下几个要素快速判断操作系统适航风险的大小。这些问题并不足以判断操作系统的适航符合性,但作为挑选可用的操作系统提供了较为快速的评价判断参考。

· 操作系统是否有完善的需求定义,特别是对其自身性能和使用边界的精确定义?

· 是否能够按照基于需求的测试原则实现软件结构覆盖要求?

· 操作系统是否包含其他第三方的库函数或者必须依赖某些黑盒组件?

· 操作系统在当前项目的硬件平台上是否开展过完整的软硬件集成验证?

· 操作系统当前构型是否稳定,是否对其使用问题和缺陷开展的长期的跟踪?

· 操作系统研制单位或应用开发单位至少一个是否熟悉DO-178B/C标准的要求?

03

嵌入式操作系统适航的主要难点

满足适航要求的操作系统之所以开发难度较大与民用飞机保证适航安全的思路是直接相关的。

3.1 需求定义及其追溯

在民机的适航体系中,几乎所有的设计都是从严格的需求定义开始的。操作系统(除非在某个项目中专门开发)一般来说不大可能仅仅通过来自上级的设计输入进行开发。因此在表明适航符合性过程中,其自身的需求定义往往存在难点。

· 需求定义的精确性和完整性

传统行业中,需求的定义往往存在一定的不精确性。而民用飞机的设计思路与之不同,要求对需求进行精确完整的定义。对于操作系统来说,高质量的需求定义不仅是确保自身正确实现功能和充分验证的前提,也是证明应用软件正确遵循了操作系统的约束进行开发的证据。例如提供某种接口的需求,不仅要定义接口的名称、参数、类型和使用方式,还需要明确说明这种接口的任何使用限制、性能边界、禁止行为等。笔者曾经审查过的某一系统,在其需求中详细定义了其命令所带的后缀的具体行为,但却没有描述这些后缀是否存在使用限制,在后续的分析中发现某些后缀在一起使用或者连续使用实际上会产生非预期的输出。由于需求中并没有禁止这种行为,按照民机的需求定义规则,这种功能是被允许的,在对需求的充分验证中将发现功能与需求的不一致情况。从上面例子可见,民机体系中,一系列适航活动的基础是对需求的精确完整定义。

· 需求之间的追溯

由于操作系统功能往往不是来自上级系统和应用的功能分解,实际上打破了民机领域自顶向下精确传递的研制过程。按照DO-178B/C的要求,研制单位需要证明软件高层需求与系统需求的一致性、软件低层需求与高层需求的一致性等等。实际情况下,操作系统提供的功能和接口经常超过上级设计的需要。如果严格按照追溯方法定义需求和开展验证,会造成大量未能覆盖的代码和功能,难以通过适航评审。为此,当今的操作系统往往将其适航鉴定数据包作为独立的满足DO-178B/C标准的实体,而将操作系统顶层需求以及应用开发的约束限制条件作为与应用软件的符合性界面。在界面以内通过完整的需求、设计、代码的追溯表明符合性;在界面以外,通过应用软件完全遵从设计的假设条件,按照限定的方式开发软件作为证据,最终实现内外符合性证据的组合整体表明适航符合性。换句话来说,操作系统开发单位为应用开发划定一个安全区域,并对这个区域内各种可能的情况进行验证和分析,而应用研制单位只要能能证明不超出这个安全区域就证明了其自身软件的安全性。这实际上给操作系统开发方提出了很高的要求,特别是要求能够充分地分析和定义应用的行为。

· 对于应用的假设

上文提到了操作系统设计中安全区域的概念,实际上在鉴定包的开发过程中,这种安全区域的识别和分析极具挑战。也就是说,在鉴定包开发过程中,除了通常的需求定义、软件架构、代码等生命周期数据以外,为确保应用单位能最低成本的快速复用当前鉴定包所固化的适航符合性证据,操作系统开发方需对这些证据的适用条件(场景)进行充分的分析和定义。一个好的鉴定包能够做到在其所明确定义的使用场景下,操作系统所提供的功能和呈现的性能完全在需求所定义的范围内。反之,如果假设条件定义的不完整,应用研制单位需要针对自己使用的场景重新开展分析和验证,从而使得应用研制活动中必须解决操作系统设计中的部分符合性,在降低开发效率的同时也因为不同的开发流程而造成困扰。这就会造成鉴定包的效用难以有效发挥。

3.2 验证开销

随着需求定义的越来越细、假设条件的精确化,对操作系统开展的软件验证工作量也随之增加。通常来说,按照适航要求开发的软件,其需求规模数倍于传统方式开发的软件。对应的功能验证以及鲁棒性测试开销必然成倍增长。更有甚者,由于DO-178B/C标准中,不仅要求设计精确地满足需求(且不超过需求),还要求验证相关算法的精确性。这使得很多操作系统在开展测试的同时必须进行大量的分析工作。特别是在上一节对应用的假设条件范围内,如何证明操作系统在所有可能的场景和场景组合中均能按照预期的输出将是验证工作中的难点。

3.3 硬件适配问题

一个成熟的操作系统必然涉及到在不同的应用甚至硬件环境中使用的问题,除了上文提到的应用边界外,在不同的硬件环境下(哪怕仅是存在微小的硬件构型变化),已经取得的验证证据将不再有效。通常需要开展差异评估和回归测试,或者将已经开展过的验证(测试、评审和分析)整体重新开展一遍。这对操作系统的开发也造成明显的压力。某些操作系统其针对不同硬件进行重新验证的成本数倍于操作系统本身的开发和验证。

3.4 第三方组件问题

另外,在操作系统研制中,操作系统本身,以及后续开发的应用软件往往会使用到第三方的组件。按照适航标准,研制单位需要对所有最终加载在机上的代码证明其适航符合性。相较于传统系统开发,针对第三方组件研制单位无非又回到自研、逆向以及购买第三方鉴定包的几种选择中,这一问题又进一步推高操作系统研制和取证的成本。

在浅谈操作系统的适航符合性(下)中,将详细展开讨论降低机载软硬件适航成本的潜在方法,以及国内首个完全符合适航标准的轻量级嵌入式操作系统——飞蜻FlyLite等内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64887.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

码云 Gitee + Jenkins 配置教程

安装jdk 安装maven 安装Jenkins https://blog.csdn.net/minihuabei/article/details/132151292?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132151292%22%2C%22source%22%3A%22minihuabei%22%7D 插件安装 前往 Manage Jen…

基于Windows手动编译openssl和直接安装openssl

零、环境 win10-64位 VS2019 一、手动编译 前言:对于一般的开发人员而言,在 openssl 上下载已经编译好的 openssl 库,然后直接拿去用即可,,不用手动编译,{见下文直接安装}。。。对于一些开发人员&#…

Jmeter录制HTTPS脚本

Jmeter录制HTTPS脚本 文章目录 添加“HTTP代理服务器”设置浏览器代理证书导入存在问题 添加“HTTP代理服务器” 设置浏览器代理 保持端口一致 证书导入 点击一下启动让jmeter自动生成证书,放在bin目录下: 打开jmeter的SSL管理器选择刚刚生成的证书&…

# 关于Linux下的parted分区工具显示起始点为1049kB的问题解释

关于Linux下的parted分区工具显示起始点为1049kB的问题解释 文章目录 关于Linux下的parted分区工具显示起始点为1049kB的问题解释1 问题展示:2 原因3 修改为KiB方式显示4 最后 1 问题展示: kevinTM1701-b38cbc23:~$ sudo parted /dev/nvme1n1 GNU Part…

SAP 开发编辑界面-关闭助手

打开关闭助手时的开发界面如下: 关闭关闭助手后的界面如下: 菜单栏: 编辑--》修改操作--》关闭助手

会这个Python的测试员,工作都不会太差!

Python语言得天独厚的优势使之在业界的火热程度有增无减,尤其是在经历了互联网,物联网,云计算,大数据,人工智能等浪潮的推动下,其关注度,普适度一路走高。 对于测试人员来说,很多人…

【CSS】旋转中的视差效果

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

RK3568 lunch新增设备

rk3568 android9.0 &#xff0c;32位平台 1.进入devices/rockchip/rk356x/ 将rk3568_box_32 拷贝一份&#xff0c;命名为hdx6 2.打开vendorsetup.sh,添加lunch选项 add_lunch_combo hdx6-user add_lunch_combo hdx6-userdebug 3.进入hdx6&#xff0c;修改rk3568_box_32.mk…

Linux root用户执行修改密码命令,提示 Permission denied

问题 linux系统中&#xff08;ubuntu20&#xff09;&#xff0c;root用户下执行passwd命令&#xff0c;提示 passwd: Permission denied &#xff0c;如下图&#xff1a; 排查 1.执行 ll /usr/bin/passwd &#xff0c;查看文件权限是否正确&#xff0c;正常情况是 -rwsr-xr…

阿里云二级域名配置

阿里云二级域名配置 首先需要进入阿里云控制台的域名管理 1.选择域名点击解析 2.添加记录 3.选择A类型 4.主机记录设置【可以aa.bb或者aa.bb.cc】 到时候会变成&#xff1a;aa.bb.***.com 5.解析请求来源设置为默认 6.记录值 设置为要解析的服务器的ip地址 7.TTL 默认即…

MyCat水平分表

1.水平拆分案例场景 2.MyCat配置 这个表只是在 schema.xml配置的逻辑表&#xff0c;在具体的数据库里面是没有的 根据id的模确定数据存在哪个节点上&#xff01;&#xff01;

基于图像形态学处理的目标几何形状检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................... %二进制化图像 Images_bin imbinari…

7个月的测试经验,来面试居然开口要18K,我一问连5K都不值...

2021年8月份我入职了深圳某家创业公司&#xff0c;刚入职还是很兴奋的&#xff0c;到公司一看我傻了&#xff0c;公司除了我一个测试&#xff0c;公司的开发人员就只有3个前端2个后端还有2个UI&#xff0c;在粗略了解公司的业务后才发现是一个从零开始的项目&#xff0c;目前啥…

前端技术基础-css

前端技术基础-css【了解】 一、css理解 概念&#xff1a;CSS&#xff1a;C(cascade) SS(StyleSheet) &#xff0c;级联样式表。作用&#xff1a;对网页提供丰富的视觉效果&#xff0c;进行美化页面(需要在html页面基础上)样式规则&#xff1a;样式1&#xff1a;值1;样式2&…

项目中使用git vscode GitHubDesktopSetup-x64

一、使用git bash 1.使用git bash拉取gitee项目 1.在本地新建一个文件夹&#xff08;这个文件夹是用来存放从gitee上拉下来的项目的&#xff09; 2.在这个文件夹右键选择 git bash here 3.输入命令 git init (创建/初始化一个新的仓库) 4.输入命令 git remote add origin …

51单片机程序烧录教程

STC烧录步骤 &#xff08;1&#xff09;STC单片机烧录方式采用串口进行烧录程序&#xff0c;连接的方式如下图&#xff1a; &#xff08;2&#xff09;所以需要先确保USB转串口驱动是识别到&#xff0c;且驱动运行正常&#xff1b;是否可通过电脑的设备管理器查看驱动是否正常…

AVS3:跨多通道预测PMC

前面的文章中介绍了TSCPM&#xff0c;它是AVS3中用于intra模式的跨通道预测技术&#xff0c;它利用线性模型根据亮度重建像素预测色度像素&#xff0c; 跨通道预测技术用于去除不同通道间的冗余信息&#xff0c;TSCPM可以去除Y-Cb、Y-Cr通道间的冗余&#xff0c;然而却忽略了…

鉴源实验室丨SOME/IP协议安全攻击

作者 | 张昊晖 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 引 言 随着汽车行业对于数据通信的需求不断增加&#xff0c;SOME/IP作为支持汽车以太网进程和设备间通信的一种通信协议应…

C#调用百度翻译API自动将中文转化为英文,按行转换

我们可以使用百度翻译API获取到翻译结果 翻译API地址&#xff1a; http://api.fanyi.baidu.com/api/trans/vip/translate 一、新建窗体应用程序TranslatorDemo&#xff0c;将默认的Form1重命名为FormTranslator。 窗体FormTranslator设计器如图&#xff1a; 窗体设计器源代码…

[保研/考研机试] 约瑟夫问题No.2 C++实现

题目要求&#xff1a; 输入、输出样例&#xff1a; 源代码&#xff1a; #include<iostream> #include<queue> #include<vector> using namespace std;//例题5.2 约瑟夫问题No.2 int main() {int n, p, m;while (cin >> n >> p >> m) {//如…