操作系统中“解决死锁”的羊生智慧
1.死锁概念的引入
一天,独木桥上,两只山羊相遇了。经历数个世纪的自然进化,山羊过独木桥的故事即将再次上演。唯一不同的是,它们的大脑已经非常发达,它们的智慧也已经能和几百年之前的人类相媲美了。很快,两只山羊都已经走到了独木桥中央,为了节约时间,他们互不相让。就这样,两只山羊犄角相对,双目怒视,一场斗牛式的壮观即将上演。眼看他们羊角要碰撞上了,刹那间,其中一只却停下了脚步,并快速急切地说:“你知道在操作系统中有一个死锁的概念吧!但你一定不知道解决死锁的方法中处处充满着羊生智慧……”在这千钧一发之际,对面这只山羊也刹住了脚,“如果你能说出个一二,我后退让你先过,要知道我专业研究OS三十年。”这只山羊就这样开始阐述他对解决死锁方法的独特见解了。
2.什么是死锁
“所谓死锁就是指多个进程因竞争资源而造成的一种相互抢占资源的僵局,若无外力作用,这些进程都将无法向前推进。”
3.解决死锁的羊生智慧
“解决死锁就好比我们羊类在处理问题的方法了。我们生活中,会遇到大大小小的困难,我们也会解决这些困难。然而,不同的羊有不同的解决方法。天才的羊会未雨绸缪,差错永远不会出现在它们身上。优秀的羊也会逢山开路,遇水叠桥,巧妙化解矛盾。愚钝的羊则既不会预测,也不会想办法,它们也只会在问题到来后选择硬碰硬,简单粗暴的去解决问题,结果也只会鱼死网破,比如现在的我们。”
这只羊稍微斜了一下头,“哦,听着不是很明白,你到底想表达什么?难道我会上你的当,给你让路吗?”。
“不不不,我想说其实我们可以从解决死锁这个问题,延伸到我们解决生活中的麻烦问题。我们已经在青青草原学校学习了死锁的处理策略,这些策略可以分别从三个不同的时间节点来解决死锁这个问题:预防死锁,避免死锁以及死锁的检测及解除三个。而这三个策略分别就是在死锁问题形成的初期,中期,后期三个阶段分别设计的啊!”
这只羊若有所思的说:“听着有点道理,你接着说”。
“预防死锁就是在死锁问题的条件还没形成之前,我们就已经把他杀死在了他妈妈的胚胎里。死锁的互斥、不可剥夺、请求和保持、循环等待这四个条件也永远不可能完备。
避免死锁就是死锁虽然没有出现,但其形成死锁的那四个必要条件已初步具备,进程已处在不安全状态,随着时间的推移,如果不采取一定的技巧措施,发生死锁就在所难免了。在操作系统中,为了让进程在这个间段互相避免死锁,我们设计了银行家算法、安全性算法来避免。而对于我们羊类,在生活中,我们要面对这些问题就非常多了。
死锁的检测及解除则是死锁问题已经出现,我们只能用暴力手段来强迫解决,包括资源剥夺法,撤销进程法以及进程回退法等。其实我们生活中也会不时地遇到一些突发情况,而我们解决这类问题基本都是快刀斩乱麻了。”
“这些我都知道,这些算法也都是为了解决操作系统中的问题而设计的,它们怎么能和我们生活中的问题相类比呢?”
“这些策略,难道不就是我们羊类的做事风格吗?确实,那些算法都是我们羊类精英设计出来的。我们不妨拿每个进程和我们每个羊相比,他们其实有很多相似的地方。在我们羊类的生活中,我们每天都要面对这些所谓生活中的"死锁问题"。而这些形成问题的所有因素还没具备之前,我们要未雨绸缪、居安思危。当这些必要条件已经形成了,我们也不要慌乱,‘解决问题’的过程本身就是我们生活的一大部分,甚至组成了我们的整个羊生。我们要设计避免这些问题的生活算法,兵来将挡,水来土掩,根据具体情况,采取灵活的对付办法。为此,我们学习了三十六计,学习了方法论。即使当问题真的到来了,我们也一定要斩钉截铁,采取强迫方法,甚至牺牲一部分羊的利益,不惜一切代价来处理问题。这难道不是我们羊生的智慧吗?”
听者恍然大悟,如拨云见日般兴奋,连连赞叹:“不错,不错,有道理。大哥,来来来,你先过这个桥,小弟让行。我要给你点一个赞,我相信能静下心来看这篇文章的人类也一定和我一样要点赞的,毕竟那些形而上的思想放之四海而皆准,从动物界到人类的种应该都是相通的吧。”