进程同步通信死锁
约 1238 字大约 4 分钟
2025-02-11
1 进程同步
- 临界区:一段程序、进程中访问临界资源的那段代码,不是实现进程互斥的那段代码
- 并发进程:异步,所以要对并发进程同步操作
- PV操作:低级进程通信原语
- 信号量的初值:若期望的消息尚未产生,对应的初值为0;若期望的消息已经存在,则设置非0的正整数
- P操作:进程从执行状态->阻塞状态
- V操作:可能唤醒了一个新进程
- 对信号量X进行P操作,若X<1,满足X<0,即没有资源给进程,进程进入等待状态
- 对信号量X进行V操作,若X<=-1,满足X<=0,即没有资源给进程,唤醒一个进程进入就绪队列
- 举例:两个进程共享一个临界区,互斥信号是mutex,初值是1,任何时刻都只能由一个进程访问临界区
- 若mutex=1,没有进程进入临界区
- 若mutex=0,则有一个进程进入临界区
- 若mutex=-1,则有一个进程进入临界区,另一个进程在等待进入
- 5个并发进程涉及变量A,A的相关临界区是操作共享变量A的程序段,5个并发进程共有5个操作A的程序段
- 管程
- 局限于管程内的共享数据结构
- 对管程内数据结构进行操作的一组过程、设置初始化的语句
- 局限于管程内的共享变量说明
- 管程中的sign与信号量机制中的V不同,sign必须在wait之后
为什么引入条件变量?
当进程通过管程请求临界资源未能满足时,将排在队列上等待,等待的原因可能有多个,为了区分这些等待的进程而引入条件变量
- 原语:应该在不可中断的情况下执行
- 信号量>0:可分配资源的个数,信号量<0 等待资源的进程个数
- 互斥:是进程之间间接制约关系,同步 是进程之间存在的一种制约关系
- 在信号量上:可以做P、V操作和信号量赋初值
- 进程同步与互斥
同步 | 互斥 |
---|---|
进程 - 进程 | 进程 - 资源 -进程 |
时间次序上受到限制 | 竞争不到某一临界资源不允许工作 |
互相清楚对方的存在,作用交换信息 | 不一定清楚其他进程的情况 |
往往多个进程共同完成一个任务 | 往往是多个任务的多个进程通信制约 |
生产者消费者,读者作者,发送者接收者 | 十字路口,打印机 |
进程AB共享一个变量,都有自己的临界区,当A进入临界区时,A可以被别的进程打断,也可以被B打断,但是被B打断后,B也无法进入临界区,只能挂起阻塞,暂停执行
2 进程通信
- 信箱通信:一种间接通信方式
- Send(N,M):N是信箱,M是发送的消息
- “等信箱”状态原因:指定的信箱中存满了信件
- 最基本的通信原语有两条:Send和Receive
- 进程通信:可以使用进程低级通信或进程高级通信,PV操作属于进程低级通信
- 进程间通过信件交换信息,可实现进程同步
- 在管道通信中,管道是一个特殊的共享文件
3 进程死锁
- 解除死锁:资源剥夺法、撤销进程法
- 抢夺某进程资源进行再分配:可以破坏死锁的 不剥夺 条件
- 产生死锁的4个必要条件:互斥、请求与保持、循环等待、不剥夺
- 死锁预防:是根据破坏死锁的4个必要条件之一而采取措施实现的
- 死锁预防:资源的有序分配策略 可以破坏死锁的 循环等待 条件
- 死锁避免:银行家算法
- 死锁避免:实质是如何使系统不进入不安全状态
- 死锁定理:处理检查死锁的方法
- 计算机产生死锁的根本原因:资源有限、操作不当
- 抢占式分配策略:适合于主存空间和CPU
- 解决死锁的4个办法:死锁预防、死锁避免、死锁检测、死锁解除
- 资源分配没有环路:没有死锁
- 产生死锁一定处于不安全状态,处于不安全状态不一定产生死锁
- 预防死锁分配策略:抢占式、静态分配、按序分配