操作系统(第四章 进程同步、管程、死锁)

操作系统(第四章 进程同步、管程、死锁)


在这里插入图片描述

一、进程同步、互斥

1. 进程同步

在这里插入图片描述

2. 进程互斥

在这里插入图片描述

在这里插入图片描述

为了实现对临界资源的互斥访问,同时保证系统整体性能,遵循以下原则

  • 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
  • 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待
  • 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待。当进程不能进入临界区,应立即释放处理机,防止进程忙等待

3. 进程互斥(对临界资源的访问)的三种实现方法

(1) 进程互斥的软件实现方法

  • 如果没有注意互斥
    在这里插入图片描述
    在这里插入图片描述

(2) 进程互斥的硬件实现

在这里插入图片描述

(3)在操作系统或程序设计语言实现某种级别的支持(具体方法在 三、)

二、锁

在这里插入图片描述

三、信号量机制

1. 信号量机制

在这里插入图片描述

2. 用信号量机制实现进程互斥、同步、前驱关系

在这里插入图片描述

3. 进程同步互斥问题

(1)生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)
生产者、消费者共享一个初始为空,大小为 n 的缓冲区
只有缓冲区投满时,生产者才能把产品放入缓冲区,否则必须等待
在这里插入图片描述

  • 代码实现

在这里插入图片描述

?P、V操作顺序能否更改
在这里插入图片描述
若先执行3,对资源上了锁之后执行4,
此时会卡在4,被阻塞
此时切换回生产者,执行1,
但资源被消费者上锁并未解锁,所以生产者也被阻塞
总结:
实现互斥的P一定要在实现同步的P之后
V的顺序可以调换
但最好把PV的范围控制较小

(2)多生产者-多消费者问题

这里是引用
在这里插入图片描述

  • 代码实现:
    在这里插入图片描述

(3)吸烟者问题

这里是引用

  • 代码实现:
    在这里插入图片描述

(4)读者-写者问题

这里是引用

  • 代码实现:
    在这里插入图片描述
    问题:对于count变量的检查和赋值无法一气呵成(设置另一个互斥信号)
    在这里插入图片描述
    潜在问题:只要有读进程还在继续,写进程就会一直阻塞,可能饿死
    在这里插入图片描述

(5)哲学家进餐问题

这里是引用

  • 代码实现:
    在这里插入图片描述
    1)
    在这里插入图片描述
    2)
    在这里插入图片描述
    3)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

四、管程

在这里插入图片描述

五、死锁

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值