- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
producer:begin repeat produce an item: ringbuffer.put item ; until false; end consumer:begin repeat ringbuffer.get item ; consume the item; until false end 管程实例:生产者/消费者-3 消息缓冲- 高级通信原语 高级通信:是指用户可直接利用操作系统的一组通信命令,高效地传递大量数据的一种通信方式 高效通信机制一般有:管道通信系统、消息传递系统等 消息传递系统:进程间的数据交换以消息(message)为单位,直接利用系统提供的一组通信命令(原语)实现通信 消息:是进程之间以不连续的成组方式发送的信息。 消息缓冲区:系统设置一个大的缓冲区,作为消息缓冲池,它又分成若干消息缓冲区,每个放一个消息 当进程需要发送消息时,就申请消息缓冲区。消息缓冲区是进程通信的基本单位。 消息缓冲区的类型 struct message_buffer xx sender; 发送进程标识符 xx size; 消息长度 xx text; 消息正文 struct message_buffer *next; 指向下一个 消息缓冲区的指针 PCB中有关消息通信的数据项 struct PCB .. .. .. mq ;接受消息队列队首指针 sm ;接受消息队列资源信号量 mutex ;接受消息队列互斥信号量 .. .. .. 消息缓冲通信的过程 发送原语.. .. .. .. 接受原语.. .. .. .. 申请消息缓冲区 消息进入消息缓冲区 消息缓冲区挂入接受队列 接收进程摘下消息缓冲区,读入 归还系统消息缓冲区 显然,P、V操作的引入,克服了加锁操作的忙等待现象,有效提高了系统的效率 操作系统正是利用信号量的状态对进程和资源进行管理和控制的。 从物理意义上理解,P操作相当于申请资源;V操作相当于释放资源。 1、利用信号量实现进程之间的互斥 引入一个互斥信号量,用mutex表示。对于互斥使用的资源,其信号量的初值为1 欲进入临界区执行的进程须先对互斥信号量mutex执行P操作若已有进程占有临界资源,进程必须等待,直到临界资源空闲为止;若无进程占用,可使用它 进程完成临界区操作(即临界资源使用完)后,通过执行V操作释放临界资源,供其它进程使用 P/V操作实现进程间互斥 输入进程A …… P s 读消息到缓冲区 V s …… 输出进程B …… P s 从缓冲区取走消息 V s …… 用信号量可以方便地解决n个进程互斥地使用临界区的问题。信号量的取值范围是+1~(1-n 。信号量的值为负时,说明一个进程正在临界区执行,其它的正排在信号量等待队列中等待,等待的进程数等于信号量值的绝对值 例:若P、V操作的信号量初值为1,当前值为-3,则表示3个等待进程。 2、利用信号量实现进程之间的同步 进程同步:是指相互合作的一组共行进程,各自以独立的,不可预知的速度向前推进,在前进过程中彼此之间需要相互协调步伐,才能更好地完成统一项任务。 这些进程互相合作,在一些关键点上可能需要互相等待或互通消息。 为了解决进程的同步,同样也可以引入信号量 P/V操作实现进程间同步 例:用信号量实现计算进程与打印进程之间的同步过程。假定计算进程和打印进程共同使用一个单缓冲。 分析: 当计算进程对数据的计算尚未完成时,计算的结果没有送入缓冲区,打印进程不能执行打印操作。一旦计算机把计算结果送入缓冲区后,就应给打印进程发送一信号,打印进程收到该信号后,便可从缓冲区取出计算结果进行打印。 在打印进程尚未把缓冲区的计算结果打印完之前,计算进程也不能把下一次的计算结果送入缓冲区。只有在打印进程打印完缓冲区中的内容,给计算进程发出一个信号后,计算进程才能将下一次的计算结果送入缓冲区。 因此,计算进程和打印进程也是同步的。 为此,引入两个同步信号量s1和s2。 S1:表示缓冲区是否空,s1的初值为1; S2:表示缓冲区中是否有可供打印的计算结果,其初始值为0。 计算进程 Pc 和打印进程 Pp 之间的同步算法如下: int s1,s2; s1 1;s2 0; void Pc /*计算进程*/ while TRUE computer next number p s1 ; add the number to buffer v s2 ; … void Pp /* 打印进程 */ while TRUE p s2 ; take next number from buffer v s1 ; print the number … void main
您可能关注的文档
最近下载
- 2025《水下清淤机器人的结构方案设计》13000字(论文).docx
- [硕士]宣钢近北庄铁矿滑坡机理及稳定性分析.pdf VIP
- 2025年“三新”协同教研共同体高一联考英语试卷及答案.docx VIP
- 中国海洋(大学)高等代数历年考研试题.pdf VIP
- 856高等代数之中国海洋(大学)(2018至2021)考研真题.pdf VIP
- 2020-2021学年安徽省合肥市长丰县杨公镇朱集中学高一数学理下学期期末试卷含解析.docx VIP
- PLC西门子S7-200温度控制系统毕业设计-使用教程.pdf VIP
- 新22S3 室外排水工程建筑工程图集.docx VIP
- 江苏省姜氏宗亲分布村落.docx
- 2025年北京理工大学计算机科学与技术专业《操作系统》科目期末试卷及答案.docx VIP
原创力文档


文档评论(0)