总第171期
2008年第9期
舰船电子工程
Ship Electronic Enginee ring Vol.28No.9
ac reactor150
 基于AC E 的跨网络仿真节点的设计
3
肖万斌 任雄伟
(海军工程大学指挥自动化系 武汉 430033)
摘 要 在网络仿真应用中,连接多个网络的仿真节点设计的好坏对于实时性系统性能的影响重大。通过利用自适应通信环境—AC E (ADA PTIVE C o mmunication Enviro nment )的主动对象模式和共享内存技术,解决了此类仿真系统在传统的并发机制和共享内存管理方面存在的问题。
关键词 自适应通信环境;并发机制;共享内存中图分类号 TP391.9
Design of AC E 2Based Cross 2Networ k Si mulation Node
Xiao Wa nbin  Re n Xiongwei
(Depart me nt of Comma nd and Control ,Naval U niversit y of Engineering ,Wuha n  430033)
Abs tra ct  In the development of networked simulation applications ,the design of simu lation nodes that connecting sev eral net 2wor ks is crucial to the performance of real 2time system.By virtual of the active object pattern and shared memor y ,t he existing prob 2lems of the traditional concurrent mechanism and shared memory management are s olv ed properly in this paper.
Ke y w ords  ACE ,conc ur rent mechanism ,shared me mor y Class N umber  TP391.9
1 引言
仿真技术的最新发展迫切需要有合理的系统架构和通信机制,以满足系统的互操作性、可重用性、可伸缩性、实时性和协同性。然而,传统的仿真系统由于缺乏可靠的对象间通信和合适的时间管理服务,尤其是多子网的网络系统运行不同的网络协议,造成网络通信面临许多复杂性:如多线程事故,实时性不
强,以及缺乏可移植性等,不利于系统规模的增长。ACE (自适应通信环境)是一种可自由使用、开放源码的面向对象(OO )框架,为仿真应用程序开发提供可复用的框架,实现并发网络应用在不同O S 平台上的移植[1]。
A CE 是采用分层体系结构的面向对象(OO )
框架(Framewor k ),它设计并实现了许多用于并发
通信的核心模式,主要包括:反应器(AC E Reac 2tor )、前摄器(ACE Proactor )及多任务(AC E Ta sk )等模式。它通过提供了一组可重用的C ++包装外观(Wrapper Facade )和框架组件,实现了跨平台通信,主要包括:事件多路分离和分派、服务初始化、进程间通信、共享内存管理、并发执行和同步等。使用ACE 进行应用系统的开发,可以增强系统的可移植性,提高系统的软件质量,并能更容易地转换到标准的高级中间件[2~3]。
2 跨网络仿真系统的构建
通常,在处理跨网络仿真应用的偶发复杂性和系统固有的复杂性时,一些成功的技术和工具主要集中在“面向对象”的中间件(比如高层体系结构HLA ),它有助于管理网络应用中的复杂性(com 2
3
收稿日期年5月6日,修回日期年6月日
作者简介肖万斌,男,硕士研究生,研究方向作战仿真。任雄伟,男,博士,副教授,研究方向计算机仿真。
:2008:20081:::
2008年第9期舰船电子工程151
 pl exit y )和异构性(het erogeneit y )。而ACE 工具包使用了“面向对象”的分割技术、接口设计、数据封装模式和C ++特性。在仿真系统的开发中使用ACE 技术,设计空间可以得到更大可能的独立性和可移植性。图1说明的是在ACE 下构建的一个跨网络仿真系统的基本结构
:
图1 基本AC E 的跨网络仿真系统结构图
在处理多个I/O 源,比如多个网络连接,许多传统的应用都要为每一个连接创建新进程或新线程,而进程或线程的创建及维护的开销可能会相当
巨大。另一种途径是使用反应式模式(Reactor Patt ern ),其基础是事件多路分离器,它允许只用一个进程或线程就能处理许多事件。然而,在避免系统资源开销过大的同时,应用编程的复杂性却大大增加了。而且如果一个操作失败,那么整个服务器进程将会挂起,大大降低服务器进程的性能。
下文主要研究利用ACE 技术解决此跨网络仿真系统中的并发机制和共享内存管理这两方面存在的问题,从而屏蔽了异构系统中复杂的操作系统和网络协议,实现了跨网络的通信,保护了仿真系统在开发和维护中的重大且重复的投资。2.1 并发机制
在跨网络仿真系统中,局域网A 、B 的各个仿真节点与跨网络节点之间使用TCP 通信,服务器网关需要从一个或多个生产者进程(局域网A 或B )将消息发送到另一个或多个消费者进程(局域网B 或A )中(即生产者/消费者模型)。然而,在服务器在向双方子网进行消息分发时,有可能遭遇TCP 传输层的流控制[5]。如果一个TCP 连接由于流控制而被阻塞,那么整个服务器进程都将因此而阻塞。
在开发网络服务器时,一般有两种方式:串行式服务器和并发式服务器。如图2(a)所示,串行式服务器在处理后续请求之前,它会完整地处理每一个客户请求。因此,在处理一个请求时,串行式服务器要么将其他请求排成队列,要么忽略它们。由于这种串行式结构,每一个请求处理都会在一个相对粗糙的层次上被串行化;另外,当客户因为等
待服务器处理请求而被阻塞时,就会阻止客户程序继续往下执行,应用程序和中间层用于“重新传输”和“
超时”的计算会变得很复杂,从而引发严重的网络阻塞。而并发式服务器可以同时处理多个客户请求,如图2(b)所示。根据OS 和硬件平台的不同,并发式服务器在执行它的服务时,要么使用多线程,要么使用多进程。并发式服务器非常适用“I/O 操作频繁”的服务和(或)“执行时间会变化”的长周期服务
图2 串行式/并发式服务器
为了实现此仿真系统良好的“可伸缩性”和“健壮性”,在设计中使用了AC E 的并发机制—主动对
象模式。ACE 的主动对象模式(Act ive O bject Pat t er n )将方法执行和方法调用分离,加强了并发和简化对驻留在自身控制线程中对象的同步访问。传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出方法调用的线程中执行的;当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象具有自己的命令执行线程,它的方法将在自己的执行线程中执行,不会阻塞调用方法。其分离方法调用和执行的步骤如下:每一个仿真节点均使用主动对象模式,内部底层都包含一个消息队列来实现消息的异步传输。比如,来自节点A i 的消息被其任务对象放入服务器网关的消息队列中,服务器代理随之从队列中取出消息,并发地完成执行应用所定义的处理。然后,处理完成的消息被放入节点B j 的消息队列,由节点B j 的任务对象完成最后的消息处理。这样,服务器网关拥有独立的线程,线程完成实际的方法操作,实现了和方法调用的过程分开。并且,不同线程处理不同TCP 连接,一旦一个连接上的线程被阻塞,
也不会影响到其他连接的线程。这样,不仅增强了程序的并行性,降低了同步的复杂性,而且方法执行和调用可以不一致,系统的灵活性和响应速度也大大提高了。 共享内存管理
跨网络仿真节点的主要工作包括接收(发
2.2:/
152 肖万斌等:基于AC E 的跨网络仿真节点的设计总第171期
送/转发)各个网段的数据包,对数据包进行装配和拆包,并对数据条件进行判断等。在并发模式下,线程间的通信和数据共享对于系统的性能有着很大的影响。利用一个进程中的所有线程共享其拥有的状态和资源,驻留相同的地址空间,可以存取相同的数据。通信时可以直接借助于共享内存区的特点充分发挥共享内存区的作用,以实现高效、实时的线程间通信。
A CE 含有非常丰富的共享内存管理类。第一组是基于ACE_Allocat or 的类,这组类使用动态绑定和策略模式来提供灵活性和可扩展性,适用于实时系统,但它们只能用于局部的动态内存分配;第二组类基于ACE_Mal loc 模板类,这组类不仅包括了用于局部动态内存管理的类,也包括了管理进程间共享内存的类,而且这些共享内存类使用底层(OS )
共享内存接口。
图3 Adapter 模式在ACE 内存管理中的运用
然而,对于本跨网络仿真系统而言,单一的使用以上一种内存管理类还无法很好地满足实际的应用需要。因此,通过使用对象适配器模式(Ob 2ject Adapt er Pat t ern )有效地结合了AC E_Alloca 2tor 和AC E_Mal loc 类共同来管理共享内存池,见图3所示。同时,通过创建基于内存映射文件的内存池(ACE_MMA P_Memory_Pool )可以满足此仿真系统实验数据处理的持久机制。也就是说,将分配器的每一次分配内容都保存到一个后备文件中,以实现内存管理数据的可预见性。
另一方面,由于共享内存中的数据可以以一种非顺序的随机方式来访问,进程间通信的速率通常又是不同的。如果共享内存在设计时没有处理锁机制,那么当有多个进程在访问共享内存时可能会产生同步问题,造成共享内存访问的冲突[7]。为了提高进程间通信的效率,协调发送信息和接收信息进程之间的同步,就必须和其它技术一起使用才能保证。AC E 的栅栏组件(ACE_Barrier)是专门为这些用途而设计的原语之一:它阻塞所有在执行的线程,直到它们全部到达栅栏为止,然后解除阻塞,所有的执行都将继续执行。图说明的就是通过使用提供的共享内存管理机制和栅栏技术实现两个局域网、B 各节点间的通信
图4 基于ACE 的数据共享流程
3 结语
随着业务需求的增长,仿真系统的功能日趋综合化,多网络跨平台的分布式仿真系统随之得到飞速发展。然而,网络系统的并发机制和共享内存管理一直是开发人员经常面临的两大主要挑战。测试数据表明,跨网络仿真系统通过借助于AC E 轻型中间件技术,很好地优化了系统的并发机制和内存管理机制,大大提高了仿真节点的性能。具体的实验细节及数据分析将在今后的深入研究中逐渐展开。
参考文献
[1]Stephen    D.Huston ,J ames CE Jo hnson.The AC E
Programmer πs G uide :Practical Design Patter ns for Net work a nd System s Progr amming [M ].Pea rson
Educa tio n ,Inc ,2004:4~16
[2]Dougla s.C.Sc hmidt ,Stephen.D.Husto n.C ++Net 2
work Programming ,Volume 1:Ma stering Complexity with AC E and Pat te rns [M ].Addison 2Wesley ,2002:103~123
[3]Dougla s.C.Sc hmidt ,Stephen.D.Husto n.C ++Net 2
work Programming ,Vol ume 2:Systematic Reuse with ACE and Framewor ks [M ].Addison 2Wesley ,2003[4]Douglas.C.Schmidt ,Mic hael Stal.Patter n 2Orie nted
Sof tware Arc hitect ur e ,Volume 2:Patter ns for C o n 2c ur rent and Networ ked Object s [M ].John Wiley &Sons ,L td ,2000
[5]De nnis Se dgwick.A Str eam Input 2Output System [J ].
A T &T Bell Labs Technical Journal ,1984,63(8):311
~324
[6]Bil Lewis.Threads Primer :A Gu ide to Multithreaded Pro 2
gramming[M].Prentice 2H all ,Englewood Cliffs ,1995[]D L D ,S [M ]22W y ,4ACE A 7oug ea.Co ncurrent Progra mming in Java :e sign
Principles and Patter ns econd Edition .Addi son esle 2000

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。