Nucleus进程间通信(IPC)方式
版权声明:本文为博主原创文章,未经博主同意不得转载--“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)方式的更多相关文章
- 共享内存是最快的一种IPC方式
在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...
- 进程间通信IPC之--共享内存
每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲 ...
- Android进阶笔记18:选用合适的IPC方式
1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...
- Android进程间通信IPC
一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...
- 进程间通信IPC -- 管道, 队列
进程间通信--IPC(Inter-Process Communication) 管道 from multiprocessing import Pipecon1,con2 = Pipe()管道是不安全的 ...
- [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
chromium源码阅读-进程间通信IPC.消息的接收与应答 chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的 ...
- 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)
进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...
- Android进阶笔记15:选用合适的IPC方式
1. 相信大家都知道Android进程间通信方式很多,比如AIDL.Messenger等等,接下来我就总结一下这些IPC方式优缺点. 2. IPC方式的优缺点和适用场景 3. 附加:使用Intent实 ...
- 进程间的八种通信方式----共享内存是最快的 IPC 方式
1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. 2.高级管道(popen):将另一个程序当做一个新 ...
随机推荐
- step7: 输出到json文件
调用scrapy自身的Exporter输出 编辑pipeline文件 import json from scrapy.exporters import JsonItemExporter #引入Expo ...
- 架构实战项目心得(十):基于spring-ladp的统一用户中心结构设计以及代码结构设计
一.目录设计 1 公司 2 部门 3 注册人员 4 层级人员 二.规则 1 注册 自行注册人员放到模拟公司的目录下,等所属公司组织结构建立完毕,将此人员迁移到所属公司(或者删除此人员,所属公司新建此人 ...
- IE10 CSS Hack(顺便聊聊IE11的CSS Hack)
一.特性检测:@cc_on 我们可以用IE私有的条件编译(conditional compilation)结合条件注释来提供针对ie10的Hack:该脚本里面的IE排除条件注释,以确保IE6-9不承认 ...
- 出现多个sessid
这种情况我也出现了,很郁闷.这是每次请求页面,都生成一个存PHPSESSID的cookie,cookie路径的问题,可以发现你这几个PHPSESSID的Path都不一样.我修改Thinkphp的配置文 ...
- Alice's Print Service
Alice's Print Service Time Limit: 2 Seconds Memory Limit: 65536 KB Alice is providing print ser ...
- 二、redis的配置
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 bytes # 1kb ...
- SQL COUNT DISTINCT
Create table trade ( sell_id int, --卖家 buy_id int, -- 卖家 time date --交易时间 ) sell_id, buy_id, time s ...
- Android 录音getMaxAmplitude()
这个方法是用来获取在前一次调用此方法之后录音中出现的最大振幅,文档解释如下: Returns the maximum absolute amplitude that was sampled since ...
- 十四、css动画基础知识
引用动画的方式: 1.轻量动画: cubic-bezier(0.165, 0.840, 0.440, 1.000);//加上贝塞尔曲线使动画运动起来更加平滑 2..scrollNews,.m-tr ...
- 我要为运维说一句,我们不是网管,好不!!Are you know?
运维 运维,这里指互联网运维,通常属于技术部门,与研发.测试.系统管理同为互联网产品技术支撑的4大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同. 一个互联网产品的生成一般经历的过程是:产 ...