操作系统——进程通信(IPC)

操作系统——进程通信(IPC)方式

参考:https://www.cnblogs.com/xiaobaizzz/p/12285577.html
参考:https://www.cnblogs.com/tsiangleo/p/4902695.html

进程通信:进程间的信息交换。

  • 进程是分配系统资源的单位,因此各进程拥有的内存空间相互独立。
  • 为了保证进程安全,一个进程不能直接访问另一个进程的地址空间。
  • 为了保证进程间的安全通信,操作系统提供了一些方法。

按照发送路径来看,可分为直接通信和间接通信:
在这里插入图片描述

1、管道(匿名管道)(间接通信)

概念: 进程间基于内存文件的通信机制,指用于连接读写进程的一个共享文件,即 pipe 文件。其实就是在内存中开辟的一个大小固定的缓冲区

如下图所示:
在这里插入图片描述
特点:

  • ① 管道只能采用半双工通信,只能支持数据的单向传输。如果要实现双向同时通信,则需要建立两个管道。
  • ② 各个进程之间要互斥访问管道。
  • ③ 当管道写满时,写进程的 write() 系统调用将被阻塞,等待读进程将数据取走;管道变空时,读进程的 read() 系统调用将被阻塞。
  • ④ 如果管道没写满,就不允许读;如果没读空,就不允许写
  • ⑤ 数据一旦读出,就从管道中被抛弃,这意味着读进程最多只能有一个,否则可能会发生读错数据的情况。(一个管道指父进程(或一个子进程)与某个特定子进程通信)
    缺点:
  • 速度慢,容量有限,只有父子或兄弟进程能通信。

2、有名管道(FIFO)(间接通信)

概念: 同管道一样,不过它允许没有亲缘关系的进程间进行通信。
实现: 有名管道提供了一个路径名与之关联,以 FIFO 的形式存在于文件系统中。即使不相干的进程也可以通过FIFO相互通信,只要它们能访问已经提供的路径。
特点:

  • ① 一种文件类型
  • ② FIFO 可以在无关进程之间交换数据。
  • ③ FIFO 以一种特殊设备文件形式存在于文件系统中。
  • ④ FIFO 的通信方式类似于在进程中使用文件来传输数据,只不过 FIFO 类型文件同时具有管道的特性。在读数据时,FIFO 管道中同时也清除数据,且先进先出。

3、信号量(Semophore)

概念: 一种计数器,用来控制进程间多个线程或者多个进程对资源的同步访问
实现: 常实现为一种锁机制。(信号量是一个被保护的变量,且只能通过初始化和两个标准的原子操作(P/ V,又称wait(s), signal(s))来访问。)

4、信号(Signal)

概念: 进程间的软件中断通知和处理机制。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号:①采用默认处理机制——进程中断或退出,②忽略该信号,③自定义该信号的处理函数,执行相应的动作。
实现: 内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常、其它进程、终端的终端(Ctrl+C,Ctrl+等)、作业的控制(前台,后台进程的管理等),分配额问题(CPU 超时或文件过大等)、内核通知(IO就绪等)、报警(计时器)。
在这里插入图片描述

5、消息队列(间接通信)

概念: 是消息的一个链表,存放在内核中,由操作系统维护的以字节序列为基本单位的通信机制。允许一个或多个进程向它写消息,一个或多个进程向它读消息。Linux 维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。

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

每个消息队列都有一个唯一的标识;只有共享了相同消息队列的进程,才能够通信,才建立连接,连接可以是单向或双向。消息队列可以与多个进程相关联;每对进程可以共享多个消息队列。

在这里插入图片描述
特点:

  • ① 消息队列是面向记录的,其中的信息具有特定的格式以及特定的优先级。
  • ② 消息队列独立于发送和接收进程,进程终止时,消息队列及其内容并不会被删除。
  • ③ 消息队列可以实现消息的随机查询,消息不一定要以 FIFO 的次序读取,也可以按消息的类型读取。

6、共享内存(直接通信)

概念: 共享内存映射为一段可以被其它很多进程访问的内存。即把一段物理内存映射到多个进程的内存地址空间的通信机制。每个进程的内存地址空间需要明确设置共享内存段,同一个进程的线程共享地址空间。(速度快,但是没有同步)
在这里插入图片描述

特点:

  • ① 共享内存是最快的一种 IPC,因为进程是直接对内存进行读取。
  • ② 因为多个进程可以同时操作,所以需要进行同步操作。(共享空间的访问必须互斥,操作系统负责提供共享空间和同步互斥工具(如P、V操作))
  • ③ 信号量+共享内存通常结合使用,信号量用来同步对共享内存的访问。

7、套接字(Socket)

概念: 用于实现不同主机间的进程通信。一个套接口可以看做是进程通信的端点,每个套接口的名字是唯一的;其它进程可以访问,连接和进行数据通信。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部