2.3.1 进程同步的基本概念
多道程序环境下,进程是并发执行的,不同进程之间存在着不同的制约关系。为了协调进程之间的相互制约关系,引入进程同步的基本概念。
异步性:各并发执行的进程以各自独立的,不可预知的速度向前推进。
1.临界资源
许多资源只能为一个进程所用,我们将一次仅允许一个进程使用的资源称为
临界资源
对临界资源的访问必须 互斥
进行
访问临界资源的代码叫做 临界区
2.同步
同步亦称直接制约关系是指多个进程中发生的事件存在某种先后顺序
3.互斥
互斥也称间接制约关系是指多个进程不允许使用同一 临界资源
为了禁止两个进程同时进入临界区,同步机制应遵循以下原则:
1)空闲让进
2)忙则等待
3)有限等待
4)让权等待 当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
2.3.2 实现临界区互斥的基本方法
一、软件实现方法
1)算法一 :单标志法
违背 空闲让进
设置变量 turn,turn=0允许P0进入,turn=1允许P1进入。若P0顺利离开,此时临界区空闲,但是P1没有进入临界区的打算,turn=1就一直成立,其他进程无法进入。
2)算法二 :双标志法先检查
每个进程在访问临界区之前,先查看临界资源是否正在被访问。为此设置一个数据flag[i]
,如第i个元素值为FALSE,表示进程Pi未进入临界区,TRUE为进入临界区。
==优点:==不用交替进入,可连续使用
==缺点:==若按照①②③④顺序执行,两个进程会同时进入临界区违背 忙则等待
原则
3)算法三 :双标志法后检查
算法二先检查对方的进程状态,在设置自己的标志,会造成两个进程同时进入临界区。
为此算法三先将标志位设为TRUE,再检测对方标志,若对方为TRUE则进程等待,否则进入
两个进程几乎同时都想进入临界区时,他们分别将自己的标志位flag设为TRUE并检测对方flag,发现对方也要进入,则导致两个进程都不进入临界区。
导致饥饿现象
4)算法四 :Peterson’s Algorithm
为了防止两个进程无限期的等待,设置变量turn,每个进程先设置自己的flag标志再设置自己的turn标志turn表示谦让,flag表示意愿
。
不遵循 “让权等待原则”
会发生忙等
二、硬件实现方法
1)中断屏蔽法
防止其他进程进入临界区进行访问的最简单方法是禁止一切中断发生,或称之为屏蔽中断、关中断
只适用于单处理系统(操作系统内核)
2)硬件指令方法
TestAndSet指令:这条指令是原子操作,执行该代码不允许被中断
bool TSL(bool *lock){
bool old;
old = *lock;
*lock=true;
return old;
}
while(TSL(&lock));
//临界区代码段
lock = false;
//剩余区代码段
不满足让权等待原则
Swap指令:也不满足让权等待原则