操作系统4-3.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九讲 进程同步与通讯 目的与要求:掌握信号量解决进程同步互斥问题的方法;掌握进程通信的基本实现方法。 重点与难点:信号量的典型应用,通讯实现。 作业:15,16,17 生产者 消费者 生产一个产品; p(empty); p (mutex); 将一个产品送入缓冲区; v (mutex); v(full); p (full); p (mutex); 从缓冲区中取一个产品; v (mutex); v (empty); 消费一个产品; 注意 无论在生产者进程还是在消费者进程中,P操作的次序都不能颠倒,否则将可能造成死锁。 颠倒生产者进程中的P操作 用信号量解决读者-写者问题 为解决读者写者问题,应设置两个信号量和一个共享变量: 互斥信号量mutex,用于使读进程互斥地访问共享变量readcount,其初值为1; 写互斥信号量writer,用于实现写进程与读进程的互斥以及写进程与写进程的互斥,其初值为1; 共享变量readcount,用于记录当前正在读数据集的读进程数目,初值为0。 对读者写者问题的理解 请注意对信号量mutex意义的理解。 mutex是一个互斥信号量,用于使读进程互斥地访问共享变量readcount。该信号量并不表示读进程的数目,表示读进程数目的是共享变量readcount。 用信号量解决哲学家进餐问题 用五支筷子的信号量构成信号量数组: semaphore chopstick[5] ; 所有信号量初值为1, 补充:AND型信号量 AND型信号量的基本思想是:将进程在整个运行过程中需要的多类资源,一次性地全部分配给进程,待该进程使用完后再一起释放。只要有一个资源未能分配给该进程,其他所有资源也不分配。 我们称AND型信号量的P原语为SP或Swait, V原语为SV或Ssignal。 SP操作 SP(S1,S2,…,Sn) { if(S1>=1 S2>=1 … Sn>=1) for (i=1; i= n; i++) Si= Si-1; else { 将进程插入第一个小于1的信号量等待队列; 将调用进程的程序计数器设置为SP的第一条指令; } } SV操作 SV(S1,S2,…,Sn ) { for (i=1; i=n; i++) { Si= Si+1; 唤醒Si等待队列上的所有进程并将它们插入就绪队列; } } 信号量集 信号量集是AND型信号量的扩充,其基本思想是:在一次原语操作中完成对所有资源的申请,即进程可以一次申请多类资源,每类资源可以申请多个,当某类资源的数量低于其下限值或不能满足进程的申请要求时,则不进行分配。 SP SP(S1,t1,d1,S2,t2,d2,…,Sn,tn,dn) /*ti为下限值,di为资源申请量*/ { if S1=t1 S1=d1 … Sn=tn Sn=dn ) for (i=1 ; i=n; i++) Si=Si-di; else { 将进程插入第一个资源数小于ti或di的信号量的等待队列; 将调用进程的程序计数器设置为SP的第一条指令; } } SV SV(S1,d1,S2,d2,…,Sn,dn ) { for( i=1; i=n; i++) { Si=Si+di; 唤醒队列Si上的所有进程并将它们插入就绪队列; } } 信号量集的几种特殊的情况 SP(S,d,d):此时信号量集中只有一个信号量,它每次申请d个资源,当资源数量少于d个时,便不予分配。 SP(S,1,1):此时的信号量集已退化为记录型信号量。 SP(S,1,0):这是一种很特殊的信号量,可作为一个可控开关。当S≥1时,允许多个进程进入特定区域;当S=0时,禁止任何进程进入特定区。 用AND型信号量集解决生产者-消费者问题 mutex=1;full=0;empty=n; 用AND型信号量解决哲学家进餐问题 sp(stick[i],stick[(i+1) mod 5]); 进餐; sv(stick[i],stick[(i+1) mod 5]); 思考; 用信号量集解决读者-写者问题 为了实现方便增加一个限制条件,即最多只允许RN个读进程同时读。 设置两个信号量: mx表示写互斥的信号量,用于实现写进程与读进程的互斥以及写进程与写进程的互斥,其初值为1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档