第五个!操作系统中的死锁问题!
其实这个问题……我们先来看看死锁是个什么东西。
它是由于系统中多个进程在运行过程中,互相争夺资源,最终导致资源分配不足而造成僵局,这种叫死锁。
一个进程如果不能获得资源,他就会停下来等待分配,然后他等待的资源,被同样停下来的进程持有着……那就无法分配了(突然想到一句俗话,占着茅坑不拉屎),然后他们都在排队,都在等待,这样死锁就形成了。
ps:所以我们平时电脑死机就是死锁吗(自己手动划掉)
形成死锁要4个条件:互斥、持有并等待、不可抢占和环路等待。
互斥这个很好理解了,就是进程对分配的资源都需求,且排他,在某段时间内,资源只能有一个进程占用。
持有并等待,指某个进程已经持有了一个或多个资源,但是还要请求其他资源,而它请求的资源不能立即获得,需要等待。
不可抢占,指他在之前占领的资源,不能被其他的进程给抢了,只能由自己用了之后再释放。
环路等待,即形成进程和请求资源之间的环路,偷了一张图,在下面。
矩形的代表进程,圆形代表资源,实线表示已经持有的资源,虚线表示正在请求的资源。
死锁的处理包括:不允许死锁的发生;允许死锁的发生,但是可以检测并恢复;忽略该问题(这就是当机器卡死时,重启可以解决的原理所在)(遇事不决先重启,要是不行再重启)。
上面是关于死锁的一些描述,接下来我想说一下刷题的一些技巧……
例:一个系统中有m个进程,每个进程需要a个资源,有n个可用资源,问:什么情况下会发生死锁?
答:首先,我们为每个进程都先分配一个资源,达到“互斥”、“持有并等待”以及“不可抢占”的情况,这就是m个资源。其次再看剩下的资源,够不够一个进程来完好无损的走下去,不会发生资源不足的状态。即n-m≥a-1,这样就避免了环路等待。
所以,当n<a+m-1时,就会发生死锁了。其中,a+m-1个资源是一个系统的临界条件,在重启的边缘疯狂试探……