概述
Occam语言是根据C.A.R.Hoare提出的CSP(Communicating Sequential Process)语言模型而设计的一种并发程序设计语言,0ccam语言是用14世纪英国牛津哲学家William of occam的名字命名的。William of occam有这样一种哲学观点:任何问题,用最简单的方法能解决的途径是最好的途径。简明性是Oceam语言的特点。
Oeeam语言与Transputer芯片是同时相互对应进行设计开发的,因此它们之间的结合所获得的效率,是一般语言望尘莫及的。可以这样说,Occam语言对于Transputer系统设计的作用,就如同布尔尔代数对于逻辑门电路设计的作用。Occam程序中的进程,可以映射到一个Transputer系统的有关Transputer单元中去,用Occam语言为一个并发系统所编的程序,实际上起着该Transputer系统的操作系统的作用。
Occam语言是建立在并发和通信基础上的新的并发编程语言,它把一个并发系统描述成一组并发进程,进程间通过命名通道来实现通信。
大量的调试工作在Transputer开发系统(如TDS2)中用软件手段来完成,避免了通常多处理器在硬件上进行调试的麻烦。随着Occam语言在不同机型中的实现,Occam还可用在其他芯片组成的系统中。1
定义和类型和范围Occam同Pascal等其他高级语言一样,要求程序中用到的每一个项都要有一个类型和每一项类型在某进程使用它之前进行定义。Occam不允许程序员定义新的类型。
(1)名字:Occam中名字的长度不限,但它必须以字母表中的字母开头。名字的其余部分可由字母、数字和字符构成。大小写在Occam中区分识别,所以fred和Fred是两个不同的名字。
(2)数据类型:变量可有多种数据类型。下面是Oceam中经常使用的数据类型:
INT——整型。
BYTE——0和255之间的整数,经常用以表示字符。
B00L——逻辑值TRUE或FALSE。
(3)通道类型:通道的类型为“CHAN OF类型”。对通道传送的值,要对其数据类型和数据结构进行定义。目前,我们把通道看作只传送单数据类型的单个值,就像变量一样。
传送单个整型值的通道可定义为:
CHAN OF INT chan3:
其中INT定义通过通道chan3的数据类型。chan3的类型是CHAN OF INT。
(4)字符和字符串:Occam没有任何CHAR或STRING类型来表达字母、字符或字词。Occam中字母、字符用BYTE类型的数来表达,字符串用BYTE类型的数组来表达。
(5)布尔类型:通过测试比较运算符的运算,产生布尔值。
(6)常量:给某常数定一个名字,可通过“VAL类型名字IS值”来定义。
(7)作用域:在Occam中,变量、通道和其他命名项都是属于某个进程的,进程紧跟在对应的命名项的定义后面。1
进程一个进程可以认为是执行一段程序,它启动、执行一定的动作,然后中止或结束。
Occam语言有三个基本进程;
(1)赋值进程:变量:=表达式
将表达式的值赋给变量。
(2)输出进程:通道!表达式
将表达式的值输出到通道。
(3)输入进程:通道?变量
将从通道输入的值赋给变量。
Occam语言还有两个特殊进程:SKIP和STOP。SKIP进程开始执行后不做任何动作就结束。STOP进程开始执行后不再向下执行也不终止,称之为中止。1
同步和通道进程间通信是同步的,即当一个通道用于一个进程的输入,并用于另一个进程的输出时,只有当这两个进程都准备好,通信才会发生。
通道是单向的,是从一个进程到另一个进程的点对点的通信链。输入输出的方向是一定的,不可改变的,一个通道仅能连接两个进程。双向传输就需要两个通道。
通道上的传输实际上是拷贝工作,将一个值原封不动地拷贝到另一个地方。在Occam语言中,可以认为变量是用来存储值的,通道是用来传输值的。
总的来说,通道在以下两方面不同于变量:
1、一个通道可在同一计算机上运行的两个进程间,或者在不同计算机上运行的两个进程间传送信息。在第一种情况下,通道实际上是内存中的某个地址,这有点像变量;在第二种情况下,通道可以表示一条硬件链,如Transputer链或其他串行通信链。在Occam程序中,这两种情况表达是相同的,只是在第二种情况中,需要用Occam语言的扩展语言进行链地址定位。
因此,Occam语言用抽象的方法来描述通信,它不依赖于物理实现,程序员可在单个处理器上用通道来编写程序,而不必担心不同进程具体在何处被执行。待证明程序正确后,可将不同进程分到各处理器上,这只要在程序开头做一些说明,如上面提到的“链地址定位”等即可。在单个处理器上所用的通道称之为软通道。
2、通道是有耐心的。若一个输入进程发现需输入值没准备好,它会等待,反之亦然,不需程序员给出明确的指令,减轻了程序员的负担。1