进程间通信

进程间通信方式

在这里插入图片描述在计算机中,每个进程都有自己独立的内存地址空间,其他进程并不能直接访问属于某个进程的地址空间,是为了确保系统数据的安全性。
但举个例子,我们使用图片时,点击分享按钮,可以通过微信将其分享出去,因此此时就需要实现进程之间的相互通信。

进程之间的相互通信方式分为三种:

  1. 共享存储
  2. 管道通信
  3. 消息传递

1. 共享存储

一个进程是不能去访问另一个进程的私有空间的,因此操作系统会为这两个进程提供一块共享内存空间。但是在使用这块共享空间时,是进程互斥的,即当一个进程访问完了出来以后,另一个进程才能访问,修改。
共享存储又有两种方式,一种是基于数据结构的共享,比如在共享空间里只能存放一个长度为10的数组,这种共享方式速度慢,限制多,是一种低级通信的方式。另一种是基于存储区的共享,在内存中划出一块共享存储区,数据的形式、存放的位置都由进程控制,而不是操作系统,这种共享方式速度更快,是一种高级通信的方式。

在这里插入图片描述

2.管道通信

“管道”是指用于连接读写进程的一个共享文件,其实就是在内存中开辟一个大小固定的缓冲区,比如Linux系统中的管道大概为4KB。
数据通过管道来进行传输,但需要注意管道通信是一种半双工的通信方式,即在同一个时间只能进行单向的数据传输。如果需要同时进行双向传输的话,就需要建立两条管道。管道没有被写完时,读进程是被阻塞的,只有写满才可以读。同样只有管道被读空时才能被写。管道的数据读完了就会被抛弃,因为这个特性,管道的读进程只有一个,如果在读的过程中出现了两个进程,一个进程读到了其他进程的数据,发现自己读错了,会立即抛弃该数据,这样就会导致另一个进程始终无法读到自己想要的数据。

在这里插入图片描述

3. 消息传递

进程间的数据交换以格式化的消息为单位,进程通过操作系统提供的发送消息/接收消息两个原语来进行数据交换。
原语其实有点类似于计算机网络中的报文,包括消息头和消息体。消息头里面又包括发送进程ID,接收进程ID,消息类型,消息长度等格式化的信息。
消息传递有两种方式:直接通信方式,将消息直接挂到接收进程的消息缓冲队列上;间接通信方式:一个进程发送原语到信箱中,信箱在把该消息转发给接收进程。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章