计算机操作系统操作系统第2节.ppt

  1. 1、本文档共119页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
‘semaphore[fo:]信号 ’integer 2.利用信号量实现前趋图关系 S1~S6是多个并发执行进程中的多个语句的前趋关系 Var a,b,c,d,e,f,g:semaphore: =0,0,0,0,0,0,0; begin parbegin  begin S1; signal(a); signal(b); end;  begin wait(a); S2; signal(c); signal(d);end;  begin wait(b); S3; signal(e); end;  begin wait(c); S4; signal(f); end;  begin wait(d); S5; signal(g); end;  begin wait(e); wait(f); wait(g); S6;end; parend end 2.3.4 管程机制   1.管程的定义 代表共享资源的数据结构,以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序,构成操作系统资源管理模块, 称为管程(相当于类类型的对象)。 所有进程要访问临界资源时,都必须经过管程进入。管程每次只准许一个进程进入管程,从而实现进程互斥。 管程和信号量有同等的表达能力。    管程由四部分组成: ① 名称; ② 局部于管程内部的共享数据结构说明; ③ 对该数据结构进行操作的一组过程; ④ 对局部于管程内部的共享数据设置初始值的语句。 管程的示意图 2.条件变量   管程中对每个条件变量说明形式为: Var x,y:condition。 每个条件变量保存了一个链表,用于记录因该条件变量而阻塞的所有进程,同时提供的两个操作为x.wait和x.signal,其含义为:   ① x.wait:正在调用管程的进程因x条件需要被阻塞或挂起,则调用x.wait将自己插入到x条件的等待队列上,并释放管程,直到x条件变化。此时其它进程可以使用该管程。   ② x.signal:正在调用管程的进程发现x条件发生了变化,则调用x.signal,重新启动一个因x条件而阻塞或挂起的进程。    管程的语法描述:   type monitor_name = MONITOR; 共享变量说明; define (能被其他模块引用的)过程名列表; use (要调用的本模块外定义的)过程名列表; procedure 过程名(形式参数表); begin ? end; … … function 函数名(形式参数表):值类型; begin ? end; begin 管程的局部数据初始化语句序列; end … …   管程和进程不同点:   (1) 进程定义的是私有数据结构PCB,管程定义的是公共数据结构,如消息队列等;   (2) 进程是由顺序程序执行有关的操作,而管程主要是进行同步操作和初始化操作;   (3) 设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题; (4) 进程具有动态性,由“创建”而诞生,由“撤销”而消亡,而管程则是操作系统中的一个资源管理模块,供进程调用。   2.4 经典进程的同步问题 2.4.1 生产者—消费者问题   1.利用记录型信号量解决生产者—消费者问题 Var mutex,empty,full: semaphore:=1,n,0;   buffer:array[0,…,n-1] of item;   in,out: integer:=0,0;   begin    parbegin 并发     … …   producer: begin          repeat              producer an item nextp;                wait(empty);//减一 wait(mutex);//减一,访问临界资源           buffer(in):=nextp;           in:=(in+1) mod n;           signal(mutex); //加一           signal(full); //加一          until false;     end … consum

文档评论(0)

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

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

1亿VIP精品文档

相关文档