进程间通信1. 基本原理

来源:互联网 发布:旧网络机顶盒改造diy 编辑:程序博客网 时间:2024/06/05 04:10

      通常情况下,程序只能访问自身的数据,和其它进程没有沟通,每个进程都是一个单独存在的个体,进程之间不需要协作就可以完成自身的任务了。但随着需要解决问题复杂性的增加,一个进程不可能完成所有的工作,必须由多个进程之间互相配合才能更快、更好、更强的解决问题,如同人与人之间的协作可以做出更大的事情一样。

      但是,处于安全性的考虑,OS会限制进程只能访问自身的数据,不能把“手”伸到其它进程的内部,这怎么办呢?进程间的沟通问题怎么解决呢?

      有问题,就需要沟通;需要沟通,就需要有沟通的媒介;为了公平和公正,沟通的媒介的控制权不应该属于沟通的任何一方。以此推论下去,在计算机系统中,承担沟通媒介控制任务的就只有OS自身了。

      所以,进程间通信的基本原理就是:OS提供了沟通的媒介供进程之间“对话”用。既然要沟通,如同人类社会的沟通一样,沟通要付出时间和金钱,计算机中也一样,必然有沟通需要付出的成本。出于所解决问题的特性,OS提供了多种沟通的方式,每种方式的沟通成本也不尽相同,使用成本和沟通效率也有所不同。我们经常听到的 管道、消息队列、共享内存都是OS提供的供进程之间对话的方式。

     既然是沟通,必然是沟通双方有秩序的说话,否则就成吵架了,谁也听不到对方说什么。如同法庭中法官控制控辩双方的发言时机和发言时间一样,OS也必须提供此类的管制方式使得进程的沟通显的有序和谐。我们经常听到的 互斥锁、条件变量、记录锁、文件锁、信号灯均属此列。

     沟通的媒介是什么?

     上面我们提到管道、消息队列、共享内存都是OS所提供的对话的方式,进程所说出去的“话”至少需要暂时保存在某个地方,然后才能被别的进程取走(听到)。不同的实现对话方式,保存中间信息的媒介从逻辑上分有文件系统,内核和内存三个部分。其实保存在内核中也是保存在内存中的,只是这部分内存只能OS自己访问,普通进程不能直接读写。