操作系统学习--死锁与进程间通信

死锁:由于竞争资源或通信时,两个线程永远相互等待的事件。
资源分类
可重用资源:资源不能被删除,任何时刻只能有一个进程使用,例如CPU,I/O设备等,可能出现死锁
消耗资源:资源是被创建和销毁的,例如中断和通信,可能出现死锁。
出现死锁的四个必要条件

  • 互斥,某个资源在任意时刻只能有一个进程访问。
  • 持有并等待:进程保持至少一个资源,并等待由其他进程占用的资源
  • 非抢占:资源只要在进程使用结束后自愿释放
  • 循环等待:A等B,B等C,C等A。

死锁处理的三类办法

  • 死锁预防:确保永远不会出现死锁。效率低
    具体做法是切断死锁的四个必要条件:
    改掉互斥,有全部资源再申请,没有就释放,按固定的顺序请求资源
  • 死锁避免:在使用资源前进行判断,确保不会出现死锁后再分配。
    具体做法是:
    1.要求进程声明需求的最大资源数,我的资源够的话就给你,或加上之前队列里结束后释放的够的话也行
    2.动态检查分配状态,利用资源分配图,确保不会出现循环等待。
  • 死锁检查与恢复:检测到进入死锁后进行恢复

死锁检测:当系统定期要进行死锁检查,看看有没有死锁。
死锁恢复:即终止产生死锁的进程。终止的顺序:优先级低的,运行时间长的,占用资源多的,终止进程的数目。

进程间通信可分为:

  • 间接通信,通过内核
  • 直接通信

还可以分为:

  • 同步通信:发送方必须等到接受方接受,
  • 异步通信:发完就不管了

通信链路缓存:

  • 0容量,发完必须有人接
  • 有限容量:缓冲区满了就必须发
  • 无限容量,想发就发,在链路中缓存

进程间通讯机制:

  • 信号:进程间软件中断通知处理机制,首先在内核注册信号,告诉内核出现信号都是啥意思,调用哪个函数,然后当其他进程有信号过来是,内核就通知进程,进行处理。对信号的处理有:
    捕获,忽略,和屏蔽
    信号传送的信息量很小,只是一个快速通信。
  • 管道:进程间基于内存文件的通信机制,进程并不关心另一端是谁。是一种间接通信机制
  • 消息队列:操作系统维护的一个队列,也是一种间接的通信机制。进程创建了消息队列后,即使进程结束了,队列还是存在,所以可以不同声明周期的进程的通信。
  • 共享内存:把同一段物理内存空间映射到多个进程的地址空间(感觉很像C++中的引用)。也是间接通信方式,是最快的一种通讯方式,但是没有同步机制,需要自己另外设置同步机制以避免正读正写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值