嵌入式系统设计师十二:进程管理③——死锁
嵌入式系统设计师十二:进程管理③
进程管理:死锁
死锁概念:进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一个不可能的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。
产生死锁的三大主要原因:
①系统资源不足
②进程运行推进的顺序不合适
③资源分配不当
死锁的产生四个必要条件:
①互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源。
②环路等待条件(循环等待条件):指进程发生死锁后,必然存在一个进程–资源之间的环形链。
③不可剥夺条件:指进程已获得的资源,在未使用完成之前,不可被剥夺,只能在使用完成后自己释放。
④请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但该进程又对自己获得的资源保持不释放。
上述四个条件是死锁的必要条件,只要系统发生死锁,则这些条件必然成立,只要上述条件之一不满足,就不会发生死锁。
死锁的预防措施:打破四大必然条件。
死锁的避免(2种方法):
①有序资源分配法:当有多个进程同时申请资源时,先把资源分给一个进程,等该进程完成后再继续分配给下一个进程,按序分配避免死锁的产生。
②银行家算法:
分配的原则:
①当一个进程对资源的最大需求量不超过系统中的资源总数时可以接纳该进程。
②进程可以分期请求资源,但请求的总数不能超过最大需求量。
③当系统现有的资源不能满足进程尚需资源时,对该进程的请求可以推迟分配,但总能使该进程在有限的时间里得到资源。
设系统中有R类资源m个,n个进程互斥使用。若每个进程对R资源的最大需求为w,
那么当m、n、w满足m>=n*(w-1)+1时,该系统不会发生死锁。