进程间通信(IPC)概述

进程间通信(IPC)

        进程通信,顾名思义,指运行在某个操作系统上不同继承之间的各种消息传递的方式。进程间通信主要需要解决三个问题:

        1. 一个进程如何给另一个进程传递信息;  

        2. 如何确保进程之间不互相干扰、妨碍;  

        3. 当进程间出现依赖关系时,该如何处理。
     

       目前存在的IPC形式主要有以下四种:

        1. 消息传递(管道、FIFO和消息队列);

        2. 同步(互斥量、条件变量、读写锁、文件和记录锁、信号量);

       3. 共享内存(匿名和具名的);

       4. 远程过程调用(门和SunRPC)。

       下面对以上四种IPC形式做一简单的描述,后续章节将一一展开深入研究。

       1.      消息传递(管道、FIFO和消息队列)

       管道:无名管道仅可用于具有亲缘关系进程间的通信,有名管道(FIFO)克服了管道无名字的限制,它能允许无亲缘关系进程间的通信;

       消息队列:消息队列是消息的链接表,包括Posix消息队列System V消息队列。拥有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

       2.       同步(互斥量和条件变量、读写锁、文件和记录锁、信号量)

       互斥量:互斥量是一个可以处于两态之一的变量:解锁和加锁。互斥量保护的是临界区,实际上保护的是在临界区内中被操纵的数据(data),故通常用于保护有多个线程或多个进程分享的共享数据。

       条件变量:条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量要和互斥量相联结,以避免出现条件竞争——一个线程预备等待一个条件变量,当它在真正进入等待之前,另一个线程恰好触发了该条件。

       读写锁:读写锁最适用于对数据结构的读操作次数多于写操作的场合。具体实现可以使用互斥量和条件变量结合实现。

       记录锁:记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作。

      信号量:信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。

      3.      共享内存(匿名和具名的)

      共享内存:顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效(最快)的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

     4.      远程过程调用(门和Sun RPC

     以上介绍的主要是在单主机上的IPC形式,还有一种大家十分熟悉的IPC形式,即套接字(socket)方式。

     5.      套接口(socket
    更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上。



参考链接:

      http://http://blog.csdn.net/zdplife/article/details/48471889

     http:// http://blog.chinaunix.net/uid-24148050-id-3022548.html 







 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值