SylixOS信号系统(2)

SylixOS 经得起检验的国产操作系统 (五) 本篇开始介绍“信号系统”、“IO系统”以及“标准设备”。详细信息请访问SylixOS官网:http://www.sylixos.com。 阅读详情

信号机制原理

关键数据结构

POSIX标准定义了sigset_t类型来定义一个信号集,然而sigset_t类型在不同的系统可能有不同的定义方式,因此去猜测sigset_t类型是不明确的,在SylixOS中,将sigset_t定义成了unsigned long long型,也即是一个64位的数据类型,每一位代表了一个信号,最高位不被使用。
SylixOS信号机制的实现离开不了下面几个关键数据结构;

1. 信号上下文结构
typedef struct __sig_context {
    sigset_t              SIGCTX_sigsetSigBlockMask;       /*  当前信号屏蔽位              */
    sigset_t              SIGCTX_sigsetPending;            /*  当前由于被屏蔽无法运行的信号 */
    sigset_t              SIGCTX_sigsetKill;               /*  由 kill 发送但被屏蔽的信号  */

    struct sigaction      SIGCTX_sigaction[NSIG];          /*  所有的信号控制块            */
    LW_LIST_RING_HEADER   SIGCTX_pringSigQ[NSIG];          /*  由于被屏蔽无法运行的信号排队*/
    stack_t               SIGCTX_stack;                    /*  用户指定的信号堆栈情况      */

    LW_CLASS_SIGWAIT     *SIGCTX_sigwait;                  /*  等待信息                    */

#if LW_CFG_SIGNALFD_EN > 0
    BOOL                  SIGCTX_bRead;                    /*  是否在读 signalfd           */
    sigset_t              SIGCTX_sigsetWait;               /*  正在等待的 sigset           */
    LW_SEL_WAKEUPLIST     SIGCTX_selwulist;                /*  signalfd select list        */
#endif
} LW_CLASS_SIGCONTEXT;

下面分析这个结构中个成员含义:

  • SIGCTX_sigsetSigBlockMask是线程的信号屏蔽字,1的位对应信号将被屏蔽而不递送;
  • SIGCTX_sigsetPending包含了因屏蔽而不被递送的信号;
  • SIGCTX_sigsetKill中1的位对应了应kill函数发送的信号,此类信号是不排队的;
  • SIGCTX_sigaction[NSIG]存放所有信号的控制结构,信号成功安装后将存放到这里;
  • SIGCTX_pringSigQ[NSIG]存放所有因为被屏蔽而不能递送且支持排队的信号,也就是非kil函数发送的信号;
  • SIGCTX_stack指向用户提供的堆栈;
  • SIGCTX_sigwait标示线程等待的信号信息;

最下面3个成员实现了signalfd标准设备,这里不做详细解释。
SylixOS中每一个线程对应了一个信号上下文,信号上下文记录对应了线程的信号信息,如线程等待什么信号,线程屏蔽了什么信号,哪些信号正在排队递送等。

2. 递送信号信息结构

每一种信号在递送到指定线程的时候,都需要一些关键的信息,如信号来源等,下面我们来讲解这种结构的详细信息。

typedef struct {
    LW_LIST_RING          SIGPEND_ringSigQ;                /*  环形链表                    */

    struct siginfo        SIGPEND_siginfo;                 /*  信号相关信息                */
    PLW_CLASS_SIGCONTEXT  SIGPEND_psigctx;                 /*  信号上下文                  */
    UINT                  SIGPEND_uiTimes;                 /*  被阻塞的次数                */

    INT                   SIGPEND_iNotify;                 /*  sigevent.sigev_notify       */
} LW_CLASS_SIGPEND;
  • SIGPEND_ringSigQ同一种信号将可能产生多次,如果是非kill函数发送将由此链表管理;
  • SIGPEND_siginfo包含了信号的信息,如信号名、信号来源、附加信号数据、用户信息等;
  • SIGPEND_psigctx回指向信号上下文结构;
  • SIGPEND_uiTimes信号被屏蔽期间产生了多次;
  • SIGPEND_iNotify信号通知类型,如通知、不通知等。
3. 信号控制信息结构

信号的每一次递送都讲被嵌入到一段堆栈空间中,当线程产生调度时,将处理这些内容,这些内容不但包含了堆栈的返回地址(线程被中断处的地址)还包含了信号的一些信息等,如信号安装函数。

typedef struct {
    PVOID                 SIGCTLMSG_pvStackRet;              /*  跳跃返回堆栈的地址          */
    INT                   SIGCTLMSG_iSchedRet;               /*  信号调度器返回值            */
    INT                   SIGCTLMSG_iKernelSpace;            /*  产生信号是的内核空间情况     */
                                                             /*  信号退出时需要返回之前的状态  */
    sigset_t              SIGCTLMSG_sigsetMask;              /*  信号句柄退出需要恢复的掩码   */
    struct siginfo        SIGCTLMSG_siginfo;                 /*  信号相关信息                */
    errno_t               SIGCTLMSG_iLastErrno;              /*  保存的原始错误号            */
} LW_CLASS_SIGCTLMSG;
  • SIGCTLMSG_pvStackRet包含被信号中断时的地址;
  • SIGCTLMSG_iSchedRet标识调度器是信号中断还是正常调度;
  • SIGCTLMSG_iKernelSpace内核空间情况;
  • SIGCTLMSG_sigsetMask信号之前的屏蔽字;
  • SIGCTLMSG_siginfo信号信息,如信号名、产生源等;
  • SIGCTLMSG_iLastErrno保存之前的errno值。

当信号处理函数完成返回后,内核将通过调用__sigReturn函数返回到被中断的地址处,并且在返回前,总会检查能够运行还没有运行的信号,这样避免了再次的堆栈开销。

4. 信号等待信息结构

下面的结构标识了线程等待信号的情况。

typedef struct __sig_wait {
    sigset_t              SIGWT_sigset;
    struct siginfo        SIGWT_siginfo;
} LW_CLASS_SIGWAIT;
  • SIGWT_sigset线程等待的信号集,1位对应了正在等待的信号;
  • SIGWT_siginfo是等待信号的信息。

sigwait函数、sigwaitinfo函数、sigtimedwait函数将关心这个结构。

DDS实现层深度解析:实时系统中的RTPS协议、内存与QoS硬核调优 DDS(Data Distribution Service)作为分布式实时系统的通信中间件,其核心价值在于将发布-订阅抽象模型落地为纳秒级确定性的二进制实现。它依托RTPS有线协议,在操作系统、CPU缓存、网络硬件与实时调度约束下完成协议栈映射、零拷贝传输、静态内存池分配及QoS语义到OS原语的精准翻译。技术关键点包括共享内存(SHM)替代UDP内核路径以降低延迟、缓存行对齐规避伪共享、RTPS报文精简优化处理耗时,以及基于CLOCK_TAI的时间戳统一机制。本文聚焦DDS implementations在 阅读详情

相关推荐

SylixOS功能点介绍

1.概述    SylixOS作为一款大型的国产实时操作系统,有着众多小的功能点,本文对SylixOS功能点和部分性能点做了一个总结,具体内容如下。2.SylixOS功能大纲    基于SylixOS的1.5.3的内核,SylixOS功能大纲如图 2.1所示。图 2.1 SylixOS功能大纲3.SylixOS功能大纲介绍    SylixOS作为抢占式多任务硬实时操作系统,具有的功能与特点经过整...

u013436633的博客 1953

SylixOS 信号发送、接收机制

SylixOS 可以通过 kill() 或 sigqueue() 向线程发送信号(向进程发送信号相当于发送给进程的主线程)。kill() 与 sigqueue() 的区别主要在发送信号的类型不一样,kill() 发送非排队信号,sigqueue() 发送排队信号。 kill() 中首先会调用 _doKill() 接口,在 _doKill() 中构建信号信息结构 struct siginfo 和 LW_CLASS_SIGPEND 结构,这里主要是保存信号值、信号产生源、发送信...

stone8761的专栏 437

海康SDK实战:如何从PS流中提取H264裸流并实现前端播放(附完整代码)

本文详细介绍了如何利用海康SDK从PS流中提取H264裸流,并构建无插件前端播放的完整链路。通过解析PS流结构、提取H264 ES流,结合WebSocket实时传输与WFS.js前端播放器,实现了低延迟、高可控性的视频流处理方案,为开发者提供了从数据源到前端渲染的实战代码与清晰指南。

weixin_29051811的博客 476

SylixOS 信号系统(3)

信号内部机制SylixOS的信号机制分为3类发送信号方法:kill类型、队列类型和事件类型,这3中类型分别由_doKill()、_doSigQueue()、_doSigEvent()函数实现,上层所有的发送信号函数都直接或者间接地通过调用这几个函数来实现,而这3个函数中,_doKill()设置信号源为SI_KILL、_doSigQueue()设置信号源为SI_QUEUE、_doSigEvent()设

flags_s的博客 887

【点云数据集】整理汇总(自用,更新ing)

涵盖了各种不同的城市场景:教堂、街道、铁路轨道、广场、村庄、足球场、城堡等等。邮件地址:dmich-request@graphics.stanford.edu,内容需包含:1. 您的姓名、头衔或职位,以及所在机构或隶属关系;license比较难获取,目前可获取的人员:(1)目前隶属于大学、工业研究实验室或其他主要机构的已发表过研究成果的研究人员;普林斯顿 ModelNet 项目的目标是为计算机视觉、计算机图形学、机器人技术和认知科学领域的研究人员提供全面、干净的物体 3D CAD 模型集合。

weixin_44392103的博客 797

WinCC7.5SP2生成PDF报表显示有错误或残缺的问题及解决方法

WinCC V7.5 SP2 自带的生成PDF报表功能异常。生成的PDF报表内容显示空白或有残缺。经测试后发现可以通过替换Adobe PDF Library库文件的方法解决该问题。

commandboy的博客 3659

SylixOS信号系统(1)

信号简介信号是一种软中断,用来通知进程或者线程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程或者线程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是一种异步通信机制,一个进程或者线程不必通过任何操作来等待信号的到达,事实上,进程或者线程也不知道信号到底什么时候到达。进程之间可以互相kill函数发送信号。内核也可以因为内部事件而给进程或者线程发送信号,通知进程或者线程

flags_s的博客 810

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

SylixOS 网络防火墙

SylixOS主动式网络防火墙简介

PCSean的博客 862

骑砍2霸主MOD开发(9)-游戏大地图(MapScene)

Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。

骑砍战团&霸主MOD开发 1623

【升级U8+】不能将值 NULL 插入列 ‘VT_ID‘,表 ‘VoucherItems‘;列不允许有 Null 值。

不能将值 NULL 插入列 ‘VT_ID’,表 ‘UFDATA_006_2012.dbo.VoucherItems’;列不允许有 Null 值。INSERT 失败。

努力不懈的为广大客户提供优质的产品与真诚、贴心、专业的服务! 517

SylixOS 系统初探

国产嵌入式硬实时操作系统 SylixOS 初体验 关于 SylixOS 详细了解请见:http://wiki.sylixos.com/index.php/%E7%B3%BB%E7%BB%9F%E7%AE%80%E4%BB%8B SylixOS是一款嵌入式硬实时操作系统,同其类似的操作系统,全球比较知名的还有VxWorks(主要应用于航空航天、军事与工业自动化领域)、RTEMS(起源于美国国防...

增阅笔记 1万+

10、高阶ΣΔ调制器设计与优化

本文深入探讨了高阶ΣΔ调制器的设计与优化技术,重点介绍了NTF零点优化方法,通过分散单位圆上的零点分布提升信噪失真比(SQNR)。文章分析了量化噪声耦合技术如何有效提高噪声整形阶数,并对比了CIFB、CIFF、CRFB和CRFF等不同架构的性能特点。同时,详细阐述了基于稳定性与性能权衡的设计流程,结合Schreier的Delta-Sigma Toolbox实现NTF综合与仿真验证。内容涵盖从理论推导到实际设计步骤,为高阶ΣΔ调制器的稳定性提升与性能优化提供了系统性指导。

tgb345678的博客 134

SylixOS 下的信号系统

信号是一种软中断,用来通知进程或者线程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程或者线程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是一种异步通信机制,一个进程或者线程不必通过任何操作来等待信号的到达,事实上,进程或者线程也不知道信号到底什么时候到达。进程之间可以互相 kill 函数发送信号。内核也可以因为内部事件而给进程或者线程发送信号,通知进程或者线程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。

日常学习记录 921

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

基于SylixOS的中断浅析

目  录 1.中断... 1 1.1           中断的定义... 1 1.2           中断的分类... 1 1.2.1    外部中断... 1 1.2.2    内部中断... 1 2. SylixOS下的中断浅析... 2 2.1           SylixOS信号系统... 2 2.2           SylixOS时间管理... 2

u013702699的博客 502

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【069】南京市“2020十项重大创新成果”重磅发布!翼辉SylixOS成功入选!

南京市“2020十项重大创新成果”重磅发布!翼辉SylixOS成功入选! 发布于2021年01月07日 2021年01月04日举行的南 京 市创新名城建设推进大会上,重磅发 布2021年市委一号文件《关于新发展阶段全面建设创新名城的若干政策措施》。在新年“第一会”上,南京市公布了创新名城建设十项重大创新成果,翼 辉“国产大型实时操作 系统的研发与应用”成功入选。 翼辉 SylixOS大型实时操作系统拥有完整自主知识产权,在航空航天、轨交、电力、自动化控制等领域,解决了工业操作系统“卡脖子”问题,已成功应

ScilogyHunter的博客 485

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

硬实时操作系统(Hard Real-Time OS)与软实时操作系统(Soft Real-Time OS)的区别

针对 FreeRTOS(代表软实时系统)和 SylixOS(代表硬实时系统)的具体对比分析,通过实际技术细节说明两者的差异。

bifudoph的博客 905

SylixOS下kill 15信号问题分析

1.适用范围 本文档适用于希望了解SylixOS下kill 15信号的工程师。2.SylixOS与Linux的现象差异2.1构建测试用例 构建一个简单的测试用例,主线程与子线程均运行20秒后结束,程序代码如程序清单 2.1所示:程序清单 2.1 构建测试用例void *fun(void *arg){int n = 0;while(n < 20) ...

weixin_34407348的博客 222

SylixOS的信号屏蔽浅析

1.信号介绍       信号是一种软中断,用于通过异步的方式对进程进行事件通知。信号分为实时信号和非实时信号,各个进程对于信号的处理方式不一,处理方式分为三类:忽略,捕捉,执行系统默认动作。进程可以选择屏蔽某个或某些信号。 2.信号屏蔽      SylixOS可以通过sigprocmask函数对某个信号集内的信号进行屏蔽。在信号被屏蔽的期间,进程对所屏蔽的大部分信号不会进行响应,只有解除

qq_16328735的博客 318

SylixOS网络性能测试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34310127的博客 216

SylixOS最小系统开发(一)

开发环境 操作系统:SylixOS 编程环境:RealEvo-IDE3.1.5 硬件平台:MPC8313E-RDB MPC8313E芯片介绍 MPC8313E是飞思卡尔(Freescale)基于 PowerPC-e300c3内核的系列芯片,MPC8313E-RDB采用的是MPC8313E处理器。 芯片具有 : 16KB I-Cache,16KB D-Cache,8MB NOR Fl

xiaoyaolanyun的博客 865

SylixOS 线程取消处理流程

概述 取消一个线程要确保该线程能够释放其所持有的锁、分配的内存,使整个系统保持一致性。线程取消的途径有两种:异步取消和延时取消。 异步取消:被取消线程收到取消信号后,立即死亡。该线程缩持有的资源可能得不到释放,这是一种非安全的线程取消方式。 延时取消:系统默认取消方式,是一种比较安全的线程取消机制,被取消线程取消时,只是设置取消点(ptcbDel-&gt;TCB_bCancelRequest)...

qq_29476813的博客 246

SylixOS网卡驱动框架

开发环境 操作系统:SylixOS操作系统 编程环境:RealEvo-IDE3.1 开发板:imx6q实验箱 技术实现 SylixOS 内核版本1.4.1的网卡驱动框架与之前的版本相比有了很大变化,最主要的就是由之前的netif结构体变成了现在了netdev结构体。这个版本的网卡驱动框架主要由以下几个部分组成。  网卡驱动框架:网卡驱动入口 在官方提供的imx6Q的BSP工程目录

PCSean的博客 697
上一篇: SylixOS信号系统(1)
下一篇: SylixOS 信号系统(3)
flags_s
博客等级 码龄11年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值