目录
一、进程同步
1.同步:进程之间协调工作次序而产生的的直接制约关系。
2.互斥:一个时间段内只允许一个进程使用的资源称为临界资源,临界资源的访问需要互斥进行,等待一个进程结束访问,释放资源才能有新进程访问。
1>进入区:若可进入,设置访问临界资源的标志,防止其他进程进入。
2>临界区:访问临界资源。
3>退出区:解除访问临界资源的标志。
4>剩余区:结束后的其他处理。
3.临界资源访问原则: 空闲让进,忙则等待,有限等待,让权等待(不能进入就释放)。
二、进程互斥的软件实现方法
1.单标志法:进程访问完临界区后,将权限交给另一进程,即进程进入临界区权限只能被另一个进程赋予。声明 int turn=允许进入的进程号。
违背了“空闲让进”原则。
2.双标志先检查法:设置布尔型数组,数组下标代表进程号,布尔值代表想进入临界区的意愿。进入前,先检查是否有其他进程想进入,若没有就进入,设置索引为true,完成后还原。
可能出现两进程同时访问的问题,违背了“忙则等待”原则。
3.双标志后检查法:先修改想进入状态true,在判断是否有其他进程想进入,使其他进程无法抢占进入。
违背了“空闲让进,有限等待”原则。在进程异步执行阶段,判断“进入区”阶段会发生冲突。
4.皮特森(peterson)算法:结合双标志法和但标志法,设置布尔数组代表进程和意愿,设置数字代表允许进入的进程号。同时满足意愿(true)与允许进入(为true的布尔下标=int)则进入临界区。
过程:争取(boolean[index]=true)----谦让(int)----检查执行(while (boolean==true&& boolean_index==int ){执行;还原 true-->false})
遵循了空闲让进、忙则等待、有限等待原则。未遵循 让权等待 原则。
三、进程互斥的硬件实现方法
1.中断屏蔽: 利用开关中断指令实现。关中断----临界区-----开中断
不适用于多处理机,只适用于操作系统内核进程,不适用于用户进程。
2.TestAndSet(TS),TestAndSetLock(TSL):利用硬件实现,不允许中断。
伪代码:
boolean TSL(boolean lock){
boolean old=lock;
lock=true;//上锁
return old;//判断原始状态
}
3.Swap:伪代码:
Swap(boolean a,boolean b){
boolean temp=a;
a=b;
b=temp;
}
TSL ,Swapd都是交换新旧状态,上锁后判断,适用于多处理机环境,不满足“让权等待”。