2-4-进程同步与互斥.ppt

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

2.4进程间的相互作用2.4.1进程间的同步和互斥在系统中有一些需要相互合作、协同工作的进程,它们之间的相互联系称为进程的同步。另外一种情况是多个进程因争用临界资源而互斥执行,叫做进程的互斥。 所谓临界资源,也可叫做独占资源,是指在一段时间内只允许一个进程访问的资源。进程对临界资源不加限制地访问,会带来进程执行结果不一致,甚至死锁等问题。例如:两个进程P1、P2,它们共享同一变量count,P1、P2的操作如下:P1:R1=count;R1=R1+1;count=R1;?其中,R1和R2为两个通用寄存器。如果两个进程顺序执行,结果使count的值加2。由于现在操作系统中的进程是并发执行的,各进程以自己的速度向前推进,因此,运行的顺序可能是:P1:R1=count;P2:R2=count;P1:R1=R1+1;P1:count=R1;P2:R2=R2+1;P2:count=R2;具体原则如下:(1)当有若干个进程要求进入临界区时,应使一个进程进入临界区,它们不应相互等待而使谁都不能进入,即进程不能无限地停留在等待临界资源的状态。(2)一次只允许一个进程进入临界区中,即各进程只能互斥访问临界资源。(3)各进程使用临界资源的时间是有限的,即任何一个进程都必须在有限的时间内释放所占资源。实现进程互斥的方法有硬件方法和软件方法。软件方法中比较著名的有Dekker算法和Peterson算法。(1)Dekker算法。这种算法需设置一个整型变量turn,指示允许进入临界区的进程。(2)Peterson算法。这种算法除设置整型变量turn外,还要为每一个进程设置一个标志,指示该进程是否要求进入临界区。(3)“开关中断”指令,也称硬件锁,是实现互斥的最简单方法。(4)“交换”指令。这种方法是对每一组共享变量定义一个全局变量,对每一个进程定义一个局部变量。(5)“测试与设置”指令。这种方法是设置一个布尔变量,称为“锁”,用W表示。Dekker算法 Dekker提出了仅基于软件的两个进程通信的算法,这种算法不需要硬件或操作系统的支持。这种算法需设置一个整型变量turn,指示允许进入临界区的进程。//Dekker’sAlgorithmP0进程:P1进程:While(turn!=0);While(turn!=1);//Criticalsection//Criticalsectionturn=1;turn=0;…………Pi进程:while(flag[j]);flag[i]=true;Criticalsection;flag[i]=False;……Peterson算法为了防止两个进程为进入临界区而无限期等待,又设置turn变量,指示不允许进入临界区的进程编号,每个进程在先设置自己标志后再设置turn标志,不允许另一个进程进入。这时,再同时检测另一个进程状态标志和不允许进入标志,这样可以保证当两个进程同时要求进入临界区,只允许一个进程访问临界区。Pi进程: flag[i]=true;turn=j;while(flag[j]turn==j);criticalsection;flag[i]=false;……先到先入,后到等待。(2010)进程P0和P1的共享变量定义及初值为:Booleanflag[2];Intturn=0;flag[0]=false;flag[1]=false;进程P0和P1访问临界资源的类C语言代码实现如下:VoidP0{while(TRUE){flag[0]=TRUE;turn=1;while(flag[1]turn==1);临界区;flag[0]=FALSE;

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档