01.进程间通信简介

1、概述

       IPC是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上的不同进程间各种消息传递(message passing)的方式。本书还讲述多种形式的同步(synchronization),因为像共享内存区这样的较新式的通信需要某种形式的同步参与运作。

 

1.2 消息传递类型

  • 管道(pipe):既可在程序中使用,也可从shell中使用。管道只能在具有共同祖先(指父子进程关系)的进程间使用。有名管道(named pipe)即FIFO可以在不同进程间使用。
  • System V消息队列(System V message queue):可用在同一主机上有亲缘关系或无亲缘关系的进程之间。
  • Posix消息队列:可用在同一主机上有亲缘关系和无亲缘关系的进程之间。
  • 远程过程调用(Remote Procedure Call,简称RPC):它是从一个系统(客户主机)上某个程序调用另一个系统(服务器主机)上某个函数的一种方法,是作为显式网络编程的一种替换方法开发的。既然客户和服务器之间通常传递一些信息(被调用函数的参数与返回值),而且RPC可用在同一主机上的客户和服务器之间,因此可认为RPC是另一种形式的消息传递。

 

1.3 同步类型

  • 记录上锁(record locking)
  • System V信号量(System V semaphore)
  • Posix信号量(Posix semaphore)
  • 互斥锁(mutex)和条件变量(condition variable):用于线程间的同步,它们也能提供不同进程间的同步。
  • 读写锁(read-write lock)

 

2、IPC 对象的持续性

        我们可以把任意类型的IPC的持续性(persistence)定义成该类型的一个对象一直存在多长时间。图1-2展示了三种类型的持续性。

 

        (1)随进程持续的(process-persistent) IPC对象一直存在到打开着该对象的最后一个进程产闭该对象为止。例如管道和FIFO就是这种对象。

        (2)随内核持续的(kernel-persistent) IPC对象一直存在到内核重新自举或显式删除该对多为止。例如System V的消息队列、信号量和共享内存区就是此类对象。Posix的消息队列、信号量和共享内存区必须至少是随内核持续的,但也可以是随文件系统持续的,具体取决于实现。

        (3)随文件系统持续的(filesystem-persistent) IPC对象一直存在到显式删除该对象为止。即使内核重新自举了,该对象还是保持其值。Posix消息队列信号量共享内存区如果是使用映射文件实现的(不是必需条件),那么它们就是随文件系统持续的。

        在定义一个IPC对象的持续性时我们必须小心,因为它并不总是像看起来的那样。例如管道内的数据是在内核中维护的,但管道具备的是随进程的持续性而不是随内核的持续性:最后一个将某个管道打开着用于读的进程关闭该管道后,内核将丢弃所有的数据并删除该管道。类似地,尽管FIFO在文件系统中有名字,它们也只是具备随进程的持续性,因为最后一个将某个FIFO打开着的进程关闭该FIFO后,FIFO中的数据都被丢弃。

        图1-3汇总了将在本书中讲述的各种类型IPC对象的持续性。

       注意该列表中没有任何类型的IPC具备随文件系统的持续性,但是我们说过有三种类型的Posix IPC可能会具备该持续性,这取决于它们的实现。显然,向一个文件写入数据提供了随文件系统的持续性,但这通常不作为种IPC形式使用。多数形式的IPC并没有在系统重新自举后继续存在的打算,因为进程不可能跨越重新自举继续存活。对于一种给定形式的IPC,要求它具备随文件系统的持续性可能会使其性能降级,而IPC的一个基本的设计目标是高性能。

 

3、fork、exec 和 exit 对 IPC 对象的影响

4、小结

        IPC传统上是Unix中一个杂乱不堪的领域。虽然有了各种各样的解决办法,但没有一个是完美的。我们的讨论分成4个主要领域:

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

       (2)同步(互斥锁、条件变量、读写锁、信号量);

       (3)共享内存区(匿名共享内存区、有名共享内存区);

       (4)过程调用(Solarisi门、Sun RPC)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值