词条 | 进程通信 |
释义 | § 简介 两个并行进程可以通过互相发送消息进行合作,消息是通过消息缓冲而在进程之间相互传递的。 UNIX系统中的进程间的通讯有两层含义: – ---单一进程内部各个模块间的通讯 – ---作为单独单位的各个不同进程间的通讯 前者沿袭了单任务操作系统中的模块通讯方法; 后者必须保证各个进程在通讯过程中互不干扰从而保持其通信的一致性。 § UNIX采用的进程通信方式 1) 文件和记录锁定。 为避免两个进程间同时要求访问同一共享资源而引起访问和操作的混乱,在进程对共享资源进行访问前必须对其进行锁定,该进程访问完后再释放。这是UNIX为共享资源提供的互斥性保障。 2)管道。 管道一般用于两个不同进程之间的通信。当一个进程创建一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样 提供了两个进程之间数据流动的一种方式。 3)FIFO。 FIFO是一种先进先出的队列。它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO。因此也成为命名管。 4)消息队列。 UNIX下不同进程之间可实现共享资源的一种机制;UNIX允许不同进程将格式化的数据流以消息形式发送给任意 进程。对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制。通过使用消息类型,进程可以按任何顺序读消息,或为消息安排优先级顺序。 5)信号灯。 作为进程间通讯的一种方法,它不是用于交换大批数据,而用于多进程之间的同步(协调对共享存储段的存取)。 6)共享内存。 通过信号灯实现存储共享(类似“红灯停、绿灯行”) § 各种通信方法的优缺点 几种通信方法总结综上所述.进程之间的多种通信方法各自有各自的优点和缺点:如果用户传递的信息较少.或是需要通过信号来触发某些行为.前文提到的软中断信号机制不失为一种简捷有效的进程间通信方式.但若是进程间要求传递的信息量比较大或者进程间存在交换数据的要求,那就需要考虑别的通信方式了。无名管道简单方便.但局限于单向通信的工作方式.并且只能在创建它的进程及其子孙进程之间实现管道的共享:有名管道虽然可以提供给任意关系的进程使用.但是由于其长期存在于系统之中,使用不当容易出错.所以普通用户一般不建议使用。消息缓冲可以不再局限于父子进程.而允许任意进程通过共享消息队列来实现进程间通信.并由系统调用函数来实现消息发送和接收之间的同步.从而使得用户在使用消息缓冲进行通信时不再需要考虑同步问题.使用方便,但是信息的复制需要额外消耗CPU的时间.不适宜于信息量大或操作频繁的场合。共享内存针对消息缓冲的缺点改而利用内存缓冲区直接交换信息,无须复制,快捷、信息量大是其优点。但是共享内存的通信方式是通过将共享的内存缓冲区直接附加到进程的虚拟地址空间中来实现的.因此,这些进程之间的读写操作的同步问题操作系统无法实现。必须由各进程利用其他同步工具解决。另外,由于内存实体存在于计算机系统中.所以只能由处于同一个计算机系统中的诸进程共享。不方便网络通信。不同的进程通信方式有不同的优点和缺点.因此.对于不同的应用问题,要根据问题本身的情况来选择进程间的通信方式。 |
随便看 |
|
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。