Linux IPC之工具综述

本文概述了UNIX的IPC(进程间通信)工具,包括数据传输(如管道、消息队列、共享内存)和同步工具(如信号量、文件锁)。讨论了数据传输工具与共享内存的区别,以及各种IPC工具的可移植性、系统V IPC的设计问题和可访问性。重点强调了共享内存的高效性,但需要额外的同步机制,如信号量。
摘要由CSDN通过智能技术生成

本文是对UNIX IPC工具的宏观总结和对比,细节的使用方法请参考相关手册。

UNIX IPC工具分类

pic

通信工具

数据传输

为了进行通信,一个进程将数据写入到IPC工具中,另一个进程从中读取数据。这些工具要求在用户内存内核内存之间进行两次数据传输

一次传输是在写入的时候,从用户内存到内核内存。
另一次传输是在读取的时候,从内核内存到用户内存。

可以进一步将数据传输工具分成以下类别

  • 字节流

通过管道,FIFO,以及流socket,交换的数据是一个无分隔符的字节流。每个读取操作可能会从IPC工具中读取任意数量的字节,不管写者写入的块的大小是多少。

  • 消息

通过System V消息队列,POSIX消息队列,以及数据报socket,交换的数据是以分隔符分隔的消息。每个读取操作读取由写者写入的一整条消息,无法只读取部分消息,而把剩余部分留在IPC工具中,也无法在一个读取操作中读取多条消息。

  • 伪终端

伪终端是一种在特殊情况下使用的通信工具。

共享内存

进程通过将数据放到由进程间共享的一块内存中以完成信息的交换。

内核通过将每个进程中的页表条目指向同一个RAM分页来实现这一功能。
一个进程可以通过将数据放到共享内存块中使得其他进程读取这些数据,由于通信无需系统调用(即,没有用户内存和内核内存之间的数据传输),因此共享内存的速度非常快。

大多数现代UNIX系统提供了三种形式的共享内存。

  • System V共享内存
  • POSIX共享内存
  • 内存映射

使用共享内存时的注意点

  • 尽管共享内存的通信速度更快,但速度上的优势是用来弥补需要对共享内存上发生的操作进行同步的不足。例如,当一个进程正在更新共享内存中的一个数据结构时,另一个进程就不应该试图读取这个数据结构,在共享内存中,信号量通常用来作为同步方法。

  • 放入共享内存的数据,对所有共享这块内存的进程可见。这与传输工具中具有的破坏性语义不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值