4.2 临界区管理.ppt

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

对进程i和进程j,算法代码如下: turn: integer; turn: = i; f_Pi; /* 创建进程Pi */ f_Pj; /* 创建进程Pj */ ? cobegin Pi: /* 对进程i */ begin …… while turn = j do nothing; critical section; turn = j; end; Pi:/* 对进程i */ begin …… flag[i] = true; while flag[j] do nothing; critical section; flag[i] = false; …… end; ? Pj: /* 对进程j */ begin …… flag[j] = true; while flag[i] do nothing; critical section; flag[j] = false; …… end; 软件解法的缺点 1. 忙等待(busy waiting) 2. 实现过于复杂,需要高的编程技巧 Swap的应用为: var lock:Boolean; lock = false; Pi /* 对进程Pi,i=1,2,3,…,n */ begin var Pi:Boolean; Pi: = true; do { SWAP(Pi,lock); }while(Pi); /* 上锁 {临界区}; lock: = false; /* 开锁 end; 4.2.3 早期的临界区管理方法(续) 系统为每个临界区设置一个全局布尔锁变量lock, 其初值为false,表示没有进程在访问临界区, 用对换指令swap(lock,Pi)将临界区上锁,上锁成功后,进程访问临界区,临界区访问完后,开锁。 如果lock的值为true,表示有进程在访问临界区,等待开锁。 利用swap指令可以简单有效地实现互斥。 4.2.3 早期的临界区管理方法(续) 使用硬件指令实现临界区管理有如下优点: 实现简单:只需要硬件指令就可实现。 适用性强:可用于多个并发进程的单处理器系统或共享内存的多处理器系统。 可支持多个临界区:每个临界区用单独的变量定义,对临界区的多少没有限制,可支持多个临界区。 4.2.3 早期的临界区管理方法(续) 用硬件指令实现临界区管理存在的缺点: 耗费处理器时间:采用忙等待,没有放弃处理器等待,使得处理器空闲时间增多。 进程产生饥饿现象:一个进程离开临界区并唤醒阻塞等待的其它进程,可能阻塞更早的进程长期得不到唤醒,产生饥饿现象。 可能产生死锁:在一个单处理器系统中,进程执行特殊指令,如testset,并进入临界区,这时拥有更高优先级的进程可能抢占正在执行的进程,而更高优先级的进程不可能得到没有释放的临界资源,于是这两个进程发生死锁。 4.2.3 早期的临界区管理方法(续) 4.2 临界区管理 4.2.1 临界资源和临界区 互斥共享的资源称为临界资源。 在生产者和消费者进程中,缓冲区和变量count都是临界资源。 在程序中对临界资源访问的代码部分称为临界区。 每个进程访问临界资源前都要判断该资源能否访问,如果进程能够访问,才能进入到临界区访问临界资源; 如果不能访问,则进程需要等待,直到该资源能够访问为止,才能进入到临界区访问临界资源。 进程对临界资源访问结束后,需要将资源归还,使其他进程能够知道临界资源已经被当前进程访问结束。 4.2.1 临界资源和临界区(续) 在程序中,进入临界区代码之前,应该是对临界资源能否访问的判断,这部分代码称为进入区,进入区通常是测试语句或判断语句,如while,if等。 临界区后面的代码应该体现对临界资源访问结束后的标志,即退出区。 程序中的进入区、临界区和退出区3个部分如图4.3所示。 4.2.1 临界资源和临界区(续) 图4.3 进入区、临界区和退出区 Begin … critical section; /* 临界区 … end … exit section /* 退出区 entry section /* 进入区 (1)空闲让进,互斥使用 当没有进程访问临界资源,临界资源为空闲时,系统允许一个请求临界资源的进程进入临界区,访问临界资源。 (2)忙则等待 当已有进程正访问临界资源,临界资源为忙时,则系统不允许当前请求临界资源的进程访问临界资源,请求进程只能等待,以保证临界资源的互斥使用。 (3)有

文档评论(0)

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

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

1亿VIP精品文档

相关文档