进程同步与互斥.ppt
- 文档编号:2210077
- 上传时间:2022-10-27
- 格式:PPT
- 页数:67
- 大小:1.63MB
进程同步与互斥.ppt
《进程同步与互斥.ppt》由会员分享,可在线阅读,更多相关《进程同步与互斥.ppt(67页珍藏版)》请在冰豆网上搜索。
进程间的相互作用进程间的联系进程的同步机制信号量及P.V操作(解决进程同步互斥问题)进程间的联系相交进程与无关进程相交进程:
指多个并发进程在逻辑上有某种联系无关进程(不相交进程):
在逻辑上无任何联系的进程直接作用和间接作用直接作用:
进程间的相互联系是有意识的安排的,直接作用只发生在相交进程间间接作用:
进程间要通过某种中介发生联系,是无意识安排的,可发生在相交进程之间,也可发生在无关进程之间进程的同步(直接作用)进程的同步:
synchronism指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。
具体说,一个进程运行到某一点时要求另一伙伴进程为它提供消息,在未获得消息之前,该进程处于等待状态,获得消息后被唤醒进入就绪态。
进程的互斥(间接作用)mutualexclusion由于各进程要求共享资源,而有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥临界资源(临界资源(CriticalresourceCriticalresource):
):
系统中某些资源系统中某些资源一次只允许一个进程使用,这样的资源称为临界资源一次只允许一个进程使用,这样的资源称为临界资源或互斥资源或共享变量。
或互斥资源或共享变量。
临界区(临界区(CriticalregionCriticalregion):
):
把不允许多个并发进把不允许多个并发进程交叉执行的一段程序称为临界区或临界部分。
程交叉执行的一段程序称为临界区或临界部分。
临界区就是访问公用数据的那段程序。
临界区就是访问公用数据的那段程序。
例如堆栈操作中的例如堆栈操作中的get(top)get(top)和和rel(blk)rel(blk)程序。
程序。
临界区(互斥区):
criticalsection一个程序片段的集合,这些程序片段分散在不同的进程中,对某个共享的数据结构(共享资源)进行操作。
在进程中涉及到临界资源的程序段叫临界区。
多个进程的临界区称为相关临界区。
在临界区前面增加一段用于进行检查的代码,称为进入区。
在临界区后面加上一段代码,称为退出区。
进程中除了进入区、临界区及退出区之外的其它部分的代码,称为剩余区。
使用互斥区的原则:
空闲让进:
当无进程在互斥区时,任何有权使用互斥区的进程可进入忙则等待:
不允许两个以上的进程同时进入互斥区有限等待:
任何进入互斥区的要求应在有限的时间内得到满足让权等待:
处于等待状态的进程应放弃占用CPU,以使其他进程有机会得到CPU的使用权使用互斥区的原则:
前提:
任何进程无权停止其它进程的运行进程之间相对运行速度无硬性规定进程互斥的解决有两种做法:
由竞争各方平等协商引入进程管理者,由管理者来协调竞争各方对互斥资源的使用具体方法:
硬件(当一个进程进入临界区,就屏蔽所有中断,但成本高)软件(用编程解决,但常常忙等待)进程互斥的软件方法通过平等协商方式实现进程互斥的最初方法是软件方法。
其基本思路是在进入区检查和设置一些标志,如果已有进程在临界区,则在进入区通过循环检查进行等待;在退出区修改标志。
其中的主要问题是设置什么标志和如何检查标志。
设有两个计算进程PA、PB共享内存MS。
其中MS分为三个领域,即系统区、进程工作区和数据区。
这里数据区被划分大小相等的块,每个块中既可能放有数据,也有可能未放有数据。
系统区主要是堆栈S,其中存放那些空数据块的地址。
如图所示:
getspace()intg;gstacktop;toptop-1;执行getspace就是获取一个空数据release(ad)toptop+1;stacktopad;release(ad)就是释放一个地址为ad的数据块信号量:
semaphore是一个数据结构定义如下:
structsemaphoreintvalue;pointer_PCBqueue;信号量说明:
semaphores;P、V操作P(s)s.value=s.value-;if(s.value0)该进程状态置为等待状态;将该进程的PCB插入相应的等待队列末尾s.queue;V操作V(s)s.value=s.value+;if(s.value=0)唤醒相应等待队列s.queue中等待的一个进程;改变其状态为就绪态并将其插入就绪队列;P、V操作为原语操作原语:
primitiveoratomicaction是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性即原语的执行必须是连续的,在执行过程中不允许被中断实现:
开关中断信号量的使用:
必须置一次且只能置一次初值初值不能为负数只能执行P、V操作用用PP、VV操作解决进程间互斥问题操作解决进程间互斥问题P(mutex)V(mutex)P(mutex)P(mutex)V(mutex)V(mutex)三个进程共用两个I/O缓冲区。
解:
设用信号量S表示共享资源,S初始值为2互斥例子例:
用信号量及例:
用信号量及PP、VV原语实现两个并发进程原语实现两个并发进程PaPa和和PbPb互斥。
互斥。
两进程都想进入临界区两进程都想进入临界区SS。
解:
解:
11)设)设semsem为互斥信号量,表示临界区是否可进入为互斥信号量,表示临界区是否可进入22)设)设semsem的初始值为的初始值为11,表示临界区可用,表示临界区可用33)描述:
)描述:
PaPa:
Pb:
Pb:
P(sem)P(sem)P(sem)P(sem)V(sem)V(sem)V(sem)V(sem)例:
大学校门处要求来客登记,只有一张登记表,例:
大学校门处要求来客登记,只有一张登记表,登记表同时只能由一个人使用,用登记表同时只能由一个人使用,用PP、VV原语描述一原语描述一个校外人员进入大学的过程。
个校外人员进入大学的过程。
解:
解:
11)设互斥信号量)设互斥信号量mutexmutex,表示登记表是否正在使用,表示登记表是否正在使用22)设)设mutexmutex初始值为初始值为11,表示登记表没有人使用,表示登记表没有人使用33)描述:
)描述:
Enter:
Enter:
P(mutex)/P(mutex)/申请登记表申请登记表登记登记V(mutex)/V(mutex)/释放登记表释放登记表有A、B两进程,A进程从卡片机读信息入缓冲区,B进程负责加工读进缓冲区的卡片解:
设信号量S1:
缓冲区中有否可供加工的信息,初始值为0;信号量S2:
缓冲区是否为空,初始值为1。
同步例子下列活动属于哪种制约关系
(1)若干同学去图书馆借书
(2)两队进行篮球比赛(3)流水线生产的各道工序(4)商品生产和社会消费习题某仓库有两名发货员,一名审核员。
当顾客提货时,只要发货员空闲,允许顾客进入仓库提货,顾客离开时,审核员检验顾客提货是否正确。
其工作流程如下图所示。
为了利用PV操作正确地协调他们之间的工作,设置了两个信号量S1和S2,初值分别位2,1。
图中的a,b,c,d应分别填()。
顾客进程(i=1,2,n)a在仓库提货bc检验d应用实例例1P1进程和P2进程共享一台打印机,用信号量和P、V操作实现它们的互斥。
例2矩阵A+B=矩阵和,用信号量和P、V原语操作实现它们的同步。
A用甲进程表示,B用乙进程表示。
例3矩阵A+B=C,用信号量和P、V原语操作实现它们的同步。
A用甲进程表示,B用乙进程表示,C用丙进程表示。
例4设公共汽车上,司机和售票员的活动分别是司机活动:
启动车辆;正常运行;到站停车售票员活动:
关门;售票;开门用信号量和P、V操作实现它们的关系经典的生产者消费者问题消费者消费者生产者生产者经典的生产者消费者问题同步问题:
P进程不能往“满”的缓冲区中放产品,设置信号量为S1Q进程不能从“空”的缓冲区中取产品,设置信号量S2S1初值为1,S2初值为0P:
Q:
while(true)while(true)生产一个产品;P(s2);P(s1);从缓冲区取产品;送产品到缓冲区;V(s1);V(s2);消费产品;多个缓冲区的生产者和消费者P:
i=0;while(true)生产产品;P(S1);往Bufferi放产品;V(S2);i=(i+1)%n;Q:
j=0;while(true)P(S2);从Bufferj取产品;V(S1);消费产品;j=(j+1)%n;生产者生产者-消费者问题消费者问题共享缓冲区共享缓冲区nn生产指针生产指针消费指针消费指针Producer1Producer2.ProducerMConsumer1Consumer2.ConsumerK满满空空指针移动方向指针移动方向P1有界缓冲区Q1P2Q2P3Q3:
Pm-1Qk-1PmQkQ:
j=0;while(true)P(S2);P(mutex);从Bufferj取产品;V(mutex);V(S1);消费产品;j=(j+1)%n;n个缓冲区、m个生产者和k个消费者P:
i=0;while(true)生产产品;P(S1);P(mutex);往Bufferi放产品;V(mutex);V(S2);i=(i+1)%n;有错误?
若颠倒两个有错误?
若颠倒两个P操作的顺操作的顺序?
序?
P:
i=0;while(true)生产产品;P(mutex);P(S1);往Bufferi放产品;V(mutex);V(S2);i=(i+1)%n;Q:
j=0;while(true)P(mutex);P(S2);从Bufferj取产品;V(mutex);V(S1);消费产品;j=(j+1)%n;错误错误Q:
j=0;while(true)P(S2);P(mutex);从Bufferj取产品;j=(j+1)%n;V(mutex);V(S1);消费产品;n个缓冲区、m个生产者和k个消费者P:
i=0;while(true)生产产品;P(S1);P(mutex);往Bufferi放产品;i=(i+1)%n;V(mutex);V(S2);正正确确P.V操作讨论1)信号量的物理含义:
S0表示有S个资源可用S=0表示无资源可用S=1&S2=1&Sn=1)/满足资源要求时的处理;满足资源要求时的处理;for(i=1;i=n;+i)-Si;/注:
与注:
与P的处理不同,这里是在确信可满足的处理不同,这里是在确信可满足/资源要求时,才进行减资源要求时,才进行减1操作;操作;break;else/某些资源不够时的处理;某些资源不够时的处理;调用进程进入第一个小于1信号量的等待队列Si.queue;阻塞调用进程;Ssignal(S1,S2,Sn)/V操作for(i=1;i=ti;即当资源数量低于ti时,便不予分配)占用值为di(表示资源的申请量,即Si=Si-di)对应的P、V原语格式为:
Swait(S1,t1,d1;.;Sn,tn,dn);Ssignal(S1,d1;.;Sn,dn);一般“信号量集”可以用于各种情况的资源分配和释放,几种特殊情况:
Swait(S,d,d)表示每次申请d个资源,当少于d个时,便不分配Swait(S,1,1)表示互斥信号量Swait(S,1,0)可作为一个可控开关(当S1时,允许多个进程进入临界区;当S=0时,禁止任何进程进入临界区)3IPC经典问题1.读者写者问题有两组并发进程:
读者和写者,共享一组数据区要求:
允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作第一类:
读者优先如果读者来:
1)无读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者来:
1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待第一类读者写者问题的解法读者:
while(true)P(mutex);readcount+;if(readcount=1)P(w);V(mutex);读;P(mutex);readcount-;if(readcount=0)V(w);V(mutex);写者:
while(true)P(w);写;V(w);第一类读者写者问题的解法(一般信号量集)写者:
Swait(wmutex,1,1;rcount,R,0);写;Ssignal(w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 同步