一种基于动态二进制插桩的可回溯仿真方法及系统

文档序号:26278546发布日期:2021-08-13 19:34阅读:124来源:国知局
一种基于动态二进制插桩的可回溯仿真方法及系统

本发明涉及仿真以及容错等相关技术领域,特别涉及一种基于动态二进制插桩的可回溯仿真方法及系统。



背景技术:

传统的推演仿真系统是一种离线的推演系统,整个推演过程可分为三个阶段:准备阶段、推演阶段、评估阶段。准备阶段的主要任务是制作想定文件,并由相关人员依据任务规划,结合想定文件,配置各种资源的初始位置、数量、仿真模型、行动路线等参数。推演阶段由仿真引擎加载上一阶段配置的数据,运行推演并给出推演结果,最后在评估阶段对推演结果进行评估。需要强调的是,仿真进程启动之后,仿真引擎加载初始参数并依照想定自动推演整个仿真事件,在此期间,工作人员不需要也不能对仿真进程做出任何干预。

在线推演需要在推演阶段根据当前仿真事件状态灵活的进行各种人工干预以调整仿真参数,主导仿真事件走向。根据推演阶段不同的人工干预,可以更加快速的推演出各种行动策略,而在线推演的特点就需要整个仿真过程具有可回溯性,否则每次获得一个仿真结果就需要重新从头执行一次仿真程序,这将付出更多的时间和人力成本。

检查点/重启技术是计算机容错领域的主流容错技术,它可以在进程执行期间以指定的时间间隔不断的保存进程的执行状态,形成一系列的检查点,而后在进程崩溃后直接从最近的检查点恢复进程执行状态继续执行,以降低各种错误造成的工作损失。基于检查点的仿真回溯策略是一种提高回溯效率的新方法。然而,大部分现存检查点工具仅仅关注进程的易失性数据而忽略进程持久性数据,这导致了各种各样的文件支持性问题,比如仅支持活动文件、限制文件操作、需要修改仿真程序源代码等。此外,由于仿真程序的特殊性,仿真程序对应检查点往往和仿真时间相关,因此,需要检查点的设置策略可以和仿真事件演进相关。

为一个应用创建检查点,通常需要考虑三个进程组成部分:易失性状态、持久性状态、系统环境。易失性状态是指进程中掉电即失的相关数据,例如:进程栈、数据段、寄存器等。持久性状态是指那些和进程相关的文件和数据库等能够长时间保存的数据。系统环境代表应用需要通过操作系统访问的系统资源,例如交换区和文件系统等。对系统环境不同的理解将设计出不同的检查点工具。现存检查点工具往往将文件相关内容归类于系统环境,因此,他们大多数都不支持文件相关的持久性状态回滚。在过去的20年里,容错领域也诞生了许多独立的文件检查点算法和工具,但是,仍然有许多问题尚未解决。以下列举三个现存文件检查点工具的缺陷:

(1)仅支持幂等操作和极少数非幂等操作。幂等操作包括所有不会改变文件一致性状态的操作,例如文件读操作。而文件写、截断等一系列会改变文件状态的操作均归类于非幂等操作。此类文件检查点算法限制用户应用对文件的操作范围,严重影响用户应用功能实现。

(2)仅支持活动文件。活动文件是指那些在设置检查点时处于打开状态的文件。此类文件检查点工具会在设置检查点时遍历所有处于打开状态的文件句柄,而后记录文件当前长度。在回滚文件状态时,简单的截断文件到之前记录的长度。

(3)必须更改用户应用源代码才可以使用检查点功能。当前,大部分功能较为完善的检查点工具均采用库的形式提供其功能,而用户应用则需要引入库函数才能调用检查点方法。此类方法不仅会增加开发者工作负担,同时也会造成隐藏的缺陷。

此外,容错领域中以固定时间间隔设置检查点的策略在仿真环境下并不适用,需要一种新的、可以根据仿真事件状态设置检查点的新方法。



技术实现要素:

本发明的目的是针对现有技术的不足,提供一种基于动态二进制插桩的可回溯仿真方法及系统,该方法可克服现存文件检查点的各种缺陷,可以根据仿真事件状态设置检查点,进一步实现根据事件推演状态。

第一方面,本发明实施例提供一种基于动态二进制插桩的可回溯仿真方法,应用于仿真系统;所述方法包括:

通过动态二进制插桩方法对正在运行的仿真程序和底层操作系统之间引入虚拟文件层;所述虚拟文件层用于缓冲文件操作到内存;

根据所述动态二进制插桩方法拦截目标函数参数,对仿真系统模型组件的各个接口加以拦截,以获得仿真事件状态;

根据所述仿真事件状态,构建基于事件的检查点。

在一个实施例中,通过二进制插桩方法对正在运行的程序和底层操作系统之间引入虚拟文件层,包括:

封装底层操作系统原生文件操作函数;

利用动态二进制插桩方法,拦截并替换可执行进程对文件接口的调用;以使目标进程对原生接口的访问,调用封装的对应的所述原生文件操作函数;

所述动态二进制插桩方法引入的代码在所述目标进程调用时,获得进程对文件的操作信息;将所述操作信息对应的操作在内存缓冲区中执行。

在一个实施例中,所述仿真程序对应的进程包括仿真进程和服务进程;

根据所述仿真事件状态,构建基于事件的检查点;包括:

根据所述仿真事件状态,设定创建检查点的时机;

创建仿真状态拦截方法;所述拦截方法在预设事件发生后,阻塞仿真进程执行,发出检查点创建信号;

利用动态二进制插桩方法,将所述拦截方法,插入所述仿真进程中;

所述服务进程随时接收所述检查点创建信号,启动内存检查点工具对所述仿真进程设置检查点。

在一个实施例中,所述操作信息对应的操作,包括:

当进程写第一数据时,直接写入缓冲区对应区域;

当进程读第二数据时,从磁盘加载所述第二数据到缓冲区,从缓冲区返回所述第二数据;

当进程访问的第三数据已经在缓冲区存在时,直接返回所述第三数据。

第二方面,本发明实施例还提供一种基于动态二进制插桩的可回溯仿真系统,包括:

虚拟文件层模块,用于通过动态二进制插桩方法对正在运行的仿真程序和底层操作系统之间引入虚拟文件层;所述虚拟文件层用于缓冲文件操作到内存;

状态感知器模块,用于根据所述动态二进制插桩方法拦截目标函数参数,对仿真系统模型组件的各个接口加以拦截,以获得仿真事件状态;

构建事件检查点模块,用于根据所述仿真事件状态,构建基于事件的检查点。

在一个实施例中,所述虚拟文件层模块,包括:

封装单元,用于封装底层操作系统原生文件操作函数;

调用单元,用于利用动态二进制插桩方法,拦截并替换可执行进程对文件接口的调用;以使目标进程对原生接口的访问,调用封装的对应的所述原生文件操作函数;

执行单元,用于所述动态二进制插桩方法引入的代码在所述目标进程调用时,获得进程对文件的操作信息;将所述操作信息对应的操作在内存缓冲区中执行。

在一个实施例中,所述仿真程序对应的进程包括仿真进程和服务进程;所述构建事件检查点模块,包括:

设定单元,用于根据所述仿真事件状态,设定创建检查点的时机;

创建单元,用于创建仿真状态拦截方法;所述拦截方法在预设事件发生后,阻塞仿真进程执行,发出检查点创建信号;

插入单元,用于利用动态二进制插桩方法,将所述拦截方法,插入所述仿真进程中;

设置单元,用于所述服务进程随时接收所述检查点创建信号,启动内存检查点工具对所述仿真进程设置检查点。

在一个实施例中,所述执行单元中的所述操作信息对应的操作,包括:当进程写第一数据时,直接写入缓冲区对应区域;当进程读第二数据时,从磁盘加载所述第二数据到缓冲区,从缓冲区返回所述第二数据;当进程访问的第三数据已经在缓冲区存在时,直接返回所述第三数据。

本发明的优点在于,与现有技术相比,本发明提出的一种基于动态二进制插桩的可回溯仿真方法:

(1)利用动态二进制插桩技术,在不修改仿真程序源代码的情况下,透明的插入一个虚拟文件层,用于拦截所有文件操作。被拦截的文件操作会在内存中的缓冲区执行,不会对磁盘文件做出任何修改,从而避免了内存和磁盘文件在重启检查点时的不一致问题。此外,由动态插桩引入的额外代码和原程序执行在同一个地址空间中,从而统一了内存和磁盘文件,可以利用内存检查点工具统一设置检查点,而不需要对同一个进程的内存和文件部分分别创建一个检查点。

(2)利用动态二进制插桩技术,结合仿真程序特点,通过拦截仿真模型组件相关接口,获取仿真事件状态信息,从而根据仿真事件状态设置检查点。基于事件的检查点设置机制更加适合仿真场景,具有更强的实用性。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明中提供的基于动态二进制插桩的可回溯仿真方法的流程图;

图2为基于组件的仿真系统的结构图;

图3为本发明中提供的基于动态二进制插桩的可回溯仿真方法在仿真系统及操作系统上的应用交互图;

图4为本发明中提供的基于动态二进制插桩的可回溯仿真系统的框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明是通过利用容错领域的检查点/重启技术对仿真程序设置检查点,并利用检查点可以快速重启进程的特性加速仿真回溯效率。然而适用于容错领域的检查点技术并不能直接应用于仿真回溯,仍然有多种如背景技术中所示的困难存在。利用检查点技术实现仿真回溯功能的最大障碍,在于现存检查点工具不支持文件状态,而独立的文件检查点工具又仅仅适用于容错场景。因此,本发明提供一种可以根据仿真事件状态设置检查点的新方法。

具体地,参照图1所示,本发明实施例提供一种基于动态二进制插桩的可回溯仿真方法,应用于仿真系统;该方法包括:

s10、通过动态二进制插桩方法对正在运行的仿真程序和底层操作系统之间引入虚拟文件层;所述虚拟文件层用于缓冲文件操作到内存;

s20、根据所述动态二进制插桩方法拦截目标函数参数,对仿真系统模型组件的各个接口加以拦截,以获得仿真事件状态;

s30、根据所述仿真事件状态,构建基于事件的检查点。

下面分别对上述步骤进行详细的说明。

其中,本发明实施例所应用的仿真系统,是指基于组件的仿真系统;该基于组件的仿真系统开发以模型为中心,通过模型之间的事件传递来模拟真实世界各种实体交互场景。其基本结构如2图所示:仿真系统模型组件包括5个端口,其中输入、输出端口用于模型之间交换信息。初始化端口和功能端口提供给仿真引擎调度,分别用于初始化和执行模型相关功能。元信息端口主要用于查询模型组件的基本信息。本发明实施例中基于事件的检查点设置机制就是拦截这些模型组件接口,从而获得仿真事件信息的。

动态二进制插桩(dynamicbinaryinstrumentation,dbi)技术是一种通过注入插桩代码,来分析二进制应用程序在运行时的行为的方法。动态二进制插桩技术,可以在不影响程序动态执行结果的前提下,按照用户的分析需求,在程序执行过程中插入特定分析代码,实现对程序动态执行过程的监控与分析。

上述步骤s10中对正在运行的仿真程序和底层操作系统之间引入虚拟文件层,利用虚拟文件层解决内存检查点工具不支持文件的问题,以及基于事件的检查点设置机制。其中,虚拟文件层用于缓冲文件操作到内存,从而可以利用内存检查点工具设置完整检查点,同时,动态二进制插桩技术的引入也避免了对目标系统源代码的修改,虚拟文件层的创建以及工作机制如下:

(1)封装底层操作系统原生文件操作函数;底层操作系统比如windows系统、linux系统等。操作函数例如open、close、write、read等。

(2)利用动态二进制插桩技术,拦截并替换可执行进程对文件接口的调用,使目标进程对原生接口的访问,最终都会调用上述封装好的对应的操作函数。

(3)这些动态二进制插桩引入的代码会在目标进程调用时获得进程对文件的操作信息,然后将这些操作在内存缓冲区中执行。具体操作是,当进程写第一数据时,直接写入缓冲区对应区域,不对文件做出任何修改。当进程读第二数据时,首先从磁盘加载第二数据到缓冲区,而后从缓冲区返回第二数据。当进程访问的第三数据已经在缓冲区存在时,可以直接返回第三数据而不需要从磁盘加载。为了便于清楚的描述上述操作方式,对操作的数据分别命名为第一、第二和第三数据,这些数据可相同也可不同;只是便于描述进程对读、写和访问数据的具体操作。

上述步骤s20~s30中基于事件的检查点设置机制依托动态二进制插桩技术可以拦截目标函数参数的特性,对仿真系统模型组件的各个接口加以拦截,从而获得仿真事件状态,基于事件的检查点创建策略以及工作方式如下:

(1)设定创建检查点的时机,例如:当仿真时间大于500s,或者某个模型组件到达指定区域。

(2)创建仿真状态拦截方法,这些方法会在指定事件发生后,阻塞仿真进程执行,发出检查点创建信号。

(3)利用动态二进制插桩技术,将事件拦截方法,插入仿真进程中。

(4)与仿真进程同时执行的还有一个服务进程,该进程会随时接收检查点创建信号,启动内存检查点工具对仿真进程设置检查点。

本实施例中,步骤s10引入虚拟文件层、步骤s20~s30作为状态感知器感知仿真事件状态,并构建基于事件的检查点。通过采用虚拟文件层解决进程重启时的状态不一致问题。虚拟文件层由一系列封装了操作系统文件访问接口的函数和一个缓冲区组成,它存在的主要目的是统一用户应用的内存和文件数据,从而可以利用内存检查点工具转储完整的进程数据。如图3所示,虚拟文件层介于仿真进程与操作系统之间,所有的文件访问操作均需通过该层。仿真进程直接从缓冲区中读取自己需要的数据而不是直接访问磁盘,若目标数据不存在于缓冲区中,则先由虚拟文件层加载对应数据块,然后再返回目标数据。同样的,进程的写操作直接写数据到缓冲区,而存储于磁盘的文件自始至终都保持不变。和其他文件检查点工具不同,本实施例中的虚拟文件层并不关注如何创建一个文件检查点,而仅仅将文件操作缓冲在内存中。具体检查点创建工作可交付于现存的任何一个检查点工具。在仿真系统中,使用模型组件模拟真实世界的实体,并由仿真引擎通过功能端口轮询调度模型组件,推进仿真事件的演进。状态感知器在仿真引擎调度模型组件,以及模型组件之间交互时拦截相关活动,并获取相关数据,例如仿真时间、事件类型、消息内容等信息,从而达到实时监控仿真事态演进的目的。

本发明实施例提供的基于动态二进制插桩的可回溯仿真方法,利用动态插桩技术,在不修改仿真系统源代码的情况下,透明的插入一个虚拟文件层,用于拦截所有文件操作。被拦截的文件操作会在内存中的缓冲区执行,不会对磁盘文件做出任何修改,从而避免了内存和磁盘文件在重启检查点时的不一致问题。此外,由动态插桩引入的额外代码和原程序执行在同一个地址空间中,从而统一了内存和磁盘文件,可以利用内存检查点工具统一设置检查点,而不需要对同一个进程的内存和文件部分分别创建一个检查点。另一方面通过利用动态插桩技术,结合仿真系统特点,通过拦截仿真模型组件相关接口,获取仿真事件状态信息,从而根据仿真事件状态设置检查点。基于事件的检查点设置机制更加适合仿真场景,具有更强的实用性。

比如将整个仿真状态空间定义为所有模型组件状态的集合:

p=p1×p2×p3×…

其中pi表示模型组件的状态。在选择检查点设置时间点时,用户可能关心特定模型实例的状态,也可能关心某个或者某些类别模型的状态。为此,可定义一系列的方法用于处理这些问题,

boolarise(model,event,num)当指定类型组件(model)发生指定事件(event)达到num之后,返回true。

boolarise(instance,event,num)当指定实例组件(instance)触发指定事件(event)达到num之后,返回true。

booltime(simtime)当仿真时间达到指定时间(simtime)后,返回true。

boolarrive(instance,region)当指定实例到达指定区域后,返回true。

类似以上的函数还有很多,下面举例说明以上方法使用场景:

例一:当战机弹药耗尽时,创建检查点:

arise(figther,exhausted,f_all)

figther指模型组件中的战机,f_all是战机实例的数量。

例二:当所有弹药耗尽时,创建检查点:

arise(figther,exhausted,f_all)&arise(tank,exhausted,t_all)

例二中假设仿真事件中仅仅包括坦克和战机两种模型组件的实例。

与现有的应用与容错领域的检查点设置方法不同,本发明采用的检查点方法不仅支持内存,同时支持磁盘文件。此外,摒弃了现存文件检查点的各种缺陷,例如限制进程的文件访问方式、仅支持活动文件、引入检查点功能需要修改系统源代码等。针对仿真应用的特性,本发明进一步提出了一种更加合理的检查点设置机制,即基于事件的检查点设置策略。相比于容错场景下,检查点的设置仅和时间相关,基于事件的检查点设置方式可以根据事件推演状态,动态的设置事件相关检查点。

基于同一发明构思,本发明实施例还提供了一种基于动态二进制插桩的可回溯仿真系统,由于该系统所解决问题的原理与一种基于动态二进制插桩的可回溯仿真方法相似,因此该系统的实施可以参见前述方法的实施,重复之处不再赘述。

参照图4所示,本发明实施例还提供一种基于动态二进制插桩的可回溯仿真系统,包括:

虚拟文件层模块41,用于通过动态二进制插桩方法对正在运行的仿真程序和底层操作系统之间引入虚拟文件层;所述虚拟文件层用于缓冲文件操作到内存;

状态感知器模块42,用于根据所述动态二进制插桩方法拦截目标函数参数,对仿真系统模型组件的各个接口加以拦截,以获得仿真事件状态;

构建事件检查点模块43,用于根据所述仿真事件状态,构建基于事件的检查点。

在一个实施例中,所述虚拟文件层模块41,包括:

封装单元411,用于封装底层操作系统原生文件操作函数;

调用单元412,用于利用动态二进制插桩方法,拦截并替换可执行进程对文件接口的调用;以使目标进程对原生接口的访问,调用封装的对应的所述原生文件操作函数;

执行单元413,用于所述动态二进制插桩方法引入的代码在所述目标进程调用时,获得进程对文件的操作信息;将所述操作信息对应的操作在内存缓冲区中执行。

在一个实施例中,所述仿真程序对应的进程包括仿真进程和服务进程;所述构建事件检查点模块43,包括:

设定单元431,用于根据所述仿真事件状态,设定创建检查点的时机;

创建单元432,用于创建仿真状态拦截方法;所述拦截方法在预设事件发生后,阻塞仿真进程执行,发出检查点创建信号;

插入单元433,用于利用动态二进制插桩方法,将所述拦截方法,插入所述仿真进程中;

设置单元434,用于所述服务进程随时接收所述检查点创建信号,启动内存检查点工具对所述仿真进程设置检查点。

在一个实施例中,所述执行单元413中的所述操作信息对应的操作,包括:当进程写第一数据时,直接写入缓冲区对应区域;当进程读第二数据时,从磁盘加载所述第二数据到缓冲区,从缓冲区返回所述第二数据;当进程访问的第三数据已经在缓冲区存在时,直接返回所述第三数据。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1