VxWorks的信号量机制分析

2023-05-16

 

 

VxWorks的信号量机制分析

 

VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。也是提供任务间同步和互斥的主要手段。VxWorks提供3种信号量来解决不同的问题。

 

二进制信号量:最快的最常用的信号量,可用于同步或互斥。

互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。

计数信号量:类似于二进制信号量,但是随信号量释放的次数改变而改变。

 

二进制信号量

二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小,因此也称快速信号量二进制信号量可以看成一个标志,对应资源是可用还是不可用。当一个任务调用semTake ()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。

 

当一个任务调用semGive ()释放一个二进制信号量时。如果信号量已经可用,释放信号量不会产生任何影响;如果信号量不可用并且没有任务等待使用该信号量,信号量只是被简单地置为可用;如果信号量不可用并且有一个或多个任务等待该信号量,最高优先级的任务被解阻塞,信号量仍为不可用。

 

互斥

当两个以上的任务共享使用同一块内存缓冲区或同一个I/O设备之类的资源时,可能会发生竞争状态。

 

二进制信号量可以通过对共享资源上锁,实现高效的互斥访问,不象禁止中断或禁止抢占,二进制信号量将互斥仅仅限于对与之联系的资源的访问,并且比禁止中断和禁止抢占提供更精确的互斥粒度。使用时创建用于保护资源的二进制信号量,初始时信号量可用。

 

当任务需要访问这个资源时,首先取得这个信号量,所有其它想要访问这个资源的任务将被阻塞。当任务完成了对该资源的访问时,释放该信号量,允许其他任务使用该资源。因此所有对一个需要互斥访问资源的操作由semTake ()semGive ()对一起来实现。

 

semTake(semMutexWAIT FOREVER)

临界区,某一时刻仅被一个任务访问

semGive (semMutex)

 

同步

信号量另一种通常的用法是用于任务间的同步机制。在这种情况下,信号量代表一个任务所等待的条件或事件。最初,信号量是不可用的。一个任务或中断处理程序释放该信号量来通知这个事件的发生。等待该信号量的任务将被阻塞直到事件发生、该信号量可用。一旦被解阻塞,任务就执行恰当的事件处理程序。信号量在任务同步中的应用对于将中断服务程序从冗长的事件处理中解放出来以缩短中断响应时间是很有用的

 

互斥信号量

互斥信号量是一种特殊的二进制信号量,用于解决具有内在的互斥问题:优先级继承、删除安全和对资源的递归访问等情况。

 

对于一般的操作系统,一般互斥信号量就是二值信号靓量,但VxWoks中有非同寻常的意义。另外一个典型就是,Linux内核也单独设立了互斥信号量。

互斥信号量与二进制不同点在于:

①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;

②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;

③因为semTakesemGive是成对出现的,因此不能在ISR 中释放(semGive ())

 

优先级继承

优先级倒置发生在一个高优先级的任务被迫等待一段不确定时间,等待一个低优先级任务完成。VxWorks允许使用优先级继承算法,在互斥信号量中使用选项SEM-INVERSION-SAFE ,将使能优先级继承算法,优先级继承协议确保拥有资源的任务以阻塞在该资源上的所有任务中优先级最高的任务的优先级执行,直到它释放所拥有的所有信号量,然后该任务返回到正常状态。因此这个“继承的高优先级”任务受到不会被任何中间优先级任务抢占的保护。

 

删除安全

另一个互斥问题涉及到任务删除。在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外地删除。删除一个在临界区执行的任务可能引起意想不到的后果,造成保护资源的信号量不可用,可能导致资源处于破坏状态,也就导致了其他要访问该资源的所有任务无法得到满足。

 

原语taskSafe()taskUnsafe ()提供了防止任务被意外删除的一种方法。同时互斥信号量提供了选项SEM-DELETE-SAFE ,使用这个选项,每次调用semTake ( )时隐含地使能了taskSafe(),当每次调用semGive ()时隐含地使能了taskUnsafe ()这种方式,任务得到信号量时得到不会被删除的保护。

 

递归资源访问

互斥信号量能够被递归地获得。这意味着信号量能够被一个拥有该信号量的任务在该信号量最终被释放之前多次获取。递归对于满足一些子程序即要求能够相互调用但是也要求互斥访问一个资源非常有用。这种情形是可能的,因为系统需要跟踪哪一个任务当前拥有信号量。

 

计数器信号量

计数器信号量是实现任务同步和互斥的另一种手段,在具体实现上有点差异。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。与二进制信号量不同的时,计数型信号量每次释放,计数器加一;每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞。

 

正如二进制信号量,当计数信号量释放时,如果有任务阻塞在该信号量阻塞队列上,那么任务解除阻塞;但是如果信号量释放时,没有任务阻塞在该信号量阻塞队列上,那么计数器加一。

 

通过对嵌入式操作系统VxWorks的多任务之间的通信机制的分析可以看出,信号量在实现多任务间的通信、同步和互斥中发挥着重要的作用。因此,深入理解和正确使用VxWorks的信号量,可以提高实时系统中多任务间通信的效率

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VxWorks的信号量机制分析 的相关文章

  • ZYNQ移植vxworks系统

    版本 xff1a ZYNQ7010 xff0c VxWorks 6 9 ZYNQ PL端有灵活性好 xff0c 资源丰富 xff0c 可反复编程速度快的优势 xff0c 通过 PS的外设并行 AXI总线外挂 PL接口 xff0c 使用 FP
  • Vxworks 学习(一)介绍

    Vxworks 学习 xff08 一 xff09 介绍 该系列文章是我根据多个博主以及相关书上内容整理的学习笔记 xff0c 许多内容非原创 实时操作系统 定义 实时操作系统 xff08 Real Time Operating System
  • 【VxWorks 6.x之FTP服务器】

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 FTP是什么 xff1f 二 使用步骤使用FTP需要添加的组件 最后就可以通过FTP软件去访问VxWorks FTP服务
  • VxWorks 操作系统简介

    实时多任务操作系统是能在确定的时间内执行其功能 xff0c 并对外部的异步事件作出响应的计算机系统 多任务环境允许一个实时应用作为一系列独立任务来运行 xff0c 各任务有各自的线程和系统资源 VxWorks系统提供多处理器间和任务间高效的
  • 【JokerのZYNQ7020】Vxworks 6.9。

    软件环境 xff1a vivado 2017 4 硬件平台 xff1a XC7Z020 基本全程参考的官方xapp1158 zynq 7000 vxworks bsp pdf xff0c 但我感觉主要难度不在移植上 xff0c 因为pdf里
  • VxWorks中的任务和进程线程的关系

    学过操作系统的 xff0c 对进程和线程应该是比较了解的 但是为了文章知识的完整性 xff0c 笔者先对操作系统中的进程和线程进行一些介绍 1 进程和线程的关系 为了不产生歧义 xff0c 先对一些易混淆的概念进行介绍 xff1a 代码 x
  • VxWorks和Tornado教程书籍分享

    搞VxWorks的是个小圈子 xff0c 找点学习资料还是有点麻烦的 博主花费了好大的精力才收集到这二十多本书籍 xff0c 下面统统免费分享给大家 xff08 百度网盘链接在文章结尾处 xff09 书籍清单如下 xff1a ARM嵌入式V
  • VxWorks的信号量机制分析

    VxWorks 的信号量机制分析 VxWorks 信号量是提供任务间通信 同步和互斥的最优选择 xff0c 提供任务间最快速的通信 也是提供任务间同步和互斥的主要手段 VxWorks 提供 3 种信号量来解决不同的问题 二进制信号量 xff
  • 第一课:VxWorks系统概述

    目录 1 1 VxWorks系统简介 1 2 VxWorks的特点 1 3VxWorks系统和Linux系统的区别 1 4 VxWorks开发环境获取 1 1 VxWorks系统简介 VxWorks 操作系统是美国WindRiver公司于1
  • 第九课: 工作空间-Work Space介绍

    2 7 工作空间 Work Space介绍 工作空间是WorkBench3 3集成开发环境对项目工程进行集中管理的空间 用户创建的BootRom工程 VxWorks工程 Downloadable工程和静态库工程等都存在于Work Space
  • VxWorks开发俱乐部

    VxWorks开发俱乐部
  • 【VxWorks】Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

    目录 1 VxWorks操作系统 2 QNX操作系统 3 Xenomai操作系统 4 INtime操作系统 5 SylixOS操作系统 5 1 SylixOS官网
  • VxWorks任务挂死实战分析

    目录 背景描述 根本原因 分析过程 背景描述 操作系统 VxWorks 5 5 CPU MIPS32 74Kc内核CPU 现象描述 联调代码时发现应用层代码调用以下接口函数必现任务挂死 检查代码发现入参均合法 代码逻辑没问题 未发现异常 F
  • Wind River Workbench 3.x VxWorks项目类型

    今天学习了解了Wind River Workbench 3 x VxWorks项目类型及这些类型之间的关系 7种VxWorks项目类型如下图所示 如上图 Wind River Workbench 3 3 相关VxWorks项目类型有7种 分
  • 将 DKM 项目链接到内核映像 (VIP) 项目作为 VxWorks Workbench4 中的子项目/额外模块

    如何将 DKM 项目与内核映像 VIP 项目链接 加载 以便我可以从内核映像项目的 usrAppInit c 调用 DKM 项目 应用程序 的入口点函数 以在启动时自动启动应用程序 有人可以描述步骤或向我指出任何文档吗 将 DKM 项目添加
  • vxworks 中的 C++ 11

    我是VxWorks的新手 我正在VxWorks平台上使用C 开发一个软件 我想知道VxWorks编译器是否支持C 11标准 我问这个问题的原因是因为没有可用的shrink to fit std vector 函数 该函数是在c 11 标准中
  • 一个任务如何在多个 vxworks 队列上等待?

    我们有一个 vxWorks 设计 需要一个任务来处理来自两个消息队列 Q1 和 Q2 的消息 我们希望在两个队列上等待 无论哪个队列收到消息 都处理队列中的消息 我们希望避免轮询队列或使用可能导致其他队列填满的超时值 有没有办法做到这一点
  • 编译先前预处理的文件会更改输出

    我有一个源文件 我使用选项对其进行预处理 E and P 对于基于 vxWorks 的嵌入式平台使用 GCC 4 1 2 所有其他选项与我编译文件时相同 这些选项是 Wall march pentium nostdinc O0 fno bu
  • 如何限制客户端服务器程序的连接数

    我想要一个服务器程序 它应该只接受最多一个连接 并且应该丢弃其他连接 我怎样才能实现这个目标 Only accept 单个连接 这是一个典型的服务器例程 s socket bind s listen s backlog while 1 t
  • VxWorks 6.8 图像项目未编译

    我正在使用 Wind River Workbench 3 3 和 VxWorks 6 8 当从命令行使用构建时 一切正常 但是当我尝试在工作台中构建时 我收到错误 在尝试追踪它时 我确定使用我们的主板支持包和 gnu 工具链创建新的 VxW

随机推荐

  • CSS 伪类与伪元素

    CSS的元素选择器除了根据id xff08 xff09 class xff08 xff09 属性 xff08 xff09 选取元素以外 xff0c 还有很重要的一类 xff0c 就是根据元素的特殊状态来选取元素 它们就是伪类和伪元素 跟id
  • 阿里巴巴2022届应届生招聘 阿里云存储基础技术 研发&测试&算法

    学弟学妹们好 xff0c 我们是阿里云存储基础技术团队 xff0c 正在进行2022届校招 团队业务核心 xff0c 团队氛围nice xff0c 对于每位实习同学都会配师兄专职辅导 本次招聘为部门直招 xff0c 简历直接推给Leader
  • CSS3 动画效果总结

    CSS3添加了几个动画效果的属性 xff0c 通过设置这些属性 xff0c 可以做出一些简单的动画效果而不需要再去借助JavaScript CSS3动画的属性主要分为三类 xff1a transform transition以及animat
  • Javassist学习总结

    要想将编译时不存在的类在运行时动态创建并加载 xff0c 通常有两种策略 xff1a 1 动态编译 2 动态生成二进制字节码 xff08 class xff09 对于第二种策略 xff0c 实际上已经有诸多比较成熟的开源项目提供支持 xff
  • 程序员的酸甜苦辣——告别Coding

    程序员的酸甜苦辣 告别Coding lt script language 61 34 javascript 34 type 61 34 text javascript 34 gt document title 61 34 程序员的酸甜苦辣
  • Vue学习笔记7 - 在Vscode中配置Vetur,ESlint,Prettier

    俗话说得好 xff0c 工欲善其事必先利其器 xff0c 想要熟练开发Vue项目 xff0c 一个好的开发环境就是必不可少了 xff0c 这里我就选用了vscode作为开发工具 xff0c 毕竟vscode免费 xff0c 还跨平台 xff
  • 我的所有的浏览器被hao123 挟持了,终极解决方案

    参考https www cnblogs com BensonLaur p 13731310 html 解决 最近我给我的老电脑安装系统在我这台电脑做了启动盘 xff0c 之后我的每个浏览器点开就是hao123 的主页 xff0c 而后我用了
  • 字节跳动2-1 三轮大数据方向算法20220330

    新鲜出炉 xff0c 大数据的总监 xff0c 一上来什么都没问 xff0c 让我写一个非递归后续遍历 很不好意思让他打脸了 xff0c 这个题我做过5片了 xff0c 理解上还是很深刻的 我就想对他说为啥面试连自我介绍都不给我 xff0c
  • 字节跳动抖音电商2-2 算法 20220331

    题目 xff1a n 61 61 nums length 1 lt 61 n lt 61 104 0 lt 61 nums i lt 61 n nums 中的所有数字都 独一无二 给定一个包含 0 n 中 n 个数的数组 nums xff0
  • java 线程池执行流程源码讲解

    threadPoolExecutor execute 执行过程 public void execute Runnable command if command 61 61 null throw new NullPointerExceptio
  • spring boot 打包成jar 包在发布到服务器上

    pom xml文件 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt project xmlns 61 34 http maven apache org POM 4 0 0
  • JAVA Apache POI 之sax 解析10万级大数量数据

    第一步让我们来看看我们的大量数据的excel 文件 img src https img blog csdn net 20170330162913720 watermark 2 text aHR0cDovL2Jsb2cuY3Nkbi5uZXQ
  • 百度2014校园招聘笔试题武汉站三道算法设计题

    百度2014校园招聘笔试题武汉站三道算法设计题 1 给定任意一个整整数 求比这个数大且最小的不重复数 就是相邻两位不同 xff0c 例如1231 如1101就是重复数 解 xff1a 思路 xff1a 每次将给定的值加上1 xff0c 然后
  • spring data jpa 想使用EntityManager 对sql 进行处理四种方式(第四种本人改写的)

    下面看看主体的一个类 xff1a package com chinait service impl import java util List import javax persistence EntityManager import ja
  • Swagger2 (3) 集成easymock 生成mock 测试数据

    1 什么是 easy mock 2 可以集成swagger 3 我们来玩一下 首先你需要一个swagger 服务 xff1a 其次我们需要一个easy moke 网站账号 xff1a 接下来选择一个项目 点击编辑项目的配置 配置好项目信息
  • 用canvas做视频截图遇到的坑(已填坑)

    最近负责了一个后台功能的扩展 xff0c 因为没有前端 xff0c 所以客串了一把前端 xff0c 需求的内容是做一个视频截图的功能 xff0c 这期间遇到了canvas 的跨域问题 xff0c Uncaught DOMException
  • java 8 list.stream().collect Collectors.toMap 重复key 值处理

    问题描述 xff1a list 转 map 时 xff0c 首先看 两个phoneAuthUpdater 的key 都是 1 xff0c key 如果重复 xff0c 则会报这个错 可以选择第二种方法来解决 这种方式可以解决上面的问题 xf
  • mysql 时间格式转换,时区转化

    首先 xff0c 为了更好的展示 xff0c 我先把数据库里面存储的数据展示一下 xff0c 是如下图 xff1a 1 时间格式转换 时间 39 2019 01 22 15 45 06 39 转换成 unix 时间戳 select UNIX
  • 5.4 Stream Buffer

    Stream Buffer 是一种广义 Cache xff0c 主要功能是避免因为预读而造成的 Cache Pollution 问题 当采用该机制时 xff0c 处理器可以将预读的数据序列放入 Stream Buffer 中而不是放入 Ca
  • VxWorks的信号量机制分析

    VxWorks 的信号量机制分析 VxWorks 信号量是提供任务间通信 同步和互斥的最优选择 xff0c 提供任务间最快速的通信 也是提供任务间同步和互斥的主要手段 VxWorks 提供 3 种信号量来解决不同的问题 二进制信号量 xff