内容摘要:在数据实时性、准确度要求很高的情况下,系统在对数据的采集和处理过程中,由于其进程协调性问题,往往会造成数据的丢失。利用经典进程同步模型,可解决嵌入式Linux系统中数据同步读写冲突的问题。
摘要 Linux作为一个开源、稳健的操作系统,支持多种平台,拥有丰富的开发工具和应用软件,尤其是其内核可裁减的特性,非常适合嵌入式系统。在数据实时性、准确度要求很高的情况下,系统在对数据的采集和处理过程中,由于其进程协调性问题,往往会造成数据的丢失。利用经典进程同步模型,可解决嵌入式Linux系统中数据同步读写冲突的问题。
关键词 嵌入式 Linux进程同步 无竞争态读写
引 言
在对实时采集更新的数据进行处理时,往往会遇到数据更新速度与数据处理的速度不匹配的问题。这种情况下,会出现数据丢失而导致数据处理结果不准确,甚至会带来不可预测的后果,因此需要一种机制来协调数据更新与数据处理,从而保证数据的完整性和处理结果的准确性。作为一个多任务、多用户操作系统,Linux支持多个进程在系统中并发运行,由于进程本身的动态特性,用来描述实时数据处理非常合适,因此,解决好Linux进程间的同步与通信问题就能解决实时数据处理的问题。
在Linux环境下,进程通常存在运行(running)、阻塞(blocked)、就绪(ready)、终止(terminated)四种状态。当多个进程并发执行时,往往会出现进程间的竞态。我们希望进程能协调彼此间的行为,使得一个进程只有在其他的进程执行到一个特定的点时才会执行一个动作,即控制同步;同时,当并发进程访问共享数据时不应当出现竞争条件。这一点通过在访问共享数据时执行互斥来确保,即数据访问同步。
实现同步的基本技术是阻塞一个进程,直到一个特定条件满足为止;实现数据访问同步是通过阻塞一个进程直到另外的进程完成访问共享数据。
1 有限长度缓冲区的生产者一消费者问题模型
当仅存在单个生产者和消费者时,生产进程和消费进程所对应的是同样的数据结构,它们共享同一个数据空间。生产进程和消费进程如何进行相互协调,使得消费进程每次使用的数据都是生产进程新生产写人的,又使生产进程新写入的数据不会覆盖还未被消费进程读出使用的数据,是该问题模型实现的关键问题。
作者:陈南西 田学隆 陈桂 责编:豆豆技术应用