第3章同步通信和死锁分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程发来的信息前应阻塞自己,等协作进程发来消息后方可继
续执行。
第3章同步通信和死锁分析
2
进程间这种相互依赖又相互制约,相互协作又相互竞 争的关系,主要表现在进程互斥和进程同步两方面
二、进程互斥
引例: 宿舍电话的使用
打印机的使用
1、临界资源
一次仅允许一个进程使用的资源称为临界资源。
引例中的电话和打印机都属于临界资源。还有光 盘刻录机、绘图仪、共享变量、共享的数据结构等等 也是临界资源。
第3章同步通信和死锁分析
7
3.2 进程互斥的实现
一、实现进程互斥的软件算法 现在很少用软件方法解决互斥,但通过学习 软件解法能使读者了解到,在早期进程互斥 问题的解决并不是一件很简单的事。
第3章同步通信和死锁分析
8
尝试 (1)
bool inside1=false; //P1不在其临界区内 bool inside2=false; //P2不在其临界区内
9
尝试 (2)
bool inside1=false; //P1不在其临界区内
bool inside2=false; //P2不在其临界区内
cobegin
process P1( )
process P2( )
{
{
inside1=true;
inside2=true;
while(inside2);
while(inside1);
{临界区};
{临界区};
inside1=false;
inside2=false;
}
}
coend
P1和P2可能永远等待。
第3章同步通信和死锁分析
10
bool inside[2]; inside[0]=false; inside[1]=false; enum {0,1} turn;
Peterson算法
2、临界区:
每个进程中访问临界资源的那段程序段称为临界
区。(临界段)
第3章同步通信和死锁分析
3
例:统计两个进程P1和P2对共享变量count的访问计数。
P1: ….
P2: ….
R1=count;
R2=count;
R1=R1+1;
R2=Rwk.baidu.com+1;
count=R1;
count=R2;
….
….
两进程并发执行,可能的执行顺序为:
进程同步:几个进程相互协作,一个进程到达某点
后,若另一进程尚未完成某些操作,就必须停下来
等待,只有等另一进程的这些操作完成了才能继续
执行。协作进程间需要在某些关键点上排定执行先
后次序而等待、传递信号或消息所产生的协作关系
称为进程同第3步章同。步通信和死锁分析
6
例:计算fun1(X)*fun2(y) 两进程合作完成任务 进程1:计算fun1(X)。 进程2:计算fun2(X);与进程1结果相乘。 进程1和进程2并发执行。
11
为 每 一 进 程 设 标 志 位 inside[i] , 当 inside[i]=true 时 , 表 示 进 程 pi 要 求 进 入 , 或 正 在临界区中执行。此外再设一个变量turn,用于 指示允许进入的进程编号。
进程0为了进入先置inside[0]=true,并置turn为 1,表示应轮到p1进入。接着再判断 inside[1]&&turn==1的条件是否满足,若不满足则 可进入。或者说当inside[ 1 ]=false或者 turn==0时,进程可以进入。前者表示p1未要求进 入,后者表示仅允许p0进入.
第三章 同步、通信与死锁
第3章同步通信和死锁分析
1
3.1 进程的同步与互斥
在多道程序的环境中,系统中的多个进程可以并发执行,同时它们又要共享 系统中的资源,由此诸进程间会产生错综复杂的相互制约的关系。
一、进程间制约关系
1.竞争关系
进程——资源——进程
源于资源共享,多个不存在逻辑关系的进程因共享资源而产 生制约关系。
cobegin
process P0( ) { inside[0]=true; turn=1;
while(inside[1]&&turn==1); {临界区}; inside[0]=false; }
coend
第3章同步通信和死锁分析
process P1( ) {
inside[1]=true; turn=0; while(inside[0]&&turn==0); {临界区}; inside[1]=false; }
错误.
第3章同步通信和死锁分析
4
3、进程互斥 进程应互斥访问同一临界资源,即进程应互斥的进入临界区。 当一进程正在访问某临界区时,就不允许其它进程进入,试图 进入临界区的另一进程必须等待。进程之间的这种相互制约的 关系称为进程互斥。
4、进入临界区的准则: ➢ 每次至多有一个进程进入临界区内执行; ➢ 若已有进程在临界区中,试图进入此临界区的其他
cobegin
process P1( )
process P2( )
{
{
while(inside2);
while(inside1);
inside1=true; {临界区};
inside2=true; {临界区};
inside1=false;
inside2=false;
}
}
coend
P1和P2可能同时进入临界区 第3章同步通信和死锁分析
P1: R1=count;
R1=R1+1;
P2: R2=count;
R2=R2+1;
count=R2;
P1: count=R1; 虽然两个进程各自都执行了对count加1的操作,但结果为何
count只增加1?
count是临界资源,P1、P2访问count的两个程序段就是临界
区,两个进程必须互斥的进入临界区,否则就可能出与时间有关的
若一个进程要求使用某一资源,而该资源正被另一个进程使
用,并且这一资源不允许两个进程同时访问,那么该进程只有
等待,只有这一资源释放后才能使用。
2.协作关系
源于进程间的协作。
进程——进程
一组进程为完成共同任务分工协作,各进程都独立以不可预
知速度推进,在执行的先后次序就有约束,在一些关键点上协
调工作。若一个进程运行到某关键点时,在尚未收到另一协作
进程应等待; ➢ 进入临界区的进程应在有限时间内退出,以便让等
待队列中的一个进程进入。
第3章同步通信和死锁分析
5
三、进程同步
引例:两位同学约好星期天去玩,早上8:00在校门口, 不见不散。当一个同学先来到校门口,要等另一个同 学,到齐后一起去玩。
互斥的概念来自于诸进程对临界资源的竞争,同步 来源于多个进程的协作。在人类社会中竞争与协作 是永恒的。