进程
1、进程的状态:
这里边我们主要是要讲的内容就是这两个图:我们通过这两个图来介绍一些相关的知识点:
三态图:
我们还是来看图进行分析:
我们就这个图进行分析各个关键部分:这些关键在于理解,很Easy的,或者你把这个图画出来也就马上明白了。
就绪:就是“万事俱备只欠东风”,就差CPU的调度了,只要CPU一调度便可运行。
运行:就是在就绪状态的基础上得到了CPU的调度。
等待(阻塞):还没具备运行条件,等待时机的状态,我们从这个图也能看的出来,等待状态不能直接运行,必须要经过就绪这个状态的,所以等待状态除了等待CPU调度之外,还缺少某些运行所需的条件。
五态图:
我们把几个关键的概括一下:其实这个图跟咱们上面那个三态图是吻合的,只是把三态图分的更细了点我觉得;所以分析五态图咱们只需要把三态图掌握好就行,就这么easy;我们再看看几个关键的:主要是三态图的一个动态的一个表示过程,所以这些概念的东西,结合前面的三态图理解就非常容易了:
就绪——>运行:就是三态图中的,条件被CPU选中了。
运行——>就绪:运行超时或者是条件被更高优先级进程剥夺。
运行——>等待:条件还没具备运行条件,等待某一事件的发生。
等待——>就绪:条件是等待的事件已发生,具备了运行条件。
在这里边,还非常要主要这些箭头的指向。
2、进程死锁:
死锁是进程管理设计不当造成的;进程死锁是一个进程在等待一个不可能发生的事;系统死锁是一个或多个进程产生死锁。
其实对于这方面的知识,跟咱们生活是很有联系的。比如我们使用过打印机都知道。所以把生活的场景投进去理解,就很简单了。
死锁产生的必要条件:
互斥条件:即一个资源每次只能被一个进程使用。
保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放。
不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
环路等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。
解决死锁的策略
死锁预防:我们要求用户申请资源时一起申请所需的全部资源,这就破坏了保持和等待条件:将资源分层,得到上一层资源后,才能申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,典型算法是”银行家算法“。但这种算法会增加系统的开销。
死锁检测:前两者是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将资源强行分配给别的进程。
接下来,我们来实战一下:
银行家算法:
找了这么一个例子跟大家分析分析我的理解过程:
首先求剩下的资源数:
R1=9-(1+2+2++1)=2
R2=8-(2+1+1+2+1)=1
R3=5-(1+1+3)=0
我们从这个表中很容易的分析出 还需资源数=最大需求量-已分配资源数
那么需要一个系统是安全的,那么这个进程就不能产生死锁。现在就一目了然了都:
从我们剩下的资源数和还需要的资源数,我们剩下的R1=2、R2=1、R3=0这个只能符合P2进程的0、1、0;
那么我们给P1运行完成之后,我们的资源要释放,所以我们资源=现有资源+已经分配的:
那么我们现在就有了R1、R2、R3的资源分别为:4、2、1;我们再观察一下看哪个进程需要资源符合我们的释放的资源的:
那只能是P4了,因为需要的资源为:0、0、1;而我们现在有的资源为:4、2、1,完全能满足这个进程P4的要求;我们看图:
那么这两个进程就完成了,接下来我们还继续对比着来看:
我们剩下的资源5、4、1。这时候我们发现了P5和P1都能满足他们所需的资源:所以P5和P1就可以随心所欲了,那我们不如就从需要资源小的开始分配试试;
这时候我们发现我们剩余的资源又能满足到P3和P1进程了。所以我们的答案就不止一种了:
我们要是先分配P1,再分配P5,再到P3.结果就是:
虽然进程的这个顺序有很多种,在都满足不造成死锁的情况下,是否有最优的排序呢?我觉得应该是有的,就是在不发生死锁的情况下,我们应该是优先给予需要资源少的进程。