第5讲进程管理之经典的同步问题

第5讲进程管理之经典的同步问题

ID:35480203

大小:68.06 KB

页数:4页

时间:2019-03-25

第5讲进程管理之经典的同步问题_第1页
第5讲进程管理之经典的同步问题_第2页
第5讲进程管理之经典的同步问题_第3页
第5讲进程管理之经典的同步问题_第4页
资源描述:

《第5讲进程管理之经典的同步问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第五讲进程管理之经典的同步问题上一讲我们学习了进程同步和信号量,知道了进程同步的愿意和意义。做了一些例子和习题。现在了解几个经典的问题【例1】生产者•消费者问题我们把进程同步问题一般化,可以得到一个抽象的一般模型,也就是牛产者-消费者问题。生产者-消费者问题是-•种同步问题的抽象描述。此问题是一个标准的同步编程问题。1、问题描述描述一组牛产者向一组消费者捉供消息,它们共亨一个有界缓冲池包括N个缓冲区,生产者向其屮(有界缓冲池)投放消息,消费者从中取得消息。不允许消费者进程到一个空缓冲区去取产品;也不允许生产者进程向一个已装满产品且尚未取走的

2、缓冲区中放产品。这句话很重要,说明是是进程同步问题。2、问题说明:计算机系统屮,每个进程都申请使川和释放各种不同类型的资源。这些资源可能是外设、内存及缓冲区这样的硬件资源,也可能是临界区、数据等软件资源。我们把系统屮使用某一类资源的进程成为该资源的消费者。把释放同类资源的进程成为该资源的生产者。举个例子:如计算进程Pc和打印进程Pp就是公用一•个缓冲区。Pc把数据送入缓冲区,Pp从缓冲区取数据打印输出,所以,Pc是数据资源的牛产者,Pp是数据资源的消费者。3、各种情况卜•的牛产者■消费者问题。深入地分析和透彻地理解这个例了,对于全面解决操作

3、系统内的同步、互斥问题将有很大帮助。(1)一个牛产者,一个消费者,公用一个缓冲区。分析:第一步:明确冇哪几个进程,及其Z间关系。现在我们看到题冃中只有一个生产者和一个消费者,明确知道有两个进程,生产者为一个进程,消费者为一个进程。现在来看这两个进程之间关系,首先它们公用一个缓冲区,这个吋候看好像是进程互斥,不着急接着看,这两个进程乂需要协调,因为只有一个放产品的缓冲区,因此生产一-个产品后必须再接着用消费者进程把这个产品拿走消费掉,否则产品没地方放啦。因此这两个进程之间是肓接制约关系,又满足进程同步。现在,我们根据上一讲的原则:即如果进程间

4、即满足互斥又满足同步,那么只考虑同步。因此我们定它们之间关系是:进程同步。第一步最重要,只要分析成功,那题就好做了。第二步:确定信号量及其值。生产者进程和消费者进程轮流执行,各白需要一个私有信号量来标识其是否可以执行和互通是否可以执行的消息。因此需要2个私有信号最。我们定义两个私有信号量:生产者进程的私有信号量empty——表示缓冲区是否为空,初值为1。也就是生产者可用缓冲区(空缓冲区)的数量,初值是1,说明有一个空缓冲区消费者进程的私冇信号量full——表示缓冲区中是否为满,初值为0。也就是消费者可用缓冲区(满缓冲区)的数最,初值是0生产

5、者进程while(TRUE){生产一个产品;P(empty);产品送往Buffer;V(full);说明满缓冲区为0个消费者进程while(True){P(full);从Buffer取出一个产品;V(empty);消费该产品;(1)一个生产者,一个消费者,公川n个环形缓冲区。定义两个同步信号蜃:empty表示缓冲区是否为空,初值为n。full——表示缓冲区中是否为满,初值为0。设缓冲区的编号为1〜n-l,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。消费者进程while(TRUE){P(full)

6、;从buffer(out)中取出产品;out=(out+l)modn;V(empty);消费该产品;生产者进程while(TRUE){生产一个产品;P(empty);产品送往buffer(in);in=(in+l)modn;V(full);}(2)—组生产者,一组消费者,公用n个坏形缓冲区在这个问题中,不仅工产者与消费者之间要同步,而且各个生产者之间、各个消费者之间还必须互斥地访问缓冲区。定义四个信号量:empty—表示缓冲区是否为空,初值为n。full——表示缓冲区屮是否为满,初值为0。mutex1——生产者之间的互斥信号蜃,初值为1。m

7、utcx2消费者Z间的互斥信号量,初值为1。使用的指针,指向下一个可用的缓冲区。牛产者进程while(TRUE){生产一个产品;P(empty);P(mutexl);产品送往buffer(in);in=(in+l)modn;V(mutexl);V(full);设缓冲区的编号为1〜n-l,定义两个指针in和out,分别是生产者进程和消费者进程消费者进程while(TRUE){P(full);P(mutex2);从buffer(out)中取出产品;out=(out+l)modn;V(mutex2);V(empty);消费该产品;}注意:需要注意

8、的是无论在生产者进程中还是在消费者进程中,两个P操作的次序不能颠倒。应先执行同步信号量的P操作,然后再执行互斥信号量的P操作,否则可能造成进程死锁。仔细理解啊。【例2】哲学家进餐

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。