1️⃣ 基本概念
⭐️ 临界资源
🔴 两种资源的共享方式:
- 互斥共享方式:一段时间内只允许应该进程访问该资源,被称为临界资源、互斥资源、共享变量
- 同时共享方式:一段时间内允许多个进程"同时"访问资源
⭐️ 临界区
在每个进程中访问临界资源的程序叫做临界区
do{
entry section; //进入区 负责检查是否可进入临界区,若可进入,则对临界区上锁
critical section; //临界区 坊问临界区的那段代码
exit section; //退出区 解锁
remainder section //剩余区 进程中除了进入区、退出区其他之外部分的代码
}
为了防止对临界区资源的互斥访问,同时要保证系统整体性能需要遵循以下原则
- 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
- 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
- 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
- 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
⭐️ 互斥实现的方法
硬件实现:当一个进程进入临界区,就屏蔽所有中断,成本高
软件实现方式:在进入区设置标识符来标记是否有进程在临界区
🌟 软件实现
⭕️ 单标志法
⭕️ 双标志先检查法
⭕️ 双标志后检查法
⭕️ Peterson算法
🌟 硬件实现
⭕️ 中断屏蔽
⭕️ TS指令/TSL指令
⭕️ Swap指令XCHG指令
⭐️ 同步
多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约的关系称为进程同步(直接制约)
也就是一个进程运行到某一时刻是,需要另一个进程为它提供消息,在消息还未达到之前,就处于等待状态,消息达到就唤醒该进程
2️⃣ 信号量
⭐️ 整型
🔴 如果wait操作中的信号量S<= 0,就会不断测试,因此该机制没有遵循让权等待,而是使进程进入了一个忙等的状态