介绍以及如何解决死锁死锁是指两个或多个进程在执行过程中竞争资源或相互通信而引起的阻塞现象。如果没有外力,他们将无法前进。.这时候就说系统处于死锁状态或者说系统发生了死锁。这些始终相互等待的进程称为死锁进程。如果没有及时让步,四辆车就会形成僵局。死锁导致资源竞争,进程调度不当,资源争夺,资源争夺。为什么会发生资源竞争?共享资源的数量不能满足每个进程的需要。进程之间的资源竞争导致死锁。例子:假设有两个进程:进程1和进程2。进程1需要使用传真机,并且已经获得了传真机资源。进程2需要获取打印机,并且它获取了它。如果此时进程2还需要一台传真机,或者进程1还需要一台打印机时,它们都需要等待请求的资源被释放,但是它们之间相互占用的资源不会被释放,这样就造成了死锁的产生,这就是资源竞争造成的死锁。如果此时多了一台传真机或打印机资源,就不会出现死锁。本质是资源不足,进程调度顺序不当。我们以上面的流程1和流程2为例。假设进程1申请传真机资源为步骤A,进程2申请打印机资源为步骤B,进程2申请传真机资源为步骤C,进程1申请打印机资源为步骤D。如果这两个进程都申请对于顺序为A、B、C、D的资源,就会发生死锁。如果程序可以改变调度顺序为A、D、B、C,此时就不会出现死锁。因为当进程1先获取传真机资源,再获取打印机资源并完成工作时,进程1会释放这两个资源。这时进程2就可以获得打印机和传真机资源。这就是进程调度顺序不当造成死锁的四个必要条件。互斥条件requestholdconditionInalienablecondition循环等待条件上述条件只要满足其中一个或两个,就不会发生死锁Mutualexclusioncondition条件进程对资源的使用是独占的。某种资源只能被一个进程使用,其他需要使用该资源的进程只能等待该资源被释放。请求保持条件进程持有至少一个资源并提议一个新资源。请求新资源被占用,请求被阻塞。被阻塞的进程不会释放它持有的资源。不可剥夺的条件。进程获得的资源在没有被完全使用之前是不能被剥夺的(无论是程序还是操作系统)。获取的资源只能通过获取当进程自身释放循环等待条件发生死锁时,必然存在进程-资源环链。P是进程,R是资源。一个或多个条件可以避免死锁的发生。系统规定在进程运行前,一次性申请所有需要的资源。进程在运行过程中不会进行资源请求,从而放弃请求保持条件。也不可能因为边跑边等待资源而打破不可剥夺的条件。当一个进程请求新的资源不能满足时,就必须释放它所占用的资源。进程在运行过程中占用的资源可以释放,也就是可以剥夺,从而破坏循环等待条件。可用资源是线性排序的。应用程序必须根据需要增量应用。线性应用不再形成循环,从而放弃循环等待条件。假设有A、B、C、D、E五个资源,将它们按线性顺序排列,假设当一个进程需要A和D两个资源时,必须先申请A,再申请D。这就是线性应用银行家算法。银行家算法是一种可操作的著名的避免死锁的算法,它基于银行贷款系统的分配策略,假设客户申请的贷款是有限的,每个申请需要申报最大的资金数额。当银行可以偿还贷款时,银行应该把贷款给客户。客户正在使用它。贷款后能否及时还贷是银行家算法策略的基础,下面是具体过程:这个算法需要三个数据结构,分别是已分配资源表、所需资源表和已分配资源表资源表A、B、C、D是可以申请的共享资源,P1、P2、P3、P4是需要申请资源的四个进程。1个C资源和4个D资源)requiredresource表中的值表示每个进程需要的每种资源的数量(例如P1进程需要6个B资源,5个C资源和6个D资源)中的值可分配资源表表示系统中剩余的各类资源的数量。有了以上数据结构的表,就可以进行真正的演练了(1)减少所需资源表将已分配资源表的两个数据结构相减,得到待分配资源表,然后进行表比对要分配的资源与可用资源表。我们会发现可用资源表不满足进程P1的需求,因为P1进程需要6个B资源,4个C资源,2个D资源,但是可用的A、B、C、D资源只有分别为1、5、2、0,所以不符合工艺PA的要求。用同样的方法比较P2、P3、P4后,可以发现可分配资源表中的资源满足P2的要求,但不满足P1、P3、P4的要求。因此,系统会将所有可以分配给P2的资源分配给P2,然后P2进程才能继续执行。P2执行后,所有资源都会归还。返回后,可以将新资源分配给其他人。过程。这就是银行家的算法。(P1、P2、P3、P4可视为借款人,数字代表贷款金额。)在瞬息万变的技术中找到相同点,是一个技术人的核心竞争力。知行合一,理论与实践相结合