Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375694
  • 博文数量: 68
  • 博客积分: 5157
  • 博客等级: 大校
  • 技术积分: 1560
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-20 10:05
文章分类

全部博文(68)

文章存档

2013年(1)

2012年(2)

2011年(11)

2010年(9)

2009年(22)

2008年(23)

我的朋友

分类:

2010-10-14 16:49:52

OTP介绍

开放电信平台(Open Telecom Platform, OTP)是为了构建和运行电信系统而设计的一个开发系统。图7.1给出了该系统的一个方块图,该图来自参考文献[66]。如图中所示,OTP系统是设计来运行在通常的操作系统之上的一个所谓的中间件平台

7.1OTP系统架构

OTP其实是在Ericsson内部开发的,但是其中大部分软件已经按照Erlang公开许可(Erlang public license1公布给了公共领域。

OTP的发布包含有如下一些部件:

            1Erlang的编译器和开发工具。

            2.适应多种不同目标环境的Erlang运行时系统。

            3.覆盖广泛的公共应用的一些库。

            4.实现公共行为模式的一组设计模式。

            5.用来学习如何使用该系统的一些教学资料。

            6.大量的文档。

 

1 非常类似于一个开源许可。


137

OTP已经被移植到了许多不同的操作系统上,包括所有的Unix类的系统(LinuxFreeBSDSolarisOS-X…),大多数的Windows操作系统(Windows 9598NT…)和一些VxWorks之类的嵌入式操作系统。

Erlang运行时系统是一个用来运行由Erlang BEAM编译器产生的中间码(intermediate code)的虚拟机。它同时也为Erlang编译器产生的本地码(native code)提供运行时支撑服务。

ErlangBEAM编译器自1998年后就取代了原始的JAM编译器。BEAM编译器[41,42]Erlang源代码编译成为32bit字宽的线索化解释器(threaded interpreter)使用的指令序列。而原始的JAM机是一个非线索化(non-threaded)字节码解释器(byte code interpreter)。

另外,为了提高效率,Erlang程序还可以用Uppsala大学开发的HIPE编译器[47]编译成本地码(native code)。编译成被解释执行的BEAM中间码的模块和编译成本地码的模块在模块级是可以自由混合的,即整个模块既可以被编译成BEAM码,也可以被编译成HIPE码,但是在模块内部,两种码不能混合。

BEAM机和HIPE机共同使用了Erlang运行时系统中关于内存管理、输入/输入、进程管理、垃圾收集等部件的代码。

Erlang运行时系统提供了许多传统上由操作系统提供的服务,所以,Erlang运行时系统远不仅仅提供纯序列化语言的运行时支撑,而比这要复杂得多。所有得Erlang进程都由Erlang运行时进程来管理——即使在一个Erlang运行时系统控制着数以万计的Erlang进程的时候,宿主操作系统也只会感到只有一个进程在运行,那就是Erlang运行时系统本身。

另一方面,与其他语言相比,Erlang的编译器又是相当简单的。编译通常只是一个从Erlang代码到一条合适的虚拟机原语的一个简单翻译。所以,例如Erlang中的spawn原语被翻译成虚拟机中的一条单独的操作码(opcode)(即spawn原语的实现),然后付出很大的努力使得操作码的实现尽量的高效。


138

7.1

OTP的发布包包含由一个很大的库集,为了发布的目的,其中所有的库都作为OTP应用的实例。例如发布包R9B(译注:Erlang/OTP的一个发布版本号)就包含如下这些应用:

       􀁺 appmon ——一个监控和操纵监督树的一个图形化工具。

       􀁺 asn1 ——一个按照ASN.1定义的一个编译器和运行时编/解码支持包。

       􀁺 compiler ——Erlang的编译器。

       􀁺 crypto ——一个用于加密/解密数据和计算消息摘要(message digests)的函数集。

       􀁺 debugger ——一个Erlang源代码调试器。

       􀁺 erl_interface——一个用于与分布式Erlang节点通信的库文件集。

       􀁺 erts——Erlang运行时系统。

       􀁺 et——一个事件跟踪器和一些记录事件数据并进行图形化表示的工具。

       􀁺 eva——负责事件与告警处理的应用。

       􀁺 gs——一个图形系统,一组用于构建GUI的图形函数。

       􀁺 ic——ErlangIDL编译器

       􀁺 inets——一个HTTP服务器和一个FTP客户。

       􀁺 jinterface——一个编写JavaErlang的接口的工具。

       􀁺 kernel——系统得以运行所需要的两个基本库之一(另一个是stdlib)。本库包含文件服务器、代码服务器的实现。

       􀁺 megaco——支持Megaco2/H248协议的库集。

       􀁺 mnemosyne——一种用在mnesia上的数据库查询语言。

 

2 Media Gateway Control,即媒体网关控制器


139

       􀁺 mnesia——一个具有Erlang的软实时特性的DBMS(译注:数据库管理系统)。

       􀁺 observer——一个用于跟踪和观测分布式系统的行为的工具集。

       􀁺 odbc——一个用于Erlang访问SQL数据库的ODBC接口。

       􀁺 orber——一个CORBA对象请求代理的Erlang实现。注意:还有其它一些单独的应用,来提供对不同CORBA服务(如事件、通知、文件传输等)的访问。

       􀁺 os_mon——一个监控外部操作系统的资源使用情况的工具。

       􀁺 parsetool——解析Erlang的工具。包括yecc,即LALR(1)解析器生成器(parser generator)。

       􀁺 pman——一个查看系统状态的图形化工具。pman可以用来查看本地或远端的Erlang节点。

       􀁺 runtime_tools——运行时系统所需要的各种小函数。

       􀁺 sasl——“System Architecture Support Libraries(系统结构支持库)的缩写。本应用包含对告警处理(alarm handling)和发布管理(managing releases)的支持。

       􀁺 snmp——简单网络管理协议(Simple Network Management Protocol[24]Erlang实现。本应用包含一个MIB编译器和一些MIB编写的工具。

       􀁺 ssl——一个Erlang的安全套接字层(secure sockets layer)接口。

       􀁺 stdlib——系统得以运行的必备的Erlang库集。另一个必备的库集是kernel

       􀁺 toolbar——一个可以从中开启应用的图形化工具条。

       􀁺 tools——一个由各种用于分析和监测Erlang程序的独立应用组成的包。这些应用即一些性能评估(profiling)、覆盖率分析(coverage analysis)、交叉引用分析(cross reference analysis)的工具。

 


140

       􀁺 tv——一个表浏览器table viewer)。本表浏览器是一个可以对mnesia数据库种的表进行图形化浏览的图形化应用。

       􀁺 webtool——一个用于管理基于网页的工具(如inets)的系统。

 

OTP库集提供了一个高度成熟的工具集,是编写任何商用软件的一个很好的起点,然而,OTP库集是相当庞杂的。

回想一下,我们的第6章只是对五种behaviourgen_servergen_eventgen_fsmsupervisorapplication)进行了一个简明的解释,而对其中任何一种behaviour的完整的解释都超出了本文的范围。本文只是在第4.1节对其中一个behaviourgen_server)背后的原理进行了较完整的交待。

发布包R9B中的stdlib应用一共包含71个模块——我们已经在这里描述了其中的4个。

阅读(2941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~