所谓死锁,是指多个进程在运⾏过程中因争夺资源⽽造成的⼀种僵局,当进程处于这种僵持


状态时,若⽆外⼒作⽤,它们都将⽆法再向前推进。



系统中的资源可以分为两类:


可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,


CPU 和主存均属于可剥夺性资源;


不可剥夺资源,当系统把这类资源分配给某进程后,再不能强⾏收回,只能在进程⽤完


后⾃⾏释放,如磁带机、打印机等。



产⽣死锁的原因:


1 )竞争资源


产⽣死锁中的竞争资源之⼀指的是 竞争不可剥夺资源 (例如:系统中只有⼀台打印


机,可供进程 P1 使⽤,假定 P1 已占⽤了打印机,若 P2 继续要求打印机打印将阻塞)


产⽣死锁中的竞争资源另外⼀种资源指的是 竞争临时资源 (临时资源包括硬件中断、


信号、消息、缓冲区内的消息等),通常消息通信顺序进⾏不当,则会产⽣死锁


2 )进程间推进顺序⾮法 若 P1 保持了资源 R1 , P2 保持了资源 R2,系统处于不安全状态,因为这两个进程再向前推进,便可能发⽣死锁。例如,当 P1 运⾏到 P1 : Request ( R2 )时,将因 R2 已被 P2 占⽤⽽阻塞;当 P2运⾏到 P2 : Request ( R1 )时,也将因 R1 已被 P1 占⽤⽽阻塞,于是发⽣进程死锁



产⽣死锁的必要条件:


互斥条件:进程要求对所分配的资源进⾏排它性控制,即在⼀段时间内某资源仅为⼀进


程所占⽤。


请求和保持条件:当进程因请求资源⽽阻塞时,对已获得的资源保持不放。


不剥夺条件:进程已获得的资源在未使⽤完之前,不能剥夺,只能在使⽤完时由⾃⼰释


放。



环路等待条件:在发⽣死锁时,必然存在⼀个进程 —— 资源的环形链。



预防死锁的⽅法:


资源⼀次性分配:⼀次性分配所有资源,这样就不会再有请求了(破坏请求条件)


只要有⼀个资源得不到分配,也不给这个进程分配其他的资源(破坏请保持条件)


可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源


(破坏不可剥夺条件)


资源有序分配法:系统给每类资源赋予⼀个编号,每⼀个进程按编号递增的顺序请求资


源,释放则相反(破坏环路等待条件)