操作系统 ---- 同步、通信与死锁.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 并发管理 从串行到并行 程序:实现算法的具体操作步骤,各个指令在具体的处理器上是严格有序执行的 各个程序串行,程序内部串行 特点: 执行的顺序性 环境的封闭性 结果的确定性 过程的可再现性 引入并行之后,以上四点就不再成立了 当共享资源发生改变时,就会导致各个并行进程之间出现问题 若不加任何限制条件,进程之间就会出现任意的情况,一个进程会对另一个进程产生不可预料的影响 多线程编程之中,一旦发现错误,往往很难复现 原因:两个进程的执行步骤可能出现任意的组合,导致了上一次出现的错误,以后就很难再次出现 并行,就带来了计算结果的不确定性 同步 同步的目的: 保证算法在并行情况下依然有确定的结果 限制条件尽量少 同步措施是一类规则,规定了进程在交替执行的过程中要遵循的规则,进程间的步骤不可以任意穿插组合 临界区(critical section) 进程间有竞争关系,都是因为使用了共同的资源。 并发进程中与共享变量有关的程序段,称为临界区 共享变量所代表的资源,称为临界资源 要保持进程之间的正确运行,需要互斥访问临界区 临界区访问的三个原则(1965,Dijkstra) 一次至多有一个进程进入临界区执行 如果已有进程在临界区中,试图进入此临界区的其他进程应等待 进入临界区的进程应在有限时间内退出,以便让等待队列中的一个进程进入 几种临界区管理方法 Peterson算法 一种纯软件算法,通过两个变量来实现互斥访问临界区 硬件方法 关中断 并发问题产生的原因是由于进程不正确的交替执行,如果禁止进程切换,就从源头上避免了并发问题 进程切换本质上发生于中断期间,关闭中断的意图就是禁止进程切换,从而避免并发 其不足之处: 其一,关闭中断只能影响到所在的CPU,而不能关闭其他的CPU,在多处理器环境中此方法无效 其二,采用关闭中断的方法,会引起系统的安全隐患 测试与设置指令 现代处理器上都有一种“读-修改-写入”的原子指令,进行的操作如下: 1 将内存指定位置的存储单元的内容读 入到寄存器 2 将新的值写入刚才的存储单元 程序 test_and_set(x){ tmp = x x = 1 return tmp } 则加锁操作可以写成: value = 0 lock(){ while( test_and_set(value) == 1 ); } 如要解锁,则简单将值0赋给变量即可 unlock(){ value = 0 } 临界区代码则可以这样来写: lock(); 临界区代码 unlock(); 交换指令 硬件指令中有一种交换两个变量值的原子指令,如Intel处理器中的XCHG 设变量lock的初始值为false,每个试图进入临界区的进程用一个变量key去交换出这个lock的值 总结这几种硬件解决方案,都需要处理器设置了这样的原子指令,另外它们都有忙等待的缺点。 Lock(){ key = true; swap(key, lock); while(key); } Unlock(){ swap(false, lock); } 并发模型 -- 生产者-消费者问题 用来描述某种并发情况的理论模型,某一种并发技术通过解决并发模型来验证其是否可行 描述:有n个生产者,每个生产者进程为P(i),有m个消费者,每一个消费者进程为C(j),有一个具有k个单位的货物缓冲区。P(i)与C(j)都是并发进程,只要缓冲区未满,生产者就往里面添加货物,只要缓冲区未空,消费者就从里面取走货物。 利用睡眠-唤醒方法来解决 如果生产者发现缓冲区满了,则唤醒消费者,自己睡眠 如果消费者发现缓冲区空了,则唤醒生产者,自己睡眠 程序(略) 在逻辑分析上,这个方法没有什么大问题,但是由于该方法没有有效限制进程步骤的方法,在某些情况下会导致死锁问题 信号量 强大的同步原语,既可以用于进程同步,也可以用于进程通信 1965年,由荷兰计算机科学家Dijkstra提出 定义(semaphore) 信号量sem为一个整型变量,对它可以有两个操作:增加(V)、减少(P) P操作(down): sem - 1 if ( sem 0 ) 睡眠 V操作(up): sem + 1 if ( sem = 0 ) 唤醒 关于信号量的三个性质: 若sem为非负值,则该值等于可以进入临界区的进程个数 若sem为负值,则其绝对值等于在临界区外等待的进程个数 P操作意味着一个请求资源的操作,V操作意味着一个释放资源的操作 当sem的值只能取0和1时,称为互斥信号量,此时可以用来当进入临界区的锁变量 Sem的值大于1时,可以用来控制使用一定数量的资源 用信号量解决生产者-消费者问题 (略) 通信 进程同步也是进程通

文档评论(0)

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

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

1亿VIP精品文档

相关文档