始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

嵌入式Linux中的进程同步无竞争态读写

发布时间:  2012/8/29 18:01:18

Linux作为一个开源、稳健的操作系统,支持多种平台,拥有丰富的开发工具和应用软件,尤其是其内核可裁减的特性,非常适合嵌入式系统。在数据实时性、准确度要求很高的情况下,系统在对数据的采集和处理过程中,由于其进程协调性问题,往往会造成数据的丢失。利用经典进程同步模型,可解决嵌入式Linux系统中数据同步读写冲突的问题。

引言

在对实时采集更新的数据进行处理时,往往会遇到数据更新速度与数据处理的速度不匹配的问题。这种情况下,会出现数据丢失而导致数据处理结果不准确,甚至会带来不可预测的后果,因此需要一种机制来协调数据更新与数据处理,从而保证数据的完整性和处理结果的准确性。作为一个多任务、多用户操作系统,Linux支持多个进程在系统中并发运行,由于进程本身的动态特性,用来描述实时数据处理非常合适,因此,解决好Linux进程间的同步与通信问题就能解决实时数据处理的问题。

在Linux环境下,进程通常存在运行(running)、阻塞(blocked)、就绪(ready)、终止(terminated)四种状态。当多个进程并发执行时,往往会出现进程间的竞态。我们希望进程能协调彼此间的行为,使得一个进程只有在其他的进程执行到一个特定的点时才会执行一个动作,即控制同步;同时,当并发进程访问共享数据时不应当出现竞争条件。这一点通过在访问共享数据时执行互斥来确保,即数据访问同步。

实现同步的基本技术是阻塞一个进程,直到一个特定条件满足为止;实现数据访问同步是通过阻塞一个进程直到另外的进程完成访问共享数据。

1 有限长度缓冲区的生产者一消费者问题模型

当仅存在单个生产者和消费者时,生产进程和消费进程所对应的是同样的数据结构,它们共享同一个数据空间。生产进程和消费进程如何进行相互协调,使得消费进程每次使用的数据都是生产进程新生产写人的,又使生产进程新写入的数据不会覆盖还未被消费进程读出使用的数据,是该问题模型实现的关键问题。

在生产者一消费者问题模型中,生产者进程不断生产产品并把它们放入缓冲区,消费者进程不断从缓冲区中取走产品进行消费。当缓冲区中产品已经放满时,表示生产速度高于消费速度,出现了供过于求,此时生产者必须等待产品被消费;当缓冲区为空时,表示消费速度高于生产速度,出现了供不应求,此时消费者进程必须等待产品的生产。生产和消费的进程必须达到同步运行,才能实现供需平衡。

处理读写同步的两种常见的策略被称为“强读者同步(strongreadersynchronization)”和“强写者同步(strongwritersynchronization)”。在强读者同步中,总是给读者以优先权,只要写者当前没有进行写操作,读者就可以获得访问权;在强写者同步中,写者总是获得优先权,只要强读者当前没有进行读操作,写者就可以获得访问权。而生产者消费者同步与单纯的读写同步又有不同,消费者可以通过访问资源对资源进行删除或销毁。

一个有限长度缓冲区的生产者消费者问题模型,是由若干生产者和消费者进程以及一个有限的缓冲池构成的。每个缓冲区能够存储一个信息记录,一个生产者一次生产一个信息记录。产生一个记录之后,等待单独进入一个空的缓冲区后将记录写入缓冲区。一个消费者进程一次消费一个信息记录。当它需要消费时,它等待单独进入一个满的缓冲区后将记录读出。


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线