死锁

概念

多道程序并发执行,能提高程序的利用率,和吞吐量,但是也容易死锁,

什么是死锁: 死锁就像进程和坏蛋,警察叫坏人把枪放下,而坏人叫警察先放下,但是两个都不放,一直处于僵持场面

产生原因

对资源的竞争,但是顺序执行不当

产生死锁的必要条件

  • 互斥
    系统中存在临界资源,进程应互斥使用这些资源
    -占有和等待条件
    进程资源得不到满足而等待,但是不释放自己的资源
  • 剥夺条件
    进程已有的资源只能自己释放,不能强行剥夺
  • 循环等待条件
    链中每个进程都在等待下一个进程所持有资源

总的来所,就是一直等待内存中其他进程的资源,但是自己的资源不被抢夺,除非自己释放,且只能独立享用资源

处理死锁

通过设置某些条件,破坏四个必要条件的一个或者多个,来解除死锁

死锁的防止

  • 互斥不能处理
  • 占有和等待资源
    措施:静态的分配策略,即在进程执行前,一次性分配该进程所需的全部资源,如果不能满足就让进程等待,且不分配任何资源
    • 优点: 简单,安全
    • 缺点:严重浪费资源,严重降低资源利用率,进程延迟运行
  • 不剥夺条件
    采用剥夺调度,一个进程提出新资源的请求,有就分配,没有就剥夺此进程全部资源,让其等待,等到资源充足就唤醒她
  • 循环等待
    资源按序分配,对资源编号,每次按序申请资源
    • 缺点:执行起来不一定是按需,会造成资源浪费

死锁避免

死锁避免是另一种解决死锁的手段

通过系统:

  • 安全
    将系统分为安全和不安全的状态,系统一直在安全就能避免死锁将进程按照某种顺序执行,当每个进程都能分配到所需的资源,直到所有的进程都能运行完成,那么洗头就是安全的
  • 不安全
    系统不安全,就会死锁

死锁避免的实质

系统动态的分配资源,在分配前先检查系统的安全性,如果分配后依旧安全,就将资源分配进程,如果不分配,就让该进程等待,查看其他进程

银行家算法

  • 创始人 dijkstra
    参数
    每种资源总数向量:
    \(Resource=(R_1,R_2.....)\)

每种资源可数向量Avilable
Avilable = \((V_1,V_2,....)\)

最大寻求矩阵Claim,每行是进程对应的需求,列是对应的资源种类
\begin{pmatrix}
C11 & C12 & C13..\\
C21 & C22 & C23...\\
C31 & C32 & C33...\\
\end{pmatrix}

死锁的检测和解除

同时Allocation矩阵是进程已经分配的资源

需求矩阵Need是矩阵\(Claim_{ij}\) - \(Allocation_{ij}\)

posted @ 2022-11-09 21:46  壹剑霜寒十四州  阅读(29)  评论(0编辑  收藏  举报