并发进程涉及到两个问题也是操作系统致力于解决的问题——合理分配资源。
与时间有关的错误
与时间产生的错误是在同一个进程发生中断时,占用处理器的时间上出现了问题。当两个相同的操作要进行时同时进行时,开头都可以,处理器只有一个,前一个进程占用处理器处理事情处理了一半就把处理器的权限交出来了,后一个进程继续采用上一个进程遗留的信息进行操作,修改了上一个进行留下的信息。接下来上一个进程重新获得处理器的使用权,然后接着又在与第二个进程共有信息的基础上继续进行修改,那么就发生错误了。公共信息应该一个改完一个再改,这一个改了一半,另一个就抢了,后来还还回来了。这最后的结果跟预期的正确的结果就出现差错了。
为啥出现这样的情况呢?因为没有协商好,什么时候这个处理器可以用,什么时候处理器不能用。于是应该加强通信。于是把公共的资源给抽离出来,划分了临界区,设计了PV操作,特殊对待了。制定规则,及时通讯,避免冲突。人们的交流协作也是这么个理。
死锁
死锁,就是因为多个不同的进程各自占有了一部分资源,比如两个进程都要输出东西。一个占了打印机,一个占了处理器。啥的。(从知识角度,可能例子不正确)谁也没办法继续走下去,谁也不放弃自己占有的资源。这个时候就是个僵局。应该强硬一点打破这个僵局。
死锁一出现,事情就没法儿做下去了。我们当然不愿意看到这样的情况,那么如何避免死锁?
首先就要从策略上防止,拥有远见卓识的防止它的出现。
如果不想采取这种彻底地未雨绸缪的方法,也可以临到死锁将要发生之前,用一种算法提前预见将要到来的死锁,不批准进程对资源的申请,从而避免死锁的出现。
如果前两个方法都不想采取,死锁就有机会会发生,虽然几率小,那也不是我们期望看到的。我们把掌管资源分配的活儿交给操作系统干了,如果发生了死锁,我们也不会及时发现啊,操作系统没有咱们事先给的解决方案就没办法自己解决。办法总是有的,这时我们就弄了个检测程序,让它时不时地检测死锁是否发生了,如果发生了就给它解决掉。
这样多种方法任君取,死锁的问题都可以解决。
办法总是比问题多的。解决掉一个问题,生活就惬意一分。