目录
2.利用Test-and-Set指令实现互斥(专用机器指令)
进程同步
(1)进程同步
1.进程同步的基本概念
进程同步的主要任务是使并发执行的诸进程之间能有效地共享资源和相互合作,使执行的结果具有可再现性。
2.进程之间的两种制约关系
间接相互制约关系 系统资源共享:互斥地访问、系统统一分配
直接相互制约关系 进程间合作,比如进程A、B,进程B是对进程A的数据进行处理,那么进程B就一定要在进程A之后执行。
临界资源(critical resource):一段时间仅允许一个进程访问的资源。
临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。
并发进程对临界资源的访问必须做某种限制,否则就可能出现与时间有关的错误
3.四大区
临界区:临界段,在每个程序中,访问临界资源的那段程序。
进入区:用于进入临界区前检查临界资源是否正在被访问的代码块。
退出区:在临界区之后用于将临界区正在被访问的标志恢复为未被访问的状态的代码块。
剩余区:除进入区、临界区及退出区之外的其它部分的代码。
一个访问临界资源的循环进程描述为:
while(true)
{
进入区
临界区
退出区
剩余区
}
4.同步机制应遵循的规则:
空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效地利用临界资源。(多中选一)
忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其它试图进入临界区的进程必须等待,以保证对临界资源的互斥访问。 (互斥访问)
有限等待: 对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,避免陷入"死等"状态。 (避免死等)
让权等待: 当进程不能进入自己的临界区时,应立即释放处理机,避免进程陷入"忙等"状态。 (避免忙等)
(2)硬件同步机制
1.关中断
关中断:实现互斥最简单的方法。 进入锁测试之前关闭中断,直到完成锁测试并且关上锁以后再打开中断。进程进入临界区执行期间,计算机系统不会响应中断,也不会引发调度,就不会引起线程或者进程的切换。
缺点:影响系统效率、不适合多CPU、会导致严重后果
2.利用Test-and-Set指令实现互斥(专用机器指令)
TS指令的一般性描述:
boolean TS(boolean *lock){
boolean old;
old=*lock;
*lock=TRUE;
return old;
}
利用TS指令实现互斥的循环进程结构描述为:
do{
…
while TS(&lock);
critical section;
lock:=false;
remainder seciton;
}while(true)
3.利用swap指令实现互斥(交换指令)
void swap(boolean *a, boolean *b)
{
boolean temp;
temp=*a;
*a=*b;
*b=temp;
}
利用Swap指令实现进程互斥的循环进程描述为:
do{
key=TRUE;
do{
swap(&lock, &key);
} while(key!=FALSE);
critical section; //临界区操作
lock:=false;
…
} while(TRUE);