哲学家进餐问题中,每位哲学家都在等待自己右边的人放下筷子,这些哲学家进程都因等待筷子资源而被阻塞。即发生**“死锁”**
共同点:都是进程无法顺利向前推进的现象(故意设计的死循环除外)
死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态。
饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。**可能只有一个进程发生饥饿。**发生饥饿的进程可能是阻塞态(如长期得不到需要的I/O设备),也可能是就绪态(长期得不到处理机)
死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑g导致的,有时是程序员故意设计的。可能只有一个进程发生死循环。死循环的进程可以上处理机运行(可以是运行态),只不过无法像期待的那样顺利推进。死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题
互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁
把只能互斥使用的资源改造为允许共享使用,那么系统不会进入死锁状态,例如 SPOOLing 技术,将独占设备在逻辑上改成共享设备
缺点:互斥性条件往往不容易破坏,不是所有资源都能够使用类似的技术改造为可共享资源
不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动式释放