进程同步问题实例

合集下载

OS进程同步(信号量典型题)

OS进程同步(信号量典型题)

例题1(北京大学1999年)有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:(1)一次只能存人一种产品((A或B);(2)一N< A产品数量一B产品数量<M其中,N和M是正整数。

试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。

解答:应先将表达式转换成制约条件,不可在程序中直接使用该表达式将表达式分解为:B产品数量—A产品数量<NA产品数量—B产品数量<M可这样理解:(1)若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,(2)若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。

当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。

由此可见,该问题是一个同步控制问题。

又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。

过程如下:beginmutex:=1;Sa := M-1;Sb := N-1;ParbeginA产品beginrepeatP (Sa);P (mutex);A人库;V (mutex);V (Sb);Until false;End;B产品beginrepeatP (Sb);P (mutex);B人库;V (mutex);V (Sa);Until false;End;rend;例题2(华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别是:司机:售票员:启动车辆上乘客正常行车关车门到站停车售票开车门下乘客在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?并用信号灯的P, V操作实现它们的同步。

进程同步模拟设计——哲学家就餐问题

进程同步模拟设计——哲学家就餐问题

课程设计题目进程同步模拟设计—哲学家就餐学院计算机科学与技术专业计算机科学与技术班级计算机姓名指导教师20011 年 1 月19 日需求分析1.1问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子,即共5只筷子。

每个哲学家的行为是思考和进餐。

为了进餐,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。

思考时则同时将两支筷子放回原处(此图中以叉子代表筷子)规则:只有拿到两只筷子时,哲学家才能吃饭;如果筷子已经在他人手上,则该哲学家必须等到他人吃完之后才能拿到筷子;任何一个哲学家在自己没有拿到两只筷子吃饭之前,决不放下自己手中的筷子。

由此出现的问题:可能出现死锁问题,因为当五个哲学家都饥饿时,都拿着一支筷子,这样就可能五个哲学家都用不上餐1.2问题分析该问题可用记录型信号量或者是AND型信号量解决。

记录型信号量解决:经分析可知,放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用,为了实现对筷子的互斥使用,可以用一个信号量表示一只筷子,由这五个信号量组成信号量数组。

当哲学家饥饿时总是先拿其左边的筷子,成功后,再去拿右边的筷子,又成功后方可就餐。

进餐完,又先放下他左边的筷子,再放下右边筷子。

这个算法可以保证不会有两个相邻的哲学家同时就餐,但有可能引起死锁。

AND型信号量解决:在哲学家就餐过程中,要求每个哲学家先获得两个临界资源后方能就餐,这在本质上就是AND同步问题,故用AND信号量机制可获得最简洁的解法。

1.3解决方法对于死锁问题可采取这样的几种解决方法:(1)至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐,最终总会释放出他所用过的两只筷子,从而可使更多的哲学家进餐;(2)仅当左右两只筷子均可用时,才允许哲学家拿起筷子就餐(3)规定奇数号哲学家先拿起右边筷子,然后再去拿左边筷子,而偶数号哲学家则相反。

(4)把筷子顺序编号 fk0, fk1, fk2, fk3, fk4,给每个哲学家分配筷子时,必须依从小号到大号(或者相反顺序)进行。

经典进程同步问题

经典进程同步问题
19
一、利用记录型信号量
解决哲学家进餐问题
假设每一位哲学家拿筷子的方法都是:先 拿起左边的筷子,再拿起右边的筷子,则第i 位哲学家的活动可描述为:
20
第i位哲学家的活动可描述为: repeat wait(chopstick[i]); wait(chopstick[i+1] mod 5); …. eat; …. signal(chopstick[i]); signal(chopstick[i+1] mod 5); …. think; until false;
full:=full - 1; if full <0 then block; mutex:=mutex-1; if mutex<0 then block; mutex:=mutex+1; if mutex<=0 then wakeup; empty:=empty+1; if empty<=0 then wakeup;
9
Wait操作不能颠倒!! P:wait(empty) wait(mutex)
C:wait(full) wait(mutex)
如果颠倒 P:wait(mutex) mutexl.value=0 wait(empty) 如果此时缓冲池满empty=-1,P阻塞 C:wait(mutex) mutex.value=-1, C阻塞 wait(full) P阻塞在empty队列中,等待一个空缓冲 C阻塞在mutex队列中,等待公共缓冲池访问权
6
consumer://消费者进程 begin repeat wait(full); wait(mutex); nextc:=buffer[out]; out∶=(out+1) mod n; signal(mutex); signal(empty); 消费这件产品; until false; end

第10课进程间的制约关系(经典同步问题)

第10课进程间的制约关系(经典同步问题)


顾客程序 customer() { V(custs); //释放顾客 P(barbs); //申请理发师 get_haircut(); }
“理发店”问题---P、V信号量解法

设置同步信号量
custs:记录等待理发的顾客数(不包括正在理
发的顾客),初值为0; barbs:正在等待为顾客理发的理发师数,初值 为k;
为防止死锁发生可采取的措施:

最多允许4个哲学家同时坐在桌子周围 仅当一个哲学家左右两边的筷子都可用时, 才允许他拿筷子 给所有哲学家编号,奇数号的哲学家必须首 先拿左边的筷子,偶数号的哲学家则反之
哲学家就餐问题—解法2
0
设置5个互斥信号量: chopstick[i] (0≤i≤4) //对应筷子 初值=1 设置信号量seat // 代表了座位数 初始值=4;

设置变量waiting,它的初值为0。
记录等待理发的顾客数
“理发店”问题---P、V信号量解法

理发师程序 barber() { P(custs); cut_hair(); V(barbs); }

顾客程序 customer() { if(waiting<n) { waiting=waiting+1; V(custs); P(barbs); get_haircut(); } }
第i个哲学家的“思考-就餐-思考”过程可描述为:
philosopher(i) { while(TRUE) { think(); P(chopstick[i]); P(chopstick[(i+1) mod 5)]; eat(); V(chopstick[i]); V(chopstick[(i+1) mod 5)]; } }

进程同步习题全

进程同步习题全
进程管理
【例】一个buffer,一个生产者,一个消费者,生产者 只生产一个东西,消费者只进行一次消费,即:生 产者只进行一次putdata操作,消费者只进行一次 getdata操作。
进程管理
【解答】
设置信号量full,表示buffer是否有数据,初值为0
生产者
消费者
putdata
P(full)
V(full)
getEBuffer()返回空的buffer号 getEBuffer()
return (pbuffer+1)mod n getDBuffer()返回有数据的buffer号 getDBuffer()
return (pdata+1)mod n
进程管理
semaphore mutex,empty,full=1,n,0
getdata
进程管理
【例】一个buffer,一个生产者,一个消费者,生产 者不断进行putdata操作,消费者不断进行 getdata操作,即生产者不断生产,消费者不断 消费。
【解答】buffer为空时,才能进行putdata操作, 只有buffer有数据时,才能进行getdata操作
信号量 full:是否有数据初值为0 empty:是否为空,初值为1
integer pbuff,pdata=0,0
生产者i
消费者j
repeat
repeat
P(empty)
P(full)
P(mutex)
P(mutex)
in=getEBuffer()
out=getDBuffer()
V(mutex)
V(mutex)
putdata(in)
getdata(out)
V(full)

计算机操作系统进程同步算法习题选

计算机操作系统进程同步算法习题选

s
t
解:
设置四个信号量Sin=1,Sout=0,Tin=1,Tout=0; get: while(1) { wait(Sin); 将数放入S; signal (Sout); } copy: while(1) { wait (Sout); wait (Tin); 将数从S取出放入T; signal (Tout); signal (Sin); } put: while(1) { wait (Tout); 将数从T取走; signal(Tin); }

A1: while (1) { wait(Sin[1]); wait(Sin[2]); 将数据放入缓冲区 signal(Sout[1]); signal(Sout[2]); }
Bi: while (1) { wait(Sout[i]); 从缓冲区取数 signal(Sin[i]); }
向目标前进一步:
司机进程: while(1) { 启动车辆
正常驾驶 到站停车 }…
售票 员 进程 : while(1) { 关门
售票
}…
开门
分析:
为保证车辆行驶安全,售票员必须关好车门, 然后通知司机启动车辆,在行驶过程中售票员不 能打开车门,待车到站停稳后,司机通知售票员 才能打开车门,如此不断重复。为此,须设置两 个信号量S1,S2用来控制司机和售票员的行为, 初值都为0。
解:
算法如下: 司机进程: while(1) { wait(S1) 启动车辆 正常驾驶 到站停车 signal(S2) }… 售票员进 程: while(1) { 关门 signal(S1)
售票
wait(S2) 开门 }…
【例题2】
1.用wait、signal操作解决下图之同步问题 提示:分别考虑对缓冲区S和T的同步,再 合并考虑 get copy put

进程同步经典问题

进程同步经典问题
in1:=in2:=out1:=out2:=0;
cobegin
{
process producer A
{ repeat
P(empty1);
P(sa);
P(mutex);
buffer1[in1]:=A零件;
in1:=(in1+1) mod m;
V(mutex);
V(sb);
V(full1);
untile false;
B1empty缓冲区B1空,初值1
B2full缓冲区B2满,初值0
B2empty缓冲区B2空,初值1
3、有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试用PV操作描述读者进程之间的同步关系。
算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。
}பைடு நூலகம்
process producerB
{ repeat
P(empty2);
P(sb);
P(mutex);
Buffer2[in2]:=B零件;
in2:=(in2+1) mod m;
V(mutex);
V(sa);
V(full2);
untile false;
}
process take
{ repeat
P(full1);
}
}
coend.
2、设有输入进程INPUT,缓冲区B1接纳输入内容。进程MAKER对B1中的内容加工后移送到B2。进程OUTPUT负责从B2中取出内容进行打印。设有一个无穷序列供INPUT输入,B1与B2的大小相同。请用PV过程写出三个进程同步工作的过程。

进程同步模拟设计--吃水果问题

进程同步模拟设计--吃水果问题

附件1:学号:012课程设计题目进程同步模拟设计--吃水果问题学院计算机科学与技术学院专业计算机科学与技术专业班级计算机姓名指导教师2011 年01 月19 日课程设计任务书学生:专业班级:指导教师:作单位:计算机科学与技术学院题目: 进程同步模拟设计——吃水果问题初始条件:1.预备容:阅读操作系统的进程管理章节容,对进程的同步和互斥,以及信号量机制度有深入的理解。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟吃水果的同步模型:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。

爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。

2.设计报告容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日进程同步模拟设计——吃水果问题1需求分析1.1吃水果问题的描述桌子上有一只盘子,最多可容纳两个水果,每次只能放入或者取出一个水果。

爸爸专门向盘子中放苹果,妈妈专门向盘子中放橘子,两个儿子专门等待吃盘子中的橘子,两个女儿专门等吃盘子中的苹果。

1.2问题的转换这是进程同步问题的模拟,可以把向盘子放或取水果的每一个过程可以转为一个进程的操作,这些进程是互斥的,同时也存在一定的同步关系。

unix系统中同步问题和互斥问题例子

unix系统中同步问题和互斥问题例子

unix系统中同步问题和互斥问题例子同步问题和互斥问题是在多进程或者多线程编程中经常遇到的共享资源管理问题。

在Unix系统中,同步问题和互斥问题具体体现在进程间共享的文件、共享内存和信号量等资源的访问过程中。

一、同步问题同步问题指的是多个进程或线程需要按照一定的次序执行,以实现特定的功能或保证数据的一致性。

以下是一些在Unix系统中常见的同步问题例子:1.多进程文件写入在多个进程同时对同一个文件进行写入操作时,可能会出现数据混乱的问题。

例如,两个进程同时向同一个文件写入一段数据,如果操作不加以控制,可能会导致两个进程的数据交错。

为了解决这一问题,可以使用文件锁(flock)或者互斥锁(mutex)来实现对文件的互斥访问,保证每个进程对文件的独占写入操作。

2.生产者和消费者问题生产者和消费者问题是一种经典的同步问题,常用于描述多个进程或线程之间的协作关系。

在Unix系统中,可以通过共享内存、信号量等机制来实现生产者和消费者之间的同步。

例如,一个进程负责生产数据,另一个进程负责消耗数据,通过信号量来控制两个进程之间的同步,保证数据的正确交换和处理。

3.进程间通信在Unix系统中,进程间通信(IPC)是一种常见的同步问题。

例如,两个进程需要完成某个任务,但是任务的执行需要依赖于另一个进程的结果。

可以通过管道、套接字或者共享内存等方式来实现进程间的通信,保证同步和协作的顺利进行。

二、互斥问题互斥问题是指多个进程或线程对共享资源的访问需要互斥进行,以避免数据竞争和冲突。

以下是一些在Unix系统中常见的互斥问题例子:1.临界区问题临界区问题是指多个进程或线程对共享资源的访问需要互斥进行。

在Unix系统中,可以使用互斥锁(mutex)来实现对临界区的互斥访问。

例如,多个线程对共享变量进行读写操作,通过互斥锁的加锁和解锁操作来保证每次只有一个线程能够访问临界区,避免数据竞争和冲突。

2.信号量问题信号量是一种常见的同步机制,可用于解决多个进程或线程对共享资源的互斥访问问题。

操作系统实验报告——进程同步与互斥

操作系统实验报告——进程同步与互斥

操作系统实验报告——进程同步与互斥一、实验内容本实验主要内容是通过编写程序来实现进程的同步与互斥。

具体来说,是通过使用信号量来实现不同进程之间的同步和互斥。

我们将编写两个进程,一个进程负责打印奇数,另一个进程负责打印偶数,两个进程交替打印,要求打印的数字从1开始,直到100结束。

二、实验原理进程的同步是指多个进程之间按照一定的顺序执行,进程之间互相等待的关系。

而进程的互斥是指多个进程竞争同一个资源,需要通过其中一种方式来避免同时访问共享资源,以免造成数据错乱。

在本实验中,我们使用信号量来实现进程的同步与互斥。

信号量是一个计数器,用于表示一些共享资源的可用数量。

进程在访问共享资源时,需要先对信号量进行操作,当信号量大于0时,表示资源可用,进程可以访问;当信号量等于0时,表示资源不可用,进程需要等待。

进程同步的实现可以通过信号量的P操作与V操作来完成。

P操作用于申请资源,当资源可用时,将计数器减一,并进入临界区;V操作用于释放资源,当资源使用完毕时,将计数器加一,使等待资源的进程能够申请。

进程互斥的实现可以通过信号量的P操作与V操作结合临界区来完成。

当多个进程需要访问共享资源时,需要先进行P操作,进入临界区,访问完毕后进行V操作,离开临界区。

三、实验步骤1.首先,我们需要创建两个进程,一个进程负责打印奇数,另一个进程负责打印偶数。

2. 然后,我们创建一个共享变量count,用来记录打印的数字。

3. 接着,我们创建两个信号量odd和even,用来控制进程的同步与互斥。

odd信号量初始值为1,表示打印奇数的进程可以访问;even信号量初始值为0,表示打印偶数的进程需要等待。

4.编写奇数打印进程的代码,首先进行P操作,判断奇数信号量是否大于0,如果大于0,表示可以打印奇数。

5. 如果可以打印奇数,将count加一,并输出当前的奇数,然后进行V操作,释放偶数打印进程的等待。

6.同样的,编写偶数打印进程的代码,首先进行P操作,判断偶数信号量是否大于0,如果大于0,表示可以打印偶数。

4.10经典进程互斥同步问题:哲学家进餐问题

4.10经典进程互斥同步问题:哲学家进餐问题

4.10经典进程互斥同步问题:哲学家进餐问题(the dining philosophers problem)问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支,哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。

要考虑的问题是如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子。

在这里,哲学家的生活规律是:Repeat思考;取fork[i];取fork[(i+1) mod 5];进食;放fork[i];放fork[(i+1) mod 5];Until false;实现方法:一个信号量表示一根筷子,五个信号量构成信号量数组chop[5],所有信号量初始值为1。

第i个哲学家的进餐过程为:思考问题P(chop[i]);P(chop(i+1) mod 5]);进餐V(chop[i]);V(chop[(i+1) mod 5]);该算法可保证两个相邻的哲学家不能同时进餐,但不能防止五位哲学家同时拿起各自左边的筷子、又试图拿起右边的筷子,这会引起死锁。

这里给出可以防止死锁发生的一种解决方案:Semaphore fork[5] = {1};Semaphore room = 4;Void philospher (int i) {while (true) {thinking();P( room );P(fork[i]);P(fork[(i+1) mod 5])eating();V(fork[i]);V(fork[(i+1) mod 5])V(room); }。

经典进程同步互斥问题集

经典进程同步互斥问题集

【例1】有三个进程PA 、PB 和PC 协作解决文件打印问题:PA 将文件记录从磁盘读入内存的缓冲区1中,每执行一次读一个记录;PB 将缓冲区1中的内容复制到缓冲区2中,每执行一次复制一个记录;PC 将缓冲区2中的内容打印出来,每执行一次打印一个记录。

缓冲区的大小与记录大小一样。

请用信号量来保证文件的正确打印。

答:该文件打印过程的同步算法可描述如下:【例2】进程A1、A2、…An1通过m 个缓冲区向进程B1、B2、…Bn2不断地发送消息。

发送和接收工作遵循如下规则:(1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样。

(2)对于每一个消息,B1、B2、…Bn2都需各接收一次,读入自己的数据区内。

(3)m 个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待。

试用wait,signal 操作描述它们的同步关系。

分析:本题是生产者-消费者问题的一个变形。

由于每个缓冲区都只写一次,但要读n2次,故我们可将每个缓冲区看成是由n2格组成的。

只有当某个缓冲区的n2格都空闲时,才允许写入,而且写一次缓冲区相当于将该缓冲区的n2格全部写一遍。

Bj 进程从缓冲中取消息时,它只取相应缓冲的第j 格。

由于每个Bj 取消息的速度不同,故需为它们分别设置指针outj ,用来指示从哪个缓冲区的第j 格中取消息。

答:我们将每个缓冲区看成是由n2格组成的,可为本题设置下列信号量:mutex,初值为1,用来实现对缓冲区的互斥访问;empty[i](i=1,…,n2),初值均为m ,每个empty[i]对应于缓冲池的第i 格中的所有空闲缓冲区;full[i](i=1,…,n2),初值均为0,对应缓冲池第i 格中装有消息的缓冲区。

另外还需要提供整型变量in 用来指示将消息放入哪个缓冲区,outj(j=1,…,n2)用来指示Bj 从哪个缓冲区中取消息,这些变量的初值均为0。

Ai,Bj 的算法描述如下:【例3】设有两个生产者进程A 、B 和一个销售进程C ,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售者销售;销售者每次循环从仓库中取出一个产品进行销售。

进程同步问题实例PPT课件

进程同步问题实例PPT课件

REPORT
CATALOG
DATE
ANALYSIS
SUMMAR Y
03
进程同步问题的解决方 案
使用信号量解决生产者-消费者问题
生产者-消费者问题描述
生产者和消费者共享一个缓冲区,生产者将数据放入缓冲区,消费者从缓冲区取出数据。 当缓冲区满时,生产者需要等待消费者消费数据;当缓冲区为空时,消费者需要等待生
SUMMAR Y
05
进程同步问题的应用场 景
并行计算中的进程同步问题
01
任务划分
资源共享
02
03
结果整合
在并行计算中,进程需要同步以 划分任务和确定任务执行的顺序。
进程在并行计算中需要同步以避 免资源竞争和死锁,确保资源使 用的正确性和安全性。
并行计算中的进程需要同步以整 合各个进程的计算结果,确保最 终结果的正确性。
使用并发编程语言提供的机制实现进程同步
通道(Channel)
事件(Event)
信号(Signal)
通道是一种用于进程间通信的机制,可以用 于实现同步操作。通过通道,一个进程可以 将消息发送给另一个进程,接收消息的进程 在接收到消息后可以继续执行后续操作。
事件是一种特殊的信号量,用于实现 进程间的同步。一个进程可以等待某 个事件的发生,当事件发生时,该进 程会被唤醒并继续执行后续操作。
产者生产数据。
信号量解决思路
使用两个信号量,一个表示缓冲区的空闲数量,一个表示缓冲区的总容量。当生产者生产数据时,需要先获 取空闲缓冲区的信号量,然后将数据放入缓冲区并释放一个空闲缓冲区的信号量;当消费者消费数据时,需
要先获取一个空闲缓冲区的信号量,然后从缓冲区取出数据并释放一个总容量的信号量。

进程同步例题

进程同步例题

例1:医生进程Doctor,化验进程Lab共同完成病人的诊治工作,医生开化验单,化验进程进行化验,医生根据化验结果进行诊断。

请用记录型信号量和P、V 操作实现两进程的同步。

例2 吃水果问题
例3、某集装箱仓库共有100个仓位,用同一辆吊车负责集装箱的吊进和吊出。

现有一批集装箱运来进仓,另有货主不断前来提货(按仓位顺序进出),设进仓用过程PUTIN表示,出仓用过程GETOUT表示,请用P、V操作协调上述工作。

例4、有一独木桥,每次只允许一人过桥,现在桥的南北两端随时有人要过桥(PASS),为保证安全,请用P、V操作解决如下问题:
1)只要桥上无人则允许任一方的一人过桥,桥上有人则等待。

2)两边的人交替过桥。

即某一方一人过桥后要让另一方的一个人过桥,桥上
有人则等待。

例5、有三个进程PA、PB、PC合作解决文件打印问题:PA将文件记录从磁盘读入主存的缓冲区1,每执行一次读一个记录;PB将缓冲区1的内容复制到缓冲区2,每执行一次复制一个记录;PC将缓冲区2的内容打印出来,每执行一次打印一个记录。

缓冲区的大小等于一个记录的大小。

请用P、V操作协调三个进程的工作。

例6 少林寺问题。

同步与互斥实例

同步与互斥实例
(1)进程A专门拣黑子,进程B专门拣白子;
(2)每个进程每次只拣一个子,当一个进程在 拣子时不允许另一进程去拣子;
(3)当一个进程拣了一个子(黑或白)以后, 必让另一个进程拣一个子(黑或白) 。
请用P、V操作管理两个并发进程,使其能正 确实现上述功能。
Var S1, S2: semaphore:=1,0;
理发师问题理发师问题l理发店里有一位理发师一把理发椅和n把供等候理发的顾客坐的椅子l如果没有顾客理发师便在理发椅上睡觉l一个顾客到来时它必须叫醒理发师l如果理发师
进程同步与互斥实例
同步实例
1.经典的生产者─消费者问题
生产者
消费者
1.经典的生产者─消费者问题
var B : integer;
empty:semaphore; /* 可以使用的空缓冲区数 */
process 小和尚: begin repeat P(empty); P(count); P(mutex1); 从井中取水; V(mutex1); P(mutex2); 送水入水缸; V(mutex2); V(count); V(full); until false;
end
Var mutex1, mutex2, empty, full, count: semaphore;
④在每个进程中用于实现互斥的PV操作必须成对出现;用于实现 同步的PV操作也必须成对出现,但可以分别出现在不同的进程中; 在某个进程中如果同时存在互斥与同步的P操作,则其顺序不能颠 倒,必须先执行对同步信号量的P操作,再执行对互斥信号量的P 操作,但V操作的顺序没有严格要求。
同步与互斥的解题步骤
full:semaphore;
/* 缓冲区内可以使用的产品数 */
empty := 1;

进程同步与互斥问题

进程同步与互斥问题

p1() {
while(1) {
洗桔子; P(m1) ; 放桔子; V(m3) ; } }
p2() {
while(1) {
洗苹果 ; P(m1); 放苹果; V(m2); } }
p3() {
while(1) {
P(m2) ; 取苹果; V(m1); 吃苹果;
} }
p4() {
while(1) {
P(m3) ; 取桔子; V(m1); 吃桔子;
p3() {
while(1) {
P(m2) ; 取水果; V(m1); 吃水果;
} }
进程的同步
分析:父母亲先放水果,儿子再取水果吃;父亲与儿子,母 亲与儿子是一个同步关系,父亲与母亲要竞争空盘子。
解法二:设信号量m1表示父亲或母亲放完水果,信号量m2 表示儿子取完水果。
int m1=0,m2=1; cobegin
放水果; }
吃桔子; }
吃苹果; }
进程的同步
分析:父亲先放水果,儿子女儿再吃水果;儿子女儿取完水 果,父亲再放水果,这三个进程是一个同步关系。
解法一:设信号量m1表示父亲能否放水果,m2表示儿子能 否取桔子,m3表示女儿能否取苹果。
int m1=1,m2=0,m3=0;
cobegin
p1() // p2() // p3()
} }
例3-4:吃水果。 父亲 母亲
进程的同步
女儿 桔 苹0子 果
儿子
父亲 P1 while(true) {
洗桔子;
母亲 P2 while (true) {
洗苹果;
放桔子; }
放苹果; }
儿子 P3 while(true) {
取苹果;

武汉理工大学进程同步模拟设计-——吃水果问题

武汉理工大学进程同步模拟设计-——吃水果问题

武汉理⼯⼤学进程同步模拟设计-——吃⽔果问题进程同步模拟设计——吃⽔果问题1需求分析1.1吃⽔果问题的描述桌⼦上有⼀只盘⼦,最多可容纳两个⽔果,每次只能放⼊或者取出⼀个⽔果。

爸爸专门向盘⼦中放苹果,妈妈专门向盘⼦中放橘⼦,两个⼉⼦专门等待吃盘⼦中的橘⼦,两个⼥⼉专门等吃盘⼦中的苹果。

1.2问题的转换这是进程同步问题的模拟,可以把向盘⼦放或取⽔果的每⼀个过程可以转为⼀个进程的操作,这些进程是互斥的,同时也存在⼀定的同步关系。

通过编程实践时,实际是随机的调⽤⼈⼀个进程的操作,⽽这些进程的操作相当于程序中的函数调⽤。

⽽计算机在执⾏时每⼀个时刻只能执⾏⼀个操作,这就默认了互斥。

同步的模拟可以类似于函数调⽤时的前提关系即先决条件。

这样进程同步模拟就完全可以通过函数的调⽤来实现。

具体的每⼀个操作的对应的函数的关系:爸爸向盘⼦中放⼀个苹果:Father()妈妈向盘⼦中放⼀个橘⼦:Mother()⼉⼦1从盘⼦取⼀个橘⼦:Son1()⼉⼦2从盘⼦取⼀个橘⼦:Son2()⼥⼉1从盘⼦取⼀个苹果:Daugther1()⼉⼦1从盘⼦取⼀个苹果:Daugther2()2功能设计2.1 数据结构(1)⽤⼀个整型变量Plate_Size表⽰盘⼦,初始值为0,当放⽔果时Plate_Size 加1,取⽔果时Plate_Size减1。

变量Plate_Size 的最⼤值为2,当为2时表⽰盘⼦已经满,此时若进⾏放⽔果操作,放⽔果将处于等待状态;为0时表⽰盘⼦为空,此时若进⾏取⽔果操作,取⽔果操作将处于等待状态。

(2)整型变量orange和apple分别表⽰盘⼦中的橘⼦和苹果数⽬,初始都为0,Plate_Size=apple+orange。

(3)⽤6个bool型的变量Father_lag,Mother_lag,Son1_lag,Son2_lag,Daughter1_lag,Daughter2_lag表⽰六个进程是否处于等待状态。

处于等待时,变量值为true。

计算机操作系统复习题目(2)

计算机操作系统复习题目(2)

第二章进程管理(三)进程同步5、经典同步问题1、生产者—消费者问题生产者消费者问题是一种同步问题的抽象描述。

计算机系统中的每个进程都可以消费(使用)或生产(释放)某类资源。

这些资源可以是硬件资源,也可以是软件资源。

当某一进程使用某一资源时,可以看作是消费,称该进程为消费者。

而当某一进程释放某一资源时,它就相当于生产者。

问题1:设某计算进程CP和打印进程IOP共用一个单缓冲区,CP进程负责不断地计算数据并送入缓冲区T中,IOP进程负责不断地从缓冲区T中取出数据去打印。

通过分析可知,CP、IOP必须遵守以下同步规则:(1)当CP进程把计算结果送入缓冲区时,IOP进程才能从缓冲区中取出结果去打印;(2)当IOP进程把缓冲区中的数据取出打印后,CP进程才能把下一个计算结果送入缓冲区.(3)为此设有两个信号量Sa=0,Sb=1,Sa表示缓冲区中有无数据,Sb表示缓冲区中有无空位置。

两个进程的同步可以描述如下:问题2:一组生产者通过具有N个缓冲区的共享缓冲池向一组消费者提供数据。

问题分析”:为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用empty表示,初值为有界缓冲区的大小N,另一个说明已用缓冲区的数目,用full表示,初值为0。

由于在此问题中有M个生产者和N个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。

由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为1。

问题的解:注意:在每个程序中用于实现互斥的P(mutex)和V(mutex)必须成对的出现对资源信号量empty和full的P和V操作,同样需要成对地出现,但它们分别处于不同的程序中。

在每个程序中的多个P操作顺序不能颠倒。

先同步后互斥。

生产者进程缓冲池消费者进程1┇┇i┇┇2、哲学家就餐问题有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。

进程同步典型例题(操作系统)

进程同步典型例题(操作系统)

进程同步练习题1.在公共汽车上,司机和售票员的工作流程如图所示。

为保证乘客的安全,司机和售票员应密切配合协调工作。

请用信号量来实现司机与售票员之间的同步。

司机售票员图司机和售票员工作流程图①约束:怎么密切配合协调工作才能保证安全呢?a)关车门之后再启动车辆;利用前驱图解释b)到站停车之后再开车门;②根据约束定义信号量;关车门和启动车辆需要一个信号量进行同步S1;到站停车和开车门之间需要一个信号量进行同步S2;③建立几个进程呢?a)为司机建立一个进程Driver;b)为售票员建立一个进程Conductor;Driver:Repeat启动车辆;正常行驶;到站停车;Until false;Conductor:Repeat关车门;售票;开车门;Until false;④加入同步关系:Driver:RepeatWait (s1);启动车辆;正常行驶;到站停车;Signal(s2)Until false;Conductor:Repeat关车门;Signal(s1);售票;Wait(s2)开车门;Until false;main(){Driver();Conductor ();}2.桌子上有一只盘子,盘子中只能放一只水果。

爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。

用PV操作实现他们之间的同步机制。

分析:①约束:a)爸爸和妈妈竞争盘子,往盘子放水果,爸爸在放时,妈妈等待,或者相反;b)爸爸和女儿要同步,即爸爸放完苹果之后通知女儿来吃;同时女儿吃完之后要通知盘子可用;c)妈妈和儿子要同步,即妈妈放完橘子之后通知儿子来吃;同时儿子吃完之后要通知盘子可用;②经上述分析可知:需要3个信号量:S1表示临界资源盘子,初值1;爸爸和女儿需要一个信号量进行同步S2=0 妈妈和儿子需要一个信号量进行同步S3=0;③建立进程?爸爸:妈妈:女儿:儿子:取一个苹果;取一个橘子;从盘子取一个苹果;从盘子取一个橘子;放入盘子;放入盘子吃苹果;吃橘子;Until false; Until false; Until false; Until false;④加入同步关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4
读者-作者问题
一个数据对象可以为多个并发进程所共享。其 中有的进程可能只需要读共享对象的内容,而 其他进程可能要更新共享对象(即读和写)。
将只对读感兴趣的进程称为读者 其他则称为作者
第一读者-作者问题
仅当无读者等待时,才允许写者执行
第二读者-作者问题
在读者与作者同时申请资源的时候,写者优先。
8
2 缓冲区问题(生产者-消费者问题)
三个进程P1、P2、P3 互斥使用一个包含N(N>0)个单 元的缓冲区。P1 每次用produce()生成一个正整数并 用put()送入缓冲区某一个空单元中;P2 每次用 getodd()从该缓冲区中取出一个奇数并用countodd() 统计奇数个数;P3 每次用geteven()从该缓冲区中取 出一个偶数并用counteven()统计偶数个数。请用信号 量机制实现这三个进程的同步与互斥活动,并说明所 定义的信号量的含义。要求用伪代码描述。
的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再放两样东西 (随机地)在桌面上,然后唤醒另一个吸烟者。 试为吸烟者和供应者用同步法解决问题。
14
4 吸烟者问题
供应者需要3个进程 X:提供tobacco和match Y:提供match和wrapper Z:提供wrapper和tobacco
3个吸烟者进程 A:只有tobacco B:只有match C:只有wrapper
9
缓冲区问题求解
(1) 缓冲区是一互斥资源,因此设互斥信号量mutex。 (2) 同步问题:P1、P2 因为奇数的放置与取用而同步,设同步信号量odd;P1、
P3 因为偶数的放置于取用而同步,设同步信号量even;P1、P2、P3 因为共享 缓冲区,设同步信号量empty。
semaphore mutex = 1,odd = 0,even = 0,empty = N;
P(Sa);
从plate中取苹果;
V(S); 吃苹mutex);
getodd();
V(mutex);V(empty);
countodd();
}
Process P3:
while(true){
P(even); P(mutex);
geteven();
V(mutex);V(empty);
counteven();
}
11
3 嗜睡理发师问题
signal(wrt); signal(mutex);
6
哲学家就餐问题
7
共享数据 semaphore chopstick[5];
哲学家i结构 do { wait(chopstick[i]); wait(chopstick[(I + 1) % 5]); … eat … signal(chopstick[i]); signal(chopstick[(I + 1) % 5]); … think … } while (1);
Barber进程: while(TRUE){
P(cutomers); //若无顾客,理发师睡眠 P(mutex); //进程互斥,要求顾客等候 waiting = waiting – 1;//等候顾客数少一个 V(barbers); //理发师去为一个顾客理发 V(mutex); //开放临界区 cut-hair( ); //正在理发(非临界区操作)
13
4 吸烟者问题
三个吸烟者在一间房间内,还有一个香烟供应者。 (1)为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火
柴。 (2)供应者有丰富的货物提供。 (3)三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三
个有自己的火柴。 (4)供应者将两样东西放在桌子上,允许一个吸烟者进行对健康不利
则 一次只能有X,Y,Z中的一个执行(供应);X,Y,Z只能在 消耗完一个后才能供应下一个
15
4 吸烟者问题
Semaphore tobacco=0, match=0, wrapper=0, mutex=1;
Process X: P(mutex); V(tobacco); V(match);
Process Y: P(mutex); V(match); V(wrapper);
5
第一读者-作者问题
wait(wrt); … writing is performed … signal(wrt);
wait(mutex); readcount ++; if (readcount == 1)
wait(wrt); signal(mutex); … reading is performed … wait(mutex); readcount --; if (readcount == 0)
一个理发店里有一个理发师,一张理发椅子, 多张等候的椅子,当没有顾客的时候,理发师 就睡觉。当一个顾客来到店里时,如果理发师 在睡觉,则叫醒理发师;否则便坐着等;如果 等待的椅子都满了就离开。
12
3 嗜睡理发师问题
int waiting=0 ; //等候理发的顾客数 int chairs=5; //为顾客准备的椅子数 semaphore customers=0, barbers=0,mutex=1;
}
Customer进程: P(mutex); //进入临界区 if (waiting<chairs){
waiting = waiting+1; //等候顾客数加1 V(customers); //必要的话唤醒理发师 V(mutex); //开放临界区 P(barbers); //无理发师, 顾客坐着养神 get-haircut( ); //一个顾客坐下等候服务 } else V(mutex); //人满了,上自习去!
操作系统概念
进程同步问题实例
本章主要内容
经典同步问题 生产者-消费者问题:缓冲区问题 嗜睡理发师问题 吸烟者问题 吃水果问题
2
1 经典同步问题
有限缓冲问题 读者-作者问题 哲学家进餐问题
3
有限缓冲问题(生产者-消费者问题)
do { … produce an item in nextp … wait(empty); wait(mutex); … add nextp to buffer … signal(mutex); signal(full);
Process Z: P(mutex); V(wrapper); V(tobacco);
Process A: P(match); P(wrapper); Smoke; V(mutex);
Process B: P(wrapper); P(tobacco); Smoke; V(mutex);
Process C: P(tobacco); P(match); Smoke; V(mutex);
Process P1:
while(true){
number = produce();
P(empty);P(mutex);
put();
V(mutex);
If number % 2 == 0
V(even);
else
V(odd);
}
10
缓冲区问题求解
Process P2:
while(true){
Semaphor S=1, So=Sa=0;
Process father: Process mother: Process son:
Process daughter:
P(S);
把苹果放入plate;
V(So);
P(S);
把橘子放入plate;
V(Sa);
P(So);
从plate中取橘子;
V(S); 吃橘子;
} while (1);
do { wait(full); wait(mutex); … remove an item from buffer to nextc … signal(mutex); signal(empty); … consume the item in nextc …
} while (1);
16
5 吃水果问题
桌上有一空盘,允许存放一只水果。爸爸向盘中放苹 果,妈妈向盘中放桔子,儿子专等吃盘中的桔子,女 儿专等吃盘中的苹果。规定当盘空时一次只能放一只 水果供吃者取用,请用P、V原语实现爸爸、妈妈、儿 子、女儿三个并发进程的同步。
爸爸 儿子
plate
妈妈 女儿
17
5 吃水果问题
应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值 为1;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘 中是否有苹果,其初值为0。同步描述如下:
相关文档
最新文档