首页 理论教育 生产者-消费者问题实例|操作系统原理

生产者-消费者问题实例|操作系统原理

时间:2023-10-17 理论教育 版权反馈
【摘要】:生产者—消费者问题是一种同步问题的抽象描述。通过一个有界缓冲区把一群生产者p1、p2、…假定这些生产者和消费者是互相等效的。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。由于本例中有p1、p2、…、ck个消费者,故它们在执行生产活动和消费活动中要对有界缓冲区进行操作。

生产者-消费者问题实例|操作系统原理

生产者—消费者问题是一种同步问题的抽象描述。计算机系统中的每个进程都可以消费(使用)或生产(释放)某类资源,这些资源可以是硬资源(如主存缓冲区、外设或处理机),也可以是软资源(如临界区、消息等)。当系统中进程使用某一资源时,可以看作是消耗,且将该进程称为消费者。而当某个进程释放资源时,则它就相当于一个生产者。比如在上例中,计算进程和打印进程共用一个缓冲区,进程cp计算数据并送入缓冲区,进程iop从缓冲区中取出数据去打印,因此,对数据而言进程cp相当于生产者,进程iop相当于消费者。当两个进程之间互通信件时,也可抽象为一个发信件进程产生消息,然后把它放置到缓冲存储器中去,与此平行地,一个读消息进程从缓冲存储器中移走信息并处理(消费)它。

通过一个有界缓冲区把一群生产者p1、p2、…、pm和一群消费者c1、c2、…、ck联系起来,如图4-8所示。假定这些生产者和消费者是互相等效的。只要缓冲区未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲区未空,消费者便可以从缓冲区中取走物品并消耗它。生产者和消费者的同步关系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。

图4-8 生产者一消费者问题(www.xing528.com)

在生产者—消费者问题中,信号灯具有两种功能:其一,它是跟踪资源的生产和消费的计数器;其二,它是协调资源的生产者和消费者之间的同步器。消费者通过在一个指派给它的信号灯上做P操作来表示消耗一个资源,而生产者通过在同一信号灯上做V操作来表示生产一个资源。在这种信号灯的实施中,计数在每次P操作后减1,而在每次V操作中增1。这一计数器的初始值是可利用的资源数目。当资源不可利用时,将申请资源的进程放置在等待队列中。如果有一个资源释放,在等待队列中的第一个进程被唤醒并得到资源的控制权。

为解决这一类生产者—消费者问题,应该设置两个同步信号灯:一个说明空缓冲区的数目,用empty表示,其初值为有界缓冲区的大小n;另一个说明满缓冲区(即信息)的数目,用full表示,其初值为0。由于本例中有p1、p2、…、pm个生产者和c1、c2、…、ck个消费者,故它们在执行生产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互斥使用,所以,还需设置一个互斥信号灯mutex,其初值为1。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈