- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.2.5 进程约束 现代操作系统中,程序并发执行,多个进程各自独立地运行,同时竞争和共享系统中有限的资源,这种竞争与合作构成了系统进程之间的约束关系。每个进程独立地申请和释放系统资源,把申请某一类资源的进程称为该类资源的消费者,把释放同类资源的进程称为该类资源的生产者,就得到描述进程约束关系的一般模型:生产者-消费者问题,也称为有界缓冲区问题。 比较简单的情况,两进程共享一个长度为N(N0)的有界缓冲区,一个进程Pp往缓冲区中送数据,是生产者,另一个进程Pc从缓冲区中读取数据,是消费者,如图2.4,下面来讨论它们间的约束关系。 图2.4 简单的生产者-消费者问题 首先,生产者进程Pp和消费者进程Pc共享同一个有界缓冲区,对这个缓冲区的操作必须是独占的。这种不允许多个并发进程交叉执行的资源称为临界资源,临界的程序段资源称为临界部分或临界区。临界资源是由于不同并发进程共享某个资源造成的,不可能通过增加资源的方法解决。这种因为共享某一公有资源而引起的在临界资源内不允许并发进程交叉执行的现象,称为进程间的间接约束。 由于对临界资源的共享,而产生了临界区问题。对于有着临界区问题的并行进程之间必须互斥,以保证不会同时进入临界区。 其次,对生产者进程Pp和消费者进程Pc访问共享有界缓冲区的顺序有严格的要求。具体来讲,这种限制为: (1) 消费者进程Pc要接收数据时,有界缓冲区必须至少有一个单元是满的; (2) 生产者进程Pp要发送数据时,有界缓冲区必须至少有一个单元是空的。 这样存在一组相互独立的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程执行速度的过程,称为进程间的直接制约。存在直接制约关系,相互发送消息进行互相合作、互相等待,各自按照一定的速度向前推进的过程称为同步。 消费者进程和生产者进程之间因为共享缓冲区,相互 竞争而间接制约,具有互斥关系,同时相互以对方的运 行结果为条件而直接制约,也具有同步的关系,是一对 同时具有竞争和合作的进程。 在并发系统中,进程之间相互制约,具有同步和互斥 是相当普遍的现象。这种进程之间的相互关系,依靠单 个进程自身的力量是无法解决的,必须以进程间的相互 通信为基础,互相发送信息,才能协调解决。具体的同 步、互斥实现方案有很多种,分别基于不同的通信方 式。 进程的同步与互斥是一种通讯方式,可以用P、V操 作,由传递信号来实现,但信号本身不包含任何数据, 即它们没有数据传送的能力,因此通常称这些同步机构 为低级通讯机构。而将能进行进程间大量信息传递的消 息通讯称为高级通讯机构。 只有当售票员关门之后司机才能启动车辆,只有司机停 车之后售票员才能开车门。司机和售票员的行动需要一定 的协调。同样地,两个进程之间有时也有这样的依赖关 系,因此我们也要有一定的同步机制保证它们的执行次 序。 例、过河问题(独木桥问题) 某条河上只有一个独木桥,以便行人过河。现在河的两边都有人要过桥,若把过桥者看做一个进程,规定 每次只有一个人通过。为了保证过桥安全,请用P、V操作分别实现正确的管理。 问题描述 有一个许多进程共享的数据区; 有一些只读取这个数据区的进程(reader)和一些只往数据区中写数据的进程(writer); 此外还必须满足下列条件: 任意多的读进程可以同时读这个数据区 一次只有一个写进程可以往数据区写 如果一个写进程正在往数据区中写, 禁止任何读进程读数据区 要求:“读-写” 互斥;“写-写” 互斥;“读-读” 允许 读者与写者算法描述 var mutex,wrt:psemaphore; readcount:integer; begin seminit(mutex.v,1;wrt.v,1); readcount:= 0; cobegin procedure reader; begin P(mutex); readcount:=readcount+1; if readcount =1 then P(wrt); V(mutex); reading is performing; P(mutex); readcount:=readcount-1; if readcount =0 then V(wrt); V(mutex); end 2.2.6 进程通信 进程间通信是协调解决多个进程之间的约束关系,实现进程共同进展的关键技术,是多道系统中控制进程并发执行必不可少的机制。 进程间的通信有两种方式:一是互相发送少量的控制信息,一般只传递一个或者几个字节的数据,进程利用这些简单的信息,实现互斥和同步,控制
文档评论(0)