cha3进程同步与通信.ppt

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

本章基础要点 进程间的同步是指进程间在逻辑上的相互制约关系。 在进程中访问临界资源的代码称为临界区。为保证进程互斥访问临界资源,应在进程的临界区前设置进入区,在临界区后设置退出区。 进程间的相互制约关系有直接制约关系和间接制约关系。 临界区是一段程序。 本章基础要点 并发进程之间的基本关系是合作或共享资源,其中共享资源是指进程之间的一种间接关系。 访问临界资源应遵循的准则是:空闲让进、忙则等待、有限等待、让权等待。 如果信号量的当前值为-4,则表示 系统中在该信号量上有4个等待进程。 本章基础要点 在操作系统中,Wait、Signal原语是一种低级进程通信原语。 除初值外,信号量的值只能通过Wait、Signal操作来改变。 对于两个并发进程,设互斥信号量为 mutex ,若mutex=0 则表示: 有一个进程进入临界区。 用Wait、Signal操作管理临界区时,任何一个进程在进入临界区之前应调用Wait操作,退出临界区时应调用Signal操作。 本章基础要点 信号量的物理意义是: 当信号量值大于0时表示可用资源的数目;当信号量值小于0时,其绝对值为在该信号量上等待的进程个数。 信箱通信是一种间接通信方式。 利用消息机制实现通信时,应有发送原语和接收原语。 进程通信是指进程之间的信息交换。 第三章 作业 1、有一单向行驶公路桥,每次只允许一辆汽车通过。当汽车到达桥头时,若桥上无车,便可上桥;否则需等待,直到桥上的汽车下桥为止。若每一辆汽车为一个进程,请用p,v操作保证汽车按要求过桥。 第三章 作业 Semaphore S=1; Pass() {到达桥头; P(S); 上桥行驶; 到达桥的另一端; V(S); } 第三章 作业 2、有3个并发进程R、M、P,它们共享一个循环使用的缓冲区B,缓冲区B共有N个单元。进程R负责从输入设备读信息,每读一个字符后,把它存入到缓冲区B的一个单元中;进程M负责处理读入的字符,若发现读入的字符中有空格符,则把它改成“,”;进程P负责把处理后的字符取出并打印输出。当缓冲区单元中的字符被进程P取出后,则又可用来存放下一次读入的字符。请用PV操作写出它们正确并发执行的程序。 提示 1、这是一个三进程同步问题,需要考虑该问题中临界资源有哪些; 2、三个进程制约关系构成一个循环,其中控制关系(同步)需要用信号量来实现; empty full check 初始值是多少? 变化范围是多少? 另外,需要设置变量控制指针位置:in out1 out2 第三章 作业 R() {while(true) {char x; 读入下一条字符到x; p(empty); p(mutex); buffer[in]=x; in=(in+1)%N; v(mutex); v(full1); }} M() {char x; while(true) {p(full1); p(mutex); x=buffer[out1]; if(x==“”){x=‘,’; Buffer[out1]=x;} out1=(out1+1)%N; v(mutex); v(full2);}} p() {while(true) {p(full2); p(mutex); x=buffer[out2]; out2=(out2+1)%N; v(mutex); v(full1); 输出字符x; }} 第三章 作业 3、把学生和监考老师都看作进程,学生有N人,教师1人。考场门口每次只能进出一个人,进考场原则是先来先进。当N个学生都进入考场后,教师才能发卷子。学生交卷后可以离开考场, 教师要等收上来全部卷子并封装卷子后才能离开考场。 第三章 作业 信号量: semaphore S_Door; // 能否进出门,初值1 semaphore S_StudentReady; // 学生是否到齐,初值为0 semaphore S_ExamBegin; // 开始考试,初值为0 semaphore S_ExamOver; // 考试结束,初值为0 int nStudentNum = 0; // 学生数目 semaphore S_Mutex1 //互斥信号量,初值为1 int nPaperNum = 0; // 已交的卷子数目 semaphore S_Mutex2 //互斥信号量,初值为1 试用P、V操作解决上述问题中的同步和互斥关系 第三章 作业 void student( ) { P(S_Door); 进门; V(S_Door) ;(

文档评论(0)

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

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

1亿VIP精品文档

相关文档