进程通信

互斥:一个进程占用资源,其他进程不能使用这个资源,则资源的使用是互斥的。
死锁:多个进程各占用部分资源,形成循环等待
饥饿:其他进程可能轮流占用资源,一个进程一直得不到资源
临界区:进程中访问临界资源的一段需要互斥执行的代码,任何时刻只允许一个进程在该区域执行。

信号量

  • 是OS提供的一种协调共享资源访问的方法;
  • OS是管理者,地位高于进程,当OS执行它的代码时,优先级高于进程中的用户代码,所以可以保证不受应用进程的干扰,进而可以保证该操作的原子性;
  • 用信号量表示系统资源的数量。
  • 由一个整型(sem)变量和两个原子操作组成
    • p()操作申请资源时使用,当申请资源时将计数减1;如果申请资源时sem<0,则进入等待,否则继续
    • V()操作释放资源,将计数加1,如果sem小于等于0,则唤醒一个等待进程
    • p操作可能阻塞,v按照不会阻塞

生产者消费者问题:

  • 任何时刻只能有一个线程操作缓冲区
  • 缓冲区空时,消费者必须等待生产者
  • 缓冲区满时,生产者必须等待消费者
  • 生产者检查是否有空缓冲区
  • 消费者检查是否缓冲区有数据
    在这里插入图片描述
管程
  • 管程是一种用于多线程互斥访问共享资源的程序结构
    • 正在管程中的线程可临时放弃管程的互斥访问,等待事件出现时恢复

哲学家就餐问题
读者写者问题

死锁

出现死锁的必要条件

  • 资源互斥:任何时刻只能有一个进程使用一个资源实例
  • 持有并等待:进程保持至少一个资源,并正在等待获取其他进程持有的资源
  • 非抢占:资源只能在进程使用后自动释放
  • 循环等待:存在等待进程集合(p0、p1、。。。、pn)
    • p0等待p1占用的资源、p1等待p2占用的资源、。。。Pn等待p0占用的资源

破坏上述任何一个条件可以进行死锁预防

  • 互斥:把互斥的共享资源封装成可同时访问
  • 持有并等待:进程请求资源时,要求它不持有任何其他资源;仅允许进程在开始执行时,一次请求所有需要的资源,导致资源利用率低。
  • 非抢占:如果进程请求不能立即分配的资源,则释放已占有资源;只有在能够同时获得所需资源时,才执行分配操作。
  • 循环等待:对资源排序,要求进程按顺序请求资源

死锁避免:利用额外的先验信息,在分配资源时判断是否会出现死锁,只在不会死锁时分配资源

  • 要求进程声明需要资源的最大数目
  • 限定提供与分配的资源数量,确保满足进程的最大需求
  • 动态检查资源分配状态,确保不会出现循环等待

银行家算法
死锁检测、死锁恢复

进程通信

信号、管道、消息队列、共享内存
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
共享内存
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值