并发:死锁和饥饿
死锁的规律
死锁:由于竞争资源对进程的阻塞。
资源的分类
可重用资源
可消费资源
可重用资源
永久性(多为硬件设备,打印机、I/O device、数据库等)
特点:在一个时间上使用,不会被消耗
死锁发生的条件:某个进程占用,另一个进程请求(可能发生死锁)
可消耗资源
可以被进程创建和销毁,通常发生在设计不合理时。
死锁的条件
互斥(mutual exclusion)
同时只有一个进程使用资源占有且等待(hold-and-wait)
当某个进程占有每个资源时还想请求别的资源非抢占(no preemption)
没有资源可以被强行释放循环等待(circular wait)
预防死锁
消灭互斥
non-share memory
消灭占有且等待
给予进程全部需要的资源
缺点:资源利用率低(有可能进程不使用或使用不当)
消灭不可抢占
让进程可抢用资源(设置优先级)(较常用)
消灭唤醒等待
创建线性资源需求链
避免死锁
动态的采用一些方法避免死锁。
进程拒绝启动
如果新启动的进程申请的资源会造成死锁,则拒绝启动这个进程。
新要创建的进程用到的资源要比此资源剩下的总额低。
进程拒绝申请资源
如果申请的资源会造成死锁,则拒绝申请资源。
构造申请表、分配表、可用资源表进行判断。