重新整理操作系统概念系类——进程通信

前言

介绍一下进程之间的通信,以及我在工作中对于进程通信的选择。

为什么有这个进程通信的概念呢。

实际上是因为进程是一个独立的运行单位,它分配的内存地址不能够被其他进程访问,这样的设计其实是为了安全。

但是有时候我们进程之间需要交换信息,那么怎么办呢?操作系统给了我们路口。

进程通信有下面几种方式:

图:

重新整理操作系统概念系类——进程通信

正文

共享存储

看图:

重新整理操作系统概念系类——进程通信

举个栗子。

不知道各位有没有开发过android,android app之间是如何通信的呢?

app肯定是不同的进程,他们有一种Ashmem来实现共享内存,有兴趣可以看看。

管道通信

管道是指用于连接读写进程的一个共享文件,又名pipe 文件。其实就是在内存中开辟一个大小固定的缓冲区。

注:管道只能采用半双工通信,某一段时间内只能实现单项的传输。如果要实现双通道,那么要两根。

它的运作方式是这样的,比如说进程一写完了数据后,进程二才能去读取数据。

这种管道是1对1的概念,只能一个进程对另外一个进程,而不能1对多。

因为是这样子的,只有管道写满之后,另外一个进程才能读取,在另外一个进程读取完毕之后,前面一个进程才能继续写。

所以说管道通信其实是有非常严格的要求的。

消息传递

进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的"发送消息/接收消息"两个原语来进行数据交换。

具体操作如下:

重新整理操作系统概念系类——进程通信

消息传递有两种方式,一种是直接通信方式,一种是间接通信方式。

直接通信是这样子的,一个进程通过发送原语发送消息,这些消息操作系统会把这些消息挂载到目的进程消息缓存队列中,如果目的进程需要接收,那么目的进程可以通过接收原语接收。

所谓原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。

间接通信方式,消息先发送到中间实体(信箱)中,因此也称“信箱通信方式”。

形象点如下:
重新整理操作系统概念系类——进程通信

重新整理操作系统概念系类——进程通信

重新整理操作系统概念系类——进程通信

上一篇:linux_centos学习


下一篇:linux