死锁和饥饿的问题肯定不是在运行态。死循环不是操作系统应该处理的问题。
1,预防死锁。
破坏互斥条件:把只能互斥使用的资源改成云粗共享使用。SPPPLing技术。
进程1还没使用完打印机,进程2申请使用打印机会阻塞。使用SPOOLing技术之后,两个进程都被接收,然后慢慢输出。
缺点:并不是所有的设备都能改成共享使用的,为了系统安全,很多时候无法使用。
破坏不剥夺条件:进程所获得的资源在未使用之前,不能由其他进程强行夺走,只能主动释放
方案一:当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏了不可剥夺条件。
方案二:当某个进程需要的资源被其他进程占有的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各个进程的优先级。(比如:剥夺调度方式,就是将处理机资源强行剥夺给优先级更高的进程使用)
缺点:
1.实现起来比较复杂。
2.释放已经获得的资源可能造成前一阶段工作的失败。之前获得的那些资源就需要放弃,以后再重新申请。如果一直发生这样的情况,就会导致进程饥饿。
请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
静态分配方法,进程再运行前一次申请完它所需要的全部资源,在其资源未满足时,不让他投入运行。一旦投入运行,这些资源就一直归它所有。
破坏循环等待条件。
2.避免死锁