软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 系统运维 -> 进程间通信(一):竞争条件与互斥方案 -> 正文阅读

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


                                进程间通信(一):进程之间的冲突与处理方式
                                                           ——《现代操作系统第二章第三节》
     1、问题的提出
     我们想象一个假脱机打印程序,当一个进程需要打印一个文件时,它会将该文件放在一个假脱机目录下。另一个进程负责周期性地检查是否有文件需要被打印,如果有就打印并将其在目录中删除。简单设想,脱机目录中有很多槽位,每个槽位中存放文件名,假设它们有两个共享的变量:out,指向下一个要被打印的文件;in,指向下一个空闲的槽位。如图,下一个被打印的应该是4号槽,下一个入队的应该是7号槽。
                                      [img]http://img.blog.csdn.net/20160329211408880?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
      现在,假设进程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变量,用来记录轮到那个进程进入临界区。
                   [img]http://img.blog.csdn.net/20160329211208520?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
           当turn=0时,只有进程0能进入临界区,进程0在离开临界区前将turn 
              置1,从而标志,轮到进程1进入临界区。
           缺点:严格地轮换,可能导致临界区外的进程阻塞需要进入临界区的进程(例 
               如:当turn=0时,意味着只有进程0能进入临界区,这时如果进程0还要
               100年才会进入临界区,而进程1需要马上进入,那进程1还要白白等100 
               年.)
          总结:当一个进程比另一个进程慢了许多的情况下,不宜用这种方式。
         (4)Peterson解法
          这是Peterson本人发明的一种简单的互斥算法。
 
             [img]http://img.blog.csdn.net/20160329211558271?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center    
          我们分情况跑一遍程序:
          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)、不得使进程无限期等待进入临界区
    (下图为避免竞争条件的模型图)
 
            [img]http://img.blog.csdn.net/20160329211644210?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
 
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:57:15  
系统运维 最新文章
linux新进程的创建
Muduo网络库源码分析(一)EventLoop事件循
Linux系统分区
haproxylvsnginx负载均衡的比较
PeopleSoft介绍
win7+iis7+asp+.net+php环境配置
执行系统命令并且将输出写到指定日志文件的
linux批量替换多个文件中的字符串
makefile中=、:=和+=的区别
Linux服务器不关机新增硬盘的方法
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-23 3:54:48
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --