2.3_进程的同步与互斥
2.3.1_进程的同步与互斥
1)、进程同步
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作
进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进
2)、进程互斥
两种资源共享方式:
- 互斥共享方式(系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源)
- 同时共享方式(系统中的某些资源,允许一个时间段内由多个进程同时对它们进行访问)
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源
对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源
临界区是进程中访问临界资源的代码段
进入区和退出区是负责实现互斥的代码段
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
- 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
- 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待
- 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
- 让权等待。当进程不能进入临界区时,应立即释放处理机,访问进程忙等待
2.3.2_进程互斥的软件实现方法
1)、单标志法
2)、双标志先检查法
3)、双标志后检查法
4)、Peterson算法
Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则
2.3.3_进程互斥的硬件实现方法
1)、中断屏蔽方法
2)、TestAndSet(TS指令/TSL指令)
3)、Swap指令(XCHG指令)
2.3.4_信号量机制
1)、整型信号量
2)、记录型信号量
CPU轮流为 P 0 P_0 P0、 P 1 P_1 P1、 P 2 P_2 P2、 P 3 P_3 P3服务,同时value和L的值发生变化
CPU运行到 P 2 P_2 P2进程,但是没有打印机资源, P 2 P_2 P2转为阻塞态,CPU转而准备去运行 P 3 P_3 P3进程
CPU运行到 P 3 P_3 P3进程,但是没有打印机资源, P 3 P_3 P3转为阻塞态,CPU转而准备去运行 P 0 P_0 P0进程
P 0 P_0 P0进程运行完毕,叫醒 P 2 P_2 P2进程来用打印机,同时value和L的值发生变化
P 2 P_2 P2进程运行完毕,叫醒 P 1 P_1 P1进程来用打印机,同时value和L的值发生变化
2.3.5_š用信号量机制实现进程互斥、同步、前驱关系
1)、实现进程互斥
2)、实现进程同步
3)、实现进程的前驱关系
2.3.6_生产者消费者问题
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用
生产者、消费者共享一个初始为空、大小为n的缓冲区
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待
只有缓冲区不空时,消费者才能从中取出产品,否则必须等待
系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用
生产者、消费者共享一个初始为空、大小为n的缓冲区
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待
只有缓冲区不空时,消费者才能从中取出产品,否则必须等待
缓冲区是临界资源,各进程必须互斥地访问
2.3.7_哲学家进餐问题
2.3.8_管程
1)、管程的定义和基本特征
管程是一种特殊的软件模型,由这些部分组成:
- 局部于管程的共享数据结构说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
- 管程有一个名字
管程的基本特征:
- 局部于管程的数据只能被局部于管程的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
- 每次仅允许一个进程在管程内执行某个内部过程
2)、用管程解决生产者消费者问题
2.4_死锁
2.4.1_死锁的概念
1)、什么是死锁
2)、死锁、饥饿、死循环的区别
3)、死锁产生的必要条件
4)、什么时候会发生死锁
5)、死锁的处理策略
2.4.2_死锁的处理策略——预防死锁
1)、破坏互斥条件
2)、破坏不可剥夺条件
3)、破坏请求和保持条件
4)、破坏循环等待条件
2.4.3_死锁的处理策略——避免死锁
1)、什么是安全序列
2)、银行家算法
3)、小结
2.4.4_死锁的处理策略——检测和解除
1)、死锁的检测
2)、死锁的解除
脑图地址:
https://github.com/hxt970311/os_outline
参考:
https://www.bilibili.com/video/BV1YE411D7nH