OTP介绍
开放电信平台(Open Telecom Platform, OTP)是为了构建和运行电信系统而设计的一个开发系统。图7.1给出了该系统的一个方块图,该图来自参考文献[66]。如图中所示,OTP系统是设计来运行在通常的操作系统之上的一个所谓的“中间件平台”。
图7.1:OTP系统架构
OTP其实是在Ericsson内部开发的,但是其中大部分软件已经按照Erlang公开许可(Erlang public license)1公布给了公共领域。
OTP的发布包含有如下一些部件:
1.Erlang的编译器和开发工具。
2.适应多种不同目标环境的Erlang运行时系统。
3.覆盖广泛的公共应用的一些库。
4.实现公共行为模式的一组设计模式。
5.用来学习如何使用该系统的一些教学资料。
6.大量的文档。
1 非常类似于一个开源许可。
137
OTP已经被移植到了许多不同的操作系统上,包括所有的Unix类的系统(Linux、 FreeBSD、Solaris、OS-X…),大多数的Windows操作系统(Windows 95、98、NT…)和一些VxWorks之类的嵌入式操作系统。
Erlang运行时系统是一个用来运行由Erlang 的BEAM编译器产生的中间码(intermediate code)的虚拟机。它同时也为Erlang编译器产生的本地码(native code)提供运行时支撑服务。
Erlang的BEAM编译器自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的一个发布版本号)就包含如下这些应用: