网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章进程4.ppt

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

操作系统与实验教程 第3章第5讲 其他经典问题 读者写者问题 单缓冲问题(扩充) 多进程共享单缓冲区问题(扩充) 双缓冲问题(扩充) 多缓冲问题 生产者消费者问题(课本3.6.4) 哲学家问题*(死锁) 单缓冲问题描述 问题类型:同步 不满足互斥的第二个条件,非互斥 写进程与读进程的执行顺序有制约,制约关系为“先写再读,读完再写” 第一次,写是读的前驱;第二次,读是写的前驱;…… (二)单缓冲与双缓冲同步问题 同步分析 算法: main() { int sw=1; //设置信号量及初值 int sr=0; cobegin WP( ); RP( ); coend } WP( ) { while(计算未完成) { 得到一个计算结果x; P(sw); //申请条件sw 将数据x写到缓冲区; V(sr); //释放条件sr } } RP( ) { while(输出未完成) { P(sr); //申请条件sr 从缓冲区将数据读出到y; V(sw); //释放条件sw 输出数据y; } } “多进程共享单缓冲区”问题 问题描述 一个写进程与多个读进程共享单缓冲 一个写进程两个读进程共享一个缓冲区,设奇次由读进程A读取,偶次由读进程B读取。 同步分析: 写进程(): { flg=1; while(1) { 计算x; P(empty); 将x送缓冲区; if(flg==1) { V(fullj); flg=0; } else { V(fullo); flg=1; } } } 读进程A(): { P(fullj); 从缓冲区读数据到y; V(empty); 输出y ; } 读进程B(): { P(fullo); 从缓冲区读数据到y; V(empty); 输出y; } 双缓冲区同步问题 问题描述 同步分析: 算法: main() { /*信号量及初值*/ int saw=sbw=1; int sar=sbr=0; cobegin CP( ); COPY( ); OUT( ); coend } OUT( ) { while(输出未完成) { /*申请缓冲区B有数可读条件sbr*/ P(sbr); 从缓冲区B取数据; /*释放缓冲区B有空可写条件sbw*/ V(sbw); 输出数据; } } 多缓冲问题 问题描述 问题类型:同步、互斥混合 互斥条件 共享缓冲区队列—临界资源 缓冲区中有数但未满时,读、写进程先来先执行 同步条件 当缓冲区为空及缓冲区为满时,写进程与读进程的执行顺序有制约,制约关系为“先写再读,读完再写” 互斥分析 临界资源:多缓冲区 互斥信号量mutex 初值为1,表示一次只能一个进程进入读或写。 同步分析 信号量 sw缓冲区有空可写信号量,初值为n sr缓冲区有数可读信号量,初值为0。 算法: main() { /*设置互斥信号量及初值*/ int mutex=1; /*设置同步信号量及初值*/ int sw=n; int sr=0; cobegin WP( ); RP( ); coend } WP( ) { while(计算未完成) { 得到一个计算结果; P(sw);//申请同步条件sw P(mutex);//申请互斥条件mutex 将数据送到缓冲区;//临界区 V(mutex);//释放互斥条件mutex V(sr);//释放同步条件sr } } 问题:p(sw)与p(mutex)的顺序是否可以颠倒? RP( ) { while(输出未完成) { P(sr);//申请同步条件sr P(mutex);//申请互斥条件mutex 从缓冲区取数据;//临界区 V(mutex);//释放互斥条件mutex V(sw);//释放同步条件sw 输出数据; } } 生产者消费者问题 问题描述 多个读进程、多个写进程共享一个多缓冲区 问题类型:同步、互斥混合 互斥条件 共享缓冲区队列—临界资源 缓冲区中有数但未满时,读、写进程先来先执行 同步条件 当缓冲区为空及缓冲区为满时,写进程与读进程的执行顺序有制约,制约关系为“先写再读,读完再写” 互斥分析 临界资源:多缓冲区 互斥信号量mutex 初值为1,表示一次只能一个进程进入读或写。 同步分析 信号量 Empty:缓冲区有空可写,初值为n Full:缓冲区有数可读,初值为0。 无需对每一个进程设置信号量empty或ful

文档评论(0)

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

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

1亿VIP精品文档

相关文档