操作系统进程间通信 --- IPC

1. 概述

进程间通信的原因:

进程之间要保持独立, 也需要通信, 保证相对独立性的同时还需要去确保进程间的沟通.

1.1 通信模型

IPC facility提供2个操作:

  • send(message) -- 消息大小固定或者可变
  • receive(message)

如果P和Q想通信, 需要:

  • 在它们之间建立通信链路
  • 通过 send/receive交换消息

通信链路的实现:

  • 物理(例如, 共享内存, 硬件总线)
  • 逻辑(例如, 逻辑属性)

1.2 直接及间接通信

假如进程A, B需要进行通信, 有以下两种方式:

  • 进程A把消息先发给内核, 由内核再转发给进程B.
  • 进程A和B直接进行通信.

那么第一种方式就是间接通信, 第二种方式是直接通信.

为了能够实现有效正确的通信, 直接/间接通信需要有以下注意事项:

直接通信:

  • 进程必须正确的命名对方:
  • send(P, message) -- 发送信息到进程P
  • receive(Q, message) == 从进程Q接受消息
  • 通信链路的属性
  • 自动建立链路
  • 一条链路恰好对应一对通信进程
  • 每对进程之间只有一个链接存在
  •  链接可以是单向的, 但通常为双向的

间接通信:

  • 定向从消息队列接收消息
  • 每个消息队列都有一个唯一的ID
  • 只有它们共享了一个消息队列, 进程才能够通信
  • 通信链路的属性
  • 只有进程共享一个共同的消息队列, 才建立链路
  • 链路可以与许多进程相关联
  • 每对进程可以共享多个通信链路
  • 连接可以是单向或双向
  • 操作
  • 创建一个新的消息队列
  • 通过消息队列发送和接收消息
  • 销毁消息队列
  • 原语的定义如下:

                       send(A, message) --- 发送消息到队列A

                       receive(A, message) --- 从队列A接受消息

1.3 阻塞与非阻塞

消息传递可以是阻塞或非阻塞

阻断被认为是同步的:

  • Blocking send has the sender block until the message is received
  • Blocking receive has the receiver block until a message is available

非阻断被认为是异步的:

  • Non-blocking send has the sender send the message and continue
  • Non-blocking receive has the receiver receive a valid message or null

1.4 通信链路缓冲

队列的消息被附加到链路, 可以是以下3种方式之一:

  • 0容量 - 0 messages, 发送方必须等待接收方(阻塞传递)
  • 有限容量 - n messages的有限长度, 如果队列满了那么发送方就必须等待
  • 无限容量 - 无限长度, 发送方不需要等待

2. 信号

Signal:

  • 软件中断通知事件处理
  • Example: SIGFPE, SIGKILL, SIGUSR1, SIGTOP, SIGCONT

接收到信号时会发生什么:

  • Catch: 指定信号处理函数被调用
  • Ignore: 依赖操作系统的默认操作(Example: Abort, memory, dump, suspend or resume process)
  • Mask: 闭塞信号因此不会传送, 可能是暂时的(当处理同样类型的信号)

不足:

不能传输要交换的任何数据

3. 管道

管道是用来进行数据交换的. 

4. 消息队列

消息队列按FIFO来管理消息:

  • Message: 作为一个和字节序列存储
  • Message Queues: 消息数组
  • FIFO & FIFO configuration

5. 共享内存

进程:

  • 每个进程都有私有地址空间
  • 在每个地址空间内, 明确地设置了共享内存段

优点:

  • 快速, 方便地共享数据

不足:

  • 必须同步数据访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值