1 / 22

1 发送进程和接收进程的同步问题 利用信号量可以解决合作进程之间的同步。 例:设进程 Pa,Pb 通过缓冲区队列传送数据

1 发送进程和接收进程的同步问题 利用信号量可以解决合作进程之间的同步。 例:设进程 Pa,Pb 通过缓冲区队列传送数据. Pa. Pb. BUF1. BUF2. BUFn. .…. 经典的进程同步问题. Pa. Pb. BUF1. BUF2. BUFn. .….

lionel
Download Presentation

1 发送进程和接收进程的同步问题 利用信号量可以解决合作进程之间的同步。 例:设进程 Pa,Pb 通过缓冲区队列传送数据

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1 发送进程和接收进程的同步问题 利用信号量可以解决合作进程之间的同步。 例:设进程Pa,Pb通过缓冲区队列传送数据 Pa Pb BUF1 BUF2 BUFn .…. 经典的进程同步问题

  2. Pa Pb BUF1 BUF2 BUFn .…. 发送和接送过程满足的条件是: 1)在Pa至少送一块数据入一个缓冲区之前,Pb不可能从缓冲区中取出数据2)Pa往缓冲队列发送数据时,至少有一个缓冲区是空的; 3)由Pa发送的数据块在缓冲队列中按先进先出(FIFO)方式排列.描述发送过程deposit (data)和接受过程remove (data) .

  3. 1)Bufempty————进程Pa的私用信号量, Buffull ————进程Pb的私用信号量; 2)Bufempty的初始值为n(n 为缓冲队列的缓冲区个数),Buffull的初始值为0;发送过程Deposit(data),接送过程Remove(data),这两个过程必须同步,因为,因为过程deposit(data)的执行结果是过程remove(data)的执行条件,而当缓冲队列全部装满数据时,remove(data)的执行结果又是deposit(data)的执行条件。 Pa Pb BUF1 BUF2 BUFn .….

  4. Pa:deposit(data) Pb:remove(data) begin local x begin local x P(Bufempty) P(Buffull)按FIFO方式选择一个 按FIFO方式选择一个 空缓冲Buf(x); 装满数据的缓冲Buf(x) Buf(x)<--data data<--Buf(x) Buf(x)置满标记 Buf(x)置空标记V(Buffull) V(Bufempty) end end 发送过程deposit (data)和接受过程remove (data)

  5. Dijkstra把同步问题抽象成一种生产者和消费者关系,计算机系统中的许多问题都可以被归结为生产者和消费者关系,例如,生产者可以是计算进程,消费者是打印进程,输入时输入进程是生产者,计算进程是消费者。我们可以通过一个缓冲区把生产者和消费者联系起来 P1 P2 P3 . Pn. C1 C2 C3 . Cn

  6. 经典的进程同步问题 2 生产者-消费者的同步问题(The Proceducer-Consumer Problem) 举例: 生产者把产品生产出来,送入仓库。给 消费者发信号,消费者得到信号后,到仓库 取产品,取走产品后给生产者发信号…… 一个生产者 一个消费者 产品 仓 库

  7. 生产者-消费者问题是相互合作进程关系的一种抽象生产者-消费者问题是相互合作进程关系的一种抽象 • 输入——计算——打印 生产者 消费者 生产者 消费者 系统中使用资源的进程——消费者 系统中释放资源同类资源的进程——生产者 一个生产者 一个消费者 产品 仓 库

  8. 要解决进程的同步问题要满足的条件 1 想接收数据时,有界缓冲区中至少有一个单元是满的 2 生产者想发送数据时,有界缓冲区中至少有一个单元是空的 同步问题 由于缓冲区是临界资源,所以生产者和消费者之间必须互斥的访问临界资源 用信号量解题的关键 步骤:信号量的设置;给信号量赋初值(常用的互斥和同步信号量值的大小);P、V操作安排的位置(其中,P的顺序不能颠倒,V的顺序任意)

  9. 设:公用信号量mutex表示缓冲区的个数 初值为1 (消费者)私用信号量full表示有界缓冲区中非空单元数 初值为0 (生产者)私用信号量avail 表示有界缓冲区中空的单元数 初值为n deposit(data): begin P(avail) 检查缓冲区中是否有空单元 执行后n-1 P(mutex) 检查缓冲区是否可用 执行后 mutex=0 送数据入缓冲区 V(full) 执行后,非空单元数加1 0+1=1 V(mutex) 释放缓冲区中的资源 end Remove(data): begin P(full) 检查缓冲区是否有数据 P(mutex) 访问缓冲区 取缓冲区中某单元数据 V(avail) 取走数据以后,有界缓冲区的空单元个数加1 V(mutex) 释放缓冲区 end

  10. 公用信号量,互斥时使用的信号量(二元信号量):它仅允许取值为“0”与“1”,用作互斥。它联系着一组共行进程,初值为1,每个进程均可对之施加P、V操作。公用信号量,互斥时使用的信号量(二元信号量):它仅允许取值为“0”与“1”,用作互斥。它联系着一组共行进程,初值为1,每个进程均可对之施加P、V操作。 私用信号量:一般信号量(资源信号量):它联系着一组共行进程,但其初值为0,或为某个正整数n,表示资源的数目,主要用于进程同步。只允许拥有它的进程对之施加P操作,对V操作没有限制 次序 deposit(data): begin P(avail) P(mutex) 送数据入缓冲区 V(full) V(mutex) end Remove(data): begin P(full) P(mutex) 取缓冲区中某单元数据 V(avail) V(mutex) end 次序 (消费者)私用信号量full表示有界缓冲区中非空单元数 初值为0 (生产者)私用信号量avail 表示有界缓冲区中空的单元数 初值为n

  11. 几个经典的进程同步问题 • 生产者—消费者问题 • 哲学家进餐问题 • 读者—写者问题 • 图书馆阅览室问题 • 理发师问题 • 吃水果问题 • 司机—售票员问题 • 过河问题

  12. 生产者—消费者问题 • 一个最著名的进程同步问题 • 问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者存入消息,消费者从中取得消息。

  13. 哲学家进餐问题 • 哲学家进餐问题是典型的同步问题,是由Dijkstra提出并解决的。 • 问题描述5个哲学家,他们的生活方式是交替的思考和进餐。哲学家们公用一张圆桌,分别坐在周围的5张椅子上,圆桌上有5个碗和5支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有他拿到两只筷子时才能进餐,放下筷子又继续思考。

  14. 例:利用信号量解决读者和写者问题 一个文件可能被多个进程共享,为了保证读写的正确性和文件的一致性,系统要求,当有读者进程读文件时,不允许任何写者进程写,但允许多读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何读者进行读。

  15. 为了解决读者和写者问题,需设置两个信号量:为了解决读者和写者问题,需设置两个信号量: • (1)读互斥信号量rmutex,用于使读者互斥地访问共享变量readcount,这里readcount是记录有多少读者正在读; • (2)写互斥信号量wmutex,用于实现读写互斥。读者—者问题进行如下描述: struct semapore rmutex,wmutex=1,1; int readcount:=0;

  16. cobegin vord readeri(vord)(i=1,2,…k) { while(true){ p(rmutex); if readcount=0 then p(wmutex); readcount:=readcount+1; v(rmutex); 读文件; … p(rmutex); readcount:=readcount-1; if readcount=0 then v(wmutex); v(rmutex); } }

  17. vord writerj(vord)(j=1,2,…,m) { while(true){ p (wmutex); 写文件; v(wmutex);} } Coend

  18. 课后练习 图书馆阅览室问题 • 问题描述:假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。

  19. 理发师问题 • 问题描述:一个理发店由一个有几张椅子的等候室和一个放有一张理发椅的理发室组成。若没有要理发的顾客,则理发师就去睡觉;若一顾客走进理发店且所有的椅子都被占用了,则该顾客就离开理发店;若理发师正在为人理发,则该顾客就找一张空椅子坐下等待;若理发师在睡觉,则顾客就唤醒他,设计一个协调理发师和顾客的程序。

  20. 吃水果问题 • 问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用P、V操作实现四人正确活动的程序。

  21. 四人之间的关系 • 爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系; • 爸爸放的苹果,女儿吃,所以两者是同步关系; • 妈妈放的桔子,儿子吃,所以两者也是同步关系。

  22. 司机—售票员问题 • 设公共汽车上,司机和售票员的活动分别是: 司机: 售票员: 启动车辆 上下乘客 正常行车 关车门 到站停车 售票 开车门 上下乘客 在汽车不断到站,停车,行驶过程中,这两个活动的同步关系。

More Related