进程同步和进程互斥
- 进程同步:
1.并发性带来了异步性,又是需要通过进程同步解决异步问题。
2.优点进程之间需要相互配合地完成工作,各进程的工作推进需要遵循一定的先后顺序。 - 进程互斥:
对临界资源的访问,需要互斥的进行,即同一时间段内只能允许一个进程访问该资源。 - 互斥访问的原则:
1.空闲让进
2.忙则等待
3.有限等待(对要求访问临界资源的进程,应保证有限时间内能进入自己的临界区,以免陷入“死等”状态)
4.让权等待(当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态)
进程互斥的软件实现方法
单标志法
int turn = 0;// turn 表示当前允许进入临界区的进程号
P0进程:
while (turn!=0); //进入区
critical section; //临界区
turn=1; //退出去
remainder section;//剩余区
P1进程:
while (turn!=1); //进入区
critical section; //临界区
turn=0; //退出去
remainder section;//剩余区
单标志法只能P0->P1->P0->P1->p0… 交替执行,因此违反了空闲让进原则。
双标志先检查法
bool flag[2]; //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false; //刚开始设置为两个进程都不想进入临界区
P0进程:
while (flag[1]); //如果此时P1想进入临界区,P0就一直循环等待
flag[0]=true; //标记为P0进程想要进入临界区
critical section; //访问临界区
flag[0]=false; //访问完临界区,修改标记为P0不想使用临界区
remainder section;
P1进程:
while (flag[0]); //如果此时P0想进入临界区,P1就一直循环等待
flag[1]=true; //标记为P1进程想要进入临界区
critical section; //访问临界区
flag[1]=false; //访问完临界区,修改标记为P1不想使用临界区
remainder section;
双标志先检查法违反忙则等待原则
双标志后检查法
bool flag[2]; //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false; //刚开始设置为两个进程都不想进入临界区
P0进程:
flag[0]=true; //标记为P0进程想要进入临界区
while (flag[1]); //如果此时P1想进入临界区,P0就一直循环等待
critical section; //访问临界区
flag[0]=false; //访问完临界区,修改标记为P0不想使用临界区
remainder section;
P1进程:
flag[1]=true; //标记为P1进程想要进入临界区
while (flag[0]); //如果此时P0想进入临界区,P1就一直循环等待
critical section; //访问临界区
flag[1]=false; //访问完临界区,修改标记为P1不想使用临界区
remainder section;
双标志后检查法违反空闲等待和有限等待原则
Peterson算法
bool flag[2]; //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false; //刚开始设置为两个进程都不想进入临界区
int turn=0; //turn表示优先让哪个进程进入临界区
P0进程:
flag[0]=true; //标记为P0进程想要进入临界区
turn=1; //可以优先让P1进入临界区
while (flag[1]&&turn==1);//P1想进,且最后一次是自己谦让,则自己循环等待
critical section; //访问临界区
flag[0]=false; //访问完临界区,修改标记为P0不想使用临界区
remainder section;
P1进程:
flag[1]=true; //标记为P1进程想要进入临界区
turn=0; //可以优先让P0进入临界区
while (flag[0]&&turn==0);//P0想进,且最后一次是自己谦让,则自己循环等待
critical section; //访问临界区
flag[1]=false; //访问完临界区,修改标记为P1不想使用临界区
remainder section;
Peterson算法违反让权等待原则
进程互斥的硬件实现方法
-
中断屏蔽方法:使用:开 / 关中断指令实现
优点:简单高效
缺点:只适用于单处理机;只适用于操作系统内核进程 -
TestAndersonSet(TS指令 / TSL指令)
优点:实现简单;适用于多处理机环境;
缺点:不满足让权等待 -
Swap指令(XCHG指令)
优点:实现简单;适用于多处理机环境;
缺点:不满足让权等待
注:下一篇讲述用信号量机制实现进程的同步和互斥