死锁知识点总结

一、什么是死锁

        学习操作系统,死锁是一个关键的知识点,接下来,我们先用几个小列子让我们更加清晰的认识死锁,

例1:进程P对象A加锁以便对其独占使用,并继续请求对象B进程Q已经为对象B加锁,当进程Q继续请求对象A时将发生死锁。


例2:哲学家就餐问题,五个(男性)哲学家以思考和用餐的方式生活。他们围坐在有五张椅子的一个圆桌边,每一个哲学家有一张椅子。在桌子中央有一碗意大利面条,桌子上还有五支餐叉,当一个哲学家思考时,他不与其他哲学家发生联系。时不时,哲学家就感觉到饿 了。为了就餐,他就必须试图拿起他左右俩边离他最近的俩只餐叉,但一次只能拿起一支餐叉。他也不能拿到相邻的哲学家已经持有的餐叉。当一个饥饿的哲学家同时拥有俩只餐叉,他就可以用餐,不用放开它们,当他用餐完毕,就放下俩只餐叉并继续思考。

以上这俩种情况就是典型的会发生死锁的实例。用一个较为专业的语句来说,就是对已经上锁的资源进行请求,并对自己已拥有的资源不加以释放,造成其他进程又无法请求成功的事件。

二、死锁产生的四个必要条件

如果在一个系统中牧歌时刻满足以下所有条件,则存在死锁。

1> 资源请求可被拒绝

        系统的并发控制策略使得对象能被独占性的获得,或者以某些特定的共享方式获得。进程访问某个对象时,如果该对象已经被其他进程独占性获得,则该访问将被拒绝;如果该对象被一组进程出于特定目的而共享访问方式获得,则该访问也将被拒绝。一个实例是:一个进程想对某对象写操作,因此请求独占访问该对象,由于这个对象正被锁定作为共享读操作,该请求将被拒绝。

2> 持有并等待

        允许进程占有对象的同时请求其他对象,如果这个请求得不到满足将阻塞该进程。这里所做的一个假设将一直等待该进程,直到资源可用。

3> 不可剥夺

        不可以剥夺进程的对象。进程可以获得对象,使用后释放。

4> 循环等待

        存在一个进程环,其中每个进程占有一个对象,而循环中的下一个进程对该对象存在请求,显然这个请求被拒绝了。

三、死锁的避免,及常见算法与原理

        就一个进程而言,在它运行之前规定他的对象请求总数,这样做就可行的。分配子系统同样可以利用这个消息。


经计算,系统可分配资源可以先给进程A,此时进程A已经达到总需求数量可被执行,待进程A结束时,系统可分配资源数量已经达到10,再将资源分配给进程B进程B也达到总需求数量可被执行,待进程B结束时,系统可分配资源数量已经达到13,最后将资源分配给进程C进程C也达到总需求数量可被执行。这样资源就可以供多个进程全部完成。

 典型的实例为:银行家算法,讲述资源分配的一个方法,其实与上述进程资源分配大同小异,有兴趣的朋友,可以自行查找了解。

猜你喜欢

转载自blog.csdn.net/cyd_csdn/article/details/80037544