一种分布式操作系统进程间消息通信方法的设计

发布时间:2003-11-27 作者:蒋鲲鹏/JIANG Kun-peng,缪敬/MIAO Jing,芦东昕/LU Dong-xin 阅读量:

大型的通信设备为了提高设备性能都尽量装备更多的CPU,使不同的功能模块装备相应的CPU,每一个自主功能模块都有自主运行嵌入式操作系统。为了使各功能模块运行的应用进程能够互相协调就需要下层操作系统提供分布式系统的功能。

  根据文献[1-2]对分布式系统的定义,对于一个分布式的操作系统来说,应用进程可能会运行在不同的处理系统上,在这些处理系统之间,可能存在着全局共享的存储系统。当然,也可能没有全局共享的存储系统,每个CPU系统都只能访问本地的存储系统和文件系统。本文讨论在没有全局共享存储系统的情况下,运行于不同CPU系统之间的进程间消息的通信机理和方法。

  20世纪70年代以来,分布式操作系统[3]虽然从单系统操作系统中发展出来,但主要用于解决通用计算系统的分布式系统设计,对于嵌入式系统则关注不多,相关的设计方法和设计思想亦乏善可陈。典型的多CPU系统的嵌入式系统具有如下特点[4]:

  (1)对于嵌入式系统来说,由于存储空间有限且对实时性要求也非常严格,所以在设计针对嵌入式系统的分布式操作系统的进程间消息通信方法时,必须考虑到执行效率和内存占用的问题。

  (2)一个典型的嵌入式系统运行的应用进程种类比较单一,CPU的数量远远小于大型分布式系统。各个不同的CPU系统执行的应用进程在功能上都相对独立,相互之间的通信量不大。在物理上,一般各CPU系统基本都在同一个机架或者同一个机房内,物理连接稳定高效,因此,进程间通信的路由算法[5]可以设计得相对简单和有效率。

  (3)嵌入式系统不同于普通计算系统之处在于它的CPU系统之间的物理通信方式种类繁多,即使在同一个嵌入式系统中,也可能会使用到多种不同的物理通信方式。

  (4)出于对功能和成本的考虑,构成同一个嵌入式系统的各个子CPU系统的能力大不一样,有的是功能强大的奔腾级CPU系统,有的仅仅只是8051级的微控制器。一般会存在一个处于控制地位的功能比较强大的中心CPU系统,以及通过各种物理连接连接到这个中心CPU系统的各功能模块子系统。

  根据嵌入式系统的特点,本文提出一个在嵌入式系统中使用的分布式操作系统进程间消息通信的设计方法。

1 多CPU嵌入式系统的硬件系统

  在叙述进程间消息通信方法的设计之前,先给出该方法所基于多CPU系统的嵌入式系统的硬件体系结构特征:

  (1)拥有多个CPU系统。

  (2)各CPU系统之间都会有物理连接到中心CPU系统,可能是总线式的连接,也可能是点对点的连接。各终端CPU系统之间可能存在物理连接,也可能不存在物理连接。

  (3)各CPU系统上运行的进程间需要相互通信,以便能够协调运行。

  (4)由于没有全局共享的存储系统,每个CPU系统都使用本地存储系统,所以进程间消息通信必须使用消息通信的方式。

  许多大型的嵌入式系统,例如在通信设备、航空航天设备中,都有类似的硬件体系结构。其典型的结构框图如图1所示:

  图1中的点到点链路可能是通用异步收发(UART)链路,也可以是高速数据链路(HDLC)链路,泛指使用点到点方式连接的链路;图1中的点到多点链路可能是UART串口链路,也可以是HDLC链路,泛指使用点到多点方式连接中心CPU系统和多个终端CPU系统的链路;图1中的总线链路可能是以太网链路,也可以是HDLC总线链路,泛指使用总线式结构的物理链路。

  从图1可以看出,与普通的多CPU系统相比,多CPU系统的嵌入式系统在物理连接方式上更为复杂,但是各CPU系统的功能和位置却相对固定,中心CPU系统和终端CPU系统之间有着明显控制和被控制关系。这决定了在本文的设计中,进程间消息通信将采用集中的路由控制方式。

2 多CPU嵌入式系统进程间消息通信方法的层次结构

  本文提出的运行在嵌入式系统上的分布式操作系统的进程间消息通信方法主要有如图2所示的层次结构。

  由图2可以看出,进程间消息通信主要分3个层次:应用进程接口层,提供发送时的应用编程接口(API),完成接收消息的进程间分发;路由层,实现进程地址到实际传输地址的解析;数据链路传输层,维护本CPU系统到其他CPU系统的通信链路,保证消息的可靠传输。

3 应用进程接口层的设计

  应用进程接口层要实现的功能有:

  (1)向上提供进程间消息通信的发送接口。不管需要通信的目的进程是否是在同一个CPU系统中运行,对上的接口都是统一的。

  (2)将收到的消息派发到各进程。

  (3)负责同步消息(阻塞方式)和异步消息(无阻塞方式)处理。

  在运行时,应用进程接口层程序根据上层代码在调用时的输入参数确定进程间消息通信是在同一个CPU系统内还是在不同的CPU系统间,是同步方式还是异步方式,据此分别启动相应的处理流程,并启动统一的接收消息处理进程统一处理发送给本CPU系统的消息。同步消息处理和异步消息处理的处理流程设计如图3所示。

4 路由层的设计

  在嵌入式系统中,各CPU系统功能相对独立,在各CPU系统上运行的进程也很固定,因此,在开发时用户会清楚地知道需要和那个CPU系统上的进程通信。所以本文设计的进程间消息通信使用的地址格式是“主机名+进程名”的两段格式。

  应用进程使用字符串来标识地址,在路由层将字符串格式的地址根据地址映射表转化为二进制格式的地址,相当于“主机编号+进程编号”,再根据地址中的主机编号查询路由表链路配置得到相应的链路号,从而完成路由层的地址解析和链路查找的功能。

4.1 地址映射表的设计

  地址映射表是一个两级映射结构,如图4所示。

  在嵌入式系统中的,CPU系统的数量不会很多,所以使用遍历查找不会有很大的效率问题,当然在对效率的轻微下降也很敏感的地方也可以使用一些如命名分类等提高效率的方法。

4.2 路由表的设计

  路由表是一个主机编号和使用链路一一对应的表结构,同时还有一个可选的缺省转发链路表项,如图5所示。

4.3 路由表和地址映射表的维护

  根据多CPU系统的嵌入式系统的特性,路由表和地址映射表的维护都是使用了中心CPU系统集中控制的方式。具体方法如下:

  (1)中心CPU系统有着缺省的主机编号,中心CPU系统的路由管理进程也有缺省的进程编号。

  (2)终端CPU系统启动时,向中心CPU系统发送路由维护请求,请求信息中包括本CPU系统的信息,如本机名、本机进程编号表、本机硬件地址(总线型链路必须提供);中心CPU系统在收到请求后,为该终端CPU系统分配主机编号,并且把该主机编号和收到该请求的链路设备号添加到路由表中,同时把该主机名、主机编号、主机进程表添加到地址映射表中,然后向终端CPU系统发送路由维护回应(回应中包括全局的地址映射表及为该终端CPU系统分配的主机编号);终端的CPU系统收到回应后,更新或创立自己的地址映射表。对于使用点到点链路或点到多点链路和中心CPU系统相连的终端CPU系统来说,本地的路由表比较简单,只有到中心CPU系统一条上连链路,和其他CPU系统上的进程通信都通过中心CPU系统来转发;对使用总线式链路和中心CPU系统相连的终端CPU系统来说,使用类似地址解析协议(ARP)的方式来维护本地的路由表。

  (3)各终端CPU系统的缺省转发主机和缺省转发链路都指向中心CPU系统以及和中心CPU系统的相连的链路。如果只允许该终端CPU系统和主机CPU系统通信,该项可以置为无效。

  (4)各终端CPU系统的运行进程发生变化后,都向中心CPU系统上报消息,中心CPU系统根据终端CPU系统上报的消息更新全局地址映射表,并将更新后的全局映射表发送到整个CPU系统中。为了提高更新效率,可以采取增量更新的方式。中心CPU系统还会定时发送全局地址映射表,以确保整个系统的地址映射表一致。

  (5)在发送和接收消息时都使用全局地址映射表做地址解析。

5 数据链路层的设计

  通过路由层对发送消息目标地址的解析和映射,可以得到该消息需要使用的链路号。根据链路号,数据链路层可以找到发送的设备驱动,并调用设备驱动发送消息。数据链路层任务主要有:对消息进行分包和组包以适应硬件发送设备对最大包长度的限制;实现流量控制和自动重发机制,确保数据包在链路层的可靠传输;管理所有用于CPU系统间通信的硬件设备,维护链路的添加、删除,统计链路上的各种信息。

6 结束语

  与普通分布式操作系统的运行环境不同,嵌入式系统一般是可定制的,各CPU子系统之间的物理连接方式不统一、不同类型的物理链路并存是基本特点,这些特点,在以往的分布式操作系统的设计中都未考虑。本文针对嵌入式系统提出的进程间消息通信的方法,采用分层设计,每一层为上层提供服务,屏蔽实现细节,适宜于应用在嵌入式系统这种特殊的应用环境中,并根据嵌入式系统应用环境比普通分布式系统的环境要稳定和简单的特点,简化了进程的路由寻址设计,得到了提高效率和简化实现的好处。

  由于利用分布式操作系统进程间消息通信的原理和分层设计的思想,采用分布式操作系统进程间消息通信的方法,本文设计实现了接口统一的进程接口层、简单可靠的路由层,屏蔽了不同通信链路物理差异的数据链路层,为大型的多CPU系统嵌入式系统实现分布式操作系统提供了进程间可靠消息通信的能力。由于采用了分层设计,各层间功能界定清晰、接口明确,使得进程间消息通信方法具有良好的可移植性和软件重构能力。

7 参考文献

  [1] Jie Wu. 分布式系统设计 [M]. 高传善译. 北京:机械工业出版社, 2001.

  [2] Andrew S Tanenbaum.现代操作系统 [M]. 陈向群译. 北京:机械工业出版社, 1999.

  [3] Bowen J P, Glesson T J. Distributed Operating Systems [M]. In: Distributed Computer Systems, Butterworths, 1990.

  [4] Sinha P K. Distributed Operating Systems: Concepts and Design [M]. IEEE Press, New York, 1997.

  [5] Chow R, Johnson T. Distributed Operating Systems and Algorithms [M]. Addison-Wesley Publishing Company, 1988.

  

[摘要] 文章描述了具有典型意义的嵌入式系统的体系结构。提出了一种应用于多CPU嵌入式系统的分布式操作系统进程间消息通信的设计方法,并和常用的分布式操作系统的进程间消息通信方法进行了比较。

[关键词] 嵌入式系统;分布式操作系统;进程间消息通信

[Abstract] The typical architecture of an embedded system with multiple CPUs is introduced. A design method for the message-based interprocess communication (IPC) in such a distributed operating system is proposed and compared with methods for the message-based IPC in normal distributed operating systems.

[Keywords] embedded system; distributed operating system; message-based interprocess communication