第四章 互斥同步.ppt

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

第四章 同步与通信; 4.1 概述;4.2 临界区;例1:同步问题;例2:互斥问题 ;4.2 临界区(critical section) ;2.临界区(critical section,也称临界段) 临界区:是指进程地址空间中访问临界资源的那段代码。一个进程在临界区中运行时,其他进程不能进入临界区。 进入区:是指临界区之前,检查临界资源闲忙标志的那段代码。 退出区:在临界区后面,将临界资源释放的那段代码。 如:while true { … 进入区 临界区 (如例中P1,P2的:R=X;R=R+1;X=R;) 退出区 … };竞争条件:多各进程或线程在读写一个公共数据时,结果依赖于它们执行的相对时间,这种情形称做竞争。 饥饿:一个可以运行的进程无限期地被调度器忽视,不能被调度的状态。 死锁:两个或两个以上进程因互相等待,使得每个进程都不能继续向前推进的状态。;进程的交互;空闲让进:任何时间临界区内只能有一个进程。 忙则等待。 有限等待:等待有限时间,避免“死等”发生。 让权等待:当正在执行的进程自己不能进入临界区时,应立即释放CPU。; 进入临界段之前要申请,获得批准方可进入 退出临界段之后要声明,以便其他进程进入;互斥也是一种同步,它使异步事件能按照要求的时序进行,以使各合作进程能协调一致地工作。 1.互斥的软件解决方法 (1) 用标志位flag[i]来标识进程Pi是否在临界区中执行。 Pi: while(true) {… while(flag[j]); //执行空语句等待 flag[i]=true; 执行csi //进程Pi的临界区 flag[i]=false; //释放临界资源 …};1.互斥的软件解决方法;(3)Dekker的解决方法 初始化:flag[i]=flag[j]=false; turn可以为i或j;;2.互斥的硬件解决方法;例1:中断屏蔽方法(单处理机);TS指令(或TSL) bool TS (bool flag) { TS =flag; flag=true; //关闭临界区 };while(true) {while(TS(lock)); //忙等待 执行csi lock=false; ……};使用Swap指令实现互斥;1.什么是信号量? 信号量是荷兰计算机科学家Dijkstra于1965年提出的一种有效的进程同步工具,可分为:整型信号量 、结构型信号量 、信号量集等。 信号量是实现进程同步的一种变量。 2.二元信号量和一般信号量 二元信号量:取值仅为“0”或“1”,主要用作互斥同步变量; 一般信号量:初值为物理资源的总数,用于进程间的协作同步问题。;3.整型信号量 (1)整型信号量是一个整型变量,如S ,和两个标准的原子操作wait(s)和 signal(s)对S进行减1和增1操作,实现对临界资源的访问进行控制。这两个操作习惯上分别被称为P操作和V操作。 (2)同步原语的两种实现方式: 忙等待方式 阻塞等待方式 ;int(semaphore) S=N; //N为同类资源的总数 Wait(s): while (S≤0);// 执行空语句等待, //等待的含义是什么? S=S-1; Signal(s): S=S+1; ;int S=1;//定义一个信号量 Wait(S): while (S==0); //执行空语句等待 S=S-1; Signal(S): S=S+1; ;2010研究生试题(互斥); 在结构型信号量机制中定义了两个变量单元,一是用于表示临界资源数目的整型变量value,另一个是等待进入临界区的进程所组成的阻塞队列的指针L(指向PCB队列的指针)。;wait(semaphore s) { s.value--; if (s.value0)//代表的含义是什么? { Insert(caller,s.L);block(caller);}};(1)二元记录型信号量的数据结构: typedef Struct { int value; // Value的值为0或1

文档评论(0)

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

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

1亿VIP精品文档

相关文档