操作系统笔记(十一)

主要内容:死锁和进程通信

死锁问题

一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源

系统模型

通常使用资源分配图表示

死锁特征

死锁的必要非充分条件

  • 互斥: 在一个时间只能有一个进程使用资源
  • 持有并等待: 进程保持至少一个资源正在等待获取其他进程持有的额外资源
  • 无抢占: 一个资源只能被进程资源释放,进程已经完成了它的任务之后
  • 循环等待: 存在等待进程集合{P0,P1,…,Pn},P0正在等待P1所占用的资源,P1正在等待P2占用的资源…Pn-1在等待Pn的资源,Pn正在等待P0所占用的资源
死锁处理方法

常见方法

  • 确保系统永远不会进入死锁状态
  • 运行系统进入死锁状态,然后恢复.
  • 忽略这个问题,假装系统中从来没有发生死锁,用于大多数操作系统,包括UNIX

死锁预防

打破死锁的必要条件

  • 互斥 - 共享资源不是必须的,必须占用非共享资源
  • 占用并等待 - 必须保证当一个进程请求的资源,它不持有任何其他资源
    • 需要进程请求并分配其所有资源,它开始执行之前或允许进程请求资源仅当进程没有资源
    • 资源利用率低,可能发生饥饿
  • 无抢占
    • 如果进程占有某些资源,并请求其他不能被立即分配的资源,则释放当前正占有的资源
    • 被抢占资源添加到资源列表中
    • 只有当它能够获得旧的资源以及它请求新的资源,进程可以得到执行
  • 循环等待 - 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请

死锁避免

预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法

死锁检测

周期性检查系统中是否存在死锁,与死锁恢复配合使用,当系统中存在死锁,则进行死锁恢复

死锁恢复

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:

剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;

撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

IPC(进程间通信)

直接通信

进程必须正确的命名对方:

  • send(P, message) - 发送消息到进程P
  • receive(Q, message) - 从进程Q接收信息

通信链路的属性

  • 自动建立链路
  • 一条链路恰好对应一对通信进程
  • 每对进程之间只有一个链路存在
  • 链路可以是单向的,但通常是双向的

间接通信

定向从消息队列接收消息

  • 每个消息对垒都有一个唯一的ID
  • 只有它们共享了一个消息队列,进程才能够通信

通信链路的属性

  • 只有进程共享一个共同的消息队列,才建立链路
  • 链接可以与许多进程相关联
  • 每对进程可以共享多个通信链路
  • 链接可以是单向或者双向

操作

  • 创建一个新的消息队列
  • 通过消息队列发送和接收消息
  • 销毁消息队列

原语的定义如下:

  • send(A, message)

  • receive(A, message)

  • 通信链路缓冲

    通信链路缓存大小:

    1. 0容量 - 0 message : 发送方必须等待接收方
    2. 有限容量 - n messages的有限长度 : 发送方必须等待,如果队列满
    3. 无限容量 - 无限长度 : 发送方不需要等待

信号

信号Signal

  • 软件中断通知事件处理
  • Examples: SIGFPE, SIGKILL, SIGUSRI, SIGSTOP, SIGCONT

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

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

不足:

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

管道

数据交换

子进程从父进程继承文件描述符(0 stdin, 1 stdout, 2 stderr)

进程不知道(或不关心)从键盘,文件,程序读取或写入到终端,文件,程序.

例如: $ ls | more (两个进程, 管道是缓存,对于ls来说是stdout,对于more来说是stdin)

消息队列

消息队列按FIFO来管理消息

  • message: 作为一个字节序列存储
  • message queues: 消息数组
  • FIFO & FILO configuration

共享内存

进程

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

优点

  • 快速,方便地共享数据
  • 最快的方法
  • 一个进程写另一个进程立即可见
  • 没有系统调用干预
  • 没有数据复制

不足

  • 必须同步数据访问

套接字通信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值