进程管理之经典的同步问题.doc

进程管理之经典的同步问题.doc

ID:52714853

大小:35.50 KB

页数:5页

时间:2020-03-29

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

《进程管理之经典的同步问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、者进程向一个已装满产品且尚未取走的缓冲区中放产品。这句话很重要,说明是是进程同步问题。p1EanqFDPw2、问题说明:计算机系统中,每个进程都申请使用和释放各种不同类型的资源。这些资源可能是外设、内存及缓冲区这样的硬件资源,也可能是临界区、数据等软件资源。我们把系统中使用某一类资源的进程成为该资源的消费者。把释放同类资源的进程成为该资源的生产者。DXDiTa9E3d举个例子:如计算进程Pc和打印进程Pp就是公用一个缓冲区。Pc把数据送入缓冲区,Pp从缓冲区取数据打印输出,所以,Pc是数据资源的生产者,Pp是数据资源的消费者

3、。RTCrpUDGiT3、各种情况下的生产者-消费者问题。深入地分析和透彻地理解这个例子,对于全面解决操作系统内的同步、互斥问题将有很大帮助。(1)一个生产者,一个消费者,公用一个缓冲区。分析:第一步:明确有哪几个进程,及其之间关系。现在我们看到题目中只有一个生产者和一个消费者,明确知道有两个进程,生产者为一个进程,消费者为一个进程。现在来看这两个进程之间关系,首先它们公用一个缓冲区,这个时候看好像是进程互斥,不着急接着看,这两个进程又需要协调,因为只有一个放产品的缓冲区,因此生产一个产品后必须再接着用消费者进程把这个产品拿

4、走消费掉,否则产品没地方放啦。因此这两个进程之间是直接制约关系,又满足进程同步。现在,我们根据上一讲的原则:即如果进程间即满足互斥又满足同步,那么只考虑同步。因此我们定它们之间关系是:进程同步。第一步最重要,只要分析成功,那题就好做了。5PCzVD7HxA第二步:确定信号量及其值。生产者进程和消费者进程轮流执行,各自需要一个私有信号量来标识其是否可以执行和互通是否可以执行的消息。因此需要2个私有信号量。jLBHrnAILg我们定义两个私有信号量:生产者进程的私有信号量empty——表示缓冲区是否为空,初值为1。也就是生产者可

5、用缓冲区<空缓冲区)的数量,初值是1,说明有一个空缓冲区xHAQX74J0X消费者进程的私有信号量full——表示缓冲区中是否为满,初值为0。也就是消费者可用缓冲区<满缓冲区)的数量,初值是0,说明满缓冲区为0个LDAYtRyKfE消费者进程while(True>{P(full>。从Buffer取出一个产品。V(empty>。消费该产品。}生产者进程Zzz6ZB2Ltk5/5while(TRUE>{生产一个产品。P(empty>。产品送往Buffer。V(full>。}<2)一个生产者,一个消费者,公用n个环形缓冲区。定义两

6、个同步信号量:empty——表示缓冲区是否为空,初值为n。full——表示缓冲区中是否为满,初值为0。设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。dvzfvkwMI1消费者进程while(TRUE>{P(full>。从buffermodn;V(empty>。消费该产品。}生产者进程rqyn14ZNXIwhile(TRUE>{生产一个产品。P(empty>。产品送往buffermod

7、n;V(full>。}<3)一组生产者,一组消费者,公用n个环形缓冲区在这个问题中,不仅生产者与消费者之间要同步,而且各个生产者之间、各个消费者之间还必须互斥地访问缓冲区。EmxvxOtOco定义四个信号量:empty——表示缓冲区是否为空,初值为n。full——表示缓冲区中是否为满,初值为0。mutex1——生产者之间的互斥信号量,初值为1。mutex2——消费者之间的互斥信号量,初值为1。设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。SixE2yXP

8、q5消费者进程while(TRUE>{P(full>。P(mutex2>;从buffermodn;V。消费该产品。}生产者进程6ewMyirQFLwhile(TRUE>{生产一个产品。P(empty>。P(mut

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

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

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