进程死锁

进程死锁

死锁的概念

死锁是指在系统中的多个( 进程 )无限期地等待永远不会发生的条件。

产生死锁的四个必要条件

  • 互斥
  • 请求与保持
  • 循环等待
  • 不剥夺

防止死锁发生可以破坏四个条件,但破坏互斥不太实际

解除死锁的两种常用方法

  1. 资源剥夺法

    从其他进程那里剥夺足够数量的资源给死锁进程,以解除死锁状态

  2. 撤销进程法

对待死锁,一般考虑从四个策略:预防、避免、检测、接触

  • 银行家算法属于死锁避免策略
  • 破坏循环等待条件属于死锁预防策略(资源有序分配法)
  • 剥夺资源属于死锁接触策略(资源剥夺法)

为什么资源有序分配不会产生死锁

因为有序方法不会造成资源形成循环等待

银行家算法

​ 在银行家算法中,若出现了下述资源分配情况:

allocationneedavailable
P00 0 3 20 0 1 21 6 2 2
P11 0 0 01 7 5 0
P21 3 5 42 3 5 6
P30 3 3 20 6 5 2
P40 0 1 40 6 5 6

试问:

(1)该状态是否安全?

(2)如果进程P2提出请求Requst2(1,2,2,2)后,系统能否将资源分配给它?

解题步骤1
  1. 知道每一列的意思:allocation(进程已经被分配资源数)、need(还需要的资源数)、available(系统空闲资源)

  2. 列表

    进程workneedallocationwork+allocationFinish
    P01 6 2 20 0 1 20 0 3 21 6 5 4T
    P31 6 5 40 6 5 20 3 3 21 9 8 6T
    P11 9 8 61 7 5 01 0 0 02 9 8 6T
    P42 9 8 60 6 5 60 0 1 42 15 13 12T
    P22 15 13 122 3 5 61 3 5 44 18 18 18T

    答:该状态安全 。安全序列为 0 3 1 4 2

解题步骤2
  1. 判断Request2是否<=need,显然(1,2,2,2)<=(2,3,5,6)

  2. 判断Request2是否<=available, 显然(1,2,2,2)<=(1,6,2,2)

  3. 列表计算

    进程AllocationNeedAvailable
    P00 0 3 20 0 1 20 4 0 0
    P11 0 0 01 7 5 0
    P22 5 7 61 1 3 4
    P30 3 3 20 6 5 2
    P40 0 1 40 6 5 6

    答:由表可知,若将资源分配给P2,系统中剩余的空闲资源满足不了任一程序且不会有程序释放资源,系统死锁。

    ​ 所以,系统不能将资源分配给P2

最少资源分配问题

有相同类型的5个资源被4个进程共享,且每个进程最多需要2个这样的资源就可以运行完毕。试问该系统是否由于对这种资源的竞争而产生死锁?

解:该系统不会由于对这种资源的竞争而产生死锁。

因为在最坏情况下,每个进程都需要2个这样的资源,且每个进程都已申请到了1个资源,那么系统中还剩下1个可用资源。无论系统为了满足哪个进程的资源申请而将资源分配给进程,都会因为该进程已经得了它所需要的全部资源而确保它运行完毕,从而可将它占有的2个资源归还给系统,这样就保证了其余三个进程能顺利运行。

由此可知,该系统不会由于这种资源的竞争而产生死锁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值