- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
管程的基本特性 局部于管程的数据只能被局部于管程内的函数所访问。 一个进程只有通过调用管程内的函数才能进入管程访问共享数据。 每次仅允许一个进程在管程内执行某个函数。 由于管程是一个语言成分,所以管程的互斥访问完全由编译程序在编译时自动添加上,无需程序员关心,而且保证正确。 条件变量 利用管程实现同步时,还应设置条件变量和在条件变量上进行操作的两个同步原语。 条件变量用于区别各种不同的等待原因。其说明形式为: condition : x,y; 同步原语wait和signal。wait使调用进程等待,并将它排在相应的等待队列上;signal唤醒等待队列的队首进程。 使用方式为:x.wait,x.signal。 实现管程的三个关键问题 实现管程时必须考虑三个关键问题,即互斥、同步和条件变量。 1.互斥 管程必须能有效地实现互斥以达到进程互斥访问管程中定义的数据结构。当进程需要访问管程中的临界资源的时候,可调用管程中的有关入口过程。但当几个进程都需调用某一管程的同一个或不同的入口过程时,仅允许一个进程调用进入管程,而其他调用者必须等待,即诸进程必须互斥地调用执行管程入口过程。 2.同步 在管程中必须设置两个同步操作原语wait和signal。当进程通过管程请求访问共享数据而未能满足时,管程便调用wait原语使该进程阻塞等待,当另一进程访问完该共享数据且释放后,管程便调用signal原语,唤醒等待队列中的队首进程。 3.条件变量 为了区别等待的不同原因,管程又引入了条件变量。不同的条件变量,对应不同原因的进程阻塞等待队列,初始时为空。条件变量上能作wait和signal原语操作,若条件变量名为nonbusy,则调用同步原语的形式为wait(nonbusy)和signal(nonbusy)。 * 管程实现的生产者-消费者问题 monitor ProducerConsumer condition full,empty; //条件变量 integer count; procedure enter; begin if count==N then //缓冲已满wait(empty); enter_item; count:=count+1; //增加一个产品 if count==1 then signal(full) //唤醒等待消费者 end; procedure remove; begin If count==0 then wait(full); //缓冲已空 remove_item; count:=count-1; //减少一个产品 If count==N-1 then signal(empty) //唤醒等待生产者 end; count:=0; end monitor; 管程实现的生产者-消费者问题(续) procedure producer; begin while true do begin Produce_item; ProducerConsumer.enter; end; end; procedure consumer; begin while true do begin ProducerConsumer.remove; consume_item; end; end; * 比较: 管程与进程 ?管程定义的是公用数据结构,而进程定义的是私有数据结构; ?管程把共享变量上的同步操作集中起来,而临界区却分散在每个进程中; ?管程是为管理共享资源而建立的,进程主要是为占有系统资源和实现系统并发性而引入的; ?管程是被欲使用共享资源的进程所调用的,管程和调用它的进程不能并行工作,而进程之间能并行工作,并发性是其固有特性; ?管程是语言或操作系统的成分,不必创建或撤销,而进程有生命周期,由创建而产生至撤销便消亡。 * 练习1:某系统有ABCD这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。现在系统还剩资源A类1个,B类5个,C类2个和D类0个,请按银行家算法回答下面问题: 进程 已占资源数 最大需求数 A B C D A B C D P1 0 0 1 2 0 0 1 2 P2 1 0 0 0 1 7 5 0 P3 1 3 5 4 2 3 5 6 P4 0 6 3 2 0 6 5 2 P5 0 0 1 4 0 6 5 6 1、现在系统是否处于安全状态? 2、如果现在进程P2提出需要(0,4,2,
文档评论(0)