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):将另一个程序当做一个新 ...
随机推荐
- npm 配置
设置代理 $ npm config set proxy http://server:port $ npm config set https-proxy https://server:port 如果代理 ...
- CVE-2017-6920 Drupal远程代码执行漏洞学习
1.背景介绍: CVE-2017-6920是Drupal Core的YAML解析器处理不当所导致的一个远程代码执行漏洞,影响8.x的Drupal Core. Drupal介绍:Drupal 是一个由 ...
- mongodb基本指令
MongoDB基本命令用成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作. 输入help可以看到基本操作命令: show dbs:显示数据库列表 show co ...
- Windbg 脚本命令简介 一
Windbg 脚本命令简介 一 Windbg command r: registers的简写,可以显示或修改寄存器的值.浮点寄存器的值.定义别名变量. 可以显示当前线程下的寄存器值. The r c ...
- js控制input text字符键入/字符长度限制/字母自动大写
功能: 1.仅允许指定字符键入 2.限制长度 实现代码: <input type="text" style="width: 6em" name=" ...
- new date()标准时间转yyyy-mm-dd hh:mm 24小时制
<!DOCTYPE html> <html> <head> <title>new date()标准时间转yyyy-mm-dd hh:mm 24小时制&l ...
- Maven+MyBatis 初试
工作中一直使用的都是Hibernate,总是听见有人拿Mybatis和Hibernate做比较,今天尝试来看看. 一.用Maven建立web项目 此处参见 http://www.cnblogs.com ...
- 《Java并发编程实战》读书笔记(一)----- 简介
简史 早期的计算机中不包含操作系统,从头至尾都只执行一个程序,并且这个程序能访问计算机所有资源.随着计算机发展,操作系统的出现,使得计算机可以同时运行多个程序,并且每程序都在单独的进程内运行.为什么要 ...
- struts2 国际化语言转换
学习struts2,了解了使用struts2的配置文件可以走向国际化,实现页面的语言转换.我已中文和英文为例,简单的实现登录页面的国际化 废话不多说,上代码 一,login.jsp页面 使用s标签&l ...
- Found 1 slaves: Use of uninitialized value in printf at /usr/local/percona-toolkit/bin/pt-online-schema-change line 8489
1. problem description: as the title show, i miss the first problem using pt-online-schema-change to ...