操作系统(二)进程的同步、互斥和死锁

一、进程的同步与互斥

临界资源:同一时间只允许一个进程使用的资源。如打印机。

临界区:进程中访问临界资源的代码。

进程同步:进程之间直接的制约关系。多个相互合作的进程能够相互等待,交换信息。消费者和生产者是同步。

进程互斥:进程之间间接的制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待。只有当使用临界资源的进程退出临界区后,这个进程才允许访问临界资源。消费者和消费者是互斥。

同步准则:空闲让进,忙则等待,有限等待,让权等待。

二、 经典同步问题

2.1 生产者和消费者

设置两个同步信号量,一个缓冲区大小n,一个当前缓冲区产品数量m。一个互斥信号量mut,保证生产者和生产者,消费者和消费者之间互斥访问缓冲区。

2.2 读者和写者问题

(1)读者优先

读操作时,第一个读者加数据区锁,其他读者可以读,写着不可以写。写操作时,读者不可以读,写者不可以写。有问题,会让读者读的时候,后面读者直接进行读,一直处于可读状态,写者被一直等待。

(2)写者优先

只要写者到达,等待当前读者完成,直接进入临界区。写者会插队,读者会等待。

(3)公平算法

按照到达的顺序,将读写看作相同的地位,都加互斥锁,读者获得锁进行读操作之前,释放互斥锁,下一个读操作可以进入,写不能进入(无法获取数据区锁)。

2.3 哲学家进餐问题

1)不允许所有哲学家同时进餐。

2)当哲学家左右边的筷子都可以用时,才可以拿起筷子。

三、死锁

一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程。参与死锁的所有进程都在等待资源;

死锁产生的必要条件

  1. 互斥使用(资源独占):一个资源每次只能给一个进程使用
  2. 占有且等待(请求和保持,部分分配):进程保持至少一个资源正在等待获取其他进程持有的额外资源。
  3. 不可抢占(不可剥夺):资源不能被抢占,只能被占有者自愿释放
  4. 循环等待:存在一个循环等待链,每个进程都占有下个进程所需的一些资源

死锁处理

  1. 不处理
  2. 死锁预防:不让死锁发生的静态策略,通过设计合适的资源分配算法,由资源分配策略保证不让死锁发生
  3. 死锁避免:不让死锁发生的动态策略,以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配
  4. 死锁检测和解除:发生死锁时,解除死锁

死锁的预防

  1. 破坏互斥条件,使用资源转换技术,允许多进程同时访问资源。
  2. 破坏占有且等待,当所有资源同时满足时才分配,或者新资源不能得到满足时,释放已经申请的资源。
  3. 破坏不可抢占,一个进程申请的资源被另一个资源占有时,可以设置优先级进行抢占。
  4. 破坏循环等待,采用有序资源分配法,进程申请资源必须按照资源编号顺序。

死锁的避免

在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或可能发生死锁,则不予分配,否则予以分配,即在资源动态分配过程中,防止系统进入不安全状态,以避免死锁的发生。银行家算法。

死锁检测和解除

一个简单的死锁检测算法
给每个进程、每个资源指定唯一编号;设置一张资源分配表记录各进程与其占用资源之间的关系;设置一张进程等待表记录各进程与要申请资源之间的关系。从资源等待表出发,看有没有形成等待的环路。即可以利用资源分配图的思想来检测是否有死锁发生。

死锁的解除方法1)终止所有进程。2)抢占资源。3)逐步撤销死锁进程,直到没有死锁。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值