第3章课后习题+进程同步与通信
最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信1(共108张PPT课件)
![最新【考研计算机专业课】武汉大学操作系统PPT课件 第3章 进程同步与通信1(共108张PPT课件)](https://img.taocdn.com/s3/m/6fcc1e2c7275a417866fb84ae45c3b3567ecddad.png)
算法 4的描述 (suàn fǎ)
enum boolean {false,true};
boolean flag[2] ={false,false}; int turn;
P0:{
do {
flag[0]=true;
turn=1;
while (flag[1] && turn = = 1);
进程(jìnchéng)P0的临界区代码CS0 ;
while(true) }
第十六页,共一百零八页。
算法2存在 的问题 (cúnzài)
此算法解决了空闲让进的问题,但有可 能两个进程同时进入临界区。
当两个进程都未进入临界区时,它们各 自的访问标志值都为false,若此时(cǐ 刚 shí) 好两个进程同时都想进入临界区,并且 都发现对方标志值为false,于是两个进 程同时进入了各自的临界区,这就违背 了临界区的访问原则忙则等待。
第十页,共一百零八页。
算法 1的描述 (suàn fǎ)
int turn=0; P0:{
do { while (turn!=0); 进程(jìnchéng)P0的临界区代码CS0
; turn=1 ; 进程P0的其他代码;
} while (true) }
第十一页,共一百零八页。
算法(suàn fǎ)1的描述(续)
第二十页,共一百零八页。
算法3存在 的问题 (cúnzài)
该算法可以有效地防止两个进程同时进 入临界区,但存在两个进程都进不了临 界区的问题。
当两个进程同时想进入临界区时,它们 分别将自己的标志位设置(shèzhì)为true,并 且同时去检查对方的状态,发现对方也 要进入临界区,于是双方互相谦让,结 果谁也进不了临界区。
操作系统原理-第三章进程管理习题(1)
![操作系统原理-第三章进程管理习题(1)](https://img.taocdn.com/s3/m/112f4514dd3383c4ba4cd20d.png)
第三章进程管理习题一. 单选题1. UNIX操作系统的进程控制块中常驻内存的是()。
A.proc结构B.proc结构和核心栈C.ppda区D.proc结构和user结构2. 当()时,进程从执行状态转变为就绪状态。
A.进程被调度程序选中B.时间片到C.等待某一事件D.等待的事件发生3.在进程状态转换时,下列()转换是不可能发生的。
A.就绪态→运行态B.运行态→就绪态C.运行态→阻塞态D.阻塞态→运行态4.下列各项工作步骤中,()不是创建进程所必需的步骤。
A.建立一个PCBB.作业调度程序为进程分配CPUC.为进程分配内存等资源D. 将PCB链入进程就绪队列5.下列关于进程的叙述中,正确的是()。
A.进程通过进程调度程序而获得CPU。
B.优先级是进行进程调度的重要依据,一旦确定不能改变。
C.在单CPU系统中,任一时刻都有1个进程处于运行状态。
D.进程申请CPU得不到满足时,其状态变为等待状态。
6.从资源管理的角度看,进程调度属于()。
A.I/O管理B.文件管理C.处理机管理D.存储器管理7.下列有可能导致一进程从运行变为就绪的事件是()。
A.一次I/O操作结束B.运行进程需作I/O操作C.运行进程结束D.出现了比现运行进程优先权更高的进程8.一个进程释放一种资源将有可能导致一个或几个进程()。
A.由就绪变运行B.由运行变就绪C.由阻塞变运行D.由阻塞变就绪9.一次I/O操作的结束,有可能导致()。
A.一个进程由睡眠变就绪B.几个进程由睡眠变就绪C.一个进程由睡眠变运行D.几个进程由睡眠变运行10.当一个进程从CPU上退下来时,它的状态应变为()。
A.静止就绪B. 活动就绪C. 静止睡眠D. 活动睡眠11.为使进程由活动就绪变为静止就绪,应利用()原语?** B. ACTIVE C. BLOCK D. WAKEUP12.在下面的叙述中,不正确的是()。
A.一个进程可创建一个或多个线程B.一个线程可创建一个或多个线程C.一个线程可创建一个或多个进程D.一个进程可创建一个或多个进程13. 若系统中只有用户级线程,则处理机调度单位是()。
第3章 进程的同步与通信
![第3章 进程的同步与通信](https://img.taocdn.com/s3/m/aa9f0c92700abb68a882fb09.png)
2)打印进程只有当缓冲区有结果时,才能从缓冲区取
计算结果打印。
定义两个信号量:Sempty、 Sfull ,用于控制这两个约束:
Sfull — 控制打印进程从缓冲区取计算结果打印。 Sempty — 控制计算进程向缓冲区送计算结果。
设: Sempty 初值为1 Sfull初值为0 — 表示缓冲区为空。
(proposed by Dijkstra in 1965)
What a Semaphore is?
An integer variable Represent the number of resources available
(when it is greater than or equals to 0) Represent the number of processes waiting for the
Chap.3 进程的同步与通信 本章讨论的主要问题
1、如何控制和协调并发进程异步执行 的时序?
进程的同步机制
2、进程之间如何互相联系,传递信息?
进程的通信
3.1 进程间的相互作用
进程间的联系 进程的同步机制──信号量及P.V操
作(解决进程同步互斥问题)
1.进程间的联系
相交进程与无关进程 相交进程:指多个并发进程在逻辑上有
resources( when it is less than 0)
Operations on a semaphore
Initialization P operation ------- to test V operation ------- to increment
信号量:semaphore
② P、V操作有严格的不可分割性;执行过程不允许中断; ③ P、V操作成对出现。
(完整版)第三章进程同步与通信作业习题与答案
![(完整版)第三章进程同步与通信作业习题与答案](https://img.taocdn.com/s3/m/9f8e21ca7fd5360cba1adbee.png)
第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道D.DMA2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
A.3B.2C.1D.04.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V 操作管理时信号量S的可能取值是_C__。
A.3,2,1,0,-1B.2,1,0,-1,-2C. 1,0,-1,-2,-3D.4,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误D.P、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B_ _。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
哈工大威海 操作系统课件 第3章进程同步
![哈工大威海 操作系统课件 第3章进程同步](https://img.taocdn.com/s3/m/750a5cfd7c1cfad6195fa7eb.png)
第二章 进 程 管 理
算法2:双标志、先检查 其中Pi
While(flag[j]); Flag[i]=TRUE; Critical section Flag[i]=FALSE; Remainder section
flag[i]= flag[j]=FALSE
请写出Pj
<> <b>
<a> <b>
While(flag[i]); Flag[j]=TRUE; Critical section Flag[j]=FALSE; Remainder section
执行过程相当于 生产一点拿一点, 而不是消费完整 的产品
最后counter 的值为4,并且结果不可预见.
解决问题的关键是,把counter作为临界资源来处 理,即令生产者和消费者进程互斥访问变量counter.
第二章 进 程 管 理
3. 临界区(critical section)
3.1、临界区的定义与进入 • 临界区:把在每个进程中访问临界资源的那段代 码称为临界区(critical section)。 • 进入区: 在临界区前面增加一段用于进行临界资源检 查的代码,称为进入区 。 • 退出区:将临界区正被访问的标志恢复为未被访问 的标志。 • 剩余区:其余部分。
表示目前 缓冲区产 品已放满
第二章 进 程 管 理
虽然上面的生产者程序和消费者程序,在分别看时 都是正确的,而且两者在顺序执行时其结果也会是正确
的,但若并发执行时,就会出现差错,问题就在于这两
个进程共享变量counter。
第二章 进 程 管 理
• 生产者对它做加1操作,消费者对它做减1操 作,这两个操作在用机器语言实现时, 常可 用下面的形式描述:
第3章 进程同步与通信_2
![第3章 进程同步与通信_2](https://img.taocdn.com/s3/m/f218e2cfa1c7aa00b52acb6d.png)
吃水果问题2 吃水果问题
题目:桌上有一只盘子,允许存放一个水果, 题目:桌上有一只盘子,允许存放一个水果,父亲 专向盘中放苹果,母亲专向盘中放桔子, 专向盘中放苹果,母亲专向盘中放桔子,儿子专等 吃盘里的桔子,女儿专等吃盘里的苹果。 吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子 则父亲或母亲可向盘中放水果, 空,则父亲或母亲可向盘中放水果,仅当盘中有自 己需要的水果时,儿子或女儿可从中取出。 己需要的水果时,儿子或女儿可从中取出。 请给出四人之间的同步关系,并用 操作实现四人 请给出四人之间的同步关系,并用PV操作实现四人 正确活动的程序。 正确活动的程序。
用信号量解决“生产者 消费者 生产者-消费者 用信号量 生产者 消费者”问 题
semaphore mutex =1; semaphore empty = n; semaphore full = 0; int i,j; ITEM buffer[n]; ITEM data_p, data_c;
void producer() //生产者进程 void consumer()//消费者进程 生产者进程 消费者进程 {while (true) {while (true) {produce an item in data_p; { P(full); P(empty); P(mutex); P(mutex); data_c = buffer[j]; buffer[i] = data_p; j = (j + 1) % n; i = (i + 1) % n; V(mutex); V(mutex); V(empty); V(full);} consume the item in data_c;} } }
计算机操作系统03进程的同步与通信
![计算机操作系统03进程的同步与通信](https://img.taocdn.com/s3/m/91719369998fcc22bcd10dd3.png)
用TS实现进程互斥: repeat while TS(lock) do skip; critical section lock:=false; remainder section until false;
第三章 进程的同步与通信
2. 利用Swap指令实现互斥 Swap指令: procedure (var a,b:Boolean) var temp:Boolean; begin temp:=a; a:=b; b:=temp end
计算机操作系统
第三章 进程的同步与通信
教学目的与要求: 1.掌握进程同步、进程通信、资源、信号量等
基本概念 2.了解解决进程同步问题的软件方法和硬件方
法 3.能用信号量和管程解决简单进程同步问题 4.了解OS/2操作系统的进程同步与通信机制
第三章 进程的同步与通信
重点与难点:
1. 同步、通信、资源、信号量等基本概念
第三章 进程的同步与通信
2 临界资源的定义 临界资源是指并发进程之间在某段时间内同
时提出访问请求的互斥型资源。 例:在A进程正在访问打印机的时候,B进程也提
出对打印机的访问请求,则打印机为临界资源。应 互斥使用临界资源。
三.临界区 1 临界区的定义 是指进程中访问临界资源的那段代码
第三章 进程的同步与通信
第三章 进程的同步与通信
算法3:与算法2相似,只是在flag[i]=ture时表示进 程P[i]要求进入临界区,若此时无其它进程有此要求, 则进程P[i]可进入临界区。对于进程Pi repeat flag[i]:=true; while flag[j] do no_op critical section flag[i]:=false; remainder section until false 该算法的缺点:违背了空闲让进和有限等待原则
进程同步与通信作业习题与答案
![进程同步与通信作业习题与答案](https://img.taocdn.com/s3/m/f5278463915f804d2a16c134.png)
第三章一.选择题(50题)1.以下_B__操作系统中的技术是用来解决进程同步的。
A.管道B.管程C.通道2.以下_B__不是操作系统的进程通信手段。
A.管道B.原语C.套接字D.文件映射3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。
4.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。
,2,1,0,-1 ,1,0,-1,-2 C. 1,0,-1,-2,-3 ,3,2,1,05.下面有关进程的描述,是正确的__A__。
A.进程执行的相对速度不能由进程自己来控制B.进程利用信号量的P、V 操作可以交换大量的信息C.并发进程在访问共享资源时,不可能出现与时间有关的错误、V操作不是原语操作6.信号灯可以用来实现进程之间的_B__。
A.调度B.同步与互斥C.同步D.互斥7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。
A.没有进程进入临界区B.有1个进程进入了临界区C. 有2个进程进入了临界区D. 有1个进程进入了临界区并且另一个进程正等待进入8. 信箱通信是一种_B__方式A.直接通信B.间接通信C.低级通信D.信号量9.以下关于临界区的说法,是正确的_C__。
A.对于临界区,最重要的是判断哪个进程先进入B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以打断进程A而自己进入临界区C. 信号量的初值非负,在其上只能做PV操作D.两个互斥进程在临界区内,对共享变量的操作是相同的10. 并发是指_C__。
A.可平行执行的进程B.可先后执行的进程C.可同时执行的进程D.不可中断的进程11. 临界区是_C__。
A.一个缓冲区B.一段数据区C.一段程序D.栈12.进程在处理机上执行,它们的关系是_C__。
A.进程之间无关,系统是封闭的B.进程之间相互依赖相互制约C.进程之间可能有关,也可能无关D.以上都不对13. 在消息缓冲通信中,消息队列是一种__A__资源。
第3章 进程同步与通信2
![第3章 进程同步与通信2](https://img.taocdn.com/s3/m/3cc09f1aa8114431b90dd8c9.png)
进程写管道
进程向管道写数据时,可能有以下两种情况:
管道中有足够的空间存放要写的数据,此时每写 一数据块后核心便自动增加地址项的大小.写操 作完成后,核心修改索引节点中的写指针,并唤 醒所有因该管道空而睡眠等待的读进程. 管道中无足够的空间存放要写入的数据,此时核 心对该索引节点作标记后让写进程睡眠,等待数 据从管道中排出.上述情况的一个例外是,当进 程写的数据量大于管道的容量时,核心将尽可能 多的数据写到管道中,然后使进程睡眠,直到获 得更多的空间.
pipe文件的建立 文件的建立
pipe系统调用建立一个无名管道.其语法格式如下:
int pipe(fdes); int fdes[2];
核心创建一个管道时须完成下述工作:
分配磁盘和内存索引节点. 为读进程和写进程分配文件表项. 分配用户文件描述符.在读进程和写进程的用户文件描述 符表中,分别分配一个表项,并将文件描述符fdes[0]和 fdes[1]分别返回给读进程和写进程.
设置信号的处理方式
系统调用signal用于设置信号的处理方式.其 语法格式如下: void (* func)( ) signal(sig,func) 其中,func为收到软中断信号sig后进程希望 调用函数的地址. 19类信号如表所示.
func的取值情况
func的取值可以分成三种情况:
func=1时,进程对信号sig不予理睬. func=0时,即缺省处理,对大多数软中断信号的 缺省处理是终止进程. func为其他整数值时,它的值是指向信号处理程 序的指针.
管道通信示意图1
初始时,其长度为4,系统将管道看成一个循环 队列.按先进先出的方式读写.
A out B C D in
写入字符E后,管道长度为5
操作系统课后习题答案 3 进程同步与通信
![操作系统课后习题答案 3 进程同步与通信](https://img.taocdn.com/s3/m/05fcd01352ea551811a68705.png)
习题 3 进程同步与通信一、选择题题号1 2 3 4 5 6 7 8 9 10答案A D D C B C A B A A题号11 12答案D C二、综合题1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。
比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。
各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。
为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。
但是,不论是软件算法还是同步机构都应遵循下述准则:①空闲让进。
②忙则等待。
③有限等待。
④让权等待。
2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。
因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。
其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。
如进程阻塞自己并且等待在合适的时间被唤醒。
忙等可以采用更为有效的办法来避免。
例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。
3、答:在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。
先执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。
切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。
生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。
在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。
第3章进程同步与通信-同步
![第3章进程同步与通信-同步](https://img.taocdn.com/s3/m/a9a7543eb7360b4c2e3f6471.png)
互斥问题举例3
某车站售票厅有20个窗口,任何时刻最多可容 纳20名购票者进入,当售票厅中少于20名购票 者时,则厅外的购票者可立即进入,否则需在 厅外等待。若把一个购票者看作一个进程,请 用P、V操作管理这些并发进程,要求如下: ⑴.在主函数中给出信号量的定义和初值。 ⑵.给出一个购票者进程的算法。 ⑶.给出当购票者最多不超过n (设n>20)个时, 信号量可能的变化范围。
-(n-20) ≤ mutex ≤ 20 其物理含义是:
当mutex=20时,表示售票厅内没有购票者进入,20个窗口都是 空闲的,表示可用资源个数;
当mutex=0时,表示售票厅内已经进入了20个购票者,每个窗口 都被分配,没有等待的购票者,可用资源为0; 当mutex=-(n-20)时,表示一共有n个购票者,其中20个购票者 已经进入厅内,分别占有一个窗口,还有n-20个购票者在厅 外等待,绝对值表示等待进程个数。
① sem减1 ② 若sem减1后仍大于1或等于零, 则P返回,进程继续; ③ 若 sem 减 1 后小于零,则该进程 阻塞转等待队列中。
5
信号灯的PV操作
void wait(semaphore s) { s.value = s.value - 1; if (s.value < 0) block(s.queue);
24
1.同步进程举例1-病人就诊
唤 醒 后
门诊医生: 等 待 …… 开化验单; …… 等 等化验结果; 待 …… 继续诊病;
化验员: …… 等化验单; …… 唤 化验; 醒 填写化验结果; 后 ……
化验单
继续诊病
化验结果
对于医生的操作步骤: 有病人时:
① 开化验单(化验单多一个) ② 等待化验结果
操作系统第3章(进程的同步与通信习题与解答)
![操作系统第3章(进程的同步与通信习题与解答)](https://img.taocdn.com/s3/m/78117223227916888586d707.png)
第3章进程的同步与通信习题与解答3.2 例题解析例3.2.1 多道程序系统程序的执行失去了封闭性和再现性,因此多道程序的执行不需要这些特性,这种说法是否正确?解这种说法不正确。
可以想象,如果一个程序在多道程序系统中,在相同的输入的情况下,多次执行所得结果是不同的,有谁还敢使用这个程序?因此,多道程序的执行也需要封闭性和再现性,只不过单道程序系统的封闭性和再现性是先天固有的,多道程序系统的程序执行要想获得封闭性和再现性,需通过程序员的精心设计才能得到。
所使用的方法就是同步和互斥的方法。
例3.2.2 多个进程对信号量S进行了5次 P操作,2次V操作后,现在信号量的值是 -3,与信号量S相关的处于阻塞状态的进程有几个?信号量的初值是多少?解(1) 因为S的当前值是-3,因此因为S处于阻塞状态的进程有3个;(2) 因为每进行一次P(S)操作,S的值都减1,每执行1次V操作S的值加1,故信号量的初值为-3+5-2=0;例3.2.3 如下锁的实现方法存在什么缺点?如何改进?LOCK(X) UNLOCK(X){ {do while X=1 ; X=0;X=1} }解存在的缺点是:当锁是关闭时,采用的是循环等待的方法,这样的等待还是要占用处理机的时间,应该采用阻塞等待的方法。
改进的锁实现如下:LOCK(X) UNLOCK(X){ {if X.value=1 if not empty(X.L) { insert( *, X.L); { P=remove(X.L);Block (*) Wakeup(P) } }else X.Value=1 else X.Value=0} }这里X.value是锁的值,X.L是存放由于锁X而阻塞的进程的队列。
insert( *, X.L)将当前进程的进程号插入到X.L,remove(X.L)是从X.L中移出一个进程号。
例3.2.4 使用多个进程计算Y=F1(X)+F2 (X).解(1) 确定并发和顺序操作在这个问题中,F1(X)和F2 (X)的计算是可以并行处理的,因此F1(X)和F2 (X)可以分别出现在两个进程中。
第3章 进程同步与通信
![第3章 进程同步与通信](https://img.taocdn.com/s3/m/c26b358bbceb19e8b8f6bacf.png)
用软件方法解决互斥问题
——双标志、先修改后检查算法
//进程0 //进程1
flag[0]=true; while (flag[1])
//什么也不做;
flag[1]=true; while (flag[0])
//什么也不做;
临界区;
临界区;
flag[0] =false;
剩余区; ●两进程先后同时作
flag[1] =false ;
void writer() /*写者进程*/ { while (true) { P(Wmutex); write; /* 执行写操作 */ V(Wmutex); } }
哲学家进餐问题
●五个哲学家,他们的生活方式是交替地思考和
进餐。 ●哲学家们共用一张圆桌,围绕着圆桌而坐,在 圆桌上有五个碗和五支筷子,平时哲学家进行思 考,饥饿时拿起其左、右的两支筷子,试图进餐, 进餐完毕又进行思考。 ●这里的问题是哲学家只有拿到靠近他的两支筷 子才能进餐,而拿到两支筷子的条件是他的左、 右邻居此时都没有进餐。
剩余区;
flag[i]=true; ●缺点:保证了不同时进入临界区,但又 可能都进不去。不能保证“有空让进”。
用软件方法解决互斥问题
——先修改、后检查、后修改算法
//进程0 flag[0]=true; turn=1; while (flag[1]) && (turn==1) //什么也不做; 临界区; flag[0] =false ; 剩余区;
第3 章
进程同步与通信
●进程同步与互斥
本章要点
●经典进程同步问题
●AND信号量 ●管程
●进程通信
一些进程在系统中执行时需要与其他进程共享数 据,以完成一项共同的任务,这些进程之间具有 协作关系。 进程之间的协作关系包括互斥、同步和通信。 互斥是指多个进程不能同时使用同一资源。当某 个进程使用某种资源时,其他进程必须等待。 同步是指多个进程中发生的事件存在着某种时序 关系,某些进程的执行必须先于另一些进程。 进程通信是指多个进程之间要传递一定量的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
售票大厅可容纳200
人购票,说明最多允 许200人共享售票大 厅,用信号量empty 表示,初值为200;
售票员一次只能为一 个购票者服务,说明 必须互斥地进行购票 ,用信号量mutex表 示,初值为1。
5. 进程之间的关系如图3-16所示,试用P、V操作描 述它们之间的同步。
A
S2 C
S1 B
S4 F D
答:同步关系;因为一个工序必须在前一个工序完成后才能开始, 他们必须相互协作才能使进程圆满完成。
(4)商品的入库出库。
答:同步关系;因为商品出库可以为入库提供空间。
(5)工人做工与农民种粮。
答:没有制约关系。
4. 设有一个售票大厅,可容纳200人购票。如果厅 内不足200人则允许进入,超过则在厅外等候; 售票员某时只能给一个购票者服务,购票者买完 票后就离开。试问:
(1)购票者之间是同步关系还是互斥关系?
答:互斥关系。只能有一个人获得售票员的服务。
(2)用P、V操作描述购票者的工作过程。
semaphore empty=200; semaphore mutex=1;
void buyer() { P(empty);
P(mutex); 买票; V(mutex); V(empty); }
wait(mutexB); if (countB==0) wait(mutex);
countB++; signal(mutexB);
过桥;
wait(mutexB); countB--;
if (countB==0) signal(mutex); signal(mutexB); }
S3
S5
E
S6 G
semaphore A,B,C,D,E,F,G=0,0,0,0,0,0,0; P1( ){S1;V(A);V(B);} P2( ){P(A);S2;V(C);} P3( ){P(B);S3;V(D);V(E);} P4( ){P(D);S4;V(F);} P5( ){P(E);S5;V(G);} P6( ){P(C);P(F);P(G);S6;}
V(s1);
Read p3( ) {
P(s3);
读取消息;
P(mutex); cout++;
If (cout==3) V(mutex);}
V(s1);
Read p4( ) {
P(s4);
读取消息;
P(mutex); cout++;
If (cout==3) V(mutex);}
V(s1);
1、某制造公司有两个生产部门和一个装配部门,两个生产部 门分别生产笔杆、笔芯两种零件,装配部门的任务是把笔杆 和笔芯组装在一起。两个生产部门每生产一个零件后都要分 别把它们送到装配部门的货架F1、F2上。F1存放笔杆,F2 存放笔芯,F1和F2均可容纳20个零件。装配人员每次从货 架上取一个笔杆和一个笔芯组装成产品。请用P、V操作进行 正确管理,写出伪代码。
生产进程:
Whiቤተ መጻሕፍቲ ባይዱe(1){ 生产一个零件u; if(u=零件甲) {
P( emptyF1 ); P( mutex ); 零件送往货架F1;
V( mutex ); V( fullF1 );} else{ P( emptyF2);
P( mutex ); 零件送往货架F2;
V( mutex ); V( fullF2 );} }
装配进程: While(1){
P(full1 ); P(full2 ); P(mutex);
从货架F1,F2各取一个零件; V(mutex); V(emptyF);2 V(emptyF);1 装配零件;
}
2、请用信号量解决以下的“过独木桥”问题:同一方向的行 人可连续过桥,当某一方向有人过桥时(已在桥上),另一方 向的行人必须等待;当某一方向无人过桥时,另一方向的行人 可以过桥。
p1(); p2();p3();p4(); }
write p1( ) { P(s1);
存入消息; P(mutex);
cout=0; V(mutex); V(s2);V(s3);V(s4); }
Read p2( ) { P(s2);
读取消息; P(mutex); cout++;
If (cout==3) V(mutex); }
分析:独木桥问题是读者—写者问题的变形。 同一方向的行人可以连续过桥,相当于读者可以同时读。我们可以将
不同方向的行人看做是两类不同的读者,同类读者(行人)可以同时读( 过桥);
但不同类的读者(行人)之间必须互斥地读(过桥)。
只有当A方向的第一个行人要过桥时需检测B方向是否有 人在过桥;
只有当A方向的最后一个行人已过桥时需唤醒B方向等待 过桥的行人;
PA() {
wait(mutexA); if (countA==0) wait(mutex);
countA++; signal(mutexA);
过桥;
wait(mutexA); countA--;
if (countA==0) signal(mutex);
signal(mutexA); }
PB() {
●1 ●4
● ——
●5 ●6
1.以下进程之间存在相互制约关系吗?若存在,是什么制约关 系?为什么?
(1)几个同学去图书馆借同一本书。
答:互斥关系;因为他们要借同一本书,不可能同时借到,所以互斥。
(2)篮球比赛中两队同学争抢篮板球。
答:互斥关系;因为争抢同一个篮板球,存在互斥关系。
(3)果汁流水线生产中捣碎、消毒、灌装、装箱等各道工序。
分析:这是生产者-消费者问题的变形。相当于2个生产者(生产部 门)各生产一种产品提供给同一个消费者(装备部门)的同步问题 。需设置2个不同的full信号量(fullF1和fullF2),初值均为0;生 产部门各自等待的信号是货架有空位,即emptyF1 和emptyF2 , 初值均为20;由于货架是临界资源,需设置互斥信号量mutex,初值 为1。
6. 有4个进程P1、P2、P3、P4共享一个缓冲区, 进程P1向缓冲区存入消息,进程P2、P3、P4从 缓冲区中取消息,要求发送者必须等三个进程 都取过本消息后才能发送下条消息。缓冲区内 每次只能容纳一个消息,用P、V操作描述四个 进程存取消息的情况。
semaphore s1=1;semaphore s2,s3,s4=0; int cout=0;semaphore mutex=1; void main() {