zoukankan      html  css  js  c++  java
  • vxworks任务通信机制

    VxWorks支持各种任务间通信机制,提供了多样的任务间通信方式,主要有如下几种:

    Ÿ         共享内存,主要是数据的共享;

    Ÿ         信号量,用于基本的互斥和任务同步;

    Ÿ         消息队列和管道,单CPU的消息传送;

    Ÿ         Socket和远程过程调用,用于网络间任务消息传送;

    Ÿ         二进制信号,用于异常处理。

     

    在多处理器之间的任务也可采用共享内存对象来实现任务间通信,只是在系统配置上有所不同.

    1.1.1.共享存储区

    任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。因为所有任务都存在于单一的线性地址空间,任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同上下文的代码所指向。

    1.1.2.互斥

    当某一地址空间用于数据交换时,为了避免冲突,对于内存的锁定是非常重要的。两个或多个任务读写某些共享数据时,最后的结果取决于任务运行的精确时序,有可能得到错误值,这样必须以某种手段确保当一个任务在使用一个共享变量或文件时,其他任务不能做同样的操作。主要有关中断、抢占禁止和用信号量锁定资源等方法。(vxworks任务调度机制为中断抢占,优先级抢占(需要触发条件,触发条件就是中断)和任务使用taskdelay直接放弃CPU)一般来说,关中断是最有效的解决互斥的方法。但这对于实时应用来说,它阻止系统对外部事件的响应,无法满足实时性的要求。同样,中断延迟也是不能接受。

    1.1.3.信号量

     VxWorks信号量提供最快速的任务间通信机制,它主要用于解决任务间的互斥和同步。针对不同类型的问题,有以下三种信号量:

    Ÿ         二进制信号量使用最快捷、最广泛,主要用于同步或互斥

    Ÿ         互斥信号量 主要用于优先级继承、安全删除和回溯;

    Ÿ         计数器

    VxWorks还提供POSIX信号量和多处理器上信号量的应用。

    1.1.1.消息队列

    现实的实时应用由一系列互相独立又协同工作的任务组成。信号量为任务间同步和联锁提供了高效方法。单处理器中任务间消息的传送采用消息消息队列。消息机制使用一个被各有关进程共享的消息队列,任务之间经由这个消息队列发送和接收消息。 任务间全双工信息传送

     

    1.1.2.管道

    管道用VxWorksI/O系统提供一种灵活的消息传送机制,它是受驱动器pipeDrvVxWorks所提供)管理的虚拟I/O设备。任务能调用标准的I/O函数打开、读出、写入管道。当任务试图从一个空的管道中读取数据,或向一个满的管道中写入数据时,任务被阻塞。和消息队列类似,ISR能向管道中写入信息,但不能从中读取。象I/O设备一样,管道有一个消息队列所没有的优势----调用select(),任务等待一系列I/O设备上的数据。

    1.1.3.系统实现

    Wind信号量对于各种类型的信号量的控制提供了同一规范化的接口,仅创建函数要特别指明信号量类型。

    semBCreate()           创建(产生并激活)一个二进制信号量 

    semMCreate()           创建(产生并激活)一个互斥信号量

    semCCreate()           创建(产生并激活)制一个计数信号量

    semDelete()            中止并自由信号量

    semTake()              获得信号量

    semGive()              给出信号量

    semFlush()             解锁所有正等待某一信号量的任务

     

     Wind 消息队列管理:

    msgQCreate()           创建(产生并激活)消息队列 

    msgQDelete()           中止并自由信号量

    msgQSend()             向消息队列发送消息

          msgQReceive()          从消息队列接收消息
  • 相关阅读:
    Word自带的文献管理功能的具体实现步骤
    线程通信中的细节问题
    Java中static方法、程序入口函数main方法的继承问题
    Android中模拟器启动中出现“emulator-arm.exe已停止工作”
    CMD命令详解
    jQuery实现回到顶部功能
    Toad&PL/SQL修改查询信息
    TOAD常用快捷键
    ORACLE WITH AS 用法
    常用快捷键(转)
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6521185.html
Copyright © 2011-2022 走看看