【论文资料】OS信号量机制.ppt

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

3.3.2 信号量(semaphore)机制 P51 1、整型信号量机制 2).利用信号量实现互斥 注 意: 3). 利用信号量来描述前趋(合作)关系 前趋关系:并发执行的进程P1和P2中,分别有代码C1和C2,要求C1在C2开始前完成; 例:用信号量来描述如下的前趋图 伪码描述 3、信号量集 1) AND型信号量集机制 2) 一般“信号量集”机制 信号量 3.3.3 经典进程同步问题 P58 生产者--消费者同步的关键问题 采用记录型信号量机制解决该同步问题 2. 读者-写者问题 (readers-writers problem) A.采用记录型信号量机制 B.采用一般信号量集机制 3. 哲学家进餐问题(the dining philosophers problem) (由Dijkstra首先提出并解决) 问题分析 死锁 死锁问题的几种解决方法 P62 Lifang ?2011 * Operating System 前面的互斥算法都存在问题,它们是平等进程间的一种协商机制,需要一个地位高于进程的管理者来解决公有资源的使用问题。OS可从进程管理者的角度来处理互斥的问题,信号量就是OS提供的管理公有资源的有效手段 1965年,由荷兰学者Dijkstra提出,他把互斥的关键概念抽象到信号量这个概念中,是一种卓有成效的进程同步机制 1、整型信号量机制 2、记录型信号量机制 3、信号量集机制 信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作来访问. 1).整型信号量 是一个整数,表示空闲资源总数(又称为“资源信号量”) ----若为非负值表示当前的空闲资源数, ----为负值其绝对值表示当前等待临界区的进程数 ----初值应该大于零。 两个原子操作即: P,V操作。也常称为wait(s),singal(s) (P、V分别是荷兰语的test(proberen)和increment(verhogen)) 即: P(s): Wait(s): while s=0 do no_op s:=s-1; V(s): Singal(s): s:=s+1; process1: begin repeat P(mutex); critcial section; V(mutex); remainder section; until false; end 利用信号量实现进程互斥: Var mutex: semaphore ;//说明一个信号量 process1: begin repeat wait(mutex); critical section; signal(mutex); remainder section; until false; end process2: begin repeat wait(mutex); critical section; signal(mutex); remainder section; until false; end 为临界资源设置一个互斥信号量mutex(MUTual EXclusion),初值为1;在每个进程中将临界区代码置于wait(mutex)和signal(mutex)原语之间 必须成对使用wait和signal原语 wait、signal原语不能出现次序错误、重复或遗漏 遗漏wait原语则不能保证互斥访问 遗漏signal原语则不能在使用临界资源之后将其释放(给其他等待的进程); C1 C2 P 2 P 1 C 1 C 2 V(S 12 ); P(S 12 ); 为每个前趋关系设置一个互斥信号量S12,其初值为0 begin S1; signal(a); signal(b); end; begin wait(a); S2; signal(c); signal(d); end; begin wait(b); S3; signal(e); end; begin wait(c); S4; signal(f); end; begin wait(d); S5; signal(g); end; begin wait(e); wait(f); wait(g); S6; end; s1 s2 s4 s5 s3 s6 Var a,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0,0; Parbegin Parend; 引入

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档