CN102346681B - 一种通用模拟器 - Google Patents

一种通用模拟器 Download PDF

Info

Publication number
CN102346681B
CN102346681B CN201010282456.3A CN201010282456A CN102346681B CN 102346681 B CN102346681 B CN 102346681B CN 201010282456 A CN201010282456 A CN 201010282456A CN 102346681 B CN102346681 B CN 102346681B
Authority
CN
China
Prior art keywords
entity
event
module
simulation
entities
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.)
Expired - Fee Related
Application number
CN201010282456.3A
Other languages
English (en)
Other versions
CN102346681A (zh
Inventor
史殿习
杨永志
王怀民
丁博
刘惠
尹刚
滕猛
张威
饶翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201010282456.3A priority Critical patent/CN102346681B/zh
Publication of CN102346681A publication Critical patent/CN102346681A/zh
Application granted granted Critical
Publication of CN102346681B publication Critical patent/CN102346681B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种通用模拟器,包括模型派生实体模块、交互支持模块、多线程并发执行模块、分布支持模块以及虚拟主机模块;其中,模型派生实体模块包括多个模拟组,每个模拟组包括有多个模拟结点,模拟结点中包括由所要模拟的目标***的功能单元封装而成的资源型实体;交互支持模块实现了模型派生实体模块中模拟实体间的交互;分布支持模块实现了将模型派生实体模块中的可迁移实体在不同主机上的迁移;多进程并发执行模块实现了通用模拟器所在主机上的多个线程对同时发生事件的并发处理;虚拟主机模块用于抽象物理主机,容纳所述通用模拟器中的各种实体,辅助所述分布支持模块来实现对分布的透明支持。

Description

一种通用模拟器
技术领域
本发明涉及计算机仿真领域,特别涉及一种通用模拟器。
背景技术
***仿真是一种利用***模型对真实***或者假想***进行实验,通过对实验结果进行分析,研究***运行状态及其随时间的变化过程,得到***的仿真输出参数和基本特性,以此估计和推断***的特征和性能,进而做出决策的一门实验性和综合性的学科。***仿真基于***模型,***模型根据特性可分为两大类,一类是连续***,另一类是离散事件***。两类***模型的主要区别在于***状态随时间的变化规律,前者随时间连续变化,后者只在某些离散时间点上发生改变。在离散事件***模型中,其状态的变化只发生在一些离散的时间点上,在相邻两个时间点之间状态不发生任何变化。引起***状态变化的行为被称为事件,它是离散事件***的核心和驱动力,正是一个接一个事件的产生和处理推动着离散事件***的运行。
随着计算机技术的发展,利用计算机实现***仿真得到普遍应用与推广,这种在计算机上实现的***仿真被称为计算机模拟。在计算机上运行的用于仿真某一***的计算机软件被称为模拟器,自1955年第一个数值积分仿真软件问世以来,已经出现了大量的、多种类型的模拟器。但现有的模拟器大都针对特定的目标***或领域,例如进行计算机体系结构模拟的SimScalor,进行计算机网络模拟的NS2,进行排队***模拟的GPSS。这些模拟器针对其所针对的领域做了优化,使得它能够在其领域范围内较好地模拟目标***,但对于其它领域内的目标***则很难进行模拟。由此存在以下问题:1、增加了用户学习负担,当用户需要模拟不同领域中的***时,需要学习不同领域中的模拟器;2、当所要模拟的目标***跨领域时,难以整合不同的模拟器进行模拟。
发明内容
本发明的目的是克服现有模拟器只能模拟特定领域的目标***,通用性差的缺陷,从而提供一种通用性好的通用模拟器。
为了实现上述目的,本发明提供了一种通用模拟器,包括模型派生实体模块、交互支持模块、多线程并发执行模块、分布支持模块以及虚拟主机模块;其中,
所述的模型派生实体模块包括多个模拟组,每个所述的模拟组包括有多个模拟结点,所述模拟结点中包括由所要模拟的目标***的功能单元封装而成的资源型实体;所述模拟组、模拟结点和资源型实体都被称为模拟实体;
所述交互支持模块实现了所述模型派生实体模块中所述模拟实体间的交互;所述模拟实体间的交互用事件表示;
所述分布支持模块实现了将所述模型派生实体模块中的可迁移实体在不同主机上的迁移;
所述多进程并发执行模块实现了所述通用模拟器所在主机上的多个线程对同时发生事件的并发处理;
所述虚拟主机模块用于抽象物理主机,容纳所述通用模拟器中的各种实体,辅助所述分布支持模块来实现对分布的透明支持。
上述技术方案中,所述的模型派生实体模块还包括有用于对所要模拟的目标***进行监测和控制的***实体,所述***实体包括用于监测所述模拟实体内部情况的探针,以及用于控制所述通用模拟器的控制器;
所述交互支持模块还实现了所述***实体间以及所述***实体与所述模拟实体间的交互;该交互用事件表示。
上述技术方案中,所述交互支持模块在处理模拟实体间的交互事件时,根据所述事件的目标地址将该事件分发到模拟实体中的资源型实体,所述资源型实体调用相应的事件处理器来处理该事件。
上述技术方案中,所述交互支持模块在处理***实体间或***实体与模拟实体间的交互事件时,将该事件分发到实现了接口Invokable的相应目标的invoke函数,由该函数进行处理。
上述技术方案中,所述交互支持模块还包括通过对所述资源型实体发出的事件依次做按名装配与按名链接来解耦资源实体间的依赖关系;其中,
所述按名装配包括指定所述资源型实体发出的事件的目标以及指定该目标在接收时的事件别名;所述按名链接包括将所述资源型实体发出的事件发送到目标资源型实体所在的模拟节点。
上述技术方案中,所述交互支持模块还包括用事件目标集来管理发出事件的事件源到接收事件的事件目标之间的链接关系;所述事件目标集包括对所述链接关系的描述,以及按照策略所生成的事件链接关系。
上述技术方案中,所述交互支持模块采用同步事件交互方式处理事件。
上述技术方案中,所述的分布支持模块采用基于简化的对象代理方法来实现可迁移实体在不同主机上的迁移;其中,
所述的简化的对象代理方法采用一名为存根的类,该类为所述的可迁移实体在另一主机上生成对应的存根对象,所述的存根对象与所对应的可迁移实体相比具有同一模拟结点、同一模拟组;对所述存根对象的调用会被转发到分布在其它主机上的对应可迁移实体。
上述技术方案中,所述虚拟主机模块上保存有用于记录位于本地的可迁移实体的实体表,以及用于记录本地所用的所有存根对象的存根表;所述虚拟主机模块根据所述实体表与存根表创建、获取、销毁可迁移实体。
上述技术方案中,所述的多进程并发执行模块通过令牌分发与回收机制实现多线程对同时发生事件的并发处理。
本发明的优点在于:通用性好,适用范围广,能够对不同领域的目标***进行模拟。
附图说明
图1为本发明的通用模拟器在一个实施例中的结构示意图;
图2为本发明中所涉及的***抽象模型的示意图;
图3为本发明中所涉及的交互事件的类型图;
图4为可迁移实体以及可迁移实体所对应的Stub对象的示意图;
图5为不同主机间服务分布的示意图;
图6为令牌分发与回收的过程示意图。
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。
模拟器所要完成的工作是在计算机上实现对目标***的仿真。虽然目标***有不同的类型,但通过分析,不同类型的目标***都可以抽象出以下要素:
1、实体。实体是指具有内部逻辑并可与外部进行交互的独立存在物,例如CPU、RAM、主机、软件模块等。
2、实体间的交互方式,如共享总线、网络通道、消息传递机制等。
3、实体间的组织关系,例如将实体按物理区域划分为组,用多个实体组成新的更大的实体,如实体CPU、RAM等组成一个计算机实体。
模拟器在模拟目标***的过程中需要体现上述元素。此外,考虑到用户对模拟器分布性、并发性和可监控性的需要,模拟器还应具有以下特性:
4、实体的分布和并发性,模拟器中被模拟的实体应该能够以某种粒度被分布到不同的计算机中,并被并行地加以模拟。
5、被模拟的实体应该能够被检测和控制。
上述内容是各个模拟器都应具备的基本特性。本发明要实现一种能够适用于多种类型的目标***的通用模拟器,因此在本发明的通用模拟器中也应当具备上述特性。需要特别指出的是,本发明的通用模拟器能够完成模拟器的基本功能,但若要将该通用模拟器应用于某一具体的目标***,则还要根据所述目标***在所述通用模拟器的基础上添加少量的技术内容。下面对本发明的通用模拟器的基本结构加以说明。
本发明的通用模拟器包括模型派生实体模块、交互支持模块、多线程并发执行模块、分布支持模块以及虚拟主机模块。其中,模型派生实体模块分别与交互支持模块、多线程并发执行模块相连,所述的交互支持模块、多线程并发执行模块分别连接到分布支持模块上,通过该模块与其它主机上的虚拟主机模块进行通信,通用模拟器中的其它模块都在虚拟主机模块上运行。在下文中将分别对各个模块的功能做具体的说明。
虚拟主机模块(Virtual Host)
虚拟主机模块用于抽象物理主机,该模块至少包括两个功能,一是作为容器容纳模拟器中的各种实体,二是辅助分布支持模块实现对分布的透明支持。当在每个主机上启动一个虚拟主机模块后,即可在其中生成各种实体。在生成可迁移实体时,虚拟主机模块将其告知分布支持模块,使之能够保持***视图的一致性。当访问可迁移实体时,若目标实体不在本虚拟主机模块中,则虚拟主机模块会将相应的请求转发给分布支持模块,最终完成该请求。与虚拟主机模块有关的上述操作过程会在下文中相关模块的描述中做进一步的说明。
虚拟主机模块的实现与通用模拟器所采用的编程环境有关,在本发明的一个实施例中,如图1所示,使用JavaMachine作为虚拟主机模块。JavaMachine的功能与前面所提到的虚拟主机模块并没有大的差别,只是该模块只能应用于Java虚拟机中。
模型派生实体模块
模型派生实体模块用于描述本发明的通用模拟器中所包含的各类实体。模型派生实体模块中所含实体的种类、不同实体间的连接关系等内容与具体的目标***有关,而各类实体又由***抽象模型派生得到,因此,为了说明方便,首先对***抽象模型的相关内容加以描述。
所述的***抽象模型用于实现对目标***与通用模拟器的抽象。图2为***抽象模型在一个实施例中的示意图。在该实施例中,***抽象模型采用Java编程语言加以描述,但在其它实施例中,也可以用其它类型的编程语言描述抽象模型,所描述的抽象模型与用Java语言所描述的抽象模型相比,除了因为编程语言各自的特点所造成的差别外,并无本质上的不同。
在前文中已经提到,目标***中包括有实体,而在模拟器中也包括有实体,对于所有的实体,在抽象模型中都被抽象为Java中的接口IEntity,每个IEntity都具有一个全局唯一的ID。如图2所示,在抽象模型中,IEntity分为两类:一类为用于表达目标***中实体的ISimEntity(SimulationEntity,模拟实体),另一类为用于表达模拟器自身***中实体的ISysEntity(System Entity,***实体)。下面对这两类IEntity分别加以说明。
1、模拟实体
模拟实体ISimEntity用于模拟目标***中的实体,显而易见,一个所要被模拟的目标***中必然包括有多种类型、多个数量的实体,因此在模拟的过程中要用多个模拟实体来表示这些实体。考察目标***中的实体间的关系,可分为三种:
a、composite类型的聚合关系;
b、share类型的聚合关系;
c、行为的主体和客体,即普通的关联关系。
模拟实体间的上述三种关系将在下文中有进一步的描述。模拟实体按照其内容可分为ISimStructure(结构型实体)和ISimResource(资源型实体)。所述的资源型实体ISimResource用于封装目标***中具有逻辑功能的单元,例如RAM、ROM、CPU等。所述的结构型实体ISimStructure将资源型实体ISimResource组织起来,以得到更大粒度的功能单元。
所述的结构型实体ISimStructure可进一步分为用于表达composite类型聚合关系的ISimNode(Simulation Node,模拟结点)和用于表达share类型聚合关系的ISimGroup(Simulation Group,模拟组)。一个模拟节点ISimNode中可以包含多个资源型实体ISimResource,而一个模拟组ISimGroup则可以包含多个结构型实体ISimStructure。需要说明的是,对于模拟节点和模拟组,它们所涉及到的包含的含义并不相同,模拟节点ISimNode将所述资源型实体都保存在自身中,而模拟组ISimGroup仅仅记录了结构型实体的ID。
在前文中提到目标***中的实体之间具有交互关系,这一交互关系在模拟器中体现为模拟实体ISimEntity间的交互。模拟实体ISimEntity间的交互通常指的是资源型实体ISimResource之间的交互,实际上表现为离散事件***中的事件,参与交互的资源型实体ISimResource分别是事件的发送方和接收处理方。所述的事件可以用SimEvent(Simulation Event,模拟事件)表示。
根据目标***,某些模拟实体应当是可迁移的,某些模拟实体应当是可调用的,为了将这些模拟实体与其它模拟实体相区别,参照图2,在抽象模型中采用接口IPortable来标识可迁移的模拟实体,采用接口Invokable来标识可调用的实体。抽象模型还采用了接口IEventTargetSet来简化对复杂事件收发关系管理的事件目标集。
2、***实体
为了支持对目标***的监测和控制,抽象模型从***实体ISysEntity派生出负责监测模拟实体内部情况,且接收模拟实体主动发送信息的IProber(探针),以及用于负责用户对模拟器直接控制的IMonitor(控制器)。
每个模拟实体ISimEntity都可以设定一个探针IProber。一方面,探针IProber可以探测到模拟实体ISimEntiy中发生的变化,例如收到了一个事件SimEvent;另一方面,模拟实体ISimEntity可以将自身的一些信息主动发送给探针IProber。在Java中,IProbable接口用于标识一个实体是否能够***探针IProber进行监测。由于ISimEntity实现了IProbable,因此所有的模拟实体ISimEntity及其子类都是可监测的。此外,由于模拟器实质上是包含多个模拟实体ISimEntity的模拟实体ISimEntity。因此,在图2中,表示特殊的模拟组的ISimulator继承自所述的模拟组ISimGroup。每个模拟组ISimulator都需要有一个控制器IMonitor与之配合工作,且该IMonitor必须是ISimMonitor(Simulator Monitor,模拟器监控器)。
***实体ISysEntity除了上面所提到的内容外,还包括用于简化对复杂事件收发关系的管理的IEventTargetSet。这些***实体都可以由用户定制并使用。
在前文中已经提到,模型派生实体模块的生成除了与***抽象模型有关外,还与具体的目标***有关。在由目标***生成模型派生实体模块的过程中,需要将目标***中的功能单元实现为资源型实体ISimResource,并重用所述的结构型实体ISimStructure和***实体ISysEntity。如需进行特殊的控制和检测,则可定制所需的控制器IMonitor、模拟器监控器ISimMonitor和探针IProber。为了简化对资源间交互关系的设定和管理,还可定义所需的EventTargetSet(即实现IEventTargetSet,以下简称ETS)。
上文是对***抽象模型以及如何由目标***生成模型派生实体模块的描述,下面对模型派生实体模块的基本结构加以说明。如图1所示,所述的模型派生实体模块包括一个特殊的模拟组ISimulator,该模拟组ISimulator有一个与之配合工作的控制器IMonitor。在所述的ISimulator中,可以***多个模拟组ISimGroup。这些模拟组ISimGroup可能位于其它JavaMachine模块中,但对用户来讲其访问方式与对本地组的访问相同。每个模拟组ISimGroup中可以***多个模拟结点ISimNode,模拟结点同样可能位于其它JavaMachine模块中。每个模拟结点中可以放入多个资源型实体ISimResource。资源型实体必须与其所属的模拟结点在同一个JavaMachine模块中。此外,用户可以在模拟组和模拟结点中放入探针IProber,也可以在JavaMachine模块中放入控制器IMonitor。根据抽象模型的定义,可迁移的实体可以通过JavaMachine模块使之迁移到其它JavaMachine模块上。
交互支持模块
交互支持模块用于实现模型派生实体模块中所包含的各个实体之间的交互。下面从多个角度对交互支持模块加以说明。
A、对不同类型的事件的处理
实体间的交互可以分为如下的两种,对于不同种类的实体间交互可以用不同类型的事件表示。
1、模拟实体ISimEntity间的交互,即资源型实体ISimResource间通过收发模拟事件SimEvent进行的交互。
2、有***实体ISysEntity参与的交互,这包括***实体ISysEntity之间的交互,以及***实体ISysEntity与模拟实体ISimEntity之间的交互。
第一种交互是目标***中的行为。例如,当资源型实体ISimResourceRi需要和资源型实体ISimResource Rj进行交互时,它发送一个模拟事件SimEvent到Rj,从而发起一次交互。模拟实体ISimEntity间的交互可细分为两类:同步交互和异步交互。同步交互需要目标实体同步地返回交互结果,类似于一次函数调用。异步交互则不需要返回任何结果,类似于一次消息发送。
第二种交互实际上是目标***中的模拟实体ISimEntity或模拟器用户对模拟器的调整。例如,模拟器用户希望改变探针IProber中数据的报告方式,或目标***中的一个网络节点修改自身的IP地址。StarSim将这种交互行为处理为目标***之外的行为,使用IInvokable来表示能够进行此类交互的实体IEntity。需要说明的是,在使用Invocation进行交互时,不影响模拟时钟,即不会导致模拟时钟向前推进。
在图3中,对用于交互的事件做了区分,SimEvent代表用于表示第一种交互类型的模拟事件,Invocation则代表用于表示第二种交互类型的调用事件。这两类事件都具有如下要素:
1、事件名,用于区分不同的交互行为,类似于方法调用中的函数名;
2、事件数据,用于传递交互时的参数及可能的处理结果。
无论何种类型的事件,用于表示事件的事件数据都是一个键值对的列表,每个数据都有一个用于区分的名称。
基于事件的交互支持模块对于不同类型的事件具有不同的处理方法。
a)、对于资源实体发送出的模拟事件SimEvent,交互支持模块将根据该资源实体中设定的事件目标将事件分发到指定的资源中。每个资源中都存在一些用于处理事件的事件处理器(IEventHandler)。用户需要按照事件处理器的格式为自己的资源实体编写一些事件处理器。模拟事件SimEvent被分发到指定的资源后,模拟器首先获得处理该模拟事件SimEvent的事件处理器,然后调用事件处理器对模拟事件进行处理。
b)、对于调用事件Invocation,交互支持模块将其直接分发到实现了接口Invokable的相应目标的invoke函数,由该函数进行处理。
B、解耦资源实体间的依赖关系
基于事件的交互支持模块除了前文提到的对事件的分类处理外,还具有其它功能。
在创建模拟器的过程中,经常会遇到这样的问题:当用户在模拟器中定义一个资源型实体时,通常难以确定与之进行交互的其它资源型实体的具体类型。例如,定义CPU这一资源型实体时,尽管知道它将要访问存储空间中的数据,但并不知道提供数据的是资源型实体RAM/ROM还是资源型实体Cache。这显然不利于模拟器的成功创建。作为一种优选实现方式,基于事件的交互支持模块可通过解耦资源实体间的依赖关系来克服这一问题。
以前面提到的对资源型实体CPU的定义为例,在定义CPU时,确定它需要分别通过名为“READ_MEM”的事件和“WRITE_MEM”的事件来读取和写入数据。在定义RAM时,确定它可以响应数据的读事件和写事件,并将这两个事件分别命名为“DATA_READ”和“DATA_WRITE”。在模拟器中将CPU和RAM组合在一起时,只需要将CPU的READ_MEM事件链接到RAM中DATA_READ事件的事件处理单元,使得CPU发送的名为READ_MEM的事件会被模拟器分发给RAM,作为RAM中名为READ_MEM的事件,这一过程也被称为事件名的链接装配。同理,当需要将CPU先连接到Cache,再由Cache连接到RAM时,只需要在链接装配时将CPU的READ_MEM事件链接到Cache的CACHE_READ事件,并将Cache的MISS_MEM_READ事件(cache未命中时,所发起的内存读取事件)链接到RAM中的DATA_READ事件即可。通过事件名的链接装配,既确保了资源型实体的重用性,又增加了***的灵活性。
上文中只是对事件名的链接装配过程做了简单的说明,下面对基于事件的交互支持模块解耦资源实体间的依赖关系的具体实现过程加以说明。
首先,对资源型实体所发出的事件做按名装配。所述的按名装配是指指定资源实体所发出的事件的目标及目标在接收时的事件别名。
所述的按名装配通过创建事件的目标列表实现。每个事件的目标列表是由一个事件名到多个目标信息的Key-Values映射实现。目标列表中的每个目标信息描述了相应目标的以下内容:目标资源实体的ID、目标资源实体所在模拟节点ISimNode的ID、目标资源实体接收时的事件别名。
其次,事件的按名链接。所述按名链接是指将资源型实体ISimResource发送的名为EventName的事件,发送给目标资源实体ISimResource作为名为AliasEventName的事件。
在按名链接的过程中,当作为交互发起者的资源型实体ISimResource发送模拟事件SimEvent时,模拟器根据事件的名称查找按名分配过程中所创建的目标列表,得到目标的以下信息:目标资源实体的ID、目标资源实体所在模拟节点ISimNode的ID、目标资源实体接收时的事件别名。在得到目标的上述信息后,就可以由模拟器根据相关信息将事件发送到目标资源所在的模拟节点ISimNode,由其在正确的模拟器时刻从目标资源型实体中得到处理该事件别名的事件处理器,并交由该事件处理器处理。在按名链接的过程中,为了避免无关事件从源端(即事件的发送端)到目的端不必要传输所带来的额外开销,还可以在事件分发前进行过滤操作。所述过滤操作由事件过滤器实现,事件过滤器检查当前事件是否需要送到目标端,若需要,才进行后续的分发操作。由于是否需要事件过滤器以及采用何种事件过滤器在不同目标上可能会有所不同,因此事件过滤器的相关信息也可预先保存在目标列表中。
C、复杂事件链的装配
以上是对事件的链接装配基本过程的描述,无论目标***中包括有多少个资源型实体,模拟器都可以利用这一链接装配过程完成资源型实体间的交互。虽然如此,当资源实体之间的事件收发关系不是简单的单源单目标或单源多目标,而是复杂的多源多目标时,单纯依靠逐个指定事件源的发送目标来完成对资源实体的事件链接将会使得装配工作变得繁琐。例如在对一个房间内WiFi网络的模拟中,每个被模拟的主机上的WiFi网卡都需要与房间内其它WiFi网卡相连——即它产生的事件需要发送到其它所有有效范围内的WiFi网卡。若逐个装配链接,需要N×N次链接(N为网卡数目),并且要维护这种链接所要花费的代价较大。例如某个节点的加入和退出都需要修改其它所有节点上的链接关系。为了在此类情况下减少链接次数,降低维护成本,作为一种优选实现方式,在另一个实施例中采用“事件目标集”(IEventTargetSet,ETS)来管理事件源到事件目标之间的链接关系。所述的ETS首先包括对这些链接关系的描述,然后按照预定的策略自动生成事件链接关系,并分发到事件源结点。当事件链接关系需要变动时,直接通知ETS,由ETS进行更新即可。例如,可以预先定义一个WiFi的ETS,然后将所有网卡及其位置放入ETS中,由ETS根据各网卡的有效距离和位置确定其事件链接关系。当结点位置发生变化时,只需修改ETS,由ETS自动更新涉及的结点间的事件链接关系即可。这样,无论是初始化还是更新,使用者都只需要1次设定。
D、同步事件交互方式
在现有技术的典型离散事件***中,事件从产生到发送并被接收方处理的整个过程通常是异步的,即发送方发送事件后不再等待接收方处理完毕而继续往下执行。这种异步的事件交互方式,会增加实体内部事件响应逻辑的复杂度。例如,当CPU实体需要读取RAM实体中数据时,由于异步事件交互方式,使得完成这一操作必须由CPU发送一个READ事件,然后等待RAM实体发送回来的READ_ACK事件,只有当接收到READ_ACK事件后,读取操作才算完成。鉴于异步事件交互方式的这一不足,为了简化实体交互时的内部逻辑,在本发明的一个优选实施例中,基于事件的交互支持模块采用同步事件交互方式,这一交互方式也被称为CallByEvent机制。在同步事件交互方式中,发送方需要等待接收方将事件处理完毕,接收方需要显式告知事件处理完毕。在同步事件的支持下,CPU发送READ事件后,自动处于等待状态,直到RAM将数据放入READ事件并返回;而RAM在读出数据并放入READ事件后,需要显式告知事件处理完毕。CPU的发送动作返回时,READ事件中已经具有了RAM中读出的数据。与异步事件交互相比,在同步事件交互过程中,接收方不需要显式发送一个应答事件,发起方也不需要编写处理应答事件的IEventHandler,同时减少了一次事件链接的装配同步事件交互方式(或CallByEvent机制),因此简化了实体间的交互。
分布支持模块
在前文中已经提到,模拟器中的某些模拟实体是可迁移的,并采用接口IPortable来标识和支持可迁移的模拟实体。对模拟实体的迁移由所述的分布支持模块在前述虚拟主机模块的辅助下实现。
在本发明的一个实施例中,分布支持模块是基于简化ORB实现的。所述的ORB即对象代理,典型的对象代理方法包括CORBA、DCOM、J2EE等。由于这些典型方法需要处理复杂网络环境、跨平台、跨语言等诸多难题,因此通常都非常复杂。鉴于模拟器所面临的运行环境较为简单,例如通过高速可靠的局域网TCP/IP互联,不存在跨编程语言的问题,因此可以采用简化后的对象代理方法。所述的简化后的对象代理方法只包含三个功能:1、维护主机之间的关系,即有哪些主机参与模拟,如何访问它们;2、可迁移对象的位置管理,即位于哪个主机(运行模拟器的计算机);3、对可迁移对象的访问。本发明中主要涉及如何利用简化后的ORB实现对可迁移对象在不同主机上的分布以及后续的交互访问。
要实现可迁移实体在不同主机上的支持,需要采用一类名为存根(Stub)的类,Stub类为可迁移实体生成对应的Stub对象。Stub对象与其所对应的可迁移实体相比,具有相同的模拟组ISimGroup、特殊模拟组ISimulator以及模拟结点ISimNode,因此使用者在使用所述的可迁移实体时,并不需要区分是实体本身还是其对应的Stub对象。Stub对象将确保对它的调用会被转发到分布在其它主机上的对应实体,并返回结果,从而使得用户可以访问分布在不同主机上的实体,而不需要关心底层如何实现这种远程请求。对用户而言,分布在不同主机上的实体就像在一台主机上运行。图4为可迁移实体以及可迁移实体所对应的Stub对象的示意图,其中的右侧表示了所述的Stub对象。Stub对象对于用户而言是不可见的,图中的虚线表示实现关系,Stub对象实现与其虚线相连的可迁移对象。图中的实线表示继承关系,Stub对象继承与其实线相连的可迁移对象。通过上述操作可以确保用户透明地使用Stub,但却认为使用的是相应的可迁移对象。
为了便于用户操纵分布***中的各个主机,在所述的虚拟主机模块中保存了两张表,一张是用于记录位于本地的可迁移实体的实体表,另一张是用于记录本地所用的所有Stub的存根表。另外,虚拟主机模块还使用了一个用于实现简化后的ORB的IJVMORB对象来和其它主机上的虚拟主机模块进行交互。对远程虚拟主机模块的访问可以通过获得其Stub来进行。但是,虚拟主机模块的启动不能通过Stub来进行,必须手工在主机上启动并运行一个虚拟主机模块。虚拟主机模块启动后,将按照预定的策略寻找其它的虚拟主机模块,并完成必要的信息同步工作。
在前文中对Stub和虚拟主机模块做了描述以后,下面就可以对可迁移实体的管理过程加以说明。可迁移实体的管理过程包括创建、销毁和迁移。在实现上述管理过程中,虚拟主机模块提供了迁移的调用接口,这些调用接口在内部将实际的动作交由分布支持模块执行。这样就实现了分布支持模块对用户的透明性,从而可以根据情况提供不同的分布支持模块。具体实现过程如下。
当用户创建一个可迁移实体时,首先由虚拟主机模块生成该实体,并放入所述实体表中;然后,虚拟主机模块生成该实体对应的Stub,放入所述的存根表中;接着,虚拟主机模块再使用IJVMORB中的用于通知其它主机上的虚拟主机模块添加一个可迁移实体的notifyAddMobile方法;最后虚拟主机模块向需要创建可迁移实体的用户返回生成的Stub。
当用户根据ID获取可迁移实体时,虚拟主机模块首先查找所述存根表中是否有此ID的Stub,有则直接返回该Stub,无则创建一个Stub,并将所创建的Stub放入存根表,并返回该Stub。
当用户要销毁一个可迁移实体时,虚拟主机模块判断该实体是否在本地,若在本地则从所述实体表中删除并销毁,然后调用IJVMORB中的用于通知其它主机上的虚拟主机模块删除一个可迁移实体的notifyRemoveMobile方法,并接着删除存根表中可能存在的该对象的Stub。若所要删除的实体不在本地,则使用IJVMORB中的要求返回指定实体所在虚拟主机模块编号的getHostJVM方法获得该实体所在的虚拟主机模块的Stub,然后转发销毁请求。
用户调用虚拟主机模块中方法得到的可迁移实体都是Stub。用户对Stub发起调用时,调用将被Stub截获。Stub首先根据自身所代理的实体的ID,在本地虚拟主机模块中查找该实体,若实体在虚拟主机模块的实体表中,则将调用转发给该实体。否则将调用转发给本地虚拟主机模块的nrmi方法。在nrmi方法中,虚拟主机模块调用IJVMORB的getHostJVM方法获得该实体所在的虚拟主机模块的Stub,然后调用虚拟主机模块的Stub中的remoteCalled方法。由于虚拟主机模块的Stub是由IJVMORB管理的,因此StarSim实际上将分布化的底层支持划归IJVMORB进行管理。因此,针对不同特点的主机***,可以通过使用不同的IJVMORB实现来提高底层分布的性能。
图5给出了在Java环境下的一个实例,在该图中,实线圆形表示可迁移实体,虚线圆形表示Stub,椭圆表示JavaMachine模块。当JavaMachine模块1中的用户访问可迁移实体B时,对B的访问被可迁移实体B所对应的Stub b截获,并由其转发到JavaMachine模块1的nrmi方法。JavaMachine模块1的nrmi调用IJVMORB1获得JavaMachine模块2的Stub j2。由于j2是IJVMORB1创建的,故它可能包含了JavaMachine模块2的网络地址等信息,因而能够将请求转发到JavaMachine模块2,并返回结果。
多线程并发执行模块
在离散事件的模拟中,事件的完全并行处理与模拟时钟的统一推进是一个尚未从理论上解决的问题。完全的并行性不可避免地遇到模拟时间上的“因果顺序”问题,而时钟的统一推进又会大大降低事件处理的并行性。因此,本发明中采用多线程并发执行模块对大型***中大量存在的同时发生事件(即发生在同一个模拟器时钟上的事件)进行多线程的并发处理。
多线程并发执行模块通过令牌分发与回收的机制来支持使用多线程对事件的并行处理,同时确保时钟的统一推进。如图6所示,在模拟时刻Ti,结构实体(ISimStructure)N上有k个同时发生的事件E1,...,Ek,则由N的时钟推进函数(advance)创建k个线程,并将调用advance的线程所持有的Token分为k份,分发给这k个线程。然后启动这k个线程分别处理这些事件。调用advance的线程启动所有的子线程后,等待收集已分发的k个子Token,收集齐后才能继续。每个子线程执行完毕后,向主线程归还所持有的子Token。每个结构实体上都重复这一过程,使得每个结构实体上的处理过程大致相同。由于结构实体可以分布在不同的主机上,故并发的线程可以支持和利用分布性。这种并发机制无需用户所定义的资源实体的参与,因而对用户是透明的。
在前文中已经提到,在本发明的一种优选实现方式中,可以采用同步事件交互方式(CallByEvent)实现对事件的处理。多线程并发处理机制同样适用于CallByEvent。具体的说,事件发送方S调用用于实现同步事件交互的callByEvent函数,该函数首先调用dispatchEvent以将事件发送到目标实体D,然后将自身的令牌token归还主线程,并通过调用waitForACKEvent来实现对当前子线程T的阻塞睡眠,以等待事件的返回。当目标实体D处理完事件后,调用returnEvent函数。该函数将会唤醒正在睡眠的线程T,使得callByEvent函数得以继续执行。当它获取目标实体所返回的事件后,完成退出。
以上是对本发明的通用模拟器的详细说明。从对通用模拟器各个模块的详细说明可以看出,本发明为被模拟的目标***建立通用、简单的模型,使得通用模拟器能用于大部分事件***的模拟,并降低对具体目标***进行模拟的难度。
此外,本发明的通用模拟器提供基于事件的实体间交互机制,该机制支持实体间的解耦以提高实体的重用性,而同步事件交互机制(CallByEvent)能够简化实体内部的事件处理逻辑,事件目标集ETS还能够简化复杂事件收发关系的装配。
本发明的通用模拟器也支持模拟实体的分布化。本发明基于简化的ORB(对象请求代理)思想,将模拟实体分布到不同的主机进行模拟,解决模拟器运行时单机性能不足的问题,还隐藏分布时的底层细节,提供对模拟实体分布的控制。
本发明的通用模拟器还支持同时事件的并行处理:使用令牌分发和多线程技术,使得多个主机和同一主机中的多个线程能够透明的并行处理同一模拟时刻发生的模拟事件。
本发明的通用模拟器支持对模拟***的可定制的监测和控制,通过提供可定制的监测和控制方法,使得用户能够灵活的监测和控制目标***中的实体。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (9)

1.一种通用模拟器,其特征在于,包括模型派生实体模块、交互支持模块、多线程并发执行模块、分布支持模块以及虚拟主机模块;其中,模型派生实体模块分别与交互支持模块、多线程并发执行模块相连,所述的交互支持模块、多线程并发执行模块分别连接到分布支持模块上,通过所述分布支持模块与其它主机上的虚拟主机模块进行通信,通用模拟器中的其它模块都在虚拟主机模块上运行;
所述的模型派生实体模块包括多个模拟组,每个所述的模拟组包括有多个模拟结点,所述模拟结点中包括由所要模拟的目标***的功能单元封装而成的资源型实体;所述模拟组、模拟结点和资源型实体都被称为模拟实体;所述的模型派生实体模块还包括用于对所要模拟的目标***进行监测和控制的***实体,所述***实体包括用于监测所述模拟实体内部情况的探针,以及用于控制所述通用模拟器的控制器;
所述交互支持模块实现了所述模型派生实体模块中所述模拟实体间、所述***实体间以及所述***实体与所述模拟实体间的交互;所述模拟实体间、所述***实体间以及所述***实体与所述模拟实体间的交互用事件表示;
所述分布支持模块实现了将所述模型派生实体模块中的可迁移实体在不同主机上的迁移;
所述多线程并发执行模块实现了所述通用模拟器所在主机上的多个线程对同时发生事件的并发处理;
所述虚拟主机模块用于抽象物理主机,容纳所述通用模拟器中的各种实体,辅助所述分布支持模块来实现对分布的透明支持。
2.根据权利要求1所述的通用模拟器,其特征在于,所述交互支持模块在处理模拟实体间的交互事件时,根据所述事件的目标地址将该事件分发到模拟实体中的资源型实体,所述资源型实体调用相应的事件处理器来处理该事件。
3.根据权利要求1所述的通用模拟器,其特征在于,所述交互支持模块在处理***实体间或***实体与模拟实体间的交互事件时,将该事件分发到实现了接口Invokable的相应目标的invoke函数,由该函数进行处理。
4.根据权利要求1所述的通用模拟器,其特征在于,所述交互支持模块还包括通过对所述资源型实体发出的事件依次做按名装配与按名链接来解耦资源实体间的依赖关系;其中,
所述按名装配包括指定所述资源型实体发出的事件的目标以及指定该目标在接收时的事件别名;所述按名链接包括将所述资源型实体发出的事件发送到目标资源型实体所在的模拟节点。
5.根据权利要求1或4所述的通用模拟器,其特征在于,所述交互支持模块还包括用事件目标集来管理发出事件的事件源到接收事件的事件目标之间的链接关系;所述事件目标集包括对所述链接关系的描述,以及按照策略所生成的事件链接关系。
6.根据权利要求1或4所述的通用模拟器,其特征在于,所述交互支持模块采用同步事件交互方式处理事件。
7.根据权利要求1所述的通用模拟器,其特征在于,所述的分布支持模块采用基于简化的对象代理方法来实现可迁移实体在不同主机上的迁移;其中,
所述的简化的对象代理方法采用一种名称为存根的类,该类为所述的可迁移实体在另一主机上生成对应的存根对象,所述的存根对象与所对应的可迁移实体相比具有同一模拟结点、同一模拟组;对所述存根对象的调用会被转发到分布在其它主机上的对应可迁移实体。
8.根据权利要求7所述的通用模拟器,其特征在于,所述虚拟主机模块上保存有用于记录位于本地的可迁移实体的实体表,以及用于记录本地所用的所有存根对象的存根表;所述虚拟主机模块根据所述实体表与存根表创建、获取、销毁可迁移实体。
9.根据权利要求1所述的通用模拟器,其特征在于,所述的多线程并发执行模块通过令牌分发与回收机制实现多线程对同时发生事件的并发处理。
CN201010282456.3A 2010-07-26 2010-09-10 一种通用模拟器 Expired - Fee Related CN102346681B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010282456.3A CN102346681B (zh) 2010-07-26 2010-09-10 一种通用模拟器

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201010239352.4 2010-07-26
CN201010239352 2010-07-26
CN201010282456.3A CN102346681B (zh) 2010-07-26 2010-09-10 一种通用模拟器

Publications (2)

Publication Number Publication Date
CN102346681A CN102346681A (zh) 2012-02-08
CN102346681B true CN102346681B (zh) 2014-11-26

Family

ID=45545384

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010282456.3A Expired - Fee Related CN102346681B (zh) 2010-07-26 2010-09-10 一种通用模拟器

Country Status (1)

Country Link
CN (1) CN102346681B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105743668A (zh) * 2014-12-09 2016-07-06 中兴通讯股份有限公司 收发包功能的实现方法及装置
CN109412834A (zh) * 2018-09-11 2019-03-01 叮联信息技术有限公司 事件不间断随机传递及共享信息展示方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1805424A (zh) * 2005-12-31 2006-07-19 华中科技大学 一种网格模拟方法及其模拟器
CN101309186A (zh) * 2008-06-23 2008-11-19 南京大学 一种可扩展的通用型p2p网络模拟器的设计方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW576999B (en) * 2002-09-24 2004-02-21 Inst Information Industry Flexible system simulation structure and interface thereof

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1805424A (zh) * 2005-12-31 2006-07-19 华中科技大学 一种网格模拟方法及其模拟器
CN101309186A (zh) * 2008-06-23 2008-11-19 南京大学 一种可扩展的通用型p2p网络模拟器的设计方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《一个通用移动agent仿真平台的设计与实现》;曾鸿,李旭晖,何炎祥;《计算机应用研究》;20081231;第25卷(第12期);第3835-3838页 *
曾鸿,李旭晖,何炎祥.《一个通用移动agent仿真平台的设计与实现》.《计算机应用研究》.2008,第25卷(第12期),第3835-3838页. *

Also Published As

Publication number Publication date
CN102346681A (zh) 2012-02-08

Similar Documents

Publication Publication Date Title
Posse et al. An executable formal semantics for UML-RT
CN104572293B (zh) 基于bs结构的医学影像阅片***的实现方法
JP5026415B2 (ja) データセントリックワークフロー
Hrischuk et al. Automatic generation of a software performance model using an object-oriented prototype
EP2020635A2 (en) Legacy application decommissioning framework
Rice Poligon, a system for parallel problem solving
WO2006128112A2 (en) Clustering server providing virtual machine data sharing
KR20080087801A (ko) 최종 사용자에 의한 워크플로의 동적 재배치
Shan et al. KubeAdaptor: a docking framework for workflow containerization on Kubernetes
CN102346681B (zh) 一种通用模拟器
Pettit IV et al. Modeling behavioral design patterns of concurrent objects
Rowstron Bulk primitives in Linda run-time systems
Satapathy et al. Distributed intelligent architecture for logistics (DIAL)
Yin et al. Towards mode switch handling in component-based multi-mode systems
Abid et al. Asynchronous synthesis techniques for coordinating autonomic managers in the cloud
US7146414B1 (en) Object bridge for providing access to operations-level control of a data processing system
Nutt A simulation system architecture for graph models
Denti et al. An architecture for tuple‐based coordination of multi‐agent systems
Quiroz-Fabián et al. VPPE: A novel visual parallel programming environment
Bouraqadi-Saâdani et al. A reflective infrastructure for coarse-grained strong mobility and its tool-based implementation
Wallace et al. A situated evaluation of the Object Management Group's (OMG) Object Management Architecture (OMA)
Deng et al. Executable specification and analysis for the design of concurrent object-oriented systems
Kristensen et al. Component composition and interaction
Jean-Paul et al. A mapping from AADL to Java-RTSJ
Bellur et al. Diamonds: Principles and philosophy

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20141126

Termination date: 20180910

CF01 Termination of patent right due to non-payment of annual fee