死锁出现的条件
有死锁肯定同时满足这四个条件,但是这四个条件出现不一定出现死锁
举例:
死锁处理方法
- 确保系统永远不会进入死锁状态
- 运行系统进入死锁状态,然后恢复
- 忽略这个问题,假装系统中从来没有发生死锁;用于大多数操作系统,包括unix。
死锁预防
1.限制申请方式
-
互斥-共享资源不是必须的,必须占用非共享资源。
-
占用并等待 -必须保证当一个进程请求的资源,它不持有任何其他资源。(只有申请的所有资源都能分配才申请成功)
-
- 1.需要进程请求并分配其所有资源,它开始执行之前或允许进程请求资源仅当进程没有资源。
-
- 2.缺点:资源利用率低:可能发生饥饿。因为进程在整个执行过程,在不同的阶段可能需要不同的资源,若一开始就占用后所有资源,会造成其他进程缺乏资源。
-
无抢占-: 1.如果进程占有某些资源,并请求其它不能被立即分配的次元,则释放当前正在占有的资源
2.被抢占资源添加到资源列表中
3.只有当它能够过得旧的资源以及它请求新的资源,进程可以得到执行 -
循环等待- 对所有资源类型进行排序,并要求每个进程按照资源的顺序进行申请。
2.死锁避免
银行家算法
背景:
算法前提条件:
也就是所有进程都能够正常的结束。通过safe或者unsafe来判断是否安全。
算法数据结构:
算法设计:
其中FInish是判断一个进程是否有足够的资源来正常结束,true代表已结束
例子:
这个实例是安全的,因为可以给p2分配R3,然后p2会被释放,则Avaliable有资源来释放P1或者其它进程。
例子二:
分配前
分配后
这个就不是安全的,因为现有的资源满足不了四个进程的任意一个,所以上一次分配资源的操作时不安全的,所以操作系统不允许P1上次发的请求。
3.死锁检测
- 允许系统进入死锁状态
- 死锁检测算法(允许进程在运行中检测和判断死锁)
- 恢复机制(若进入死锁)
IPC概述(进程间通信)
a图通过系统内核进行通信:间接通信
b通过共享内存进行通信:直接通信
同步分送表示发送完成才返回继续工作,否则阻塞。而异步是发送完就不管了,也不管是否发送成功,但是send会很快返回