嵌入式操作系统_6.任务间通信

1.任务间通信管理

        任务间通信管理也是嵌入式操作系统的关键功能之一。它主要为操作系统的应用程序提供多种类型的数据传输、任务同步/异步操作等手段。

2.操作系统任务之间的关系

        由于嵌入式操作系统是为应用提供管理、硬件支持、协调任务和中断处理程序等功能,具备着多任务能力,那么操作系统任务之间一般存在以下关系

        (1)相互独立:任务之间仅仅存在竞争CPU的资源,再无其他关联。

        (2)竞争:任务之间存在对除CPU外的其他资源的竞争(即互斥机制)。共享资源是多任务系统中主要关心的问题,在系统中,大多数的资源在 某一时刻仅能被某一任务使用,并且在使用过程中不能被其他任务中断。这些资源主要包括特定的外设、共享内存等。当CPU禁止并发操作时,那些包含了使用CPU之外的共享资源的代码就不能同时被多个任务调用执行。这样的代码称为“临界区域”。如果两个任务同时进入临界区域,将会产生意想不到的错误。

        (3)同步:协调彼此运行的步调。

        (4)通信:彼此间传递数据和信息,以协调完成某项工作。通信可以是在任务与任务之间,或中断服务程序(ISR)与任务之间。

3.任务间的通信手段 瞎蒙

        因此,要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,常用的通信方式包括:

  •         共享内存:数据的简单共享。
  •         信号量:基本的互斥和同步。
  •         消息队列:同一CPU内多任务间消息传递。
  •         Socket和远程调用:任务间透明的网络通信。
  •         Signals(信号):用于异常处理。

3.1共享内存

         共享内存是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。由于大部分嵌入式系统的任务共存于单一的线性地址空间,在多个通信机制。只要通信任务双方采用了协商一致的数据结构,包括各种类型的全局变量、双向链表、环形队列等复杂的数据结构,都可以被所用任务直接访问。

3.2信号量

         信号量是提供多任务间通信、同步和互斥的最优选择,它提供任务间的最快速通信。也是提供任务间同步和互斥的主要手段。对于互斥,信号量可以上锁对共享资源的访问。并且必禁止中断和禁止抢占提供更精确的互斥粒度。对于同步,信号量可以协调外部事件与任务的执行。

        针对不同类型的问题,操作系统可以有不同的信号量,一般分为三种:

  •         二进制信号量:最快的、最常用的信号量,用于解决任务的同步问题。
  •         互斥信号量:为解决具有内在地互斥、优先级继承和递归等问题而设置的一种特殊的二进制信号量。
  •         计数信号量:类似于二进制信号量,但是随信号量释放的次数改变而改变。适合于一个资源的多个实例需要保护的情形。

3.3消息队列

         消息队列作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。消息队列是一个类似于缓冲区的对象,通过它,任务和ISR发送接收消息,实现带数据的通信和同步。消息队列像一个管道,它暂时保持来自一个发送者的消息,直到有意的接收者准备读这些消息。这个临时缓冲区把发送任务和接收任务分隔开,即它必须同时释放发送和接收消息的任务,其基本原理见图1.

图1 消息队列基本原理 

        在实际应用中,使用消息队列的方法包括非互锁的单向数据通信、互锁的单向数据通信、互锁的双向数据通信和广播通信等。与此同时,消息队列中消息的队列存在多种方式,比如先进先出(FIFO)、先进后出(FILO)、紧急消息、优先级消息、时限消息等。

        管道(pipeline)是消息队列中的一种,是UNIX操作系统中传统的进程通信技术,一般分无名管道和命名管道,以I/O系统调用方式进行读写。在传统的实现中管道是单向数据交换。如图2所示。数据在管道内像一个非结构字节流,按FIFO的次序从管道中读出。一个管道提供一个简单的数据流设施。当管道空时,阻塞读任务;当管道满时,阻塞写任务。有些操作系统也允许有多个读任务的管道和有多个写任务。 

图2 管道的基本原理示意图 

3.4Socket和远程调用

         Socket和远程调用是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket起源于UNIX,在UNIX一切皆文件的思想下,进程间通信就被冠名为文件描述符(File Description)。Socket通信原理是一种“打开——读/写——关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者对方内容,通信结束关闭文件。

        Socket保证了不同计算机之间的通信,也就是网络通信。对于网站,通信模型是服务器与客户端之间的通信。两端都建立了一个Socket对象,然后通过Socket对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。图3给出了Socket的基本原理。

图3 Socket的基本原理 

3.5Signals

         Signals是VxWorks操作系统提供的一种特殊异常处理与任务之间的通信方式,其思想来源与POSIX。Signals主要用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器受到一个中断请求是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。Signals机制除了基本通知功能外,还可以传递附加信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1452335.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Android入门第69天-AndroidStudio中的Gradle使用国内镜像最强教程

背景 AndroidStudio默认连接的是dl.google的gadle仓库。 每次重新build时: 下载速度慢;等待了半天总时build faild;build到一半connection timeout;即使使用了魔法也难以一次build好;这严重影响了我们的学习、开发效率。 当前网络上的使用国内镜像的教程不全 网上的教程…

[初阶数据结构] 包装类 | 泛型

目录 一. 包装类 1.1 什么是包装类? 1.2 包装类的意义 1.3 基本数据类型与包装类 1.4 装箱 1.5 拆箱 1.6 小总结 二. 泛型 2.1 什么是泛型? 2.2 泛型的意义 2.3 泛型的语法 2.4 泛型的编译 2.4.1 下载插件 2.4.2 分析 2.5 上界 2.6 泛型方法 2.7 小总结 三. 总结 一.…

干货:数据中台如何深度挖掘数据价值,成就企业核心竞争力-亿发

在当今信息爆炸的时代,数据被誉为“新时代的石油”。企业如何从海量数据中提炼出有价值的信息,进而提升核心竞争力,成为各行各业的关键课题。数据中台作为一种新兴的数据管理和应用架构,正逐渐成为企业实现数据价值最大化的重要工…

MATLAB画图时添加标注显示有效数字的位数,可以编辑此函数

本来系统有个函数,在图像窗口选择标注工具,再在图像窗口右击鼠标,选择"编辑文本更新函数...",即打开系统的设置函数,可以修改最后一行: formattedValue [valueFormat num2str(value,4) removeV…

软考初级网络管理员__Web网站的建立、管理维护以及网页制作单选题

1.在HTML 中,用于输出“>”符号应使用()。 gt \gt > %gt 2.浏览器本质上是一个()。 连入Internet的TCP/IP程序 连入Internet的SNMP程序 浏览Web页面的服务器程序 浏览Web页面的客户程序 3.HTML 语言中,单选按钮的…

建筑八大员证报名一寸彩色照片要求及手机自拍方法解读

在建筑行业,八大员证的持有者是广受尊重的专业人士。然而,要成为一名合格的八大员,首先必须通过资格审核和报名流程。其中重要的一步就是提交一寸彩色照片,以确保个人信息准确无误。那么,你是否清楚报名时照片的要求以…

Selenium+Pytest自动化测试框架能碰撞出什么样的火花

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承 一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点呢: 代码复用率高…

python-求f(x,n)

[题目描述] 输入: 输入 𝑥和 𝑛。输出: 函数值,保留两位小数。样例输入1 4.2 10 样例输出1 3.68 来源/分类(难度系数:一星) 完整代码如下: x,nmap(eval,input().split(…

Elixir学习笔记——输入输出和文件系统

本章介绍输入/输出机制、文件系统相关任务以及相关模块(如 IO、File 和 Path)。IO 系统提供了一个很好的机会来阐明 Elixir 和 Erlang VM 的一些思维模式和新奇思想。 输入输出模块 输入输出模块是 Elixir 中读写标准输入/输出 (:stdio)、标准错误 (:s…

使用python绘制三维散点图

使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图(3D Scatter Plot)是一种用于展示三维数据的图表。与二维散点图类似,三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …

Golang——gRPC认证和拦截器

一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包,用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现,并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件: openssl:多用途的命…

能修复90%bug的小技巧

你还知道哪些小技巧?欢迎评论区分享交流

TCP/IP协议深入解析,初学者必看!

简介 在信息技术飞速发展的今天,网络已成为人类社会不可或缺的部分。实现网络中计算机相互通信的关键之一便是TCP/IP协议。作为互联网的基础,TCP/IP协议确保了全球范围内的数据交换和信息共享。 TCP/IP(传输控制协议/网际协议)是…

C++:STL容器-->set

使用set容器时需要导入头文件&#xff1a;#include <set> set和multiset区别&#xff1a; set不允许容器中有重复的元素 multiset允许容器中有重复的元素 1. 构造函数 set<T> st; set s(const &st); void printSet(set<int>& s) {for (set<int>…

屹晶微EG3002 单通道功率MOSFET驱动芯片 贴片SOP8

EG3002作为一款功率MOSFET驱动芯片&#xff0c;它的应用领域主要取决于其技术参数和性能特点。根据之前提供的信息&#xff0c;EG3002可能适用于以下领域&#xff1a; 1. 电源管理&#xff1a;用于高效率电源转换器&#xff0c;如开关电源&#xff08;SMPS&#xff09;、电池充…

UWB技术定位系统源码,智慧工厂人员定位系统,独特的射频处理,配合先进的位置算法

UWB技术定位系统源码&#xff0c;高精度人员定位系统源码&#xff0c;智慧工厂人员定位系统源码&#xff0c;室内定位系统源码 本套系统运用UWB定位技术&#xff0c;开发的高精度人员定位系统&#xff0c;通过独特的射频处理&#xff0c;配合先进的位置算法&#xff0c;可以有…

网络安全形势迫在眉睫!云WAF保护私有云安全!

业务上云面临新的WEB安全挑战 目前&#xff0c;所有的组织都在积极地接受企业的“云”&#xff0c;推进数字化变革。在服务云计算和私有云平台构建中&#xff0c;用户除了要面对各种常见的网络攻击&#xff0c;还需要面对虚拟环境下的非授权访问、虚拟机逃逸和敏感信息泄漏等问…

awtk如何实现键盘和输入框

1.创建默认键盘 新建窗体-keyboard 2.新建编辑框 3.设置编辑框属性 4.点击编辑框即可打开默认键盘&#xff0c;若想修改键盘样式可以在默认键盘修改或自定义键盘 5.获取输入字符 widget_t* wifi_edit widget_lookup(win, "edit", TRUE);//获取单行编辑控件 widge…

Denoising Prior Driven Deep Neural Network for Image Restoration

之所以能够检索到这篇论文是想看看该论文是如何利用多尺度相似性解决图像去噪问题&#xff0c;除了摘要和结论&#xff0c;论文中两次提到这个术语。next section是指section 4。然后整个section 4&#xff0c;根本没有提多尺度的事儿&#xff0c;更别说解决了。又看了一下The …

欧洲杯德语词汇与表达,柯桥零基础德语培训

欧洲杯 - die Europameisterschaft 足球 - der Fuball 比赛 - das Spiel / die Partie 球员 - der Spieler 教练 - der Trainer 裁判 - der Schiedsrichter 球迷 - die Fans 进球 - das Tor 守门员 - der Torwart / der Torhter 前锋 - der Strmer 中场 - der Mittelf…