一种基于分布仿真的反射内存网动态内存管理方法.pdf

上传人:大师****2 文档编号:999640 上传时间:2018-03-24 格式:PDF 页数:29 大小:1.11MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910078266.7

申请日:

2009.02.24

公开号:

CN101493784A

公开日:

2009.07.29

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

G06F9/455; G06F9/50

主分类号:

G06F9/455

申请人:

中国运载火箭技术研究院

发明人:

冷传航; 赵 雯; 代 坤; 张灏龙; 李 烁

地址:

100076北京市丰台区北京9200信箱38分箱

优先权:

专利代理机构:

中国航天科技专利中心

代理人:

安 丽

PDF下载: PDF下载
内容摘要

本发明涉及一种基于分布仿真反射内存网动态内存管理方法,该方法采用面向对象的手段,对VMIC反射内存的底层驱动函数进行了两次封装,实现了面向用户的内存动态分配和读写,解决了通信软总线开发过程中的安全性、可重用性和便利性问题,该封装执行下述任务:仿真开始时,为联邦分配内存空间供联邦进行通信交互;仿真进行中,联邦的邦员依次加入仿真,为每个邦员分配内存空间,并根据仿真想定为有通信需求的邦员之间分配对象实例/交互实例内存空间;通信过程中的读、写操作完成后,为所述对象实例/交互实例释放内存空间;任一邦员退出仿真后,为所述邦员释放内存空间;仿真结束联邦退出后,为所述联邦释放内存空间。

权利要求书

1、  一种基于分布仿真反射内存网动态内存管理方法,其特征在于:在实时操作系统下对反射内存网的驱动函数进行封装,所述封装执行下述任务:
仿真开始时,为联邦分配内存空间供联邦进行通信交互;仿真进行中,联邦的邦员依次加入仿真,为每个邦员分配内存空间,并根据仿真想定为有通信需求的邦员之间分配对象实例/交互实例内存空间;通信过程中的读操作、写操作完成后,为所述对象实例/交互实例释放内存空间;任一邦员退出仿真后,为所述邦员释放内存空间;仿真结束联邦退出后,为所述联邦释放内存空间。

2、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了所述联邦地址空间,如果已经分配则退出;
(2)检查剩余内存空间是否充足,如果空间为零,则退出;
(3)如果有剩余内存空间,首先查找是否存在刚好所述联邦大小的内存块,如果存在则将其分配给所述联邦,并将所述内存块标志为busy,进入步骤(5);
(4)如果没有刚好大小的内存块,则遍历空闲的内存空间,找到能够分配所述联邦的最小内存空间,并将所述最小内存空间标志为busy,进入步骤(5);
(5)退出并返回起始地址。

3、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦邦员分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了所述邦员所属联邦地址空间,如果已经分配则退出;
(2)查找所述联邦地址空间中已分配的内存空间,是否已经分配了所述邦员地址空间,如果已经分配则退出;
(3)检查所述联邦内剩余内存空间是否充足,如果空间为零则退出;
(4)如果有剩余内存空间,首先查找是否存在刚好所述邦员大小的内存块,如果存在则将其分配给所述邦员,并将所述内存块标志为busy,进入步骤(6);
(5)如果没有刚好大小的内存块,则遍历所述联邦的空闲内存空间,找到能够分配所述邦员的最小内存空间,并将所述最小内存空间标志为busy,进入步骤(6)。
(6)退出并返回起始地址。

4、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦邦员中的对象实例/交互实例分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了所述对象实例/交互实例所属联邦地址空间,如果已经分配则退出;
(2)查找所述联邦地址空间中已分配的内存空间,是否已经分配了所述对象实例/交互实例所属的邦员地址空间,如果已经分配则退出;
(3)查找所述邦员地址空间中已分配的内存空间,是否已经分配了所述对象实例/交互实例地址空间,如果已经分配则退出;
(4)检查所述邦员内剩余内存空间是否充足,如果空间为零则进入步骤(7);
(5)如果有剩余内存空间,首先查找是否存在刚好对象实例/交互实例大小的内存块,如果存在则将其分配给该所述对象实例/交互实例,并将所述内存块标志为busy,进入步骤(7);
(6)如果没有刚好大小的内存块,则遍历所述邦员的空闲内存空间,找到能够分配所述对象实例/交互实例的最小内存空间,并将所述最小内存空间标志为busy,进入步骤(7);
(7)退出并返回起始地址。

5、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦释放内存的方法如下:
(1)在已分配的内存区域中查找所述联邦的内存是否存在,如果不存在则退出;
(2)如果所述联邦的内存存在,将所述联邦的内存空间标志为空闲区域,并释放联邦内存;
(3)检查步骤(2)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。

6、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦邦员释放内存的方法如下:
(1)在已分配的内存区域中查找所述邦员所属联邦的内存是否存在,如果不存在则退出;
(2)在所述联邦内存区域内的已分配内存区域中查找所述邦员的内存是否存在,如果不存在则退出;
(3)如果所述邦员的内存存在,将所述邦员的内存空间标志为空闲区域,并释放邦员内存;
(4)检查步骤(3)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。

7、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:为联邦邦员中的对象实例/交互实例释放内存的方法如下:
(1)在已分配的内存区域中查找所述对象实例/交互实例所属联邦的内存是否存在,如果不存在则退出;
(2)在所述联邦内存区域内的已分配内存区域中查找所述对象实例/交互实例所属邦员的内存是否存在,如果不存在则退出;
(3)在所述邦员内存区域内的已分配内存区域中查找所述对象实例/交互实例的内存是否存在,如果不存在则退出;
(4)如果所述对象实例/交互实例的内存存在,将所述对象实例/交互实例的内存空间标志为空闲区域,并释放对象实例/交互实例的内存;
(5)检查步骤(4)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。

8、
  根据权利要求1所述的一种基于分布仿真反射内存网动态内存管理方法,其特征在于:在所述封装的基础上进行第二次封装,所述第二次封装是将有通信需求的邦员之间分配对象实例/交互实例内存空间,通信过程中的读操作,通信过程中的写操作,释放对象实例/交互实例内存空间四个过程封装为一个类,当所述邦员之间需要进行对象类/交互类实例通信时,对所述类进行实例化,所述类中分配对象实例/交互实例内存空间,通信过程中的读操作、通信过程中的写操作,释放对象实例/交互实例内存空间四个过程均由所述实例进行管理。

说明书

一种基于分布仿真的反射内存网动态内存管理方法
技术领域
本发明涉及计算机分布仿真技术领域,特别是涉及一种应用于工业分布仿真中的反射内存网的动态内存管理方法。
背景技术
随着现代工业系统的复杂程度和现代化程度的不断提高,使得其设计、研制和维护日益依赖于先进的试验、测试与试验手段。带有半实物设备的分布式实时分布仿真中为了保证通信的实时性,采用VMIC反射内存网进行数据和消息的传输。VMIC-5565反射内存卡提供了共享内存和中断等实时通信方式,但是这种方式允许各个节点直接读写板载内存,带来了数据安全性难以保证的问题。由于传统的板上内存采用了顺序分配的方式,导致释放的内存无法再次分配和内存碎片的增加,造成了系统性能的降低和不稳定因素的增加。由于VMIC提供的函数多而杂,对于开发人员而言比较难于掌握,特别是对于从事虚拟试验和仿真领域的技术人员。
发明内容
本发明的目的在于克服现有技术的不足,,提供一种基于分布仿真的反射内存网动态内存管理方法,该方法通过对VMIC反射内存的驱动函数进行封装,实现对内存的及时分配与释放,使得板卡内存可以充分循环利用,并增强了系统的稳定性和安全性。
本发明的上述目的是通过如下技术方案予以实现的:
一种基于分布仿真反射内存网动态内存管理方法,其特征在于:在实时操作系统下对反射内存网的驱动函数进行封装,所述封装基于复杂map映射,执行下述任务:
仿真开始时,为联邦分配内存空间供联邦进行通信交互;仿真进行中,联邦的邦员依次加入仿真,为每个邦员分配内存空间,并根据仿真想定为有通信需求的邦员之间分配对象实例/交互实例内存空间;通信过程中的读、写操作完成后,为所述对象实例/交互实例释放内存空间;任一邦员退出仿真后,为所述邦员释放内存空间;仿真结束联邦退出后,为所述联邦释放内存空间。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了该联邦地址空间,如果已经分配则退出;
(2)检查剩余内存空间是否充足,如果空间为零,则退出;
(3)如果有剩余内存空间,首先查找是否存在刚好所述联邦大小的内存块,如果存在则将其分配给所述联邦,并将所述内存块标志为busy,进入步骤(5);
(4)如果没有刚好大小的内存块,则遍历空闲的内存空间,找到能够分配所述联邦的最小内存空间,并将所述最小内存空间标志为busy,进入步骤(5);
(5)退出并返回起始地址。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦邦员分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了所述邦员所属联邦地址空间,如果已经分配则退出;
(2)查找所述联邦地址空间中已分配的内存空间,是否已经分配了所述邦员地址空间,如果已经分配则退出;
(3)检查所述联邦内剩余内存空间是否充足,如果空间为零则退出;
(4)如果有剩余内存空间,首先查找是否存在刚好所述邦员大小的内存块,如果存在则将其分配给所述邦员,并将所述内存块标志为busy,进入步骤(6);
(5)如果没有刚好大小的内存块,则遍历所述联邦的空闲内存空间,找到能够分配所述邦员的最小内存空间,并将所述最小内存空间标志为busy,进入步骤(6)。
(6)退出并返回起始地址。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦邦员中的对象实例/交互实例分配内存的方法如下:
(1)查找已分配的内存空间,是否已经分配了所述对象实例/交互实例所属联邦地址空间,如果已经分配则退出;
(2)查找所述联邦地址空间中已分配的内存空间,是否已经分配了所述对象实例/交互实例所属的邦员地址空间,如果已经分配则退出;
(3)查找所述邦员地址空间中已分配的内存空间,是否已经分配了所述对象实例/交互实例地址空间,如果已经分配则退出;
(4)检查所述邦员内剩余内存空间是否充足,如果空间为零则进入步骤(7);
(5)如果有剩余内存空间,首先查找是否存在刚好对象实例/交互实例大小的内存块,如果存在则将其分配给该所述对象实例/交互实例,并将所述内存块标志为busy,进入步骤(7);
(6)如果没有刚好大小的内存块,则遍历所述邦员的空闲内存空间,找到能够分配该对象实例/交互实例的最小内存空间,并将所述最小内存空间进行标志为busy,进入步骤(7);
(7)退出并返回起始地址。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦释放内存的方法如下:
(1)在已分配的内存区域中查找所述联邦的内存是否存在,如果不存在则退出;
(2)如果所述联邦的内存存在,将所述联邦的内存空间标志为空闲区域,并释放联邦内存;
(3)检查步骤(2)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦邦员释放内存的方法如下:
(1)在已分配的内存区域中查找所述邦员所属联邦的内存是否存在,如果不存在则退出;
(2)在所述联邦内存区域内的已分配内存区域中查找所述邦员的内存是否存在,如果不存在则退出;
(3)如果所述邦员的内存存在,将所述邦员的内存空间标志为空闲区域,并释放邦员内存;
(4)检查步骤(3)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。
在上述基于分布仿真反射内存网动态内存管理方法中,为联邦邦员中的对象实例/交互实例释放内存的方法如下:
(1)在已分配的内存区域中查找所述对象实例/交互实例所属联邦的内存是否存在,如果不存在则退出;
(2)在所述联邦内存区域内的已分配内存区域中查找所述对象实例/交互实例所属邦员的内存是否存在,如果不存在则退出;
(3)在所述邦员内存区域内的已分配内存区域中查找所述对象实例/交互实例的内存是否存在,如果不存在则退出;
(4)如果所述对象实例/交互实例的内存存在,将所述对象实例/交互实例的内存空间标志为空闲区域,并释放对象实例/交互实例的内存;
(5)检查步骤(4)中新增的空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域。
在上述基于分布仿真反射内存网动态内存管理方法中,在第一层封装的基础上进行第二次封装,第二次封装是将有通信需求的邦员之间分配对象实例/交互实例内存空间,通信过程中的读、写操作,释放内存空间四个过程封装为一个类,当邦员之间需要进行对象类/交互类实例通信时,对该类进行实例化,该类中分配对象实例/交互实例内存空间,通信过程中的读、写操作,释放内存空间四个过程均由该实例进行管理。
本发明与现有技术相比有益效果为:
(1)通过对VMIC反射内存函数进行封装,可以使内存空间得到及时分配与释放,将使用后释放的内存空间进行碎片合并整理后再次分配使用,从而达到对板卡内存的动态充分循环利用,与现有的按顺序分配内存相比,解决了内存空间有限和内存碎片再分配的问题。
(2)通过对VMIC反射内存函数进行封装,与现有技术直接对板上内存进行操作相比,解决了分布仿真数据的安全性问题,并使系统的稳定性提高。
(3)通过对VMIC反射内存函数进行面向对象的封装,与现有VMIC纷繁复杂的函数操作相比,具有很强的开发上的便利性和可重用性,能够提高开发效率,并使安全性进一步提高。
附图说明
图1为本发明的系统体系示意图;
图2为本发明为驱动函数进行第一层封装的工作流程图;
图3为本发明第一层封装中为联邦分配内存的工作流程图;
图4为本发明第一层封装中为联邦中的邦员分配内存的工作流程图;
图5为本发明第一层封装中为联邦邦员中的对象实例/交互实例分配内存的工作流程图;
图6为本发明第一层封装中为联邦释放内存的工作流程图;
图7为本发明第一层封装中为联邦中的邦员释放内存的工作流程图;
图8为本发明第一层封装中为联邦邦员中的对象实例/交互实例释放内存的工作流程图;
图9为本发明第二层封装中为对象实例/交互实例申请内存空间的工作流程图;
图10为本发明第二层封装中为对象实例/交互实例释放内存空间的工作流程图;
图11为本发明第二层封装中填写对象实例/交互实例的工作流程图;
图12为本发明第二层封装中读取对象实例/交互实例的工作流程图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细的描述:
VMIC反射内存网可以采用环形网络结构,使用一台计算机承担调度服务与通信服务功能,称为管理节点机,网络上的其他计算机可以称为运行节点机。本发明在管理节点机上对反射内存进行动态管理。如图1所示,对VMIC5565板卡提供的函数驱动进行了两层封装,应用程序通过实例化第二层封装的类,动态管理板卡内存。
首先在实时操作系统下对反射内存网的驱动函数进行第一层封装,所述封装基于复杂map映射,执行下述任务:
仿真开始时,为联邦分配内存空间以备联邦通信交互;仿真进行中,联邦的邦员依次加入仿真,为每个邦员分配内存空间,并根据仿真想定为有通信需求的邦员之间分配对象实例/交互实例内存空间;通信完成后,为所述对象实例/交互实例释放内存空间,以方便为其他对象实例/交互实例分配内存空间;任一邦员退出仿真后,为所述邦员释放内存空间;仿真结束联邦退出时,为所述联邦释放内存空间,以方便为其他联邦分配内存空间。如图2所示为对驱动函数进行第一层封装的工作流程图。其中对象实例/交互实例表示对象实例或者交互实例或者对象实例和交互实例。
第一层封装了VMIC反射内存网底层驱动函数,实现了动态分配和释放内存的内存管理功能。下面进行详细描述:
(1)为联邦分配内存空间的工作过程:
federationNum表示联邦编号,federationSize表示该联邦的大小(单位:M),federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域,其流程图如图3所示。首先查找已分配的内存空间,是否已经分配了该联邦地址空间,如果已经分配则函数退出,返回非法地址;然后检查剩余内存空间是否充足,如果空间为零则函数退出,返回非法地址;如果有剩余内存空间,首先查找是否存在刚好federationSize大小的内存块,如果存在则将其分配给该联邦,并将此区域标志为“busy”,做好该联邦的内存初始化,退出并返回起始地址;如果没有刚好大小的内存块,则遍历空闲的内存空间,找到能够分配该联邦的最小内存空间,并将此区域标志为“busy”,做好该联邦的内存初始化,退出并返回起始地址。
(2)为联邦中的邦员分配内存空间的工作过程
federationNum表示联邦编号,federateNum表示邦员编号,federateSize表示邦员大小(K),federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域。其流程图如图4所示。首先查找已分配的内存空间,是否已经分配了该邦员所属联邦地址空间,如果已经分配则函数退出,返回非法地址;接着查找该联邦地址空间中已分配的内存空间,是否已经分配了该邦员地址空间,如果已经分配则函数退出,返回非法地址;然后检查联邦内剩余内存空间是否充足,如果空间为零则函数退出,返回非法地址;如果有剩余内存空间,首先查找是否存在刚好federateSize大小的内存块,如果存在则将其分配给该邦员,并将此区域标志为“busy”,做好该邦员的内存初始化,退出并返回起始地址;如果没有刚好大小的内存块,则遍历联邦的空闲内存空间,找到能够分配该邦员的最小内存空间,并将此区域标志为“busy”,做好该邦员的内存初始化,退出并返回起始地址。
(3)为联邦邦员中的对象实例/交互实例分配内存的工作过程
federationNum表示联邦编号,federateNum表示邦员编号,eventNum表示对象类实例或是交互类的编号,eventSize表示对象实例或是交互实例的大小,federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域。其流程图如图5所示。首先查找已分配的内存空间,是否已经分配了该交互/对象类所属联邦地址空间,如果已经分配则函数退出,返回非法地址;接着查找该联邦地址空间中已分配的内存空间,是否已经分配了该交互/对象类所属的邦员地址空间,如果已经分配则函数退出,返回非法地址;然后查找该邦员地址空间中已分配的内存空间,是否已经分配了该交互/对象类地址空间,如果已经分配则函数退出,返回非法地址;然后检查邦员内剩余内存空间是否充足,如果空间为零则函数退出,返回非法地址;如果有剩余内存空间,首先查找是否存在刚好eventSize大小的内存块,如果存在则将其分配给该交互/对象类,并将此区域标志为“busy”,做好该交互/对象类的内存初始化,退出并返回起始地址;如果没有刚好大小的内存块,则遍历邦员的空闲内存空间,找到能够分配该交互/对象类的最小内存空间,并将此区域标志为“busy”,做好该交互/对象类的内存初始化,退出并返回起始地址。
(4)为联邦释放空间的工作过程:
federationNum表示联邦编号,federationSize表示联邦大小,federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域。其流程图如图6所示。首先在已分配的反射内存区域中查找该联邦的内存是否存在,如果不存在则返回错误代码;然后将该联邦的内存空间标志位空闲区域;检查新增空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域,返回真。
(5)为联邦中的邦员释放空间的工作过程:
federationNum表示联邦编号,federateNum表示邦员编号,federateSize表示邦员大小,federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域。其流程图如图7所示。首先在已分配的反射内存区域中查找该邦员所属联邦的内存是否存在,如果不存在则返回错误代码;接着在联邦内存区域内的已分配反射内存区域中查找该邦员的内存是否存在,如果不存在则返回错误代码;然后将该邦员的内存空间标志位空闲区域;检查新增空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域,返回真。
(6)为联邦邦员中的对象实例/交互实例释放内存的工作过程:
federationNum表示联邦编号,federateNum表示邦员编号,eventNum表示对象实例或是交互实例的编号,eventSize表示对象实例或是交互实例大小,federation_busyArea表示联邦繁忙区域,federation_freeArea表示联邦空闲区域。其流程图如图8所示。首先在已分配的反射内存区域中查找该事件所属联邦的内存是否存在,如果不存在则返回错误代码;接着在联邦内存区域内的已分配反射内存区域中查找该事件所属邦员的内存是否存在,如果不存在则返回错误代码;然后在邦员内存区域内的已分配反射内存区域中查找该事件内存是否存在,如果不存在则返回错误代码;最后将该事件的内存空间标志位空闲区域;检查新增空闲区域是否存在左侧或右侧的空闲区域,如果存在则合并空闲区域,返回真。
反射内存网动态内存管理中间件的第二层封装是考虑到面向对象程序设计的需要,为了使本技术方案具有程序开发上的便利性和可重用性。第二层封装在第一层封装的基础上进行,第二次封装是将有通信需求的邦员之间的对象实例/交互实例分配内存空间,通信过程中的读、写操作,为对象实例/交互实例释放内存空间四个过程封装为一个类,当邦员之间需要进行对象类/交互类实例通信时,对该类进行实例化,该类中为对象实例/交互实例分配内存空间,通信过程中的读、写操作,为对象实例/交互实例释放内存空间这四个过程均由这个实例进行管理,由于采用上述面向对象的程序设计方式使其具有内存管理的安全性高和软件开发的可重用性强的优点。
其中上述实例对通信进行管理的过程如下:
一、当邦员之间需要进行对象类/交互类实例通信时,根据仿真想定查找到该通信的信息量,调用第一层封装为该对象类/交互类实例分配相应大小的内存空间,将该空间的起止地址记录下来,并发出“分配完成”消息;
二、当发送信息的邦员收到“分配完成”消息后,将该对象类/交互类实例写入步骤一中的内存空间,并发出“写完毕”消息;
三、当接收信息的邦员收到“写完毕”消息后,将该对象类/交互类实例接收下来,并发出“读完毕”消息;
四、收到“读完毕”消息后,根据该空间的起止地址,调用第一层封装将该对象类/交互类实例的内存释放。
其中步骤一中为对象类/交互类实例分配内存空间的具体流程如下:
如图9所示为分配内存空间的流程图,complexCode由索引码(占16bit)和申请内存大小(占16bit)组合而成。返回值如果为0x1111,表明申请操作不成功,否则表示申请空间的起始地址。首先由运行节点想管理节点发出中断,附加数据为complexCode;管理节点收到运行节点的中断后,解析附加数据,得到索引码和申请空间大小S,根据索引码判断操作类型为分配空间,同时获得对象实例\交互实例编号enum,根据enum得到邦员编号fnmu,和联邦编号Fnum。之后执行步骤(3)中为对象实例/交互实例分配内存空间的操作,得到返回值R。若R值不为0x1111,申请空间成功,附加数据设为索引码(高14bit)和R(低18bit)的组合,否则附加数据设为索引码(高14bit)和后18bit全为1的组合;管理节点完成上述操作后向运行节点发送返回中断;运行节点收到管理节点的中断后,解析附加数据,得到索引码和后18bit,如果后18bit全为1,则函数返回错误码0x111,否则返回后18bit。
步骤二中进行写操作的具体流程如下:
如图11所示为写操作的工作流程图,info指要填写的对象实例/交互实例,offset指填写位置,size指对象实例/交互实例的大小。操作成功返回真,否则假。该函数直接封装了VMIC的驱动函数,实现了对反射内存的写操作。
步骤3)中进行读操作的具体流程如下:
如图12所示为读操作的工作流程图,indexCode为索引码(占16bit)。如果函数操作成功返回真,否则返回假。首先由运行节点想管理节点发出中断,附加数据为complexCode;管理节点收到运行节点的中断后,解析附加数据,得到索引码和释放空间大小S,根据索引码判断操作类型为释放空间,同时获得对象实例/交互实例编号enum,根据enum得到邦员编号fnmu,和联邦编号fnum,同时根据enum判断其是否为对象实例。如果为对象实例,执行步骤(4)中释放联邦空间的操作,否则执行步骤(6)中释放对象实例/交互实例的空间的操作,执行上述操作完成后,得到返回值R。R为true释放空间成功,设附加数据为索引码和1(用低16bit表示)的组合,否则附加数据为索引码和0(用低16bit表示)的组合;管理节点完成上述操作后向运行节点发送返回中断;运行节点收到管理节点的中断后,解析附加数据,得到索引码和低16bit。如果低16bit为0,函数返回false,否则返回true。
步骤4)中为对象类/交互类实例释放内存空间的具体流程如下:
如图10所示为为对象类/交互类实例分配内存空间的工作流程图,complexCode由索引码(占16bit)和所要释放内存的大小组成(占16bit)。如果释放的是对象实例,那么该内存大小为对象实例所属联邦的大小,否则为该对象实例的大小。操作成功返回真,否则返回假。首先由运行节点想管理节点发出中断,附加数据为complexCode;管理节点收到运行节点的中断后,解析附加数据,得到索引码和释放空间大小S,根据索引码判断操作类型为释放空间,同时获得对象实例/交互实例编号enum,根据enum得到邦员编号fnmu,和联邦编号fnum,同时根据enum判断其是否为对象实例。如果为对象实例,执行步骤(4)中释放联邦空间的操作,否则执行步骤(6)中释放对象实例/交互实例的空间的操作,执行上述操作完成后,得到返回值R。R为true释放空间成功,设附加数据为索引码和1(用低16bit表示)的组合,否则附加数据为索引码和0(用低16bit表示)的组合;管理节点完成上述操作后向运行节点发送返回中断;运行节点收到管理节点的中断后,解析附加数据,得到索引码和低16bit。如果低16bit为0,函数返回false,否则返回true。
以上所述,仅为本发明最佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。

一种基于分布仿真的反射内存网动态内存管理方法.pdf_第1页
第1页 / 共29页
一种基于分布仿真的反射内存网动态内存管理方法.pdf_第2页
第2页 / 共29页
一种基于分布仿真的反射内存网动态内存管理方法.pdf_第3页
第3页 / 共29页
点击查看更多>>
资源描述

《一种基于分布仿真的反射内存网动态内存管理方法.pdf》由会员分享,可在线阅读,更多相关《一种基于分布仿真的反射内存网动态内存管理方法.pdf(29页珍藏版)》请在专利查询网上搜索。

本发明涉及一种基于分布仿真反射内存网动态内存管理方法,该方法采用面向对象的手段,对VMIC反射内存的底层驱动函数进行了两次封装,实现了面向用户的内存动态分配和读写,解决了通信软总线开发过程中的安全性、可重用性和便利性问题,该封装执行下述任务:仿真开始时,为联邦分配内存空间供联邦进行通信交互;仿真进行中,联邦的邦员依次加入仿真,为每个邦员分配内存空间,并根据仿真想定为有通信需求的邦员之间分配对象实例。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1