一种通用模拟器的制作方法

文档序号:6332095阅读:141来源:国知局

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