软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 系统运维 -> 进程间通信(一):竞争条件与互斥方案 -> 正文阅读
系统运维 最新文章
linux新进程的创建
Muduo网络库源码分析(一)EventLoop事件循
Linux系统分区
haproxylvsnginx负载均衡的比较
PeopleSoft介绍
win7+iis7+asp+.net+php环境配置
执行系统命令并且将输出写到指定日志文件的
linux批量替换多个文件中的字符串
makefile中=、:=和+=的区别
Linux服务器不关机新增硬盘的方法

[系统运维]进程间通信(一):竞争条件与互斥方案

  2016-04-01 16:58:08

                                进程间通信(一):进程之间的冲突与处理方式
                                                           ——《现代操作系统第二章第三节》
     1、问题的提出
     我们想象一个假脱机打印程序,当一个进程需要打印一个文件时,它会将该文件放在一个假脱机目录下。另一个进程负责周期性地检查是否有文件需要被打印,如果有就打印并将其在目录中删除。简单设想,脱机目录中有很多槽位,每个槽位中存放文件名,假设它们有两个共享的变量:out,指向下一个要被打印的文件;in,指向下一个空闲的槽位。如图,下一个被打印的应该是4号槽,下一个入队的应该是7号槽。
                                      

      现在,假设进程A、B将把文件A、B入队,假设A先读到的信息是7,并且A将7存入自己的一个记忆变量中,而这时,系统认为已经分给了A足够的时间,于是中断A切换置进程B。进程读到的信息是7,将7存入自身的一个记忆变量中,并将int更新至8。至此B已经完成了所有的入队操作,转而去干其他的事情。当A继续执行时,它还认为应该将文件存到7号槽,于是A文件成功地覆盖住了B文件,而我们的B文件,永远都不会被打印。问题就出现了。
      2、抽象一些概念
      竞争条件:类似于上述情况,即两个或者多个进程读写某些共享数据,而最后的结果取决于进程的运行的精确时序,称为竞争条件。(把条件理解成情况,竞争情况,貌似更加容易理解一些=。=)
      互斥:互斥是一种手段,它使共享数据的进程无法同时对其共享的数据进行处理。
      临界区:即访问共享内存的程序片。也就是说,通过合理的安排,使得两个进程不可能同时处在临界区中,就能避免竞争条件。
      忙等待:连续测试一个变量直至某值出现位止。(如语句while(t!=0){},那么当t不为零时,while()之后的语句将永远不会执行,这种情况书中好像也叫挂起)
      自旋锁:用于忙等待的锁。(在3-(3)中,turn即使自旋锁)
             
          3、忙等待的互斥(几种实现互斥的方法)
         (1)屏蔽中断
          原理:进程进入临界区后立即屏蔽所有中断,离开后打开中断。
          缺点:a、多核的系统无效(其他进程任然可以占用其他的CPU继续访问公共内              
                   存)
                b、用户程序来控制中断会很危险(使想一下,一个进程屏蔽中断后不再       
                   打开中断,那你的系统就GG了)
          结论:屏蔽中断对系统本身是一项很有用的技术,但对用户进程不是一种合适的
                通用互斥机制。
         (2)锁变量
          原理:屏蔽中断的软件实现机制。
                假定一个共享(锁)变量,初值为0,代表临界区内无进程,进程进入临                
             界区后将其改变为1,代表临界区内有进程;倘若进程在进入临界区之前,              
             锁变量值为1,该进程将等待其值变为0。
未能实现的原因:与假脱机目录的疏漏一样,如果一个进程进入临界区,但是在       
             它把锁变量置1之前被中断,另一个进程进入临界区后将0置1,这样,
             当前一个进程再次运行时它也将锁变量置1,这样临界区内依然存在两
             个进程。
         (3)严格轮换
          原理:共享turn变量,用来记录轮到那个进程进入临界区。
                   

           当turn=0时,只有进程0能进入临界区,进程0在离开临界区前将turn 
              置1,从而标志,轮到进程1进入临界区。
           缺点:严格地轮换,可能导致临界区外的进程阻塞需要进入临界区的进程(例 
               如:当turn=0时,意味着只有进程0能进入临界区,这时如果进程0还要
               100年才会进入临界区,而进程1需要马上进入,那进程1还要白白等100 
               年.)
          总结:当一个进程比另一个进程慢了许多的情况下,不宜用这种方式。
         (4)Peterson解法
          这是Peterson本人发明的一种简单的互斥算法。
 
             
    
          我们分情况跑一遍程序:
          a、进程0通过调用enter_region()进入临界区,此时1也想调用enter_region() 
         来进入临界区,但interested[0]为TRUE,因此被while循环挂起,当进程0出临
         界区时调用leave_region(),将interested[0]设为FALSE,进程1即可及时进入临界
         区。
          b、当进程0在调用enter_region()过程的任意时刻被中断,进程1进入临界区
          后进程0再次进行时,依然会被挂起。(实际上while循环体中的两条判断句就 
          保证了,当一个进程在临界区中时,另一个想进入临界区的进程必然会被挂起)。
 
         (5)TSL指令
          原理简述:
          TSL(test and set lock),是十分适合多处理器计算机实现互斥的硬件支持。它会 
         在一个进程进入临界区时,锁住内存总线,从而禁止其他CPU在本指令结束之前 
         访问内存。
         对于TSL指令,本文之做简单的原理性描述(虽然老师上课讲的比较详细),想进
         一步了解关于TSL指令,可以看一下书中本节内容,有详细阐述。
    4、综述
        要想拟定一个方案,使它既能避免竞争条件,又能保证进程运行与协作的效率,必须要满足4个条件。
         (1)、任何两个进程不能同时处于临界区
         (2)、不应对CPU的速度和数量做任何假定
         (3)、临界区外运行的进程不能阻塞其他进程
         (4)、不得使进程无限期等待进入临界区
    (下图为避免竞争条件的模型图)
 
            

 
上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:57:15  
360图书馆 论文大全 母婴/育儿 软件开发资料 网页快照 文字转语音 购物精选 软件 美食菜谱 新闻中心 电影下载 小游戏 Chinese Culture
生肖星座解梦 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图 中国文化英文 多播视频 装修知识库
2017-1-22 7:42:23
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --