进程通信是指进程之间的信息交换。

这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。
从某方面来讲,进程通信可以解决进程同步问题。

首先回顾下我们前面讲的信号量机制,为了实现进程的互斥与同步,需要在进程间交换一定的信息,
因此信号量机制也可以被归为进程通信的一种方式,也被称为低级进程通信,主要原因为:

  1. 效率低
    一次只可操作少量的共享数据,比如生产者消费者问题,生产者一次只可向缓冲池中投放一个消息;

  2. 通信对用户不透明
    OS 只为进程提供了共享存储器,
    而关于进程之间通信所需的共享数据结构设计,数据的传递,进程的互斥与同步,都必须要有开发者去实现,
    显然,这对开发者来说很不方便,,增加了程序设计的难度和复杂度。

同样,我们来看下高级进程通信的特点:

  1. 使用方便
    这也是针对低级进程通信中的第二点 — 通信对用户不透明,OS对开发者隐藏了进程的具体细节,对于用户来说,只需要使用OS提供的一组原语(实现高级通信的命令),就可以方便的直接使用并实现进程间的通信。
    就像我们使用第三方的jar 包一样,直接调用封装好的方法即可。

  2. 高效的传送大量数据
    可以通过OS 提供的原语快速的传输大量数据。

说完了这两种级别的进程通信,下面我们就具体来看一看进程的通信方式都有哪些。
通信机制也是随着OS 的发展而不断进步的,目前通信机制可分为四大类:
共享存储器管道通信系统消息传递系统 以及 客户机-服务器 系统

接下来我们依次讲解下各种通信机制:

一、共享存储器系统

在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过这些空间进行通信。
因些按照共享内容的不同,可将其分为以下两种类型:

1. 基于共享数据结构的通信方式

也称为我们上面讲到的信号量机制,此方式要求诸进程共用某些数据结构,借以实现进程间的信息交换,
共享数据结构的一个例子就是存放消息的共享缓冲池,对其的操作需要使用信号量来保证诸进程间同步的进行。


2. 基于共享数据区的通信方式

为了传输大量的数据,OS 在内存中划出一块共享存储区域,诸进程通过该共享区域读写或交换信息,实现通信。

数据形式、位置、访问控制都是由进程来控制的。
需要通信的进程在通信之前,先向系统申请共享存储区的一个分区,并将其附加到自已的地址空间中(如果不添加,访问时会产生地址越界中断,后续的内存管理中进行详细讲解),便可对其中的数据进行正常的读、写,操作完成或都在不需要时,再将分区归还给共享存储区。

也因为其一次可以操作一个分区,并可将大量的数据读取或者写入分区,所以这种方式也属于高级通信。

另外,因为数据不需要在进程之间复制,所以这是最快的一种进程通信机制。


二、管道(pipi)通信系统

所谓 “管道” 是指连接一个读进程 和 一个写进程以实现他们之间通信的一个共享文件,又名 pipe 文件。
管道 分为两种: 无名管道 ,命名管道。

1. 无名管道

这是Unix 早期的一种通信方式,是半双工通信,只能用于父子进程或兄弟进程间,并且它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
进程通信方式总结与盘点

2. 命名管道(FIFO)

可以用于在无关进程间交换数据,FIFO也就是先进先出,有路径名与命名管道关联,它以一种特殊设备形式存在于文件系统中,并且可以实现半双工或全双工的通信。
FIFO 常用于客户–服务器应用程序中,被作为 汇聚点,在客户进程和服务器进程之间传递数据。
进程通信方式总结与盘点


三、消息传递系统

学自,https://blog.csdn.net/qq_34666857/article/details/103162132
待学习

相关文章:

  • 2021-06-15
  • 2021-05-29
  • 2021-06-19
  • 2021-08-22
  • 2021-12-12
  • 2021-05-23
  • 2022-12-23
  • 2021-07-19
猜你喜欢
  • 2022-01-17
  • 2021-12-29
  • 2022-01-25
  • 2021-06-15
相关资源
相似解决方案