【转】VxWorks信号量分析】的更多相关文章

Wind内核中有二进制信号量.计数信号量和互斥信号量三种类型,为了是运用程序具有可移植性,还提供了POSIX(可移植操作系统接口)信号量 .在VxWorks中,信号量是实现任务同步的主要手段,也是解决任务同步的最佳选择. 关于互斥的实现: 使用二进制信号量可以很方便的实现互斥,互斥是指多任务在访问临界资源时具有排他性.为了使多个任务互斥访问临界资源,只需要为该资源设置一个信号量,相当于一个令牌,那个任务拿到令牌即有权使用该资源.把信号量设置为可用,然后把需要的资源 的任务的临界代码 置于semT…
VxWorks主要提供如下API进行信号量的创建.获取和释放:   参数1:SEM_Q_PRIORITY,SEM_Q_FIFO SEM_Q_PRIORITY(值为0x1):需要获取该信号量的任务基于优先级顺序排列.SEM_Q_FIFO(值为0x0):需要获取该信号量的任务基于等待任务队列的先进先出顺序排列. 参数2: SEM_FULL,SEM_EMPTY SEM_FULL: 初始化信号量为满(可用), SEM_EMPTY: 后者初始化信号量为空(不可用).   (1)semBCreate( ):…
前言 vxworks 的固件分析流程 1.用binwalk查看固件基本信息并解压固件 2.获取固件相关信息, cpu架构,大小端 3.确定固件的加载地址 4.用IDA加载固件,并修复符号表 5. 分析固件 实战分析 一道CTF题 分析固件 用到的例子 http://www.icsmaster.org/wp-content/uploads/2018/01/2018013004153995.zip 首先用 binwalk 扫描下固件的信息 $ binwalk ctf_vxworks.bin DECI…
PM 时钟机制 10.1 Minix3 PM 时钟机制概述在 MINIX3 中,除了前面所讲到的 CLOCK 时钟,在 pm 中也是维持了一个时钟, 我们暂且不分析为啥要这么做,我就分析是怎么实现这个 PM 时钟监视器.我可 以这么肯定的说,这个时钟监视器只是一个虚幻的时钟监视器,最终还是得内核 时钟来完成这个工作,但是这个时钟监视器还是很有用的.我分析下 PM 时钟监 视器的工作过程: 如果用户需要用到时钟的相关功能,用户进程就会告诉 pm 我需要设定一个时钟 警告器来告诉我在未来的多长时间给…
转自:https://blog.csdn.net/zhzht19861011/article/details/49819109 FreeRTOS系列第1篇---为什么选择FreeRTOS? FreeRTOS系列第2篇---FreeRTOS入门指南 FreeRTOS系列第3篇---FreeRTOS移植指南 FreeRTOS系列第4篇---FreeRTOS编码标准及风格指南 FreeRTOS系列第5篇---FreeRTOS在Cortex-M3上的移植 FreeRTOS系列第6篇---FreeRTOS…
FreeRTOS系列第1篇---为什么选择FreeRTOS? 1.为什么学习RTOS? 作为基于ARM7.Cortex-M3硬件开发的嵌入式工程师,我一直反对使用RTOS.不仅因为不恰当的使用RTOS会给项目带来额外的稳定性风险,更重要的是我认为绝大多数基于ARM7.Cortex-M3硬件的项目,还没复杂到使用RTOS的地步,使用状态机就足够了. 对于现代的微处理器,特别是资源相对丰富ARM7.Cortex-M3硬件来说,RTOS占用的硬件资源已经越来越可以忽略.所以在当今环境下,我们无需担心R…
信号量是VxWorks提供的最常用,最快速的一种任务间通信机制.VxWorks中信号量有三种:二值信号量,互斥信号量,计数信号量.下面一一介绍这三种信号量的作用与区别. 信号量通常的作用就是是控制任务的同步与互斥, 控制同步:任务1中等待信号量X,当任务2中提供信号量后触发任务1继续运行   void fooInTask1() { semTake(...); // wait for sem X // if sem is given, continue the execution ... } vo…
在实际的应用之中,一个任务经常需要等待多个信号量的同时生效,或者说任务需要根据多个信号量的组合作用的结果来决定任务的运行方式,为了实现这种多信号量组合的功能,ucos实现了信号量集的特殊结构. 信号量集的基础仍然是信号量,它如同一个多个信号量组成的与非门来构成逻辑结果控制任务的执行. 信号量在ucos的实现分为两个部分,第一部分叫做标志组,其中存放了信号量集中的所有信号,第二个叫做等待任务链表,链表中的每个节点对应一个正在等待信号量集的等待任务,信号量集根据这个链表来管理等待任务 不同于消息队列…
JUC 中 Semaphore 的使用与原理分析,Semaphore 也是 Java 中的一个同步器,与 CountDownLatch 和 CycleBarrier 不同在于它内部的计数器是递增的,那么,Semaphore 的内部实现是怎样的呢? Semaphore 信号量也是Java 中一个同步容器,与CountDownLatch 和 CyclicBarrier 不同之处在于它内部的计数器是递增的.为了能够一览Semaphore的内部结构,我们首先要看一下Semaphore的类图,类图,如下所…
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 信号量semaphore,是操作系统中一种常用的同步与互斥的机制: 信号量允许多个进程(计数值>1)同时进入临界区: 如果信号量的计数值为1,一次只允许一个进程进入临界区…
简介 Semaphore 又名计数信号量,从概念上来讲,信号量初始并维护一定数量的许可证,使用之前先要先获得一个许可,用完之后再释放一个许可.信号量通常用于限制线程的数量来控制访问某些资源,从而达到单机限流的目的,比如SpringCloud 中的Zuul 组件用的是 Hystrix 的信号量(semaphore)隔离模式. 源码分析 重要的内部类 Semaphore 和 ReentrantLock 内部类完全相似, 有3个重要的内部类,分别也是 Sync.NonfairSync和FairSync…
百篇博客系列篇.本篇为: v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立贞节牌坊 | 51.c.h .o v27.xx 鸿蒙内核源码分析(互斥锁篇) | 比自旋锁丰满的互斥锁 | 51.c.h .o v28.xx 鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽 | 51.c.h .o v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 |…
http://www.vxdev.com/docs/vx55man/vxworks/netguide/c-sockets.html http://www.vxdev.com/docs/vx55man/vxworks/ref/sockLib.html http://www.vxdev.com/docs/vx55man/vxworks/ref/pthreadLib.html http://www.vxdev.com/docs/vx55man/vxworks/ref/semPxLib.html htt…
信号量 信号量(sem)在操作系统中是一种实现系统中任务与任务.任务与中断间同步或者临界资源互斥保护的机制.在多任务系统中,各任务之间常需要同步或互斥,信号量就可以为用户提供这方面的支持. 抽象来说,信号量是一个非负整数,每当信号量被获取(pend)时,该整数会减一,当该整数的值为 0 时,表示信号量处于无效状态,将无法被再次获取,所有试图获取它的任务将进入阻塞态.通常一个信号量是有计数值的,它的计数值可以用于系统资源计数(统计). 一般来说信号量的值有两种: 0:表示没有积累下来的post信号…
1. Semaphore Semaphore和ReentrantReadWriteLock.ReadLock(读锁)都采用AbstractOwnableSynchronizer共享排队的方式实现. 关于AbstractQueuedSynchronizer中的独占锁和共享锁,请参考ReentrantLock(http://www.cnblogs.com/bjorney/p/8040085.html)和ReentrantReadWriteLock(http://www.cnblogs.com/bjo…
VxWorks下的调试手段 主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤.思路. 1         Tornado的调试工具 嵌入式实时操作系统VxWorks和集成开发环境Tornado的组成结构如下图1.分为主机和目标机系统. 图1 集成开发环境结构图 在Tornado下,调试相关操作在Debug菜单下,包括: 图2 Debug菜单 简单解释各菜单项的功能 1.1        WindShell 1.1.1         简介 Vxworks的Shell分为…
1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素:  第一是应用.如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux,而不是uC/OS-II.  第二是实时性.没有一个绝对的数字可以告诉你什么是硬实时,什么是软实时,他们之间的界限也是十分模糊的,这与你选择什么样的CPU,它的主频.内存等参数有一定关系.如果你使用加入实时补丁等技术的嵌入式Linux,如Monta Vista Linux(2.4.17版本),最坏的…
操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会说操作系统就是windows,就是那些可以放大.缩小.移动的窗口.对曾经是计算机专业的朋友来说,这个答案还要稍微复杂一些,操作系统可能还有linux.unix.ios.sun solaris.aix等.如果再细化一点,对嵌入式工具比较解的朋友还会有新的补充,因为在他们看来,vxworks.eCos.ucos也都是操作系统,虽然它们好多系…
上一篇文章中我们对于固件进行了简单的分析,这一篇我们将会补充一些Vxworks的知识,同时继续升入研究固件内容. 由于涉及到操作系统的内容,建议大家在阅读本篇前有一定操作系统知识的基础,或者是阅读我的<Windows调试艺术>的文章简单了解诸如线程.中断.驱动等的知识. 本篇为工控安全入门(五)—— plc逆向初探的延伸. 什么是 Vxworks Vxworks操作系统是由美国Wind River System 公司开发的一套实时操作系统,Vxworks比起linux,有更好的实时性和可裁切性…
ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代码的学习心得,供以后回来看看,不过比较遗憾的是没有仔细学习扩展代码的功能实现部分.ucos操作系统的内核代码实现相对简单,但是对理解其他操作系统内核相同功能有帮助. ucos的任务间通信机制主要是基于event实现的,其实理解这个event不用翻译成中文事件,就叫event感觉还更容易接收.下面是操…
一.什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域.临界区域是指执行数据更新的代码需要独占式地执行.而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的.   信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作.最简单的信号量…
前一篇博客简单介绍了ReentrantLock的定义和与synchronized的区别,下面跟随LZ的笔记来扒扒ReentrantLock的lock方法.我们知道ReentrantLock有公平锁.非公平锁之分,所以lock()我也已公平锁.非公平锁来进行阐述.首先我们来看ReentrantLock的结构[图来自Java多线程系列--"JUC锁"03之 公平锁(一)]: 从上图我们可以看到,ReentrantLock实现Lock接口,Sync与ReentrantLock是组合关系,且F…
linux 系统内核空间与用户空间通信的实现与分析 2 评论: 陈鑫 (chen.shin@hotmail.com), 自由软件爱好者, 南京邮电学院电子工程系 2004 年 7 月 01 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 现在就开始免费试用 多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 Linux 内核态无法对传统的 Linux 进程间同步和通信的方法提供足够的支持.本文总结并比较了几种内核态与用户态进程通信的实现方法,并推荐使用 n…
原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好.高性能的并发构建块.不客气地说,创建java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作.通过提供一组可靠的.高性能并发构建块,开发人员可以提高并发类的线程安全.可伸缩性.性能.可读性和可靠性. 此包包含locks,concurrent,…
一.前言 分析了CountDownLatch源码后,下面接着分析Semaphore的源码.Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源.下面开始分析Semaphore的源码. 二.Semaphore的数据结构 分析源码可以知道,Semaphore底层是基于AbstractQueuedSynchronizer来实现的,所以,Semaphore的数据结构也依托于AQS的数据结构,在前面对AQS的分析中…
在整型信号量机制中,信号量被定义为一个整形变量.除初始化外,仅能通过两个标准的原子操作Wait(S)和Signal(S)来访问.其通常分别被称为P.V操作. 描述如下: P操作:S=S-1:如果S小于0,则进程进入等待状态,否则继续执行. V操作:S=S+1:如果S>=0,则唤醒等待队列中的一个等待进程. 信号量有其自身的物理含义:当S>0时,其值表示要管理的某类资源的数量:当S<0时,它的绝对值表示在相关队列中等待的进程个数. 进程的同步 一般来说,一个进程相对与另一个进程的运行速度是…
转自:http://blog.csdn.net/cyberlabs/article/details/6967192 引 言 随着嵌入式设备的快速发展,嵌入式设备的功能和灵活性要求越来越高,很多嵌入式设备中都开始使用操作系统.由于工作的特殊性, 很多嵌入式设备要求系统对外部事件的中断响应必须在事先设定的时限范围内完成,使系统具有可预测性,而通用的桌面操作系统大都是非实时或者是软实时的,无 法满足需求,因此就必须使用实时操作系统(Real—Time Operating System,RTOS).  …
这篇文章将讲述别一种进程间通信的机制——信号量.注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物.有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信 -- 信号.下面就进入信号量的讲解. 一.什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域.临界区域是指执行数据更新的代码需要独占式地执行.而信号量就可以提供这样的一种访问机制,让一个临界区同…
实验 给MenuOS增加time和time-asm命令的方法: 更新menu代码到最新版 再main()函数中增加MenuConfig 增加对应的Time函数和TimeAsm函数(这里的函数要换成我们自己编写的使用系统调用的函数,比如mkdir和mkdirAsm) make rootfs (帮我们自动编译自动生成根文件系统,自动帮我们启动起来menuos) 接下来我要使用gdb跟踪分析一个系统调用内核函数(mkdir) 这次我实验所用的系统调用仍然是是mkdir 首先,我们需要把上周做的两个实验…
一   实验过程及效果 1.准备好相关的代码,分别是mymain.c,mypcb.h,myinterrupt.c ,如下图,make make成功: 在qemu创建的虚拟环境下的运行效果:(使用的命令如上图所示) 效果分析:可以看到进程在不断切换,分别有进程0,1,2,3,每隔一段时间就进行一次切换. 二  具体代码 mypcb.h #define MAX_TASK_NUM 4 //定义最大任务(进程数) #define KERNEL_STACK_SIZE 1024*8 //定义内核堆栈的大小…