CN110245085B - 利用在线模型检验的嵌入式实时操作系统验证方法及系统 - Google Patents
利用在线模型检验的嵌入式实时操作系统验证方法及系统 Download PDFInfo
- Publication number
- CN110245085B CN110245085B CN201910524490.8A CN201910524490A CN110245085B CN 110245085 B CN110245085 B CN 110245085B CN 201910524490 A CN201910524490 A CN 201910524490A CN 110245085 B CN110245085 B CN 110245085B
- Authority
- CN
- China
- Prior art keywords
- operating system
- model
- conversion
- state
- verification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种利用在线模型检验的嵌入式实时操作系统验证方法,首先在基于事件总线的嵌入式实时操作系统的源代码中进行插桩,并从源代码中抽象出其行为模型;当操作系统在运行时触发监控点,将监测到的具体状态通过映射函数转化为抽象状态,该抽象状态用来指导行为模型的运行,从而实现了操作系统的实现层和模型层的相结合,通过即时检验算法检验操作系统在运行期间的行为模型是否满足抽取的性质,并预测未来k步行为模型的正确性;若检查出错误,则表示当前执行路径中存在潜在错误,并立即通知正在运行的操作系统。本发明应用到操作系统的形式化验证中,模型层的错误预示着在系统执行层可能也会产生错误,从而确保操作系统在运行中的正确性。
Description
技术领域
本发明涉及嵌入式操作系统技术领域,具体涉及一种利用在线模型检验的嵌入式实时操作系统验证方法及系统。
背景技术
如今,嵌入式实时操作系统在我们的生活中发挥着越来越重要的作用。对于安全关键性系统来说,系统的安全性是至关重要的,如果发生故障,可能导致高成本甚至危及人的生命。通常,嵌入式系统可能由于外部或者内部原因而失败。外部原因与系统规范本身或操作系统环境有关,例如输入错误,温度等。失败的主要内部原因可能是设计硬件和软件故障或者分布式环境中的通信故障。据调查可知,计算机系统故障的数量显著增加是由软件中的设计错误引起的,而不是由硬件的物理故障造成的。嵌入式软件日益复杂,使得一些细微的错误难以查明原因或者重现。虽然安全关键性系统的设计通常是容错的,但是经验表明软件错误仍然是不可避免的。
对于工业设计来说,测试是解决现代嵌入式软件安全问题的主流方案。软件测试通过执行程序来查找错误,从而查看该执行程序是否满足所需的结果。但是常见的操作系统规范是用自然语言描写的,自然语言描述的规范不可避免的会有二义性。这样不仅在实现过程中可能会误导开发人员,同样也会影响到测试人员对测试用例的提取和设计,并且软件测试不能完全测试中等复杂度的程序。对于未经过测试的输入,在系统执行期间也可能出现未发现的错误。即使通过软件测试发现错误,通常也很难找出错误的原因。另外,由于操作系统的正确性会直接影响整个系统的安全性,仅仅对操作系统做测试是不能达到安全性要求的。
传统的模型检验是一种广泛应用于研究和工业领域的验证技术。而传统的软件测试是在实现级别检查系统的正确性,是动态的测试,给出一组输入,通过程序运行得到输出,然后检查运行结果是否符合要求。模型检验通常是静态分析系统模型,是模型级别的正确性检查。简单的说,给定系统模型M和时态逻辑公式f,模型检验通过搜索系统的全状态空间,若给出肯定的回答,表示系统模型满足公式f;否则就不满足,并给出不满足公式f的反例。由于这些模型检验技术都是对系统模型进行静态分析,主要是对程序进行静态模型检验,它们都忽略了目标系统在执行中的细节。因此,还需要保证程序在运行时的正确性。
发明内容
本发明提出了一种利用在线模型检验的嵌入式实时操作系统验证方法,在线模型检验是一种新的验证技术,将在线模型检验的方法引入操作系统中,可以提高其安全性和正确性。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法,包括以下步骤:
步骤一:在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息;通过监测要检查的任务,获得相关变量的详细信息,包括数据类型、内存地址;
步骤二:从所述源代码中抽象出其行为模型,根据预测k步规则将所述行为模型划分为多个部分模型;
步骤三:对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
步骤四:对所述LTL公式f进行取反并归约,得到转换Büchi自动机;
步骤五:当操作系统在运行时触发某个监控点,它将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过映射函数转换为抽象状态,发送给所述在线模型检验,从而指导部分行为模型的运行;
步骤六:将得到的抽象状态作为系统模型的部分模型的初始状态,并将部分模型和转换Büchi自动机进行叉乘,得到新的转换Büchi自动机,并且监测到的状态信息作为新的转换Büchi自动机的初始状态;
步骤七:通过即时检验算法检查转换Büchi自动机,即检查行为模型是否满足抽取的的形式化性质,如果满足,则可判断此部分行为模型满足LTL公式,并且可预测操作系统在接下来的k个步骤中是安全的。如果在部分模型中发现错误,则表示当前执行路径中存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足所述的形式化性质。
本发明中,所述步骤二从源代码中抽象出行为模型包括以下步骤:
步骤A1:根据操作系统的源代码的具体执行过程将操作系统划分为不同的操作模式,每个所述操作模式包含在此模式下活动的任务集;
步骤A2:将源代码的每项任务看作是原子的,将代码编写的程序归约为重复三个步骤:接收输入数据,更新内部状态,产生输出;
步骤A3:操作系统一次处于一种模式,根据源代码的执行过程,确定从一种模式到其他模式的可能转换,当前模式中的任务的执行结果可以触发到某个下一模式的转换,其中每个状态代表一种模式,每个转换指定两种不同模式之间可能的转换,用转换系统来表示抽象的行为模型;
本发明中,所述步骤二对行为模型划分为多个部分模型包括以下步骤:
步骤B1:确定预测k步规则中k的具体值;
步骤B2:根据转换系统中的转换关系,从顶点开始,向前走k步,此时为一个部分模型,第k步的状态作为下一个部分模型的顶点,依次划分,最后得到多个部分模型。
本发明中,所述步骤三对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述包括以下步骤:
步骤C1:从操作系统的事件总线规范中提取所要描述的客户端、服务端、事件、总线相关的自然语言规范;
步骤C2:根据自然语言规范提取性质,并用线性时态逻辑表达式对其进行描述。
本发明中,所述步骤四对LTL公式f进行取反归约得到转换Büchi自动机包括以下步骤:
步骤D3:把Büchi自动机的语法分析树转化为布尔公式,然后对布尔公式进行计算,得到转换Büchi自动机。
本发明中,所述步骤五将监测到的状态信息通过映射函数转换为抽象状态包括以下步骤:
步骤E1:将在源代码中与监测到的具体状态有关的一阶逻辑表达式提取出来,并将有关的表达式重写为函数;
步骤E2:每个映射函数都定义为谓词,该函数将要监视的变量作为参数,返回一个布尔类型的值,该布尔值即为抽象状态。
本发明中,所述步骤六将部分模型TS和转换Büchi自动机进行叉乘包括以下步骤:
步骤F1:根据转换系统TS的三元组和转换Büchi自动机的四元组关系,找出两者相同的转换关系作为叉乘的条件;
步骤F2:最终得到新的转换Büchi自动机,转换关系TS的初始状态作为新得到的转换Büchi自动机的初始状态。
本发明中,所述步骤七即时检验算法包括以下步骤:
步骤G1:Tarjan算法是基于深度优先搜索求解有向图的强连通分量,即时检验算法是在Tarjan算法的基础上进行了改进,首先求出转换Büchi自动机所有的强连通分量;
步骤G2:检查强连通分量是否满足给定条件,即其中是否包含所有可接受状态,如果该集合与转换Büchi自动机的可接受状态集合一致,则此转移系统不满足该LTL公式,系统报错;否则证明此转移系统满足该LTL公式。
基于以上方法,本发明还提出了一种利用在线模型检验的嵌入式实时操作系统验证系统,所述系统包括:
插桩模块,用于在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息;通过监测要检查的任务,获得相关变量的详细信息,包括数据类型和内存地址;
模型划分模块,用于从所述源代码中抽象出其行为模型,根据预测k步规则将所述行为模型划分为多个部分模型;
性质抽取模块,用于对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
TBA模块,用于对所述LTL公式f进行取反并归约,得到转换Büchi自动机;
触发模块,当操作系统在运行时触发监控点,所述转换Büchi自动机将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过映射函数转换为抽象状态,发送给所述在线模型检验,从而指导部分行为模型的运行;
叉乘模块,用于将所述抽象状态作为所述部分模型的初始状态,并将所述部分模型和所述转换Büchi自动机进行叉乘,得到新的转换Büchi自动机,并且监测到的状态信息作为所述新的转换Büchi自动机的初始状态;
验证模块,用于通过即时检验算法检查所述新的转换Büchi自动机,即检查行为模型是否满足抽取的的形式化性质;若满足,则可判断此部分行为模型满足LTL公式,并且可预测操作系统在接下来的k个步骤中是安全的;若在部分模型中发现错误,则表示当前执行路径中存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足所述的形式化性质。
本发明所提出的利用在线模型检验的嵌入式实时操作系统验证方法及系统,模型级别的错误可能预示着操作系统在运行时的潜在错误。在线模型检验通过监测操作系统在运行时的状态信息,通过其状态信息构建目标程序的部分模型,然后根据给定的性质检查当前执行路径的正确性。在部分模型中发现的错误可能表示当前执行路径中存在潜在错误。通过在线模型检验产生的反例可用于发现错误的根本原因,从而提高操作系统的安全性和正确性。
本发明为了对运行的操作系统进行在线模型检验,既采用了运行时验证中对其源代码进行插桩的特点,又采用了离线模型检验抽象模型的特点。本发明克服了运行时验证不能预测的技术问题,同时也弥补了离线模型检验无法监测程序在运行时的正确性。
为了实现运行层与模型层的结合,本发明步骤中采用了一个映射函数,由于行为模型是从源代码中抽象出来的,所以存在一个映射函数可以将运行层的具体状态映射到抽象层的抽象状态。
附图说明
图1表示本发明利用在线模型检验的嵌入式实时操作系统验证方法的架构示意图。
图2表示本发明利用在线模型检验的嵌入式实时操作系统验证方法的方法流程图。
图3表示本发明利用在线模型检验的嵌入式实时操作系统验证方法中状态抽象图。
图4表示本发明利用在线模型检验的嵌入式实时操作系统验证系统的示意图。
具体实施方式
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
本发明提出了一种利用在线模型检验的嵌入式实时操作系统验证方法,包括:
步骤一:首先在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息,通过监测要检查的任务,可以获得相关变量的详细信息,例如数据类型、内存地址等;
步骤二:从源代码中抽象出其行为模型,根据预测k步规则对得到的行为模型划分为多个部分模型;
步骤三:对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
步骤四:对LTL公式f进行取反并归约,得到转换Büchi自动机(TBA,Transition Büchi Automata);
步骤五:当操作系统在运行时触发某个监控点,它将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过抽象函数转换为抽象状态,发送给在线模型检验,从而指导部分行为模型的运行;
步骤六:将得到的抽象状态作为系统模型的部分模型的初始状态,并将部分模型和转换Büchi自动机进行叉乘,得到新的TBA,并且监测到的状态信息作为TBA的初始状态;
步骤七:通过即时检验(on-the-fly)算法检查TBA并预测未来k步的正确性,即检查行为模型是否满足抽取的的形式化性质,如果满足,则可判断运行中的操作系统在一定程度上的正确性,如果在部分模型中发现错误,则表示当前执行路径中可能存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足的形式化性质。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤二从源代码中抽象出行为模型包括以下步骤:
步骤A1:根据操作系统的源代码的具体执行过程将操作系统划分为不同的操作模式,每个操作模式包含在此模式下活动的任务集;
步骤A2:将源代码的每项任务看作是原子的,将代码编写的程序归约为重复三个步骤:接收输入数据,更新内部状态,产生输出;
步骤A3:操作系统一次处于一种模式,根据源代码的执行过程,确定从一种模式到其他模式的可能转换,当前模式中的任务的执行结果可以触发到某个下一模式的转换,其中每个状态代表一种模式,每个转换指定两种不同模式之间可能的转换,用转换系统(TS)来表示抽象的行为模型;
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤二对行为模型划分为多个部分模型包括以下步骤:
步骤B1:确定预测k步中k的具体值;
步骤B2:根据转换系统中的转换关系,从顶点开始,向前走k步,此时为一个部分模型,第k步的状态作为下一个部分模型的顶点,依次划分,最后得到多个部分模型。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤三对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述包括以下步骤:
步骤C1:从操作系统的事件总线规范中提取所要描述的客户端、服务端、事件、总线等相关的自然语言规范;
步骤C2:根据自然语言规范提取性质,并用线性时态逻辑表达式对其进行描述。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤四对LTL公式进行归约得到转换Büchi自动机(TBA)包括以下步骤:
步骤D3:把Büchi自动机的语法分析树转化为布尔公式,然后对布尔公式进行计算,得到转换Büchi自动机(TBA)。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤五将监测到的状态信息通过抽象函数转换为抽象状态包括以下步骤:
步骤E1:将在源代码中与监测到的具体状态有关的一阶逻辑表达式提取出来,并将有关的表达式重写为函数;
步骤E2:每个映射函数都定义为谓词,该函数将要监视的变量作为参数,返回一个布尔类型的值,该布尔值即为抽象状态。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤六将部分模型TS和转换Büchi自动机(TBA)进行叉乘包括以下步骤:
步骤F1:根据转换系统TS的三元组和转换Büchi自动机(TBA)的四元组关系,找出两者相同的转换关系作为叉乘的条件;
步骤F2:最终得到新的转换Büchi自动机(TBA),转换关系TS的初始状态作为新得到的转换Büchi自动机的初始状态。
本发明提出的利用在线模型检验的嵌入式实时操作系统验证方法中,步骤七即时检验(on-the-fly)算法包括以下步骤:
步骤G1:Tarjan算法是基于深度优先搜索(DFS)求解有向图的强连通分量,即时检验算法(on-the-fly)是在Tarjan算法的基础上进行了改进,首先求出转换Büchi自动机(TBA)所有的强连通分量;
步骤G2:检查强连通分量是否满足给定条件,即其中是否包含所有可接受状态,如果该集合与TBA的可接受状态集合一致,则此转移系统不满足该LTL公式,系统报错;否则证明此转移系统满足该LTL公式。
如图4所示,本发明利用在线模型检验的嵌入式实时操作系统验证系统,系统包括:
插桩模块,用于在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息;通过监测要检查的任务,获得相关变量的详细信息,包括数据类型和内存地址;
模型划分模块,用于从源代码中抽象出其行为模型,根据预测k步规则将行为模型划分为多个部分模型;
性质抽取模块,用于对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
TBA模块,用于对LTL公式f进行取反并归约,得到转换Büchi自动机;
触发模块,当操作系统在运行时触发监控点,转换Büchi自动机将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过映射函数转换为抽象状态,发送给在线模型检验,从而指导部分行为模型的运行;
叉乘模块,用于将抽象状态作为部分模型的初始状态,并将部分模型和转换Büchi自动机进行叉乘,得到新的转换Büchi自动机,并且监测到的状态信息作为新的转换Büchi自动机的初始状态;
验证模块,用于通过即时检验算法检查新的转换Büchi自动机,即检查行为模型是否满足抽取的的形式化性质;若满足,则可判断此部分行为模型满足LTL公式,并且可预测操作系统在接下来的k个步骤中是安全的;若在部分模型中发现错误,则表示当前执行路径中存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足的形式化性质。
本发明利用在线模型检验的嵌入式实时操作系统验证方法及系统,主要通过监测运行的操作系统,分析操作系统中源代码抽象出其行为模型,提取操作系统事件总线的相关性质进行验证并预测。首先,在操作系统源代码中对基于事件总线的代码进行插桩,包括客户端、服务端、事件总线、事件等,对于插桩也要根据预测k步规则,即任意两个相邻的监测点距离最多k步,在距离大于k步的两个位置之间必须存在一些监测点;其次,通过对操作系统的源代码进行分析,根据代码的执行关系,给出源代码的行为模型,然后对得到的行为模型进行划分,根据预测k步规则,将行为模型拆分成多个部分行为模型;再者,对操作系统事件总线部分的自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f,对公式f进行取反并归约,得到转换Büchi自动机(TBA);接着,对于运行中的操作系统,当运行到所设置的监测点时,系统将会触发在线模型检验,并且将监测到的具体状态通过映射函数转化为抽象状态,将该抽象状态作为部分行为模型的初始状态;最后,该部分行为模型与得到的转换Büchi自动机(TBA)进行叉乘,通过应用即时检验(on-the-fly)算法求出转换Büchi自动机(TBA)所有的强连通分量,记录所有的最终状态并统计为一个集合,如果该集合与TBA的可接受状态集合不一致,则证明此行为模型满足该LTL公式,否则系统报错,并给出反例,并根据给出的反例路径可查找错误的地方并进行修正,从而保证操作系统的正确性和安全性。
实施例
如图1所示,是本发明的利用在线模型检验的嵌入式实时操作系统验证方法的架构示意图,本发明包括以下步骤:
步骤一:给定一个基于事件总线的嵌入式实时操作系统,首先,在操作系统源代码中对基于事件总线的代码进行插桩,包括客户端、服务端、事件总线、事件等,Python脚本用于为嵌入式操作系统生成监视工具,Python脚本将三个文件作为输入,三个文件分别包含要监视的变量、映射函数、要检查的任务,对于通过监测要检查的任务,可以获得有关感兴趣的变量的详细信息,例如数据类型、内存地址等。
步骤二:如图2所示,是发明利用在线模型检验的嵌入式实时操作系统验证方法的方法流程图。阅读嵌入式操作系统事件总线的源代码和自然语言规范,分析并抽取出嵌入式操作系统中事件总线的过程和步骤,包括客户端、服务端、事件总线、事件等内容,根据操作系统的具体执行过程将其划分为不同的操作模式,操作系统一次处于一种模式,根据源代码的执行过程,确定一种模式到其他模式的可能转换,每个状态代表一种模式,根据模式之间的转换关系确定转换系统(TS)的三元组,根据预测k步规则,即转换系统每次向前走k步,将总的转换系统划分为多个部分转换系统。
步骤三:从操作系统的事件总线规范中提取所要描述的自然语言规范,根据自然语言规范提取性质,并用线性时态逻辑对其进行描述。将得到的LTL公式取反得到将/>转化为前缀表达式,并将其转化为语法分析树,然后对标准的LTL语法分析树转化为转换Büchi自动机的LTL语法分析树,并在转换的Büchi自动机LTL语法分析树上添加状态节点,接着把转换Büchi自动机的LTL语法分析树转化为布尔公式,然后对布尔公式进行计算,得到转换Büchi自动机。
步骤四:当操作系统正在运行时,需要观察者记录当前的状态信息,每当触发某个监控点时,观察者(在系统调用处理程序内)就会从监测点的本地内存中读取当前状态中感兴趣的变量的值。
如图3,由于行为模型是从源代码中抽象出来的,所以存在一个映射函数γ可以将运行层的具体状态映射到抽象层的抽象状态。每个映射函数都定义为谓词,它接受要监视的变量作为参数并返回一个布尔值,当操作系统运行时,可以定时监测到具体状态的信息,对于每个监测到的状态Si,可以根据γ(Si)得到其抽象状态,每个映射函数γ并不是单一映射的,不同的具体状态可能映射到相同的抽象状态。运行中的操作系统将监测到的具体状态并且应用预定义的映射函数来获得监测点中行为模型中的相应抽象状态。
在线模型检验接收该抽象状态后,并将该抽象状态作为部分行为模型的初始状态,从而指导部分行为模型的运行。
步骤五:根据步骤四中得到的部分行为模型,建立了由实现层到模型层的转换,将该部分行为模型与步骤四得到的转换Büchi自动机(TBA)进行叉乘,得到新的TBA,并且将得到的抽象状态作为新的TBA的初始状态。
步骤六:根据步骤五叉乘后得到的新的转换Büchi自动机(TBA),通过即时检验算法(on-the-fly)检查该TBA,通过求出转换Büchi自动机(TBA)的所有强连通分量,检查强连通分量是否满足所给定的条件,即其中是否包含所有可接受的状态,如果该集合与TBA的可接受状态集合一致,,则表示当前执行路径中可能存在潜在错误,则输出反例,并发出警告,并根据所得到的反例对操作系统部分代码进行修正直至满足的形式化性质;否则,此部分行为模型满足LTL公式,并且可预测在接下来的k个步骤中是安全的。
本具体实例基于事件总线的嵌入式实时操作系统为例,对其进行形式化建模与验证,将整个验证过程看成是运行时验证和离线模型检验的结合。本发明既采用了运行时验证中对其源代码进行插桩的特点,从而监测操作系统在运行时的具体信息,又采用了离线模型检验的抽象模型、抽取性质等特点,通过检验抽象出的模型是否满足操作系统规范中的性质并实现了预测的功能,本发明将操作系统在运行时监测到的信息与离线模型检验相结合,通过操作系统运行时的具体信息来指导模型层的运行,从而实现了操作系统的实现层和模型层的相结合,并且弥补了运行时验证不能预测的缺点,保证了操作系统在运行时的正确性和安全性。
本具体事例中,运用本发明的利用在线模型检验的嵌入式实时操作系统验证方法对基于事件总线的嵌入式实时操作系统进行形式化建模和验证,另外,使用在线模型检验方法和即时验证(on-the-fly)算法对操作系统进行验证,对操作系统的实现层和模型层进行结合,并且即时检验算法可以在完整的程序状态空间和叉乘自动机构造完成之前就可以给出验证的结果,具体步骤如下:
步骤一:在操作系统的源代码中插入监视点,以便在程序执行期间监测实际状态信息,该插桩采用了Aspect工具,通过监测要检查的任务,可以获得相关变量的详细信息,包括数据类型、内存地址等。
步骤二:根据基于事件总线的嵌入式实时操作系统的自然语言规范,分析并抽取出嵌入式操作系统中事件总线的过程和步骤,包括客户端、服务端、事件总线、事件等内容,并且使用线性时态逻辑表达式进行表述。将得到的LTL公式取反得到将/>转化为前缀表达式,并将其转化为语法分析树,然后对标准的LTL语法分析树转化为转换Büchi自动机的LTL语法分析树,并在转换的Büchi自动机LTL语法分析树上添加状态节点,接着把转换Büchi自动机的LTL语法分析树转化为布尔公式,然后对布尔公式进行计算,得到转换Büchi自动机。/>
步骤三:当操作系统正在运行时,根据步骤一中插桩对安全关键性代码进行监测,当运行到监测点时,观察者会从监测点的本地内存中读取当前状态中感兴趣的变量的值,并且应用步骤一中预先定义的映射函数将监测到的具体状态信息转化为抽象状态,并作为部分行为模型的初始状态,将该部分行为模型与步骤二得到的转换Büchi自动机(TBA)进行叉乘,得到新的TBA,并且将检测到的状态信息作为TBA的初始状态。
步骤四:根据步骤三中叉乘后得到的新的转换Büchi自动机(TBA),通过即时检验算法(on-the-fly)检查该TBA并进行预测。
即时检验算法是在Tar jan算法的基础上进行了改进,是基于深度优先搜索(DFS)求解有向图的强连通分量,通过求出转换Büchi自动机(TBA)的所有强连通分量,检查强连通分量是否满足所给定的条件,即其中是否包含所有可接受的状态,如果该集合与TBA的可接受状态集合一致,则此部分行为模型不满足LTL公式,并找到错误路径,警报将尽快发送到操作系统,作为响应,操作系统可能引发异常,此外,操作系统可以记录错误路径以帮助用户尽快找到错误的原因;否则,此部分行为模型满足LTL公式,也就是说,在接下来的k个步骤中是安全的,在这种情况下,操作系统正常运行。
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
Claims (7)
1.一种利用在线模型检验的嵌入式实时操作系统验证方法,其特征在于,包括以下步骤:
步骤一:在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息;通过监测要检查的任务,获得相关变量的详细信息,包括数据类型和内存地址;
步骤二:从所述源代码中抽象出其行为模型,根据预测k步规则将所述行为模型划分为多个部分模型;所述步骤二从源代码中抽象出行为模型包括以下步骤:
步骤A1:根据操作系统的源代码的具体执行过程将操作系统划分为不同的操作模式,每个所述操作模式包含在此模式下活动的任务集;
步骤A2:将源代码的每项任务看作是原子的,将代码编写的程序归约为重复三个步骤:接收输入数据,更新内部状态,产生输出;
步骤A3:操作系统一次处于一种模式,根据源代码的执行过程,确定模式的可能转换,当前模式中的任务的执行结果可以触发到下一模式的转换,其中每个状态代表一种模式,每个转换指定两种不同模式之间可能的转换,用转换系统来表示抽象的行为模型;
步骤三:对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
步骤四:对所述LTL公式f进行取反并归约,得到转换Büchi自动机;
步骤五:当操作系统在运行时触发监控点,所述转换Büchi自动机将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过映射函数转换为抽象状态,发送给所述在线模型检验,从而指导部分行为模型的运行;所述步骤五将监测到的状态信息通过映射函数转换为抽象状态包括以下步骤:
步骤E1:将在源代码中与监测到的具体状态有关的一阶逻辑表达式提取出来,并将有关的表达式重写为函数;
步骤E2:每个映射函数都定义为谓词,该函数将要监视的变量作为参数,返回一个布尔类型的值,该布尔值即为抽象状态;
步骤六:将所述抽象状态作为所述部分模型的初始状态,并将所述部分模型和所述转换Büchi自动机进行叉乘,得到新的转换Büchi自动机,并且监测到的状态信息作为所述新的转换Büchi自动机的初始状态;
步骤七:通过即时检验算法检查所述新的转换Büchi自动机,即检查行为模型是否满足抽取的的形式化性质;若满足,则可判断此部分行为模型满足LTL公式,并且可预测操作系统在接下来的k个步骤中是安全的;若在部分模型中发现错误,则表示当前执行路径中存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足所述的形式化性质。
2.如权利要求1所述的利用在线模型检验的嵌入式实时操作系统验证方法,其特征在于,所述步骤二对行为模型划分为多个部分模型包括以下步骤:
步骤B1:确定预测k步规则中k的具体值;
步骤B2:根据转换系统中的转换关系,从顶点开始,向前走k步,此时为一个部分模型,第k步的状态作为下一个部分模型的顶点,依次划分,最后得到多个部分模型。
3.如权利要求1所述的利用在线模型检验的嵌入式实时操作系统验证方法,其特征在于,所述步骤三对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述包括以下步骤:
步骤C1:从操作系统的事件总线规范中提取所要描述的客户端、服务端、事件、总线相关的自然语言规范;
步骤C2:根据自然语言规范提取性质,并用线性时态逻辑表达式对其进行描述。
5.如权利要求1所述的利用在线模型检验的嵌入式实时操作系统验证方法,其特征在于,所述步骤六将部分模型TS和转换Büchi自动机进行叉乘包括以下步骤:
步骤F1:根据转换系统TS的三元组和转换Büchi自动机的四元组关系,找出两者相同的转换关系作为叉乘的条件;
步骤F2:最终得到新的转换Büchi自动机,转换关系TS的初始状态作为新得到的转换Büchi自动机的初始状态。
6.如权利要求1所述的利用在线模型检验的嵌入式实时操作系统验证方法,其特征在于,所述步骤七即时检验算法包括以下步骤:
步骤G1:首先求出转换Büchi自动机所有的强连通分量;
步骤G2:记录所有的最终状态并统计为一个集合;检查强连通分量是否满足给定条件,即其中是否包含所有可接受状态,如果该集合与转换Büchi自动机的可接受状态集合一致,则此转移系统不满足该LTL公式,系统报错;否则证明此转移系统满足该LTL公式。
7.一种利用在线模型检验的嵌入式实时操作系统验证系统,其特征在于,采用如权利要求1-6之任一项所述的利用在线模型检验的嵌入式实时操作系统验证方法,所述系统包括:
插桩模块,用于在操作系统的源代码中进行插桩,以便在程序执行期间监测实际状态信息;通过监测要检查的任务,获得相关变量的详细信息,包括数据类型和内存地址;
模型划分模块,用于从所述源代码中抽象出其行为模型,根据预测k步规则将所述行为模型划分为多个部分模型;所述从源代码中抽象出行为模型包括:根据操作系统的源代码的具体执行过程将操作系统划分为不同的操作模式,每个所述操作模式包含在此模式下活动的任务集;将源代码的每项任务看作是原子的,将代码编写的程序归约为重复三个步骤:接收输入数据,更新内部状态,产生输出;操作系统一次处于一种模式,根据源代码的执行过程,确定模式的可能转换,当前模式中的任务的执行结果可以触发到下一模式的转换,其中每个状态代表一种模式,每个转换指定两种不同模式之间可能的转换,用转换系统来表示抽象的行为模型;
性质抽取模块,用于对操作系统自然语言规范进行验证性质抽取,通过线性时态逻辑对抽取的性质进行描述,得到LTL公式f;
TBA模块,用于对所述LTL公式f进行取反并归约,得到转换Büchi自动机;
触发模块,当操作系统在运行时触发监控点,所述转换Büchi自动机将发送检查请求,此时操作系统触发在线模型检验,并将监测到的状态信息通过映射函数转换为抽象状态,发送给所述在线模型检验,从而指导部分行为模型的运行;所述将监测到的状态信息通过映射函数转换为抽象状态包括:将在源代码中与监测到的具体状态有关的一阶逻辑表达式提取出来,并将有关的表达式重写为函数;每个映射函数都定义为谓词,该函数将要监视的变量作为参数,返回一个布尔类型的值,该布尔值即为抽象状态;
叉乘模块,用于将所述抽象状态作为所述部分模型的初始状态,并将所述部分模型和所述转换Büchi自动机进行叉乘,得到新的转换Büchi自动机,并且监测到的状态信息作为所述新的转换Büchi自动机的初始状态;
验证模块,用于通过即时检验算法检查所述新的转换Büchi自动机,即检查行为模型是否满足抽取的的形式化性质;若满足,则可判断此部分行为模型满足LTL公式,并且可预测操作系统在接下来的k个步骤中是安全的;若在部分模型中发现错误,则表示当前执行路径中存在潜在错误,则输出反例,并发出警告,通知正在运行的操作系统,并根据所得到的反例对操作系统部分代码进行修正直至满足所述的形式化性质。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910274813 | 2019-04-08 | ||
CN2019102748132 | 2019-04-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110245085A CN110245085A (zh) | 2019-09-17 |
CN110245085B true CN110245085B (zh) | 2023-03-31 |
Family
ID=67887752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910524490.8A Active CN110245085B (zh) | 2019-04-08 | 2019-06-18 | 利用在线模型检验的嵌入式实时操作系统验证方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110245085B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181844B (zh) * | 2020-10-12 | 2022-02-18 | 南京大学 | 一种验证分布式协议活性属性容错机制的检测方法及装置 |
CN113158430B (zh) * | 2021-03-25 | 2022-08-02 | 中国电子科技集团公司第二十九研究所 | 一种高效的在线行为建模作战仿真方法 |
CN113434116B (zh) * | 2021-06-01 | 2022-09-20 | 华东师范大学 | 一种面向周期控制器的以模式为基础的信物融合系统建模及验证方法 |
CN115982059B (zh) * | 2023-03-21 | 2023-07-04 | 麒麟软件有限公司 | Shell脚本检查工具的实现方法 |
CN116383088B (zh) * | 2023-05-06 | 2023-09-05 | 中国科学技术大学 | 一种源代码形式化验证方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN103186451A (zh) * | 2013-03-21 | 2013-07-03 | 中国人民解放军国防科学技术大学 | 一种具有故障预测能力的时序属性监控方法 |
CN103257913A (zh) * | 2013-04-18 | 2013-08-21 | 西安交通大学 | 一种运行时软件故障检测排除系统和方法 |
CN106776208A (zh) * | 2016-12-02 | 2017-05-31 | 中国航天系统科学与工程研究院 | 一种软件运行时故障定位方法 |
CN108509336A (zh) * | 2018-03-05 | 2018-09-07 | 华东师范大学 | 一种操作系统规范形式化验证与测试方法 |
CN108536581A (zh) * | 2018-03-08 | 2018-09-14 | 华东师范大学 | 一种针对源代码的运行时形式化验证方法及系统 |
CN109240907A (zh) * | 2018-07-26 | 2019-01-18 | 华东师范大学 | 基于霍尔逻辑的嵌入式实时操作系统的自动化验证方法 |
CN109522713A (zh) * | 2018-11-15 | 2019-03-26 | 桂林电子科技大学 | 一种基于Büchi自动机化简运行时验证监控器的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8275729B2 (en) * | 2006-05-19 | 2012-09-25 | GM Global Technology Operations LLC | Verification of linear hybrid automaton |
-
2019
- 2019-06-18 CN CN201910524490.8A patent/CN110245085B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814053A (zh) * | 2010-03-29 | 2010-08-25 | 中国人民解放军信息工程大学 | 一种基于功能模型的二进制代码漏洞发现方法 |
CN103186451A (zh) * | 2013-03-21 | 2013-07-03 | 中国人民解放军国防科学技术大学 | 一种具有故障预测能力的时序属性监控方法 |
CN103257913A (zh) * | 2013-04-18 | 2013-08-21 | 西安交通大学 | 一种运行时软件故障检测排除系统和方法 |
CN106776208A (zh) * | 2016-12-02 | 2017-05-31 | 中国航天系统科学与工程研究院 | 一种软件运行时故障定位方法 |
CN108509336A (zh) * | 2018-03-05 | 2018-09-07 | 华东师范大学 | 一种操作系统规范形式化验证与测试方法 |
CN108536581A (zh) * | 2018-03-08 | 2018-09-14 | 华东师范大学 | 一种针对源代码的运行时形式化验证方法及系统 |
CN109240907A (zh) * | 2018-07-26 | 2019-01-18 | 华东师范大学 | 基于霍尔逻辑的嵌入式实时操作系统的自动化验证方法 |
CN109522713A (zh) * | 2018-11-15 | 2019-03-26 | 桂林电子科技大学 | 一种基于Büchi自动机化简运行时验证监控器的方法 |
Non-Patent Citations (6)
Title |
---|
An explicit transition system construction approach to LTL satisfiability checking;Shufang Zhu et al.;《Formal Aspects of Computing》;20180301;第30卷(第02期);全文 * |
End-to-End Automated Verification for OS Kernels;Jizheng Ding et al.;《2018 25th Asia-Pacific Software Engineering Conference (APSEC)》;20190323;全文 * |
LTL公式到自动机的转换;郭建等;《计算机科学》;20080725(第07期);全文 * |
On-the-fly automata construction for dynamic linear time temporal logic;L. Giordano et al.;《Proceedings. 11th International Symposium on Temporal Representation and Reasoning, 2004》;20040719;全文 * |
基于LTL公式展开的程序运行时验证的研究;沈艳;《中国优秀硕士学位论文全文数据库信息科技辑》;20151015(第10期);全文 * |
嵌入式操作系统运行时验证技术研究;张可迪;《中国优秀硕士学位论文全文数据库信息科技辑》;20150115(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110245085A (zh) | 2019-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110245085B (zh) | 利用在线模型检验的嵌入式实时操作系统验证方法及系统 | |
Ernst et al. | The Daikon system for dynamic detection of likely invariants | |
Bozzano et al. | Safety, dependability and performance analysis of extended AADL models | |
Bondavalli et al. | Dependability analysis in the early phases of UML-based system design | |
Bozzano et al. | The COMPASS approach: Correctness, modelling and performability of aerospace systems | |
JP7438205B2 (ja) | モデルベース推論器のためのパラメトリックデータモデリング | |
US11386154B2 (en) | Method for generating a graph model for monitoring machinery health | |
Le Goues et al. | Specification mining with few false positives | |
CN108536581B (zh) | 一种针对源代码的运行时形式化验证方法 | |
Li et al. | Deeplv: Suggesting log levels using ordinal based neural networks | |
Yuan et al. | An approach to cloud execution failure diagnosis based on exception logs in openstack | |
Shrestha et al. | An empirical evaluation of assertions as oracles | |
US20180095861A1 (en) | Automated Test Generation for Structural Coverage for Temporal Logic Falsification of Cyber-Physical Systems | |
Gössler et al. | A general trace-based framework of logical causality | |
Casanova et al. | Diagnosing architectural run-time failures | |
Zheng et al. | On the state of the art in verification and validation in cyber physical systems | |
He et al. | Enhancing spectrum-based fault localization using fault influence propagation | |
Podelski et al. | Classifying bugs with interpolants | |
Fraser et al. | Using model-checkers to generate and analyze property relevant test-cases | |
Tarinejad et al. | Metrics for assessing reliability of self-healing software systems | |
Miele | A fault-injection methodology for the system-level dependability analysis of multiprocessor embedded systems | |
Valueian et al. | Constructing automated test oracle for low observable software | |
Pereira et al. | Practical emulation of software defects in source code | |
Gleirscher et al. | Qualification of proof assistants, checkers, and generators: Where are we and what next? | |
Moradi et al. | Machine learning-assisted fault injection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |