课程名称:《计算机操作系统》.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程名称:《计算机操作系统》

* School of Management Tianjin University 经典进程的同步问题 1 想接收数据时,有界缓冲区中至少有一个单元是满的 2 生产者想发送数据时,有界缓冲区中至少有一个单元是空的 Dijkstra把同步问题抽象成一种生产者和消费者关系,计算机系统中的许多问题都可以被归结为生产者和消费者关系,例如,生产者可以是计算进程,消费者是打印进程,输入时输入进程是生产者,计算进程是消费者。我们可以通过一个缓冲区把生产者和消费者联系起来 School of Management Tianjin University 经典进程的同步问题 用记录型信号量解决生产者-消费者问题 用AND信号量解决生产者-消费者问题 参见教科书PP46-48 1 2 3 … …. … … n P1 P2 P3 . Pn. C1 C2 C3 . Cn School of Management Tianjin University 经典进程的同步问题 Var mutex, empty,full:=1,n,0; buffer:arry[0,…n-1] of item; in,out: integer:=0,0; Producer: …… Produce an item nextp; Wait(empty); Wait(mutex); Buffer(in):=nextp; In:=(in+1) mod n; Signal(mutex); Signal(full); …… Consumer: …… Produce an item nextp; Wait(full); Wait(mutex); Nextc:=buffer(out); Out:=(out+1) mod n; Signal(mutex); Signal(empty); …… School of Management Tianjin University 经典进程的同步问题 2.哲学家进餐问题 哲学家进餐问题是典型的同步问题,是由Dijkstra提出并解决的。 问题描述5个哲学家,他们的生活方式是交替的思考和进餐。哲学家们公用一张圆桌,分别坐在周围的5张椅子上,圆桌上有5个碗和5支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有他拿到两只筷子时才能进餐,放下筷子又继续思考。 School of Management Tianjin University 经典进程的同步问题 用记录型信号量解决哲学家进餐问题 School of Management Tianjin University 经典进程的同步问题 Var chopstick: array[0,…,4] of semaphore; Repeat wait(chopstick[i]); wait(chopstick[(I+1) mod 5]); Eat; signal(chopstick[i]); signal(chopstick[(I+1) mod 5]); think; Until false; School of Management Tianjin University 经典进程的同步问题 上述解法可能出现永远等待,有若干种办法可避免死锁: 至多允许四个哲学家同时吃; 奇数号先取左手边的筷子,偶数号先取右手边的筷子; 每个哲学家取到手边的两支筷子才吃,否则一支筷子也不取。 School of Management Tianjin University 经典进程的同步问题 利用AND信号量机制解决哲学家进餐问题 Var chopstick array [0,…,4] of semaphore :=(1,1,1,1,1); processi repeat think; Sswait(chopstick[(I+1) mod 5],chopstick[i]); eat; Ssignal(chopstick[(I+1) mod 5],chopstick[i]); until false; School of Management Tianjin University 经典进程的同步问题 3:读者-写者问题 一个文件可能被多个进程共享,为了保证读写的正确性和文件的一致性,系统要求,当有读者进程读文件时,不允许任何写者进程写,但允许多读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何读者进行读。 为了解决读者和写者问题,需设置两个信号量: (1)读互斥信号量rmutex,用于使读者互斥地访问共享变量readcount,这里readcount是记录有多少读者正在读; School

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档