- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
临界资源临界区-myqcloudcom
2.4 进程同步(1) 进程同步:指对多个相关进程在执行次序上进行协调; 同步的任务:使系统中各进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性; 系统中各进程之间在逻辑上的相互制约的关系: 直接关系—同步 间接关系—互斥 2.4 进程同步(2) 用来实现同步的机制称为同步机制。如: 软件和硬件的方法; 信号量机制; 管程机制 2.4 进程同步(3) 进程同步的基本概念 两种形式的制约关系 临界资源、临界区 同步机制应遵循的规则 信号量机制 整型信号量 记录型信号量 AND型信号量集、一般信号量集 信号量的应用 信号量实现进程互斥 信号量描述进程间的前趋关系 管程机制 一、进程同步的基本概念 1、进程之间两种形式的制约关系 系统中各进程之间在逻辑上存在着两种制约关系: 直接相互制约关系/相互合作关系(进程同步): 即为完成同一个任务的各进程之间,因需要协调它们的工作而相互等待、相互交换信息所产生的直接制约关系。 间接相互制约关系/资源共享关系(进程互斥): 是进程共享独占型资源而必须互斥执行的间接制约关系。 同步与互斥比较 同 步(直接制约) 互 斥(间接制约) 进程-进程 进程-资源-进程 时间次序上受到某种限制 竞争不到某一物理资源时不允许进程工作 相互清楚对方的存在及作用,交换信息 不一定清楚其它进程的情况 往往指有几个进程共同完成一个任务 往往指多个任务多个进程间通讯制约 例:生产与消费之间,发送与接收之间,写者与读者之间 例:交通十字路口,单轨火车的拨道岔 2、临界资源、临界区(1) 一次只允许一个进程使用的共享资源称为临界资源,如打印机,绘图机,变量,数据等,各进程间采取互斥方式实现对这种临界资源的共享,从而实现并发进程的封闭性。 例:生产者-消费者问题 一组生产者向一组消费者提供产品,它们共享一个缓冲池,生产者向其中投放产品,消费者从中取得产品。它是许多相互合作进程的抽象,如输入进程与计算进程;计算进程与打印进程等。 2、临界资源、临界区(2) 设缓冲池的长度为n(n0),一群生产者进程P1,P2,…,Pm,一群消费者进程C1,C2,…,Ck,如图所示。假定生产者和消费者是相互等效,只要缓冲池未满,生产者就可以把产品送入缓冲区,类似地,只要缓冲池未空,消费者便可以从缓冲区取走产品并消耗它。 生产者和消费者进程是以异步方式运行的,但必须保持同步关系,即禁止生产者向满的缓冲池输送产品,也禁止消费者从空的缓冲池提取产品。 … P1 P2 … Pm C1 C2 … Ck 2、临界资源、临界区(3) 生产者消费者进程共享如下变量: TYPE item=…; VAR n:integer; buffer:array[0..n-1] of item; in,out:0..n-1; counter:0..n; 注:n为缓冲池中缓冲区的个数; buffer为具有n个缓冲区的缓冲池; in和out为指针,分别指向下一个可投放产品的缓冲区和下一个可获取产品的缓冲区 2、临界资源、临界区(4) 生产者消费者进程可分别描述为: producer: repeat …… produce an item in nextp; …… while counter=n do no-op; buffer[in]:=nextp; in:=(in+1) mod n; counter:=counter+1; until false; consumer: repeat while counter=0 do no-op; nextc:=buffer[out]; out:=(out+1) mod n; counter:=counter-1; consume the item in nextc; until false; 2、临界资源、临界区(5) 单独看生产者进程和消费者进程,或者顺序执行生产者和消费者进程,都是正确的;但是并发执行时会出现差错。 问题出在两进程共享的变量counter上: 用机器语言实现变量的加1、减1的操作为: 变量counter加1: register1:=counter; register1:=register1+1; counter:=register1; 变量counter减1: regi
文档评论(0)