死锁
1、死锁的形成
如果一组进程中,每个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程就是死锁
2、三种情况
①、竞争不可抢占资源引起死锁
假设有p1和p2两个进程,都需要A和B两个进程,现在p1持有A等待B,P2持有B等待A,两个都等待另一个资源而不肯释放资源,就这样无限等待中,就形成了死锁
【不可抢占资源---打印机、光驱等】
②、竞争可消耗资源引起死锁
有P1、P2、P3三种进程,P1向P2发送消息并接受P3发送的消息,P2向P3发送消息并接受P1发送的消息,P3向P1发送消息并接受P2发送的消息,如果设置是先接受消息再发送消息,则所有的消息都不能发送,这就造成了死锁
③、进程推进顺序不当引起死锁
3、产生死锁的必要条件
互斥条件:某个资源只能被一个进程使用,其他进程请求资源时只能等待
请求和保持条件:进程已经保持了至少一个资源,但又提出新的请求,而这个资源被其他进程占用,自己占有资源却保持不放
不可抢占条件:进程已获得的资源没有使用完,不能被抢占
循环等待条件:必然存在一个循环链
4、处理死锁的思路
①、预防死锁:破坏死锁的四个必要条件之一即可
②、避免死锁:在资源动态分配过程中,用某种方式防止系统进入不安全的状态
③、检测死锁:运行时出现死锁,能及时发现死锁,把程序解脱出来
④、解除死锁:发生死锁后,解脱进程,通常撤销进程,回收资源,再分配给正处于阻塞状态的进程
5、如果存在一个由系统中所有进程构成的安全序列P1,P2,P3······Pn,则系统处于安全状态,安全状态一定没有死锁发生
不安全的状态不一定导致死锁
操作系统
操作系统的作用:对于一个程序而言,它为了保障自己的程序运行流畅,势必就会要求自己分配到的资源越多越好,但是计算机的资源总是有限的,因此,我们需要操作程序来作为一个协调者——操作系统(Operation System,OS)。
一方面,操作系统提供一系列底层接口和上层标准,“抹平”不同电脑之间的硬件差异,这样只要操作系统相同,硬件能达到软件运行的最低标准,理论上这个软件就能互通。此外,操作系统可以为所有程序分配资源,一切程序要调用计算机资源都需要向操作系统申请权限,这样就能最大程度利用计算机资源同时让各种程序不互相冲突。
总体而言,虽然操作系统本身也会占用一部分计算机资源,但是总体上它让计算机运行更为稳定,同时也减少了软件开发者的工作量,因为程序猿只需要考虑操作系统的标准接口,而不需要考虑硬件系统的底层差异。