10 进程间通信 | 《操作系统》笔记

这一系列是操作系统 (清华大学向勇、陈渝)视频课的课堂笔记,主要是课堂 PPT 和部分讲授内容的文字版,仅供参考。

概述(Inter Process Communication, IPC)

  • 直接通信与间接通信
    • 直接通信
      • 进程必须正确的命名对方:
        • send(P, message) - 发送信息到进程 P
        • receive(Q, message) - 从进程 Q 接受消息
      • 通信链路的属性
        • 自动建立链路
        • 一条链路怡好对应一对通信进程
        • 每对进程之间只有一个链接存在
        • 链接可以是单向的,但通常为双向的
    • 间接通信
      • 定向从消息队列接收消息
        • 每个消息队列都有一个唯一的 ID
        • 只有它们共享了一个消息队列,进程才能够通信
      • 通信链路的属性
        • 只有进程共享一个共同的消息队列,才建立链路
        • 链接可以与许多进程相关联
        • 每对进程可以共享多个通信链路
        • 连接可以是单向或双向
      • 操作
        • 创建一个新的消息队列
        • 通过消息队列发送和接收消息
        • 销毁消息队列
      • 原语的定义如下
        • send(A, message) - 发送消息到队列 A
        • receive(A, message) - 从队列 A 接受消息
  • 阻塞与非阻塞
    • 阻断被认为是同步的
    • 非阻塞被认为是异步的
  • 通信链路缓冲
    • 零容量:发送方必须等待接收方
    • 有限容量:发送方必须等待,如果队列满
    • 无限容量:专送方不需要等待

信号

  • Signal(信号)
    • 软件层面的中断
    • Examples: SIGFPE, SIGKILL, SIGUSRI, SIGSTOP, SIGCONT
  • 接收到信号时会发生什么
    • Catch: 指定信号处理函数被调用
    • Ignore: 依靠操作系统的默认操作
      • Example: Abort, memory dump, suspend or resume process
    • Mask: 闭塞信号因此不会传送
      • 可能是暂时的(当处理同样类型的信号)
  • 不足
    • 不能传输要交换的任何数据

管道

  • 内存中的一个 buffer
  • 把一个程序的输出重定向到另一个程序的输入
  • 子进程从父进程(shell)继承文件描述符
  • 进程不知道(或不关心)从键盘、文件、程序读取或写入到终端、文件、程序

消息队列

  • 管道的缺点
    • 没有父进程的参与无法完成
    • 传递字节流而非结构化的数据
  • 消息队列按 FIFO 的来管理消息
    • Message: 作为一个字节序列存储
    • Message Queues: 消息数组
    • FIFO&FILO configuration

共享内存

  • 进程
    • 每个进程都有私有地址空间
    • 在每个地址空间内,明确地设置了共享内存段
  • 优点
    • 快速、方便地共享数据
  • 不足
    • 必须同步数据访问
  • 特点
    • 最快的方法
    • 一个进程写另外一个进程立即可见
    • 没有系统调用干预
    • 没有数据复制
    • 不提供同步:由程序员提供同步

10 进程间通信 | 《操作系统》笔记

http://www.zh0ngtian.tech/posts/409f070c.html

作者

zhongtian

发布于

2019-05-22

更新于

2023-12-15

许可协议

评论