##进程同步
-理解同步的含义
-信号量机制控制进程同步
-管程
进程间有什么相互影响?
两种制约关系:
间接相互制约关系:主要源于资源共享,表现为
进程A—打印机资源—进程B(互斥)
直接相互制约关系:主要源于进程合作,表现为
进程A写缓冲—进程B读缓冲(有序)
1.进程同步的基本概念
(1)进程同步的主要任务:使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。
(2)临界资源(一次仅允许一个进程使用的资源。)
互斥:在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等待,直到占用临界资源的进程退出临界区,我们称进程之间的这种相互制约关系为“互斥”。
同步:多个相互合作的进程,在一些关键点上可能需要互相等待或互相交换信息,这种相互制约关系称为进程同步关系。可理解为“有序”。
如:生产和消费的“有序”关系靠对counter的正确判断达到,而对counter的修改必须“互斥”修改。
(3)临界区
每个进程中访问临界资源的那段代码叫临界区。
为了正确同步,对临界区的代码要增加控制
进入区:对欲访问的临界资源进行检。若此刻未被访问,设正在访问的标志
临界区:访问临界资源的代码。
退出区:将正在访问的标志恢复为未被访问的标志
剩余区:其余部分
(4)同步机制应遵循的规则
实现互斥的方法应符合如下每条原则
空闲让进:资源使用最基本原则
忙则等待:保证互斥
有限等待:合适时被唤醒防止死等
让权等待:能主动释放CPU防止忙等
同步控制的关键:主要涉及”判断”和”修改标志”操作
-不应被打断(原语,OS核心态运行)
-如何制定一种写法,使标志的使用适用于各种具体应用情况?
硬件同步机制
①关中断:进入锁测试前关闭中断,直到完成锁测试并上锁后才能打开中断。进程在临界区执行期间,系统不响应中断,从而不引发调度。
缺点:滥用风险;关中断时间过长会影响效率,限制CPU交叉执行能力;不适用于多CPU系统
②Test-and-Set指令
boolean TS(boolean *lock)
{
Boolean old;
old=*lock;
*lock=TRUE;
return old;
}
*一个不可分割的原语
/
为一个临界资源设置一布尔变量lock,初值为false
do{
…
while TS(&lock) ;
critical section;
lock=FALSE;
remainder section;
}while(TRUE);
③利用Swap指令实现进程互斥
对换指令(intel 80x86中称XCHG指令),用于交换两个字节的内容
void swap(boolean *a, boolean *b)
{boolean temp;
temp=*a;
*a=*b;
*b=temp;
}
//
为临界资源设置一个全局布尔变量lock=false。每个进程一个局部布尔变量key。
do{
key=TRUE;
do{
swap(&lock,&key);
}while(key!=FALSE);
临界区操作;
lock=FALSE;
剩余区;
}while(TRUE);
2.信号量机制
(1)整型信号量
最初的信号量机制,两个原子操作对一个共享整型量进行操作。
信号量定义为一个整型量;
根据初始情况赋相应的值;
仅能通过两个原子操作来访问。
P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;