版权声明:本文为博主原创文章,未经博主同意不得转载--“http://blog.csdn.net/suipingsp”。

https://blog.csdn.net/suipingsp/article/details/31750393

实时操作系统Nucleus Plus提供了6种进程间通信方式。分别为:邮箱(mailboxes)、消息队列(queues)和管道(pipes)、信号量(semaphores)、事件集(event groups)和消息(signals)。前三者用于进程间通信,后三者用于进程同步。本文总结了Nucleus Plus进程间通信方式。

i,首先说明Nucleus进程间通信的两个基本概念。

消息(message):由一个或多个字节(byte)或者字(32-bit word,4bytes)组成的信息单元,可在不同进程间传递少量的信息。邮箱(mailboxes)、消息队列(queues)和管道(pipes)通信的构成单元是message。

事件(event)或者信号(signal):一个32-bit word中的每一位bit代表一个信号或者事件,仅仅能用于不同进程间通知某情况出现,不能携带额外的信息。

当中一个32-bit word称为一个事件组。这是事件集(event groups)和消息(signals)的构成单元。

ii,邮箱(mailboxes)、消息队列(queues)和管道(pipes)

 

邮箱(mailboxes)

消息队列(queues)

管道(pipes)

消息构成

4个32位字

单一消息

一个或多个32位字

多个消息

一个或多个字节

多个消息

任务挂起/唤醒

FIFO/进程优先级

FIFO/进程优先级

FIFO/进程优先级

广播/多任务支持

支持

支持

支持

动态创建

数量限制

Note:

1,数量限制指的是一个任务所使用的邮箱、消息队列或者管道的数量是否受限。

2,FIFO挂起/唤醒:当能够满足任务要求时,任务唤醒的顺序依照先进先出进行。

3,任务优先级挂起/唤醒:依照被挂起任务的优先级顺序进行唤醒,高优先级优先唤醒。

4,任务挂起/唤醒模式在邮箱、消息队列或者管道被创建时确定。

iii,事件集(event groups)和消息(signals)

信号和事件以及后面介绍的信号量用来解决任务间的同步问题。

信号signal:

异步方式执行,任务提前指定信号处理子程序,每一个任务能够处理32个信号。每一个信号对应32-bit字的一个位。

任务创建时默认信号是disable的,可通过设置信号屏障字的对应位来决定某信号是否使能。屏障字某位设为1表示使能该信号。信号仅仅能是一个进程去通知还有一个进程,即不支持广播。

当信号出现。任务中断而且调用信号处理程序,信号被处理后自己主动清除。

信号处理子程序不能被新信号中断。不论什么新信号的处理在当前信号处理完毕后进行。在第一个信号被验证之前再次发送的相同的信号将被丢弃弃。

project开发中常结合信号和内存队列来实现进程间的数据通信。一个简单的样例,进程A将数据写入一段内存、产生一个对应的全局变量控制结构体。而后通过signal通知进程B去读取;进程B收到signal后依据全局变量控制结构体到对应的内存中将该数据读取处理。

事件event:

同步方式执行,是用于警告某一特定的系统事件已经发生的机制。每一个32-bit字成为一个事件集,当中的每一位称作事件标志event flag。event flags的设置set和清除clear以及读取receive能够通过逻辑与/或进行。

另外。event flag被读取received后可自己主动重置。

应用程序可能拥有的事件集没有预先的设定。除非主动通过特定的服务申请。任务并不能知道某事件是否已经发生了。(The task does
not recognize event flags are present until the specific service request is made.)

比如。一个事件组的32位event flag分配为:5位用于消息队列事件、24位用于标示信号事件。其余3位用于识别事件类型(是消息队列、信号还是超时)。演示样例代码例如以下(NU_EventWait函数封装了Nucleus PLUS 事件组函数):

iv,最后是一种特殊的任务间同步手段--信号量(semaphores)

信号量(semaphore):是一种数据操作锁。它本身不具有数据交换的功能,而是通过控制其它的通信资源(文件,外部设备)来实现进程间通信,它本身仅仅是一种外部资源的标识。当进程不再使用一个信号量控制的共享资源时,信号量的值+1,对信号量的值进行的增减操作均为原子操作,这是因为信号量基本的作用是维护资源的相互排斥或多进程的同步訪问。

Nucleus进程间通信(IPC)方式的更多相关文章

  1. 共享内存是最快的一种IPC方式

    在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...

  2. 进程间通信IPC之--共享内存

    每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲 ...

  3. Android进阶笔记18:选用合适的IPC方式

    1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...

  4. Android进程间通信IPC

    一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...

  5. 进程间通信IPC -- 管道, 队列

    进程间通信--IPC(Inter-Process Communication) 管道 from multiprocessing import Pipecon1,con2 = Pipe()管道是不安全的 ...

  6. [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答

    chromium源码阅读-进程间通信IPC.消息的接收与应答   chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的 ...

  7. 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)

     进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...

  8. Android进阶笔记15:选用合适的IPC方式

    1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...

  9. 进程间的八种通信方式----共享内存是最快的 IPC 方式

    1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 2.高级管道(popen):将另一个程序当做一个新 ...

随机推荐

  1. Go语言备忘录(1):基本数据结构

    本文内容是本人对Go语言的变量.常量.数组.切片.映射.结构体的备忘录,记录了关键的相关知识点,以供翻查. 文中如有错误的地方请大家指出,以免误导!转摘本文也请注明出处:Go语言备忘录(1):基本数据 ...

  2. .netCore2.0 WebApi 传递form表单

    随着it的技术发展,目前越来越多的项目采用前后端分离的开发模式,通过webapi提供接口数据来进行交互 最近项目用的是.netCore WebApi,在最近的项目使用中发现一些问题,进行记录.个人简介 ...

  3. [转]让ASP.NET Web API支持$format参数的方法

    本文转自:http://www.cnblogs.com/liuzhendong/p/4228592.html 在不使用OData的情况下,也可以让ASP.NET Web API支持$format参数, ...

  4. MemcacheHelper.cs

    using Memcached.ClientLibrary; using System; using System.Collections.Generic; using System.Linq; us ...

  5. Java 8 读取文件

    以前的Java版本中读取文件非常繁琐,现在比较简单.使用Java8的Files以及Lambda,几句代码就可以搞定. public static String getXml() { StringBuf ...

  6. maven配置环境

    今天初学maven,先学习一下如何在windows下面配置maven,当然你要先配置好jdk的环境. 第一步,上官网下载maven插件,网址是:点击打开链接 第二步,解压文件夹,放在某一个盘符下,我是 ...

  7. <%@ page isELIgnored="false"%>的作用

    JSP 2.0的一个主要特点是它支持表达语言(expression language).JSTL表达式语言可以使用标记格式方便地访问JSP的隐含对象和JavaBeans组件,JSTL的核心标记提供了流 ...

  8. 1-5 Sass的基本特性-运算

    [Sass运算]加法 程序中的运算是常见的一件事情,但在 CSS 中能做运算的,到目前为止仅有 calc() 函数可行.但在 Sass 中,运算只是其基本特性之一.在 Sass 中可以做各种数学计算, ...

  9. 关于moucedown 的3种触发方式

    与 click 事件不同   mousedown 按下鼠标就可以触发 click 只能用鼠标左键触发, 而mousedown 可以由单击.中键.或右击 触发 根据对event.which 的判断,可以 ...

  10. Idea15 常用设置(一):JDK、SVN

      1:显示行号  File->Settings->General->Appearance 2: 代码自动补齐即使是小写字母也会弹出代码补齐提示     3:自动编译 设置 4: 设 ...