OS 进程的通信方式(进程间的信息交换方式)

低级通信方式:PV操作。

高级通信方式:指以较高的效率传输大量数据的通信方式。高级通信方式主要有以下三类:

一 、共享存储(存储空间)

在通信进程之间存在一块可以直接访问的共享存储空间,通过对该共享空间进行读/写操作实现信息交换。

注意 用户进程空间一般都是独立的,进程运行期间一般不能访问其他进程的空间,要想让两个用户进程共享空间,必须通过特殊的系统调用来实现,而进程内的线程是自然共享进程空间的。

形象解释:甲和乙中间有一个大布袋,甲和乙的物品交换通过这个大布袋进行,甲把物品放在大布袋里,乙拿走。但是乙不能直接到甲的手里去拿东西,甲也不能到乙手中直接拿东西。

二、消息传递(进程间的数据交换是以格式化的消息为单位的)

如通信的进程之间不存在可以直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程间的通信。

进程通过系统提供的发送消息和接收消息的两个原语进行数据交换。

1)直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从该消息缓冲队列上取得消息。

2)间接通信方式(信箱通信方式):发送进程把消息发送到一个中间实体(我们称之为信箱),接收进程从信箱中取得消息。

三、管道通信(一种特殊的通信方式)

“管道”:用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名pipe文件。

向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程)则从管道中直接接收(读)数据的过程,为管道通信。

为了协调双方的通信,管道必须提供三个方面的协调能力:互斥、同步、确定双方的存在。

注意

1 管道是一种文件,与一般文件稍有不同,其可以克服使用文件进行通信的两个问题:

1)限制管道的大小 2)读进程也可能工作的比写进程快。

2 从管道读数据是一一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入更多的数据。

3 管道可以看成是共享存储空间的进化版,但是由于在管道通信中,存储空间进化成了缓冲区,缓冲区只能一边写入、另一边读出,因此只要缓冲区中有数据,进程就能从缓冲区中把数据读出,而不必担心因为其他进程在其中进行写操作而遭到阻塞,因为写进程会先把缓冲区写满,然后才让读进程读取,所以当缓冲却还有数据时,写进程是不会往缓冲区写数据的,因此,我们得出第三个结论:管道通信必然是半双工通信。

发布了113 篇原创文章 · 获赞 58 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/QQQZSJ/article/details/100838773