• 进程通信
  • 进程同步

进程通信

进程通信即进程间的信息交换

进程是资源分配的基本单位,各个进程之间内存空间独立,一个进程不能随意访问其他进程的地址空间

进程通信的方式

共享存储(Shared-Memory)

基于共享数据结构的通信方式
  • 多个进程共用某个数据结构(OS提供并控制)
  • 由用户(程序员)负责同步处理
  • 低级通信:可以传递少量数据,效率低

基于共享存储区的通信方式
  • 多个进程共用内存中的一块存储区域
  • 由进程控制数据的形式和方式
  • 高级通信:可以传递大量数据,效率高

消息传递(Message-Passing)

消息具备一定的格式,便于消息的解析

直接通信:点到点发送
  • 发送和接收时指明双方进程的ID
  • 每个进程维护一个消息缓冲队列

间接通信:广播
  • 以信箱为媒介,作为中间实体
  • 发进程将消息发送到信箱,收进程从信箱读取
  • 可以广播,容易建立双向通信链

管道通信(Pipe)

管道
  • 用于连接读/写进程的共享文件,pipe文件
  • 本质是内存中固定大小的缓冲区

半双工通信
  • 同一时段只能单向通信,双工通信需要两个管道
  • 以先进先出(FIFO)方式组织数据传输
  • 通过系统调用read()/write()函数进行读写操作

进程同步

协调进程间的相互制约关系,使他们按预期的方式执行

进程同步的前提:

  • 进程是并发执行的,进程间存在着相互制约关系
  • 并发的进程对系统共享资源进行竞争
  • 进程通信,过程中相互发送的信号称为消息或事件

两种相互制约的方式

  • 间接相互制约关系(互斥):进程排他性地访问共享资源
  • 直接相互制约关系(同步):进程间的合作,比如管道通信

互斥访问临界资源

访问过程

  1. 进入区:尝试进入临界区,成功则加锁(lock)
  2. 临界区:访问共享资源
  3. 退出区:解锁(unlock),唤醒其它阻塞进程
  4. 剩余区:其它代码

访问原则

  • 空闲让进:临界区空闲,允许一个进程进入
  • 忙则等待:临界区已有进程,其它进程等待(阻塞状态)
  • 有限等待:处于等待的进程,等待时间有限
  • 让权等待:等待时应让出CPU执行权,防止“忙等待”
  1. repeat
  2. entry section; // 进入区
  3. critical section; // 临界区
  4. exit section; // 退出区
  5. remainder section; // 剩余区
  6. until false;

软件实现

  • 单标志法
  • 双标志法
  • 皮特森算法

image.png
image.png
image.png
image.png

硬件实现

  • 中断屏蔽方法
  • TS、TSL操作
  • Swap操作

image.png
image.png
image.png

信号量

image.png

管程(Moniyor ,监视器)

image.pngimage.png
image.png

死锁

死锁产生的条件

  • 互斥条件:共享资源的排他性访问
  • 不剥夺条件:访问时该共享资源不会被剥夺请求并
  • 保持条件:保持当前资源时请求另一个资源循环
  • 等待条件:存在共享资源的循环等待链

避免死锁

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png