嵌入式Linux系统编程学习之十八进程间通信(IPC)简介

  Linux 下的进程通信手段基本上是从 UNIX 平台上的进程通信手段继承而来的。而对 UNIX 发展做出过重大贡献的两大主力 —— AT&T 的贝尔实验室和 BSD (加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者是对 UNIX 早期的进程间通信手段进行了系统的改进和扩充,形成了 “system V IPC” ,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接字 (socket) 的进程间通信机制。而 Linux 则把两者的优势都继承了下来;
在这里插入图片描述
  UNIX 进程间通信方式包括管道、FIFO 以及信号。
  System V 进程间通信包括 System V 消息队列、System V 信号量以及 System V 共享内存区。
  Posix 进程间通信包括 Posix 消息队列、Posix 信号量以及 Posix 共享内存区。

 Linix 进程之间的通信主要有下面几种:

  • 管道和命名管道:管道用于有亲缘关系的进程间的通信,命名管道还允许无亲缘关系进程间通信;
  • 信号:在软件层模拟中断机制,通知进程某事发生;
  • 消息队列:消息的链表包括 posix 消息队列和 System V 消息队列;
  • 共享内存:多个进程访问一块内存;
  • 信号量:进程间同步;
  • 套接字:不同机器间的进程通信。

  下面是对它们的详解:
 (1)管道 (pipe) 和命名管道 (named pipe) :管道可用于具有亲缘关系的进程间的通信;命名管道除具有管道所具有的功能外,还允许无亲缘关系进程间的通信。
 (2)信号 (signal) :信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生。一个进程收到一个信号,与处理器收到一个中断请求的效果可以说是一样的。
 (3)消息队列 (message queue) :消息队列是消息的链接表,包括 Posix 消息队列和 System V 消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息,对消息队列有读权限的进程则可以从消息队列中读取消息。
 (4)共享内存 (shared memory) :共享内存可以说是最有用的进程间通信方式,是最快的可用 IPC 形式。它是针对其他通信机制运行效率较低而设计的。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。
 (5)信号量 (semaphore) :主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。
 (6)套接字 (socket) :这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,其应用非常广泛。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值