进程的同步与通信稿.docx
- 文档编号:5481465
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:15
- 大小:21.29KB
进程的同步与通信稿.docx
《进程的同步与通信稿.docx》由会员分享,可在线阅读,更多相关《进程的同步与通信稿.docx(15页珍藏版)》请在冰点文库上搜索。
进程的同步与通信稿
自要求:
理解进程是操作系统中的基本执行单位,在多道程序设计中的系统中往往同时有许多进程存在,它们要轮流占用处理器。
这些交叉执行的并发进程相互之间可能是无关的,也可能是相关的。
当并发进程竞争共享资源时会出现与时间有关的错误,因此,应采用进程同步与互斥手段使其合理使用共享资源,以保证系统安全。
当进程间必须通过信息交换进行协作时,可用进程通信的方式到达目的。
重点是:
分析与时间有关的错误;用P、V操作实现进程的同步与互斥;用信箱实现进程通信。
考核要求:
1、进程的顺序性与并发性
1)进程的顺序性
2)进程可同时执行的含义
3)进程的并发性
4)并发进程间的关系
要求达到简单应用层次。
2、与时间有关的错误
1)并发进程执行速度的确定
2)与时间有关的错误
3)分析并发进程中与时间有关的错误、
要求达到简单应用层次。
3、临界区
1)临界区的定义
2)对临界区的管理要求
要求达到领会层次。
4、进程的互斥
1)进程的互斥的含义
2)实现进程的互斥的工具(P、V操作)
3)用P、V操作管理临界区的的一般形式
4)进程互斥问题的分析及实现
要求达到综合应用层次。
5、进程的同步
1)进程的同步的含义
2)P、V操作的正确使用
3)使用P、V操作实现进程同步与互斥的混合问题
4)怎样定义信号量,信号量的物理含义及其作用
要求达到综合应用层次。
6、进程通信
1)进程通信的含义
2)实现进程通信的基本原语(发送和接收)
3)利用信箱通信时发送和接收原语的功能
4)信箱的基本结构
要求达到领会层次。
考试必备知识与考试要点
一、进程的并发性
1、进程的顺序性
1)进程的顺序性是指进程在顺序的处理器上的执行是严格按序的,即按照程序规定的动作顺序,只有在前一个操作结束后才能开始后继操作。
2)当一个进程独占处理器顺序执行时,该进程具有两个特性:
封闭性和可再现性。
2、进程的并发性
1)我们说的可同时执行的进程具有并发性,并且把可同时执行的进程称为并发进程。
2)并发进程相互之间可能无关,因此一个进程的执行不会影响另一个进程的执行,且一个进程的执行与另一个进程的进展情况无关,它们是各自独立的。
然而,有些并发进程相互之间是有交往的。
有交往的并发进程一定共享某些资源。
二、与时间有关的错误
两个有交往的并发进程,其中一个进程对另一个进程的影响常常是不可预期的,甚至无法再现。
因为两个并发进程执行的相对速度无法控制,交往进程的速率不仅受到进程调节度的影响,而且还受到与这两个交往的并发进程无关的其它进程的影响,因此,各种与时间有关的错误就可能出现。
造成进程结果不正确的因素与进程占用处理器的时间、执行的速度以及外界的影响有关。
而这些因素都与时间有关,所以称为与时间有关的错误。
三、临界区与P、V操作
1、临界区
(1)临界区和相关临界区的概念
1)临界区:
指并发进程中与共享变量有关的程序段。
2)相关临界区:
指并发进程中涉及到相同变量的那些程序段。
(2)对若干个并发进程共享某一变量的相关临界区的管理有以下要求。
1)一次只有一个进程能够进入临界区;当有进程在临界区执行时,其它想进入临界区执行的进程必须等待。
2)不能让一个进程无限制地在临界区执行,即任何一个进入临界区的进程必须在有限的时间内退出临界区。
3)不能强迫一个进程无限地等待进入它的临界区,即有进程退出临界区时应让一个等待进入临界区的进程进入它的临界区执行。
2、P、V操作
(1)如何实现对临界区的管理要求?
要实现对临界区的管理要求,必须做到:
当无进程在临界区时,若有进程要进入临界区,则允许一个进程立即进入它的临界区;当有一个进程在临界区执行时,其它试图进入临界区的进程必须等待;当有一个进程离开临界区时,若有等待进入临界区的进程,则允许其中一个进程进入它的临界区。
(2)P、V操作的概念。
P、V操作是由两个操作------P操行和V操作组成。
这两个操作是两个不可中断的过程,它们在屏蔽中断的情况下连续执行。
把不可中断的过程称为原语。
于是,P操作和V操作也可称为P操作原语和V操作原语,简称P、V操作。
P、V操作对信号量进行操作,它们的定义如下:
P操作P(S):
将信号量S减1,若结果小于0,则调用P(S)的进程被置成等待信号量S的状态。
V操作V(S):
将信号量加1,若结果不大于0,则释放一个等待信号量S的进程。
(3)P操作和V操作可表示如下两个过程。
ProcedureP(Vars:
semaphore);
Begin
S:
=s-1;
Ifs<0thenW(s)
End;{P}
ProcedureV(Vars:
semaphore);
其中W(S)表示将调用过程的进程置成等待信号量S的状态;R(S)表示释放一个等待信号量S的进程。
信号量S的初值为0、1或其它整数,它应在系统初始化时确定。
Begin
S:
=s+1;
Ifs=<0thenR(s)
End;{V}
四、进程的互斥与同步
1、进程的互斥
进程的互斥是指当有若干个进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用,其它要使用该资源的进程必须等待,直到占用资源者释放了该资源。
一般说,当n个进程P1,P2,....Pn要共享某一资源时,为保证资源的互斥使用,首先找出n个进程各自的临界区,对每个进程都用P、V操作来实现进入和退出临界区。
进程Pi(i=1,2,…,n)互斥的一般形式为:
P74例4、3。
2、进程的同步
进程的同步是指并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达时才被唤醒。
(1)同步机制
要实现进程的同步就必须提供一种机制,该机制能测试进程所需要的消息是否到达,也能把其它进程所需要的消息发送出去。
P、V操作是一个简单而方便的同步工具,把一个信号量与一个消息联系起来。
当信号量的值为“0”时表示期望的消息尚未产生,当信号量的值非“0”时表示期望的消息已经存在。
在用P、V操作实现同步时,一定要根据具体的问题来定义信号量和调用P操作或V操作。
一个信号量与一个消息联系在一起,当有多个消息时必须定义多个信号量,测试不同的消息是否到达或发送不同的消息时,应对不同的信号量调用P操作或V操作。
(2)生产者与消费者问题
现假定有一个生产者和一个消费者,他们公用一个缓冲器。
生产者不断地生产物品,每生产一件物品就要存入缓冲器,但缓冲器每次只能存入一件物品,只有当消费者把物品取走后,生产者才能把第二件物品存入缓冲器;同样地,消费者要不断地取出物品消费,当缓冲器中有物品时他就可以去取,每取走一件物品后必须等生产者再放入一件物品才可再取。
用P、V操作实现生产者与消费者之间的同步,应定义两个信号量sp和sg。
Sp:
表示是否可以把物品存入缓冲器;由于缓冲器中只能放一件物品,所以Sp的初值取为“1”,表示允许放一件物品。
Sg:
表示缓冲器中是否存有物品;显然,它的初值应为“0”,表示还没有物品。
生产者和消费者并发执行时,可按如下方式同步:
Begin
Buffer:
semaphore;
Sp,sg:
semaphore;
Sp:
=1,sg:
=0;
Cobegin
Processproducer
Begin
对生产者来说,生产一件物品后应调用P(sp)。
当缓冲器中无物品时(这时sp=1),则调用P(sp)后不会成为等待状态,可继续执行。
把物品存入缓冲器,调用一次P(sp)后,sp=0;若消费者尚未取走物品,而生产者又生产了一件物品欲存入缓冲器,这时调用P(sp)将使生产者处于等待状态而阻止他把物品再存入缓冲器。
当在缓冲器存入一件物品后,应调用V(sg),告诉消费者缓冲器中已有一件物品了(调用V(sg)后,sg的值从“0”变为“1”)
L1:
produceaproduct;
P(sp);
Buffer:
=product;
V(sg);
GotoL1;
End;
Processconsumer
Begin
L2:
P(sg);
Takeaproduct;
V(sp);
Consume;
GotoL2;
End;
Coend;
对于消费者来说,取物品前应查看缓冲器中是否有物品,即调用P(sg)。
当无物品时,由于sg=0,调用P(sg)后消费者等待,不能去取物品;当有物品时,由于sg=1,调用P(sg)后消费者后可继续执行去取物品。
每取走一件物品后,应调用V(sp),通知生产者缓冲器中物品已取走,可以存入一件新的物品。
End;
3、同步与互斥的混合问题
从并发进程访问共享资源的观点出发,进程的互斥实际上是进程同步的一种特殊情况。
有时把进程的互斥和进程的同步统称为进程的同步,但必须注意,这两种制约关系是有区别的,进程的互斥是进程间竞争共享资源的使用权,这种竞争没有固定的必然关系;而进程同步时,涉及到共享资源的并发进程之间有一种必然的依赖关系。
在解决实际问题时,必须分清并发进程之间的互斥关系和同步关系,才能对同步与互斥的混合问题进行正确管理。
综合应用题
1、假定有三个进程R、W1、W2共享一个缓冲器B,而B中每次只能存放一个数。
当缓冲器中无数时,进程R可将M输入设备上读入的数存放到缓冲器B中;若存放到缓冲器中的是奇数,则允许进程W1将其取出打印;若存放到缓冲器中的是偶数,则允许进程W2将其取出打印。
同时规定:
进程R必须等缓冲器中的数被取出打印后才能再存放一个数;进程W1或W2对每次存入缓冲器中的数只能打印一次;W1和W2都不能从空的缓冲器中取数。
写出这三个并发进程能正确工作的程序。
分析:
在这个问题中把进程R看做是生产者,把进程W1和W2看做是消费者。
现有一个生产者(进程R)能生产不同的产品(读入奇数或偶数),把生产的产品存放在缓冲器B中,供不同的消费者(进程W1和进程W2)取用。
可以看出,当进程R读入的是奇数,则要把有奇数的消息发送给进程W1;当进程R读入的是偶数,则要把偶数的消息发送给W2,在进程W1或进程W2从缓冲器中取出数后,应把缓冲器中又可有一个数的消息告诉进程R,于是,可以定义如下三个信号量:
s表示是否可以把数存入缓冲器;由于缓冲器中每次只能放一个数,所以其初值取为“1”。
so表示缓冲器中是否有奇数;初值为“0”,表示无奇数。
se表示缓冲器中是否有偶数;初值为“0”,表示无偶数。
参考答案:
并发进程能正确执行的程序如下:
begin
B:
integer;
s,so,se:
semaphore;
s:
=1;
so:
=0;se:
=0;
Cobegin
ProcessR
X:
integer;
Begin
L1:
从输入设备读一个数;
X:
=读入的数
P(s);
B:
=x;
IfB=偶数thenV(so)
ElseV(se);
GotoL1
End;
ProcessW1
y:
integer;
Begin
L2:
P(so);
y:
=B;
V(s);
打印y中数;
GotoL2
End;
ProcessW2
z:
integer;
Begin
L3:
P(se);
z:
=B;
V(s);
打印z中数;
GotoL3
End;
Coend;
End;
总结:
P、V操作是一个简单而方便的同步工具,把一个信号量与一个消息联系起来。
当信号量的值为“0”时表示期望的消息尚未产生,当信号量的值非“0”时表示期望的消息已经存在。
显然,任何进程只要调用P操作就可测试自己所期望的消息是否已经到达。
若用信号量S表示一种消息,如果消息尚未产生,则S=0,调用P(S)后调用者将成为等待S的状态;如果消息已经存在则S不等于0,调用P(S)后调用者不会成为等待状态,即测试到自己的消息已经到达而可继续执行。
同样地,任何进程要向其它进程发送消息时可调用V操作。
若调用V操作之前S=0,表示消息尚未产生且也无等待该消息的进程,这时调用V(S)后使S不等于0即意味着消息已产生;若调用V操作之前S〈0,表示消息未产生且有进程在等待该消息,这时调用V(S)后将释放一个等待消息S的进程,即调用V(S)的进程把消息传送给等待消息的进程且允许它继续执行。
在用P、V操作实现同步时,一定要根据具体的问题来定义信号量和调用P操作或V操作。
一个信号量与一个消息联系在一起,当有多个消息时必须定义多个信号量,测试不同的消息是否到达或发送不同的消息时,应对不同的信号量调用P操作或V操作。
2、桌上有一只盘子,每次只能放入一只水果,爸爸专向盘中放苹果(apple),妈妈专向盘中放桔子(orange),一个儿子专等吃盘子中的桔子,一个女儿专等吃盘子中的苹果。
只要盘子空则爸爸或妈妈可向盘中放一只水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出。
把爸爸、妈妈、儿子、女儿看做四个进程,用P、V操作进行管理使这四个进程能正确地并发执行。
分析:
这个问题实际上可看作是两个生产者和两个消费者共享了一个仅能存放一件产品的缓冲器。
生产者各自生产不同的产品,消费者各自取自己需要的产品。
由于盘子中每次只能存放一只水果,因此,爸爸和妈妈在存放水果时必须互斥。
儿子和女儿分别要吃桔子和苹果,因而,当爸爸向盘子中放了一只苹果后应把“盘中有苹果”的消息发送给女儿;当妈妈向盘子中放了一只桔子后应把“盘中有桔子”的消息发送给儿子;如果儿子或女儿取走了盘子中的水果,则应发送“盘子中又可存入水果”的消息。
但这个消息不应特定地发送给爸爸或妈妈,至于谁能再向盘子中放水果则通过竞争共享资源(盘子)的使用权来决定。
应怎样定义信号量呢?
首先应定义一个是否允许向盘子中存放水果的信号量s,其初始值为“1”,表示允许放一只水果;其次要定义两个信号量sp和so,分别表示盘子中是否有苹果或桔子的消息,初值应该为“0”。
至于儿子或女儿取走水果后要发送“盘子中又可存入水果”的消息,只要调用V(s)就可达到目的,所以不必再增加信号量了。
在程序段中,其中爸爸或妈妈在向盘子中存放水果之前调用了P(s),这个P(s)起两个作用:
(1)由于s的初值为“1”,所以P(s)限制了每次至多只有一个进程可向盘子中放水果,起到了互斥地向盘子中放水果的作用;
(2)由于盘中有水果且尚未被取走时,s的值为“0”,当盘中水果被取走后调用了V(s)使s的值又为“1”,因此P(s)起到了测试“盘子中又可存入水果”的消息是否到达的同步作用。
可见,在这个问题中信号量s既被作为互斥的信号量,又被作为同步的信号量,起到了双重作用。
参考答案:
begin
s,sp,so:
semaphore;
s:
=1;sp:
=0;so:
=0;
cobegin
processfather
begin
L1:
haveanapple;
P(s);
Putanapple;
V(sp);
GotoL1
end;
processmother
begin
L2:
haveanorange;
P(s);
Putanorange;
V(so);
GotoL2
end;
processson
begin
L3:
P(so);
getanorange;
V(s);
eatanorange;
GotoL3
end;
processdaughter
begin
L4:
P(sp);
getanapple;
V(s);
eatanapple;
GotoL4
end;
coend;
end;
1、某系统有输入机和打印机各一台,今有两个进程都要同时使用它们,采用P、V操作实现请求使用和归还释放后,还会产生死锁吗?
若不会,说明理由;若会产生死锁则给出一种防止死锁的方法。
答案:
如果P、V操作设计不当,仍会产生死锁。
假如用s1和s2分别代表输入机和打印机能否被使用的信号量,由于资源是共享的,所以必须互斥使用,因而它们的初始值都为1。
如果用如下方法实现请求使用和归还释放:
ProcessA1
Begin
P(s1);
使用输入机;
P(s2);
使用打印机;
V(s2);
V(s1);
ProcessA2
Begin
P(s2);
使用打印机;
P(s1);
使用输入机;
V(s2);
V(s1);
End;
End;
那么,就会出现A1得到输入机而A2得到打印机,双方在不释放已有的资源的情况下又去申请新的资源,就会造成死锁。
可以采用下面这种为资源编序号的方法,要求按序申请,则不会发生死锁。
ProcessA1
Begin
P(s1);
使用输入机;
P(s2);
使用打印机;
V(s2);
V(s1);
ProcessA2
Begin
P(s1);
使用输入机;
P(s2);
使用打印机;
V(s2);
V(s1);
End;
End;
进程通信
进程通信,是指进程之间信息交换。
进程的互斥与同步就是一种进程间的通信方式。
由于其所关键所交换的信息量少而被归结为低级通信,相应地也可将P、V操作称为两条低级通信原语。
高级通信方式是指进程之间以较高的效率传送大量数据的通信方式,是指用户可直接利用操作系统所提供的一组通信命令高效地传送大量数据的一种通信方式。
高级通信机制可归结为三大类:
共享存储器系统、消息传递系统(目前最为广泛的)和管道通信系统。
共享存储器系统:
相互的通信的进程共享某些数据结构或共享存储区,进程之间能够通过它们进行通信。
消息传递系统:
进程间的数据交换以消息为单位,程序员直接利用系统提供的一组通信命令(原语)来实现通信,消息传递系统可分为直接通信方式和间接通信方式。
直接通信方式:
要求通信的两个进程必须同时存在。
间接通信方式:
两个进程可以有一个不存在(如发短信)。
管道通信系统:
所谓“管道“,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
向管道(共享文件)输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从管道中接收(读)数据。
由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。
这种方式首创于UNIX系统,由于它能有效地传送大量数据,因而又被引入到许多其它的操作系统中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 同步 通信