没有合适的资源?快使用搜索试试~ 我知道了~
ACE程序员教程
需积分: 10 1 下载量 126 浏览量
2011-12-30
00:08:27
上传
评论
收藏 4.93MB PDF 举报
温馨提示
试读
153页
ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务。
资源推荐
资源详情
资源评论
Douglas C. Schmidt schmidt@cs.wustl.edu
Thomas Jordan ace@programmer.net
Erik Koerber erik.koerber@siemens.at
Martin Krumpolec krumpo@pobox.sk
Fred Kuhns fredk@tango.cs.wustl.edu
Susan Liebeskind shl@cc.gatech.edu
Andy Bellafaire amba@callisto.eci-esyst.com
Marina marina@cs.wustl.edu
Jean-Paul Genty jpgenty@sesinsud.com
2
第 1 章 ACE 自适配通信环境
ACE 自适配通信环境 (Adaptive Communication Environment)是面向对象的框架和工具包,它为通信
软件实现了核心的并发和分布式模式。ACE 包含的多种组件可以帮助通信软件的开发获得更好的灵活性、
效率、可靠性和可移植性。ACE 中的组件可用于以下几种目的:
z 并发和同步
z 进程间通信(IPC)
z 内存管理
z 定时器
z 信号
z 文件系统管理
z 线程管理
z 事件多路分离和处理器分派
z 连接建立和服务初始化
z 软件的静态和动态配置、重配置
z 分层协议构建和流式框架
z 分布式通信服务:名字、日志、时间同步、事件路由和网络锁定,等等。
1.1 ACE 体系结构
如图 1-1 所示,ACE 具有分层的体系结构。在 ACE 框架中有三个基本层次:
z 操作系统(OS)适配层
z C++包装层
z 框架和模式层
3
图 1-1 ACE 的体系结构
1.1.1 OS 适配层
OS 适配层是位于本地 OS API 和 ACE 之间的“瘦”代码层,它使 ACE 的较高层与平台依赖性屏蔽
开来,从而使得通过 ACE 编写的代码保持了相对的平台无关性。只需要极少的努力,开发者就可以将
ACE 应用移植到任何平台上。
OS 适配层也是 ACE 框架之所以可用于如此多的平台的原因所在。目前 ACE 适用的 OS 平台包括:
实时 OS(VxWorks、Chorus、LynxOS 和 pSoS)、大多数版本的 UNIX(SunOS 4.x 和 5.x; SGI IRIX 5.x
和 6.x; HP-UX 9.x, 10.x 和 11.x; DEC UNIX 3.x 和 4.x; AIX 3.x 和 4.x; DG/UX; Linux; SCO; UnixWare;
NetBSD 和 FreeBSD)、Win32(使用 MSVC++和 Borland C++的 WinNT 3.5.x、4.x、Win95 和 WinCE)
以及 MVS OpenEdition。
1.1.2 C++包装层
C++包装层包括一些 C++包装类,它们可用于构建高度可移植的和类型安全的 C++应用。这是 ACE
工具包最大的一部分,大约包含了总源码的 50%。C++包装类可用于:
z 并发和同步:ACE 提供若干并发和同步包装类,对本地 OS 多线程和多进程 API 进行了抽象。这些
包装类封装用于线程和进程的原语,比如信号量、锁、栅栏(Barrier)和条件变量。另外还有更高级
的原语可用,比如守卫(Guard)。所有这些原语共享类似的接口,因而很容易使用和相互替换。
z IPC:ACE 提供若干 C++包装类,封装不同 OS 中不同的进程间通信(IPC)接口。例如,ACE 的包
装类封装了以下 IPC 机制:BSD socket、TLI、UNIX FIFO、流管道、Win32 命名管道,等等。ACE
还为消息队列提供包装类,包括特定的实时 OS 的消息队列。
4
z 内存管理组件:ACE 包含的一些类可用于内存动态分配和释放;其中包括允许预分配所有动态内存
的类。这些预分配的内存随即通过 ACE 提供的管理类的帮助进行本地管理。在大多数实时和嵌入式
系统中,这样的细粒度管理极为必要。另外还有一些类用于灵活地管理进程间共享内存。
z 定时器类:有多种不同的类可用于处理定时器的调度和取消。ACE 中不同种类的定时器使用不同的
底层机制(堆、定时器轮(timer wheel)或简单列表)来提供不同的性能特性。但是,不管底层使用
何种机制,这些类的接口都是一致的,从而使得开发者很容易使用任何一种定时器类。除了这些定时
器类,还有封装高分辨率定时器(在部分平台上可用,比如 VxWorks, Win32/Pentium, AIX 和 Solaris)
和 Profile Timer 的包装类。
z 容器类:ACE 还拥有若干可移植的 STL 风格的容器类,比如 Map、Hash_Map、Set、List,等等
z 信号处理:ACE 提供对特定 OS 的信号处理接口进行封装的包装类。这些类使得开发者能够很容易地
安装和移除信号处理器,并且可以为一个信号安装若干处理器。另外还有信号守卫类,可用于在看守
的作用域之内禁止所有信号。
z 文件系统组件:ACE 含有包装文件系统 API 的类。这些类包括文件 I/O、异步文件 I/O、文件加锁、
文件流、文件连接包装,等等。
z 线程管理:ACE 提供包装类来创建和管理线程。这些包装还封装了针对特定 OS 的线程 API,可被用
于提供像线程专有存储这样的功能。
1.1.3 ACE 框架组件
ACE 框架组件是 ACE 中最高级的“积木”,它们的基础是若干针对特定通信软件领域的设计模式。
设计者可以使用这些框架组件来帮助自己在高得多的层面上思考和构建系统。这些组件实际上为将要构
建的系统提供了“袖珍体系结构”,因此这些组件不仅在开发的实现阶段、同时在设计阶段都是有用的。
ACE 的这一层含有以下一些大型组件:
z 事件处理:大多数通信软件都含有大量处理各种类型事件(比如,基于 I/O、基于定时器、基于信号
和基于同步的事件)的代码。软件必须高效地多路分离、分派和处理这些事件。遗憾的是,大多数时
间开发者们都在反复地编写这些代码,“重新发明轮子”。这是因为,事件多路分离、分派和处理代
码全都紧密地耦合在一起,无法彼此独立地使用
。ACE 提供了被称为 Reactor(反应器)的框架组件
来解决这一问题。反应器提供用于高效地进行事件多路分离和分派的代码,并极大地降低了它们与处
理代码之间的耦合,从而改善了可复用性和灵活性。
z 连接或服务初始化组件:ACE 提供 Connector(连接器)和 Acceptor(接受器)组件,用于降低连
接初始化与连接建立后应用执行的实际服务之间的耦合。在接受大量连接请求的应用服务器中,该组
件十分有用。连接首先以应用特有的方式初始化,然后每一连接被相应的处理例程分别处理。这样的
去耦合使得开发者能够分别去考虑连接的处理和初始化。因此,如果在随后的阶段开发者发现连接请
求数多于或是少于估算,它可以选择使用不同的初始化策略集(ACE 提供了若干可供开发者挑选和
选择的策略),以获得所要求的性能水平。
z 流组件:ACE Stream 组件用于简化那些本质上是分层的(layered)或层次的(hierarchic)软件的开
发。用户级协议栈的开发是一个好例子;这样的栈由若干互连的层次组成。这些层次或多或少可以相
互独立地进行开发。当“数据”通过时,每一层都处理并改变它,并将它传递给下一层,以作进一步
的处理。因为各层是相互独立的,它们很容易被复用或替换。
z 服务配置组件:通信软件开发者面临的另一个问题是,很多时候,软件服务必须在安装时配置,或必
须在运行时重配置。应用中特定服务的实现可能需要进行
改动
,因而应用可能必须用新改动的服务重
5
剩余152页未读,继续阅读
资源评论
zzuzyk
- 粉丝: 3
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功