死锁?
1 区分死锁 饥饿 和死循环
共同点:进程得不到资源而无法顺利向前推进
不同点
死锁:至少有两个以上的进程,都处于阻塞态
饥饿:可能就一个进程,就绪态或者阻塞态
死循环:问题来源于是被管理者问题而非操作系统(比如人为设置死循环,或者程序逻辑bug)
2 产生死锁的三个必要条件
1 不剥夺条件2 循环等待条件 3请求和保持条件 4 互斥条件
死锁一定循环等待,循环等待不一定死锁accountability:资源在数量只有1时,充分必要。
银行家算法(dijkstra):
不安全序列:我有100万,我借给了三个流氓一共80 万 他们还会再再借一次钱,如果我剩余的钱满足不了任何一个人的要求,那我的钱就不安全了!
解法

1:把已分配的列相加,然后用总资源数-已分配的=剩余资源(3,3,2)
2:再把最大需求的数-已分配的=最多还需要的
3:比较,找出安全序列;
c++算法实现
3死锁的检测和解除
解除:1 资源剥夺法 2 撤销进程法 3 进程回退法
检测:资源分配图:一个可动的进程让它先动,然后回收资源
检测算法:
