1 简单介绍信号与信号量-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单介绍信号与信号量

PE5Z_PCBTech 来源:未知 作者:胡薇 2018-05-25 10:14 次阅读

信号量实际上是一种约定机制,在多任务内核中普遍使用。信号量用于:控制共享资源的使用权(满足互斥条件)标志某事件的发生使两个任务的行为同步。

信号与信号量在英文中都叫做Semaphore,并不加以区分,而说它有两种类型,二进制型(binary)和计数器型(counting)。本书中的二进制型信号量实际上是只取两个值0和1的信号量。实际上这个信号量只有一位,这种信号量翻译为信号更为贴切。而二进制信号量通常指若干位的组合。

信号像是一把钥匙,任务要运行下去,得先拿到这把钥匙。如果信号已被别的任务占用,该任务只得被挂起,直到信号被当前使用者释放。换句话说,申请信号的任务是在说:“把钥匙给我,如果谁正在用着,我只好等!”信号是只有两个值的变量,信号量是计数式的。只取两个值的信号是只有两个值0和1的量,因此也称之为信号量。计数式信号量的值可以是0到255或0到65535,或0到4294967295,取决于信号量规约机制使用的是8位、16位还是32位。到底是几位,实际上是取决于用的哪种内核。根据信号量的值,内核跟踪那些等待信号量的任务。

一般地说,对信号量只能实施三种操作:初始化(INITIALIZE),也可称作建立(CREATE);等信号(WAIT)也可称作挂起(PEND);给信号(SIGNAL)或发信号(POST)。信号量初始化时要给信号量赋初值,等待信号量的任务表(Waitinglist)应清为空。

想要得到信号量的任务执行等待(WAIT)操作。如果该信号量有效(即信号量值大于0),则信号量值减1,任务得以继续运行。如果信号量的值为0,等待信号量的任务就被列入等待信号量任务表。多数内核允许用户定义等待超时,如果等待时间超过了某一设定值时,该信号量还是无效,则等待信号量的任务进入就绪态准备运行,并返回出错代码(指出发生了等待超时错误)。

任务以发信号操作(SIGNAL)释放信号量。如果没有任务在等待信号量,信号量的值仅仅是简单地加1。如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1。于是钥匙给了等待信号量的诸任务中的一个任务。至于给了那个任务,要看内核是如何调度的。收到信号量的任务可能是以下两者之一。

等待信号量任务中优先级最高的,或者是

l最早开始等待信号量的那个任务,即按先进先出的原则(First In First Out ,FIFO)

有的内核有选择项,允许用户在信号量初始化时选定上述两种方法中的一种。但μC/OS-Ⅱ只支持优先级法。如果进入就绪态的任务比当前运行的任务优先级高(假设,是当前任务释放的信号量激活了比自己优先级高的任务)。则内核做任务切换(假设,使用的是可剥夺型内核),高优先级的任务开始运行。当前任务被挂起。直到又变成就绪态中优先级最高任务。

同步:

可以利用信号量使某任务与中断服务同步(或者是与另一个任务同步,这两个任务间没有数据交换)。如图2.13所示。注意,图中用一面旗帜,或称作一个标志表示信号量。这个标志表示某一事件的发生(不再是一把用来保证互斥条件的钥匙)。用来实现同步机制的信号量初始化成0,信号量用于这种类型同步的称作单向同步(unilateralrendezvous)。一个任务做I/O操作,然后等信号回应。当I/O操作完成,中断服务程序(或另外一个任务)发出信号,该任务得到信号后继续往下执行。

如果内核支持计数式信号量,信号量的值表示尚未得到处理的事件数。请注意,可能会有一个以上的任务在等待同一事件的发生,则这种情况下内核会根据以下原则之一发信号给相应的任务。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 信号
    +关注

    关注

    11

    文章

    2789

    浏览量

    76727
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8331

原文标题:【小知识】信号与信号量介绍

文章出处:【微信号:PCBTech,微信公众号:EDA设计智汇馆】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    实时操作系统FreeRTOS信号量应用

    二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常相似,但还是有细微差别,互斥信号量拥有优先级继承机制,二值信号没有。因此二值信
    的头像 发表于 06-08 09:24 3697次阅读
    实时操作系统FreeRTOS<b class='flag-5'>信号量</b>应用

    FreeRTOS信号量使用教程

    信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步, FreeRTOS中信号量又分为二值信号量、 计数型信号量、互斥
    的头像 发表于 12-19 09:22 3199次阅读
    FreeRTOS<b class='flag-5'>信号量</b>使用教程

    FreeRTOS信号量介绍

    还是有一些细微的差别,互斥信号量拥有优先级继承机制,二值信号量没有优先级继承。因此二值信号另更适合用于同步(任务与任务或任务与中断的同步),而互斥信号量适合用于
    发表于 01-27 07:28

    信号量机制怎么理解

    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放
    发表于 11-14 09:23 2.6w次阅读
    <b class='flag-5'>信号量</b>机制怎么理解

    你了解Linux 各类信号量

    内核信号量与用户信号量,用户信号量分为POXIS信号量和SYSTEMV信号量,POXIS信号量
    发表于 05-04 17:19 2515次阅读
    你了解Linux 各类<b class='flag-5'>信号量</b>?

    Linux 多线程信号量同步

    直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。V操作:如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程;如果没有进程等待它,则释放一个资源(即信号量值加1)。模型
    发表于 04-02 14:47 395次阅读

    uCOS信号量源码的详细资料分析

    本文档的主要内容详细介绍的是uCOS信号量源码的详细资料分析。 信号量相关的函数 创建一个信号量,参数是信号量的初始值,创建成功返回值是
    发表于 06-17 17:38 7次下载
    uCOS<b class='flag-5'>信号量</b>源码的详细资料分析

    Linux信号量(2):POSIX 信号量

    上一章,讲述了 SYSTEM V 信号量,主要运行于进程之间,本章主要介绍 POSIX 信号量:有名信号量、无名信号量。 POSIX
    的头像 发表于 10-29 17:34 706次阅读

    ThreadX(六)------信号量semaphore

    信号量semphere概述
    发表于 12-28 19:26 7次下载
    ThreadX(六)------<b class='flag-5'>信号量</b>semaphore

    FreeRTOS的二值信号量

    FreeRTOS中的信号量是一种任务间通信的方式,信号量包括:二值信号量、互斥信号量、计数信号量,本次实验只使用二值
    的头像 发表于 02-10 15:07 1501次阅读

    Free RTOS的计数型信号量

    上篇讲解了二值信号量,二值信号量只能判断有无,而不能确定事件发生的次数,因此我们为了确定事件的次数引入了计数型信号量
    的头像 发表于 02-10 15:29 1021次阅读
    Free RTOS的计数型<b class='flag-5'>信号量</b>

    Free RTOS的互斥信号量

    二进制信号量和互斥非常相似,但确实有一些细微的区别。互斥体包含优先级继承机制,而二进制信号量没有。这使得二进制信号量成为实现同步(任务之间或任务与中断之间)的更好选择,互斥体成为实现
    的头像 发表于 02-10 15:36 1171次阅读
    Free RTOS的互斥<b class='flag-5'>信号量</b>

    使用Linux信号量实现互斥点灯

    信号量常用于控制对共享资源的访问,有计数型信号量和二值信号量之分。初始化时信号量值大于1的,就是计数型信号量,计数型
    的头像 发表于 04-13 15:12 803次阅读
    使用Linux<b class='flag-5'>信号量</b>实现互斥点灯

    FreeRTOS四种信号量详细介绍

    与任务或任务与中断的同步),而互斥信号量适合用于简单的互斥访问。 和队列一样,信号量 API 函数允许设置一个阻塞时间,阻塞时间是当任务获取信号量的时候由于
    的头像 发表于 07-06 17:14 2580次阅读

    Semaphore信号量概念及其介绍

    信号量即Semaphore。信号量主要用于控制和保护任务对特定资源的访问。
    的头像 发表于 07-25 15:40 1725次阅读
    Semaphore<b class='flag-5'>信号量</b>概念及其<b class='flag-5'>介绍</b>