一种基于双操作系统的高实时大数据量测试回放方法

文档序号:6510284阅读:115来源:国知局
一种基于双操作系统的高实时大数据量测试回放方法
【专利摘要】一种基于双操作系统的高实时大数据量测试回放方法,解决高实时大数据量测试回放的难题,首先数据生产节点申请数据缓存区,数据消费者节点申请数据缓存区、初始化所有缓存区,找数据文件并获取数据到缓存区中,初始化网络连接,数据消费节点向数据生产节点请求数据,数据生产节点向数据消费节点返回数据,数据消费节点按照任务调度要求从缓存中取数。本发明可以有效避免数据文件过大导致文件传输时间长的问题,随着数据文件的增大,测试系统用于测试回放的开销不会明显增大。另外,通过缩短每次通信数据包的长度,也可以有效避免多个变量同时需要传输数据时造成的网络拥堵,提高系统的可靠性。
【专利说明】一种基于双操作系统的高实时大数据量测试回放方法
【技术领域】
[0001]本发明涉及一种基于双操作系统的高实时大数据量测试回放方法,属于嵌入式软件测试领域。
【背景技术】
[0002]在常见的测试系统中,测试用例一般以脚本的方式实现,或者直接以代码的形式实现。然而,在实际的测试过程中,有的时候测试人员需要数据以序列化的方式变化,比如对飞行轨迹进行仿真或者根据某一段时间内某一地区的温度特点建立仿真模型等。在构建测试环境的时候这种需求尤其常见,例如,在某被测系统中,组件I向组件2发送数据,组件2根据组件I发送的数据做出相应的反馈,在构建组件2的测试环境的时候,传统的方法要求测试人员对组件I的功能和结构有相当的理解,必须能够模拟组件I的工作过程,然而模拟组件I工作过程将会消耗大量的时间和人力物力,并且可能由于保密需求以及开发方配合不足等原因导致模拟组件I的工作最终失败。假如能够将组件I在各种工作阶段各种工作状态下发出的数据保存下来并且由测试系统模拟组件I发送给组件2,则很快便可以构建组件2的半实物仿真测试环境。
[0003]针对这种无规律变化的数据,或者是因为实现难度大、运行效率低等原因无法以算法模拟变化的数据,必须提供一种方法,能够将前次测试过程中的测试数据保存下来,并且能够将这些数据实时地输出给被测系统。
[0004]目前的嵌入式软件不仅功能日趋复杂,性能也越来越高,许多软件进行信息交换的周期能够达到毫秒级甚至达到微秒级,故要求嵌入式软件的测试系统最小运行周期能够达到毫秒级乃至微秒级;同时,频繁的通信也使测试过程中产生的数据量增大,通讯周期小和数据量大是高实时大数据量测试回放的难点。
[0005]采用Windows系统作为运行环境的测试系统操作简便,界面友好,可以方便地将测试数据保存到磁盘上并且在测试过程中打开数据文件进行输出,但是实时性很差,不能满足嵌入式软件测试的需求WxWorks操作系统是一种实时操作系统,实时性完全能够满足毫秒级乃至微秒级的测试,但是VxWorks操作系统界面不够友好,更重要的是作为一种实时嵌入式系统,Vxfforks系统并不适于操作硬盘文件,尤其是大数据量的数据文件,为达到测试回放的目的,需要打开硬盘中的数据文件获取其中的内容再通过总线接口发送,如果采用一次性读取文件内容到内存中的方法,需要消耗很大一块内存空间,甚至引起内存错误,系统崩溃;相对的,如果分多次读取数据文件,每次只读入固定长度的一部分内容,又需要频繁地操作硬盘,很容易影响实时任务的运行。

【发明内容】

[0006]本发明的技术解决问题:克服现有技术的不足,提供一种基于双操作系统的高实时大数据量测试回放方法,能够在实施测试时将数据文件从总线接口上发送出去,也支持将用户自行编写的数据文件作为数据的来源;支持运行周期达到毫秒级的测试,不会频繁的操作VxWorks系统或者其他实时操作系统的硬盘,另外随着数据量增大测试回放消耗的内存资源不会明显地增大。
[0007]本发明技术解决方案:一种基于双操作系统的高实时大数据量测试回放方法,首先要解决的问题是数据的来源,通过对常见数据格式的支持,用户可以通过手动编写,算法生成等各种方法生成数据文件;测试系统一般都具有采集测试数据的能力,通过规定一种统一的格式,测试系统采集的测试数据可以很容易地生成数据文件并在以后的测试活动中作为数据来源使用。具体的文件格式随着本方法应用的测试系统不同可能有所不同,然而以矩阵形式将数据存储在数据文件中是基本的要素。
[0008]为达到高实时测试回放要求,本发明必须能够在很短的时间内从数据文件中获取数据并且从总线接口上发送出去,这部分实时性要求严格的任务必须运行于实时操作系统,例如VxWorks,实时Iinux等;由于测试活动的工作周期很小,故数据文件中的数据量往往很大,将数据文件一次性读入内存会消耗过多内存资源,所以应该将数据文件划分为固定大小的数据块,每次读取并处理一定长度的数据,然而这样一来就要求频繁的操作硬盘,可能影响实时任务的执行,这部分任务对实时性没有要求,故可以将其放在windows操作系统上进行,一方面很多的测试系统采集回的测试数据都是在windows系统上进行分析和处理的,可以直接将这些测试数据导出为数据文件,另一方面用户也可以很方便地直接在windows上编写数据文件。按照角色将运行非实时操作系统并且操作数据文件的节点称为“数据生产节点”,将运行实时操作系统并真正操作总线接口发送测试数据的节点称为“数据消费节点”。
[0009]本发明从数据文件中获取数据从总线接口发送以便实现测试回放的实现过程如下:
[0010](I)数据生产节点根据数据文件对应的变量的长度计算需要申请的缓存区的空间,具体的计算方法为(一次读取入缓存区中数据的条数k*变量的长度)。如果测试系统中存在多个变量需要同时从数据文件中获取数据,则需要分别根据各变量的长度为每个变量申请一个缓存区。每次读取入缓存区中数据的条数k根据数据生产节点内存条件和需要申请的缓存区数量以及缓存区中每条数据的长度决定,内存比较大则可适当增加每次读取的条数,需要申请缓存区的数量多或者缓存区中每条数据的长度长则减小每次读取的条数以便减少对内存的消耗。
[0011](2)数据消费节点遍历所有的变量,统计需要从数据文件中获取数据进行测试回放的变量数以及变量的ID和变量的长度等信息。为每个变量申请一组缓存区用于存放数据文件中的数据,每组缓存区包括η块大小一样的缓存区,缓存区的大小为变量的长度乘以缓存区中保存的数据的层数,这里所指的层数即缓存区中的数据可供变量消费的次数,可获取一次为一层。每个变量在数据消费节点上的缓存区由η块缓存区组成,以避免读写冲突,η的大小取决于操作系统读写内存的速度,速度越快则η越小。
[0012](3)所有的缓存区初始化并记录开始位置,缓存区大小以及目前操作的位置等信息,数据消费节点每一个需要生产数据的变量记录自己当前操作的是哪块缓存。数据消费节点的每个缓存区对应一个读写状态标签,用于记录缓存区的读写数据的状态,以便在缓存区中的数据消费完成后做出相应的处理。
[0013](4)打开数据文件并获取数据到缓存区中,记录数据生产节点从每个数据文件中获取数据的次数以便计算下次从文件中获取数据的位置,具体的计算方法为(一次读取入缓存区中数据的条数k*获取数据的次数),每次打开某个数据文件的时候,从该位置开始,获取k条数据(k为一次读取入缓存区中数据的条数)存入该数据文件对应的变量的缓存区,如果文件中的数据不足则向缓存区中插入结束符。
[0014](5)数据生产节点作为数据传送服务器端进入监听状态,数据消费节点作为客户端绑定事先约定的端口并连接服务器端。
[0015](6)数据消费节点向数据生产节点发送消息,要求数据生产节点开始生产数据,消息的内容包括请求生成数据的变量的ID,请求数据的层数以及所请求的数据将要存入哪块缓存区;数据生产节点收到消息之后根据消息中变量的ID到该变量所属的数据缓存区中获取数据,如果缓存区中的数据小于数据消费节点请求的层数,则重复步骤2,从文件中获取数据,如果要发送的数据中有结束符存在,说明缓存中的数据已经不足以满足数据消费节点的请求,则只向数据消费节点发送有效数据,发送数据之前,通过发消息进行握手,消息的内容包括本次所发的数据所属变量的ID,本次所发的数据包的长度,以及数据包中的数据应该存入哪块缓存。
[0016](7)数据消费节点根据数据生产节点所发消息判断收到数据后的处理方式,主要包括数据应该存入哪块缓存,以及数据长度是否满足请求等。数据生产节点发送过来的握手消息中包括数据所属变量的ID以及数据包中的数据应该存入变量的哪块缓存,根据这两个信息可以得知数据应该存入哪块缓存中。如果数据生产节点返回的数据层数与请求的层数一致,则将数据存入缓存中等待调度任务获取数据并赋值给变量;如果数据生产节点返回的数据层数大于请求的层数,则说明通信过程出现错误,给出警告;如果数据生产节点返回的数据层数小于请求的层数,则说明数据文件中的数据已经使用完毕,数据消费节点不再向数据生产节点请求数据,两块缓存区中的数据消费完毕后停止数据回放操作。
[0017](8)数据消费节点按照调度算法的要求从缓存中获取数据,每次获取一层,
[0018]当一块缓存区中的数据全部被获取之后,根据缓存区的读写状态标签的值判断数据消费节点应该做出什么操作:如果本缓存区上次获取的数据长度和请求的相同,说明数据生产节点还可以生产足够的数据;如果本缓存区上次获取的数据小于请求的数据,则说明数据生产节点已经不能生产足够的数据,则将本变量所属的缓存区中的数据都消费完后停止数据回放操作;如果本缓存区上次获取的数据长度大于请求的长度,说明系统运行出错,给出警告并停止测试回放操作。
[0019]本发明与现有技术相比的优点在于:本发明提供了一种方法解决了高实时大数据量测试回放的难题,通过划分数据生产节点和数据消费节点两种角色并赋予不同的职责,运行与实时操作系统之上的数据消费节点不需要花费大量的时间打开磁盘文件,也不需要维护读取文件的索引,只要根据自己的要求从缓存区中取数即可,从而充分的发挥了实时操作系统的优势,使得采用本发明的测试系统能够支持高实时嵌入式软件的测试回放;同时采取分层传送数据的方式,每次读取有限层数据,可以有效避免数据文件过大导致文件传输时间长的问题,随着数据文件的增大,测试系统用于测试回放的开销不会明显增大。另夕卜,通过缩短每次通信数据包的长度,也可以有效避免多个变量同时需要传输数据时造成的网络拥堵,提高系统的可靠性。【专利附图】

【附图说明】
[0020]图1为基于双操作系统的高实时大数据量测试回放方法的流程示意图;
[0021]图2为本发明方法中的数据转移示意图;
[0022]图3为本发明方法中数据从数据文件传送到数据消费节点的实现过程;
[0023]图4为本发明方法中数据生产节点收到数据请求之后操作的实现过程;
[0024]图5为本发明方法中数据消费节点收到数据之后操作的实现过程;
【具体实施方式】
[0025]为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
[0026]本发明的目的在于克服现有技术的不足,提供一种基于双操作系统的高实时大数据量测试回放方法,通过本发明,测试系统可以将测试过程中采集到的测试数据导出为数据文件,在实施测试时将数据文件从总线接口上发送出去,也可以支持将用户自行编写的数据文件作为数据的来源。本发明必须支持运行周期达到毫秒级的测试,不能频繁的操作VxWorks系统或者其他实时操作系统的硬盘,另外随着数据量增大测试回放消耗的内存资源不应该明显地增大。
[0027]为更清楚的介绍本发明在具体实施例中的应用,首先对实施例针对的系统的结构做简单介绍:
[0028]本测试系统是实时测试系统,实时任务运行与VxWorks系统之上,对实时性要求不高的任务运行于Windows系统之上,例如人机交互、测试数据分析等,测试过程中产生的测试数据会在测试结束后存入MySql数据库中。
[0029]首先为实现测试回放,测试系统产生的测试数据必须能够以某种格式重新输入到测试系统中并且使测试系统中的变量按照数据的变化而变化,这就要求测试系统必须具备将测试结果导出为数据文件的能力。
[0030]本实施例中的测试系统测试结果保存在MySql数据库中,通过选择导出的数据文件的列可配置需要导出的变量,生成不同的SQL语句并从数据库中获取结果,然后以矩阵的形式将结果输出到文本中,其中,同一变量的结果保存于同一列中,列中间使用制表符分害I]。对于其他测试系统,只要统一了导出的数据文件的格式,都可以采用本发明的方法进行测试回放,和测试系统本身的架构、实现技术以及测试结果的保存格式都无关。用户也可以手动编写或者以算法生成数据文件,只要按照上文所属的格式,都可以应用于本测试回放方法中。
[0031]如图1所示,本发明在实施例中的具体步骤如下:
[0032]步骤一:数据生产节点首先应该在内存中申请缓存区用于存放从数据文件中获得的数据,系统中可能同时存在多个需要从数据文件中获取数据进行测试回放的变量,故而必须记录每个变量对应的数据文件。实施例中的测试系统数据生产节点上使用类来管理变量的属性信息,为变量的类增加一个字符串成员,用于记录变量对应的数据文件;对于其他应用本发明的测试系统,如果原系统采用类或者结构体记录变量的属性,则在其中增加成员记录变量对应的数据文件即可,如果原系统没有类似的结构对变量属性进行管理,可使用数组将变量ID与数据文件一一对应并做以记录。[0033]测试系统中各变量的长度可能不同,根据数据文件对应的变量的长度计算需要申请的缓存区的空间,具体的计算方法为(一次读取入缓存区中数据的条数k*变量的长度)。如果测试系统中存在多个变量需要同时从数据文件中获取数据,则需要分别根据各变量的长度为每个变量申请一个缓存区。每次读取入缓存区中数据的条数k根据数据生产节点内存条件和需要申请的缓存区数量以及缓存区中每条数据的长度决定,内存比较大则可适当增加每次读取的条数,需要申请缓存区的数量多或者缓存区中每条数据的长度长则减小每次读取的条数以便减少对内存的消耗。本实施例中每条数据长度与对应的变量长度相同,最大为1024字节,测试系统支持的变量数为300个,故本发明实施例中将k定为1000可以保证系统有足够的内存完成数据回放任务。
[0034]步骤二:数据消费节点从数据生产节点获取变量的各种属性信息,遍历所有的变量,统计需要从数据文件中获取数据进行测试回放的变量数以及变量的ID和变量的长度等信息。为每个变量申请一组缓存区用于存放数据生产节点产生的数据,每组缓存区包括η块大小一样的缓存区,缓存区的大小为变量的长度乘以缓存区中保存的数据的层数,这里所指的层数即缓存区中的数据可供变量消费的次数,可获取一次为一层。为避免数据生产节点向数据消费节点发送数据窗口期过长导致网络拥堵,每次获取数据的层数不宜过多,本发明的实施例中每次获取数据的层数为20层,而系统支持的最大变量长度为1024字节,这样获取一次数据最大长度为20kB,对支持多任务实时运行的VxWorks系统来说,接收和处理20kB的数据消耗很小,即便以十微秒级的周期进行测试也只是需要200微秒内传递20kB的数据,不会影响实时任务的运行,对网络造成的负荷也很小。本发明实施例中,实时仿真节点运行于实时操作系统VxWorks之上,拷贝数据的速度很快,故每个变量使用两块缓存区交替保存数据即可。
[0035]本发明中数据生产节点和数据消费节点之间的数据转移过程可见图2。
[0036]本发明中数据生产节点生产数据和数据消费节点消费数据的实现过程可见图3。
[0037]步骤三:所有的缓存区初始化并记录开始位置,缓存区大小以及目前操作的位置等信息,数据消费节点每一个需要生产数据的变量记录自己当前操作的是哪块缓存。在本发明的实施例中,使用memset函数将所有的缓存区初始化为0,使用一个结构体管理所有缓存区的开始位置、目前操作位置、缓存区大小、以及每一个变量目前操作的是自己的哪块缓存等等信息。数据消费节点的每个缓存区对应一个读写状态标签dataRWLabel,用于记录缓存区读写数据的状态,以便在缓存区中的数据消费完成后做出相应的处理。
[0038]步骤四:打开数据文件并且获取数据到缓存区中,记录数据生产节点从每个数据文件中获取数据的次数以便计算下次从文件中获取数据的位置,具体的计算方法为(1000*获取数据的次数),每次打开某个数据文件的时候,从该位置开始,获取1000条数据存入该数据文件对应的变量的缓存区,如果文件中的数据不足则向缓存区中插入结束符,实施例中使用“$”作为结束符。
[0039]步骤五:数据生产节点作为数据传送服务器端进入监听状态,数据消费节点为每个需要从网络上获取数据的变量打开一个客户端并绑定事先约定的端口连接到服务器端。
[0040]步骤六:数据回放以数据消费节点向数据生产节点请求数据为起点,在本发明的实施例中,测试系统在测试开始前须经过测试初始化操作,在测试初始化进行的时候向数据生产节点请求数据将每个变量的两块缓存区都填满数据可以降低测试进行时对系统资源的消耗,保证测试一开始数据消费节点的缓存区中即有足够的数据进行数据回放操作。数据消费节点向数据生产节点发送消息,要求数据生产节点开始生产数据,消息的内容包括请求生成数据的变量的ID,请求数据的层数以及所请求的数据将要存入哪块缓存区;数据生产节点收到消息之后根据消息中变量的ID到该变量所属的数据缓存区中获取数据,如果缓存区中剩余的数据小于数据消费节点请求的层数,则重复步骤2,从文件中获取数据。向数据消费节点发送数据之前首先检查缓存区中的数据,如果要发送的数据中有结束符存在,说明缓存区中的数据已经不足以满足数据消费节点的请求,则只向数据消费节点发送有效数据。发送数据之前,通过发消息进行握手,消息的内容包括本次所发的数据所属变量的ID,本次所发的数据包的长度,以及数据包中的数据应该存入哪块缓存。数据生产节点收到数据消费节点的数据请求消息之后的操作的实现过程可见图4。
[0041]步骤七:数据消费节点根据数据生产节点所发消息判断收到数据后的处理方式,该步骤的实现过程可见图5。主要包括数据应该存入哪块缓存,以及数据长度是否满足请求等。数据生产节点发送过来的握手消息中包括数据所属变量的ID以及数据包中的数据应该存入变量的哪块缓存,根据这两个信息可以得知数据应该存入哪块缓存中。
[0042]通过握手消息中的数据包长度可以确定需要接收的数据包大小,为保证实时性,从网络中接收数据包的工作不应该影响系统任务调度的运行,故应该运行于独立的线程中,在本实施例中,数据消费节点运行的系统是VxWorks系统,故从网络中接收数据包的工作应该运行于独立的任务,在初始化缓存区的时候每个需要从网络获取数据的变量都调用taskSpawn ()函数产生一个任务,该任务的优先级应该低于系统调度任务的优先级,任务的入口函数循环获取信号量,获取不到信号量则处于空转状态;如果从网络上获得了握手消息则进入工作状态,调用fioRead ()函数从网络上获取数据。文中所述的函数是VxWorks系统接口函数,如果本发明应用于其他系统,则调用的函数和操作可能不同,但具体的算法可以沿用。
[0043]从网络中接收的数据需要判断其长度与请求的长度是否一致来决定后续操作,通过给缓存区读写状态标签dataRWLabel赋以不同的值,在后续操作中可以根据该标签的值判断数据生产节点的工作状态。如果数据生产节点返回的数据层数与请求的层数一致,则将数据存入缓存中等待调度任务获取数据并赋值给变量,将dataRWLabel赋值为I ;如果数据生产节点返回的数据层数大于请求的层数,则说明通信过程出现错误,给出警告,将dataRWLabel赋值为44 ;如果数据生产节点返回的数据层数小于请求的层数,则说明数据文件中的数据已经使用完毕,数据消费节点不再向数据生产节点请求数据,两块缓存区中的数据消费完毕后停止数据回放操作,将当前缓存区对应的dataRWLabel赋值为88,将另一块缓存对应的dataRWLabel赋值为66。
[0044]步骤八:数据消费节点按照调度算法的要求从缓存中获取数据,每次获取一层,当一块缓存区中的数据全部被获取之后,根据缓存区的读写状态标签dataRWLabel的值判断数据消费节点应该做出什么操作:
[0045]I)如果本缓存区上次获取的数据长度和请求的相同,也就是说dataRWLabel==l,说明数据生产节点还可以生产足够的数据,向数据生产节点发出消息请求数据到当前的缓存区并且开始从另一块缓存读取数据;
[0046]2)如果本缓存区上次获取的数据小于请求的数据,也就是说dataRWLabel==88,则说明数据生产节点已经不能生产足够的数据,则本缓存区中的数据全部消费之后不再向数据生产节点请求数据,将本缓存区中的数据都消费完后停止数据回放操作;
[0047]3)如果本缓存区上次获取的数据长度大于请求的长度,说明系统运行出错,给出警告并停止测试回放操作。
[0048]4)如果dataRWLabel==66,说明数据生产节点已经不能继续生产足够的数据,且另一个缓存区获取了最后生产的数据,本缓存区中的数据全部消费之后不再向数据生产节点请求数据,将所有缓存区中的数据消费完后停止数据回放操作。
[0049]数据文件消费完和测试过程停止都会造成数据回放停止,在这个过程中需要进行以下工作:
[0050]I)将所有的数据缓存区都清空,所有的指针指向NULL,如果申请缓存区用到动态申请,则须释放动态申请的空间。
[0051]2)停止并删除所有用于从网络上获取数据的任务,在本实施例中调用KERNEL_taskDelete ()函数完成本项工作。
[0052]3)断开各客户端到服务器端的连接并关闭客户端和数据生产节点上的服务器端。
[0053]本发明未详细阐述部分属于本领域公知技术。
[0054]以上所述,仅为本发明部分【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
【权利要求】
1.一种基于双操作系统的高实时大数据量测试回放方法,其特征在于:将运行非实时操作系统并且操作数据文件的节点称为数据生产节点,将运行实时操作系统并真正操作总线接口发送测试数据的节点称为数据消费节点,实现步骤如下: (1)数据生产节点根据数据文件对应的变量的长度计算需要申请的缓存区的空间,具体的计算方法为一次读取入缓存区中数据的条数k*变量的长度;如果测试系统中存在多个变量需要同时从数据文件中获取数据,则需要分别根据各变量的长度为每个变量申请一个缓存区;每次读取入缓存区中数据的条数k根据数据生产节点内存条件和需要申请的缓存区数量以及缓存区中每条数据的长度决定,内存比较大则可适当增加每次读取的条数,需要申请缓存区的数量多或者缓存区中每条数据的长度长则减小每次读取的条数以便减少对内存的消耗; (2)数据消费节点遍历所有的变量,统计需要从数据文件中获取数据进行测试回放的变量数以及变量的ID和变量的长度信息,为每个变量申请一组缓存区用于存放数据文件中的数据,每组缓存区包括η块大小一样的缓存区,缓存区的大小为变量的长度乘以缓存区中保存的数据的层数,所述层数即缓存区中的数据可供变量消费的次数,可获取一次为一层;每个变量在数据消费节点上的缓存区由η块缓存区组成,以避免读写冲突,η的大小取决于操作系统读写内存的速度,速度越快则η越小; (3)所有的缓存区初始化并记录开始位置,缓存区大小以及目前操作的位置信息,数据消费节点每一个需要生产数据的变量记录自己当前操作的是哪块缓存;数据消费节点的每个缓存区对应一个读写状态标签,用于记录缓存区的读写数据的状态,以便在缓存区中的数据消费完成后做出相应的处理; (4)打开数据文件并获取数据到缓存区中,记录数据生产节点从每个数据文件中获取数据的次数以便计算下次从文件中获取数据的位置,具体的计算方法为一次读取入缓存区中数据的条数k*获取数据的次数,每次打开某个数据文件的时候,从该位置开始,获取k条数据,将k条数存入该数据文件对应的变量的缓存区,如果文件中的数据不足则向缓存区中插入结束符;
(5)数据生产节点作为数据传送服务器端进入监听状态,数据消费节点作为客户端绑定事先约定的端口并连接服务器端; (6)数据消费节点向数据生产节点发送消息,要求数据生产节点开始生产数据,消息的内容包括请求生成数据的变量的ID,请求数据的层数以及所请求的数据将要存入哪块缓存区;数据生产节点收到消息之后根据消息中变量的ID到该变量所属的数据缓存区中获取数据,如果缓存区中的数据小于数据消费节点请求的层数,则重复步骤(2),从文件中获取数据,如果要发送的数据中有结束符存在,说明缓存中的数据已经不足以满足数据消费节点的请求,则只向数据消费节点发送有效数据,发送数据之前,通过发消息进行握手,消息的内容包括本次所发的数据所属变量的ID,本次所发的数据包的长度及数据包中的数据应该存入哪块缓存; (7)数据消费节点根据数据生产节点所发消息判断收到数据后的处理方式,主要包括数据应该存入哪块缓存,以及数据长度是否满足请求;数据生产节点发送过来的握手消息中包括数据所属变量的ID以及数据包中的数据应该存入变量的哪块缓存,根据这两个信息能够得知数据应该存入哪块缓存中;如果数据生产节点返回的数据层数与请求的层数一致,则将数据存入缓存中等待调度任务获取数据并赋值给变量;如果数据生产节点返回的数据层数大于请求的层数,则说明通信过程出现错误,给出警告;如果数据生产节点返回的数据层数小于请求的层数,则说明数据文件中的数据已经使用完毕,数据消费节点不再向数据生产节点请求数据,两块缓存区中的数据消费完毕后停止数据回放操作; (8)数据消费节点按照调度算法的要求从缓存中获取数据,每次获取一层,当一块缓存区中的数据全部被获取之后,根据缓存区的读写状态标签的值判断数据消费节点应该做出什么操作:如果本缓存区上次获取的数据长度和请求的相同,说明数据生产节点还可以生产足够的数据;如果本缓存区上次获取的数据小于请求的数据,则说明数据生产节点已经不能生产足够的数据,则将本变量所属的缓存区中的数据都消费完后停止数据回放操作;如果本缓存区上次获取的数据长度大于请求的长度,说明系统运行出错,给出警告并停止测试回放 操作。
【文档编号】G06F11/36GK103440200SQ201310399154
【公开日】2013年12月11日 申请日期:2013年9月5日 优先权日:2013年9月5日
【发明者】杨顺昆, 刘斌, 司维 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1