进程,百度百科对她这样进行阐述,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。,在小编的理解世界中,进程就是一段程序的执行过程,就好比中午要去食堂吃饭,从十一教走到中快食堂的路上的这个过程,就是进程,纯属小编的个人傻傻的理解,有不同想法的小伙伴欢迎讨论交流,这篇博文,小编主要来讲解一下进程的相关知识,如下图所示,小编会根据下图的框架,进行一一讲解,用文字记录这个美丽的进程......
第一个:状态
进程的状态,这里,我们主要讲解的内容就是两张图,一张三态图,一张五态图,小编通过这两个图来介绍一些相关的知识点:
三态图
我们就这个图来分析一下各个关键部分:
就绪状态:就是“万事俱备只欠东风”的状态,进程已得到运行所需资源,只等待cpu的调度便可运行。
运行状态:进程已得到运行所需资源,并且得到了cpu的调度。
等待状态:不具备运行条件,等待时机的状态,也叫阻塞状态。
运行状态PS等待状态:就绪状态,是等待cpu的调度,只欠cpu的调度。而等待状态是,除cpu以外的其他资源,比如打印机。可能一个进程,这个进程的作用是做统计报表,她同时要进行打印,当用户点击打印,进程需要判断,这个打印机是否空闲,如果这个打印机空闲,资源充足,只需要cpu的调度,即可工作,如果处于忙的状态,那么就需要等待,等待是等待打印机资源,等到打印机空闲,以及系统把打印机分配给a进程的时候,我们就可以进入就绪态了,就只等待cpu的调度了,等待态,等待cpu以外的资源,就绪态,只等待cpu资源。
五态图:
我们对比着三态图来看,从两张图的对比我们可以看出来,运行状态保持,五态图中的活跃就绪和活跃阻塞分别是三态图中的活跃和阻塞,唯有不同的是,五态图中多了挂起,静止就绪和静止阻塞。挂起,从活阻到静止就绪,从活跃阻塞到静止阻塞,把内存中的进程映射到外层的一个过程。挂起,用户可以操作控制,比如听歌的时候,来了电话,按下暂停键,就是挂起。静止就绪和静止阻塞点击相应的连接,给您更多惊喜。
第二个:进程死锁
死锁是进程管理设计不当造成的;进程死锁是一个进程在等待一个不可能发生的事;系统死锁是一个或多个进程产生死锁。其实对于这方面的知识,跟我们的生活特别贴近。比如现阶段,要自考了,好多小伙伴去打印自考题,打印机就是一个很好的例子。所以把生活的场景投进去理解,就很简单了。
死锁产生的条件:
互斥条件:即一个资源每次只能被一个进程使用。
保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放。
不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完时自己释放。
环路等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源。
解决死锁的策略:
死锁预防:我们要求用户申请资源时一起申请所需的全部资源,这就破坏了保持和等待条件:将资源分层,得到上一层资源后,才能申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,典型算法是”银行家算法“。但这种算法会增加系统的开销。
死锁检测:前两者是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将资源强行分配给别的进程。
第三个:牛刀小试
总结了这么多的理论知识,接下来,我们在实战中演练一下,银行家算法例子,听着高大上有么有`(*∩_∩*)′,题目描述:假设系统中有三类互斥资源R1,R2,R3,可用资源数分别是9,8,5,在T0时刻系统中有P1,P2,P3,P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下所示,如果进程按( )序列执行,那么系统状态是安全的?
接下来,小编跟大家分析一下,小编的理解,我们首先求剩下的资源数:
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结果就是:
从上面的分析过程,我们可以看出来进程的这个顺序有很多种,小编就在想,在都满足不造成死锁的情况下,是否有最优的排序呢,小编觉得,应该有,或许就是在不发生死锁的情况下,我们应该是选择给予需要资源少的进程有不同意见的小伙伴欢迎讨论交流`(*∩_∩*)′。
小编寄语:该篇博文,小编主要从三个方面对进程进程了一些阐述,包括状态,三态图五态图,已经她们之间的区别,其次,死锁,包括死锁产生的条件以及解决死锁的策略,最后,银行家算法,进程和线程的对比,小编找到了一个讲解的很好新意的文章,在这里分享给各位小伙伴,软考之路,未完,待续......