论文部分内容阅读
多数大型应用系统,往往需要众多的进程协作,因此程序中都大量的涉及到某种和几种形式的IPC,也就是进程间通信(Inter-Process Communication),所以进程间通信的重要性显而易见。利用IPC进行应用程序设计是一种可以充分利用系统资源、提高程序运行效率的良好方法。近几年,随着网络和分布计算技术的高速发展,在网络,特别是分布式环境下的应用系统越来越多。而在网络和分布程序设计中,通常包括很多需要相互通信的进程,因此进程间通信的机制在程序设计中就显得更为重要。传统的UNIX系统都提供了多种通信机制。从分布式的角度出发,大致可以把这些方法划分为两类:一类是应用在同一节点上的进程间通信方法,主要有管道、FIFO、信号、消息队列和共享内存等;一类是应用在不同节点上的进程间通信方法,只有套接字(sockets)一种。现有的分布式进程间通信机制主要有PVM(并行虚拟机)和MPI(报文传递接口)。传统的UNIX进程间通信机制和现有的分布式进程间通信机制都有各自的优缺点。从分布式的角度来看,传统的UNIX进程间通信方法的主要不足是,用于不同节点上进程间通信的方法过于单一,只有套接字(socket)一种方法,而且其太复杂,使用起来不是很方便,尤其是对于分布式环境下的编程,位置透明性和访问透明性不可能得到保证。而传统的用于同一节点上的进程间通信方法,虽然应用起来很方便,但是不能用于不同节点上进程间的通信,在使用上就受到了很大的局限。而使用现有的基于分布式环境下进程间通信的机制就要学习相关知识,需要大量时间和精力,这给那些已经熟悉UNIX系统的用户带来很多不便。况且这些程序不具有通<WP=54>用性,只能在特定的环境下运行。基于如上原因,本文给出了一种用于不同节点上进程间通信的新机制的设计思想,即将传统的用于同一节点上进程间通信方法用于不同节点上的进程,也就是说,程序员可以应用传统的用于同一节点上进程间通信方法的系统调用接口来实现在不同节点上进程间的通信,而不用关心通信的进程是否在同一节点上,即在位置和访问上实现透明性。与此同时,我们可以应用新设计的分布式进程通信机制,对原有的单机UNIX系统上的并发程序作简单的改动,甚至不作任何改动,就可以实现其在分布式系统上的并行执行。这样就不用为了将单机系统上的程序移植到分布式系统上而重新编制程序(PVM和MPI均需要重新编制程序),从而大大简化了程序从单机系统到分布式系统的移植过程。新的分布式进程间通信的主要是通过一个守护进程(也称为精灵进程,deamon)实现的。在分布式环境下的每个节点上,都有一个守护进程,守护进程负责不同节点之间的通信,而对于本节点内的进程来说,与其他节点上进程的通信就转化为同本节点上守护进程之间的通信,从而可以用现有的用于同一节点上的进程间通信接口来实现在不同节点上进程间的通信。我们在全局的高度维护一个用于通信的数据结构的标识符,也可称之为关键字(Key)。这个关键字是全局唯一的,它的唯一性由守护进程来维护,即守护进程之间通过相互的协调,使得创建的用于通信的数据结构具有全局唯一的关键字(标识符),想要通信的进程通过这个唯一的标识符来访问这个数据结构,从而达到相互通信的目的。这些标识符(描述符)有不同的形式,可以是一个数值,文件名或路径名等等。分布式进程间通信在实现的机制上大都可以分为四个基本的操作:创建(打开)、写(发送)数据、读(接收)数据和控制。在用户执行相应<WP=55>的操作时,首先向本节点内的守护进程发出相应的请求,守护进程接收到相应的请求后,进行不同的处理。如果是本地的,则调用本地的进程间通信接口。如果是异地的,则向所在节点发出对应的请求。异地节点接收到请求后,分析请求信息后给出相应的结果,并将其返回给请求节点的守护进程。请求节点的守护进程在收到应答后,分析应答信息,然后将分析的结果再返回给用户进程。在这期间,如果涉及到关键字值表的操作,还应对其进行必要的维护。在本文中除了提出一种分布式进程间通信机制的设计思想,还给出了一个实例——分布式消息队列。对应地,给出了分布式消息队列的设计思想和具体实现。在实现分布式消息队列的基础上,我们将其与传统的套接字方式进行了对比。在对比的结果中,我们可以看到,分布式消息队列在性能上与套接字方式接近,而在实用性和透明性上都有很好的表现。从而达到了本文的设计目的。本文的创新点是:实现了一种新的分布式进程间通信机制。通过这种机制,传统的UNIX用户可以使用原有的单机内的进程间通信接口就可以编制分布式环境下的程序。而他们不必使用复杂的套接字方式,更不用因为要编制分布式环境下的程序,而去学习现有的分布式进程间通信机制(PVM和MPI等)。并且,应用新的分布式进程通信机制,对原有的在单机系统上运行的并发程序作简单的改动,甚至有些可以不作任何改动,就可以实现在分布式系统环境下的并行执行,从而大大简化了程序从单机系统到分布式系统的移植过程。在当今,虽然分布计算系统已经成为一个重要的研究领域,但是直到现在仍然没有一