- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程管理75063
第六章 进程管理第二章已经介绍进程的概念,进程是一个具有独立功能的程序关于某一个数据集合在处理机上的一次执行活动。进程和程序是两个既有联系又有区别的概念,它们的区别的关系可简述如下:进程是一个动态的概念,而程序是一个静态的概念。程序是指令的有序集合,没有任何的执行含义。而进程则是程序的执行过程,它动态地被创建、调度、执行,直至消亡。当然,进程的执行活动是在程序中事先规定的。形象的比喻就是:若把一个程序看作一个菜谱,那么进程则是按照该菜谱炒菜的过程。进程具有并行特征,而程序没有。由进程的定义可知,进程具有并行特征的两个方面,即独立性和异步性。也就是说,在不考虑资源共享的情况下,各进程的执行是独立的,执行的速度是异步的。显然,由于程序不反映执行过程,所以不具有并行特征。进程是竞争计算机系统资源的基本单位,从而其并行性受到系统本身的制约。这种制约就是对进程独立性和异步性的限制。不同的进程可以包含同一程序,即不同进程可共享同一程序,只要该程序所对应的数据集不同。本章首先介绍并发进程由于竞争资源而产生的制约—互斥和并发进程由于相互协作而产生的制约—同步,以及这种互斥和同步的实现技术,接着介绍进程之间交换信息的处理方式—进程通信,然后介绍进程内的基本调度单位—线程,最后介绍多个进程由于竞争资源而产生的死锁及其防止、避免和解除方法。6.1进程管理的背景并发进程执行可能是无关的,也可能是交往的。无关的并发进程是指它们分别在不同的变量集合上操作,所以一个进程的执行与其它并发进程的进展无关,即一个并发进程不会改变另一个并发的变量值。然而,交往的并发进程,它们共享某些变量,所以一个进程的执行可能影响其它进程的执行结果,因此,这种交往的并发进程执行必须进行合理的控制,否则就会出现不正确的结果。两个交往的并发进程,其中一个进程对另一个进程的影响常常是不可预期的,甚至是无法再现的。这是因为两个并发进程执行的相对速度无法相互控制,交往的并发进程的速率不仅处理器调度的影响,而且还受到与这两个交往的并发进程无关的其它进程的影响,所以一个进程的速率通常无法为另一个进程所知。因此交往的并发进程的执行就可能产生各种与时间有关的错误。现以两个例子来说明交往的并发进程产生与时间有关的错误。例1 现有生产者(producer)和消费者(consumer)两个进程,这两个进程通过一个缓冲区进行生产和消费的协作过程。生产者将得到的数据放入缓冲区中,而消费者则从缓冲区中取数据消费。缓冲区buffer为一有界数组,缓冲区中的数据个数用count变量表示,它们均是两个进程的共享变量。生产者进程的程序片段代码如下:?????????????? while (count==BUFFER_SIZE) ; //no-op?????????????? // add an item to the buffer?????????????? count++;?????????????? buffer[in] = item;?????????????? in = (in+1) % BUFFER_SIZE;消费者进程的程序片段代码如下:?????????????? while (count == 0 ) ; //no-op?????????????? // remove an item from the buffer?????????????? count--;?????????????? item = buffer[out];?????????????? out = (out+1) % BUFFER_SIZE;初看起来这两个进程分别执行时是正确的,但仔细分析考察运行实质,我们可发现,当他们并发执行时,可能产生运行结果不唯一的错误。其主要原因是他们共享了记录缓冲区数据项数目的变量count,而对这共享变量的操作没有加以正确的控制所引起的。下面我们来分析一下为什么会产生结果不唯一的情形。生产者进程的程序片段中count++语句翻译成机器语言的指令序列如下:register1=count;register1= register1+1;count= register1;这里的register1是CPU中的一个寄存器。同样,消费者进程的程序片段中count--语句翻译成机器语言的指令序列如下:register2=count;register2= register2-1;count= register2;这里的register2也是CPU中的一个寄存器。尽管register1和register2可能是同一个物理寄存器,但这个寄存器的内容可由中断处理进行保护和恢复。count++语句和count--语句的并发执行等价于上述机器语言的指令序列任意顺
文档评论(0)