七、进程协作

96 阅读3分钟

进程协作

进程之间不共享内存资源

进程之间通信三种方式:共享存储、信息传递、管道通信

共享存储

基于共享数据结构的通信方式

  • 共享数据结构是操作系统提供
  • 可以传递少量数据,效率低

基于共享存储区通信方式

  • 进程向操作系统申请一块内存
  • 由进程决定数据的形式和方式
  • 可以传递大量数据,效率高

消息传递

  • 消息传递方式中,发送消息和接收消息由操作系统提供的原语完成
  • 在点对点的消息传递方式中,进程各自维护一个消息缓冲队列,发送的消息放在队列中
  • 点对点的方式,消息中有进程ID,消息类型和长度,消息主体
  • 广播信箱的消息传递方式中,进程发送和接收消息都是通过信息信箱
  • 广播信箱的好处是一个进程要对多个进程发送消息,把消息发送到信箱,让进程自己来获取

管道通信

  • 管道是一块固定大小的缓冲区,存在的形式是一个pipe文件
  • 在同一时段,只能有一个进程往管道写,一个进程从管道读,属于半双工
  • 以先进先出的方式传递信息
  • 通过write和read函数进行读写
  • 管道通信规则:未满不读,已满不写,为空不写,已空不读,读后删除

进程同步

  • 广义进程同步是指多个进程间有相互制约关系,是他们按照预期方式执行
  • 狭义进程同步是指进程间互相合作,比如管道通信
  • 狭义进程互斥是指进程排他性的访问共享资源

进程互斥

  • 多个进程的共享资源叫做临界区
  • 有一个进程进入临界区后,临界区加锁,其他进程无法进入
  • 进入临界区失败的进程会进入阻塞状态
  • 从临界区出来的进程会释放锁,并且唤醒阻塞状态的进程

临界区访问原则

  • 临界区空闲,允许一个进程进入
  • 临界区已有进程,其他进程等待
  • 处于等待的进程,等待时间有限
  • 等待时让出cpu执行权

进程互斥的实现

软件实现

  • 软件实现存在四种方法:单标记法,双标记法先检查,双标记后检查,皮特森算法
  • 皮特森算法满足临界区访问原则,缺点是循环语句那里会出现忙等待

单标记法

image.png

双标记法先执行

image.png

双标记法后检查

image.png

皮特森算法

image.png

硬件实现

中断屏蔽方法

  • 使用关中断和开中断方式
  • 适用于单核处理机
  • 关中断时间长影响效率
  • 只适用于内核进程

TS指令方法

  • TS指令全称为:Test-And-Set,是一个原语
  • 流程是先读取锁标志,如果为false表示没有上锁,则设置为true,并且将旧值返回,这一系列操作是原子性的

Swap指令(EXCHANGE,XCHG指令)

  • 交替两个变量的值,这两个变量一个代表锁的旧值,一个代表新值
  • 交替是原子操作

信号量机制

  • 信号量是指可用资源数量(共享资源数量)
  • 信号量机制是通过进程等待和唤醒等待线程操作完成的
  • 记录型信号量定义中有剩余资源数和进程等待队列
  • 释放资源时,signal原语会执行多次,直到等待队列中进程都被唤醒