天脉2(ACoreOS653)操作系统学习02

一、分区内通信方法

分区内通信指同一分区内进程之间的通信。ARINC 653定义的分区内进程通信机制,包括:缓存队列(Buffers-Queue)、黑板(Blackboards)、信号量(Semaphores)和事件(Events)。其中缓存队列和黑板用于进程间通信,信号量和事件用于进程间同步与互斥。

缓存队列允许其中的消息以队列形式存储,消息不允许覆盖;

黑板在任何时刻最多只保留一个消息,消息允许覆盖。

信号量提供对资源的受控访问;

事件通过通知等待进程某种条件的发生来支持进程间同步控制。

1.缓存队列

  • 消息缓存(message buffer)在发送过程中,等待发送的消息按照先进先出次序存放在缓存队列中。缓存队列中可存放消息的数量由创建时缓存区的大小决定

  • 接收消息的进程按照先进先出或优先级次序原则排队接收缓存消息。在按优先级次序排队的情况下,相同优先级的接收进程按照先进先出原则排队。接收消息的进程的排队原则在缓存队列创建时定义。

  • 如果多个进程等待一个缓存队列,当这个缓存队列不空,则排队原则(先进先出原则或者优先级原则)将决定哪个进程获得消息。操作系统将把该进程从等待队列中移出,并置为就绪态,并将消息从缓存队列中移出。

  • 如果一个进程试图从空缓存队列中接收消息,或者发送消息到满的缓存队列,操作系统将产生进程重调度,该进程将被放入等待队列中,等待一段指定的时间,如果在该段时间内没有消息被接收或者发送,操作系统将自动从队列中移出该进程,将其置为就绪状态。

2.黑板

  • 通过黑板,可以将消息发布给分区内的所有进程

  • 黑板中的消息不允许排队,任何写到黑板的消息将一直保持直到被清除或者被新消息覆盖。这就允许发送进程在任何时刻都能发送消息,允许接收进程在任何时刻都可以访问最新的消息

  • 分区内任何进程可以从黑板上读取消息、在黑板上写一个消息或者清空黑板。

  • 如果进程试图从空黑板中读取消息,操作系统将产生进程重调度,该进程将被放入等待队列中,等待一段指定的时间,如果在该段时间内没有消息到达,操作系统将自动从队列中移出该进程,将其置为就绪状态。

  • 当有消息到达黑板上时,操作系统将从进程等待队列中移出所有等待进程,将他们置为就绪状态,而消息仍然保留在黑板上。当黑板被清除时,黑板变为空状态。

3.信号量

  • 提供对资源的受控访问,用于进程间的同步和互斥

  • 两种信号量:计数信号量和互斥信号量

  • 计数信号量功能与标准一致,用于多个资源的互斥访问

  • 互斥信号量作为扩展功能,既可以实现同步,也可以实现互斥,且可以嵌套访问

  • 等待信号量的进程可以按照先进先出原则,也可以按照优先级次序原则在队列中排队。在优先级次序条件下,同等优先级的进程按照先进先出原则排队。

4.事件

  • 事件是一种进程通信机制:它可以把某种发生的情况告知等待该情况的进程。事件是由一个二值状态变量(状态为“有效态(UP)”和“无效态(DOWN)”)和一组等待进程组成。

  • 同一分区内的进程可以设置和清除事件。事件创建时,被设置为“无效态”。为了通知事件条件的发生,可以设置指定的事件为“有效态”,此时,所有等待该事件的进程从等待状态变为就绪状态,然后进入重调度。等待事件的进程执行顺序应该只依赖于分区内进程调度规则。

  • 进程可以同时等待超过一个以上的事件,事件相互之间是独立的。

  • 事件不排队、不携带或传输数据。

二、分区间的通信方法

1.概念

分区间通信是指在同一核心模块或不同核心模块上运行分区之间的通信。分区间通信可分为四类:

a) 同一核心模块内分区间的通信;

b) 同一机箱内不同核心模块上的分区间的通信;

c) 不同机箱的分区间的通信;

d) 航空电子系统与其它设备之间的通信。

所有的分区间通信都基于消息进行,消息从单个的源发出,到一个或多个目的地。消息的目的地是分区而不是分区内的进程。通过消息连接分区的基本机制是通道(channel)。通道指定从源到目的地的消息传递模式,以及要发送的消息的特性。

分区通过已定义的访问点访问通道,访问点称为端口(port)。通道由端口以及相关的资源组成,端口提供资源以允许分区在特定的通道中发送或接收消息。

2.方式

通道可以分布在组成系统的各个核心模块上,每个通信节点(核心模块,网关,I/O模块等)可以通过配置表单独配置。系统设计人员必须确保每个通道的不同端口有一致性的配置,而源、目的、传递模式和每个通道的唯一性不会在运行时改变。通道的消息传递模式包含两种:采样模式队列模式

分区间消息被定义为有限长度的连续数据块,分Fixed/Variable Length、Periodic/Aperiodic、Broadcast, Multicast and Unicast Messages。固定长度且允许覆盖的采样方式和可变长度且不允许覆盖的队列方式。

(1)队列模式

  • 队列方式不允许在传递中覆盖先前的消息,即消息在队列方式中不会丢失。

  • 通道中以队列方式运行的端口允许缓冲多个消息,源分区发送的消息存储在源端口的消息队列中,直到被发送;当消息到达目的端口后,消息将缓存在目的端口的消息队列中。消息队列通过通信协议来管理,以先进先出顺序将消息从源端口发送到目的端口。

  • 队列方式支持变长消息,它允许对消息进行分割和重组。如果不直接支持变长消息的发送,源端口必须将消息分解成一系列固定长度的分段,目的端口必须重组这些分段。分段的长度应小于或等于通道内所有端口可接受的最大未分割长度。

  • 适用范围:适用于需要连续数据的通信方式

(2)采样模式

  • 在采样方式下,消息保持在采样端口直到被发送或者被新的消息所覆盖。采样方式允许源分区在任何时间发送消息,每个新的消息覆盖当前消息并持续到被覆盖。目的分区在任何时间访问最新的广播消息

  • 采样方式下没有消息队列,不允许对消息进行分割,必须为每个通道定义最大未分割消息长度。只有固定长度的消息允许以采样方式发送。

  • 此模式下端口的运行方式与共享存储区相似

  • 接收者不会以等待方式读数据

  • 数据一致性可以保证

  • 适用范围:适用于需要最新数据的通信方式

如有侵权,告知必删。

天脉2(ACoreOS653)操作系统学习02的更多相关文章

  1. 天脉2(ACoreOS653)操作系统学习01

    天脉2(ACoreOS653)操作系统学习01 由于我的毕业设计涉及相关嵌入式操作系统,故最近学了学天脉2操作系统. 一.ARINC653标准 1.ARINC653标准是什么? ARINC 653 : ...

  2. 操作系统学习笔记(五)--CPU调度

    由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...

  3. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  4. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  5. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  6. Android Testing学习02 HelloTesting 项目建立与执行

    Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...

  7. Java学习02

    Java学习02 1.导入内部的包 一.在包的下面加入下面一句话: import    java.util.Scanner; 二.在类中 Scanner input=new     Sanner(Sy ...

  8. ThinkPhp学习02

    原文:ThinkPhp学习02 一.什么是MVC                M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controll ...

  9. Linux操作系统学习_操作系统是如何工作的

    实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...

随机推荐

  1. Linux下SSH以及SSH秘钥

    一.基于秘钥方式实现远程连接 第一步:创建密钥对(在管理端服务器上操作) 中间的输入项可以直接回车 ssh-keygen -t dsa 第二步:分发公钥(在管理端服务器执行) 这个步骤需要输入一个ye ...

  2. 推荐一款编程字体:Iosevka

    最近发现一款很好用的编程字体:Iosevka.它是一款现代化的编程字体集合,除了等宽.oO0 iIl1明显区分等基本特性外,还有很多非常现代的特性,比如: 多种风格:有非常多的字形可供选择,衬线/非衬 ...

  3. AWK的内置变量

    ARGC: number (2) 在命令行提供的参数的个数,不包括命令awkARGIND: number (0) 当前文件中正在处理的 ARGV 数组的索引值. 文件的位置,从1开始计数.一个文件处在 ...

  4. 利用滴答定时器(SysTick)实现简单的延时函数

    预备知识: 对标准库来说,如果定义了时钟频率,则系统会默认初始化该时钟频率. SysTick是CM4的内核外设,是一个24位的向下递减计数器,每次计数时间是1/SYSCLK,即1/168000000. ...

  5. Linux系类(8) - 文件搜索命令locate

    文件搜索命令locate 命令格式 locate [文件名] 在后台数据库中按文件名搜索,搜索速度更快,而find.which是遍历所有目录去查找:后台数据库在/var/lib/mlocate (保存 ...

  6. 自制Chrome扩展插件:用于重定向js

    前言 作为一个前端开发, 在调试生产环境的代码时,是否苦于生产环境代码被压缩,没有sourcemap? 有没有想过将生产环境的js直接重定向为本地开发环境的js? 玩微前端时,有没有想过用本地的子应用 ...

  7. css3中的陌生词汇

    Transform transform属性是静态属性,一旦写到style里面,将会直接显示作用,无任何变化过程.transform的主要用途是用来做元素的特殊变形. 关于图形变形的基础条件当中的原点设 ...

  8. 『Python』matplotlib常用图表

    这里简要介绍几种统计图形的绘制方法,其他更多图形可以去matplotlib找examples魔改 1. 柱状图 柱状图主要是应用在定性数据的可视化场景中,或是离散数据类型的分布展示.例如,一个本科班级 ...

  9. 升级sudo版本

    1.查看sudo版本 sudo -V 2.下载sudo最新安装文件 sudo官方地址: https://www.sudo.ws/ 下载地址:https://www.sudo.ws/dist/ 3.解压 ...

  10. 前端规范之Git提交规范(Commitizen)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...