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

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

3天内不再提示

Linux信号事件发生的两个来源

FPGA之家 来源:嵌入式软件开发交流 作者:young 2021-06-18 15:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是信号

信号可以理解为软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是差不多的。信号是异步的,一个进程不必通过任何操作来等待信号的到达。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。

谁来产生信号

信号事件的发生有两个来源:

(1) 硬件来源,比如我们按下ctrl+c,会产生SIGINT信号。

(2) 软件来源,比如我们调用alarm函数来产生SIGALRM信号。

常用信号

Linux信号的编号是从1-64,其中32和33空缺,没有对应的信号。通过kill -l 可查看所有的信号。

1~31之间的信号叫做不可靠信号, 信号可能会丢失, 也叫做非实时信号。

34~64之间的信号叫做可靠信号, 信号不会丢失, 也叫做实时信号。

信号响应方式

信号有如下三种响应方式:

(1) 忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即 SIGKILL 及 SIGSTOP。

(2) 捕捉信号,定义信号处理函数,当信号发生时,执行相应的自定义处理函数。

(3) 执行缺省操作,Linux 对每种信号都规定了默认操作。

信号处理过程

信号处理的大致流程如下:

信号产生 -》 信号注册 -》 信号在进程中注销 -》 信号处理函数执行完毕

我们主要讲一下“信号注册” 和“信号在进程中注销”。其他两个都比较好理解。

信号注册指的是在目标进程中注册,该目标进程中有未决信号的信息。啥叫未决信号呢,实际执行信号的处理动作称为信号递达,信号从产生到递达之间的状态,称为信号未决。

先来看一下对应的结构体:

struct sigpending{ //未决信号链的头部与尾部 struct sigqueue *head, *tail; //未决信号集 sigset_t signal;};

struct sigqueue{ struct sigqueue *next; //信号所携带的信息 siginfo_t info;}

信号注册的过程就是将信号值加入到未决信号集siginfo_t中,将信号所携带的信息加入到未决信号链的某一个sigqueue中去。

因此,对于可靠的信号,可能存在多个未决信号的sigqueue结构,对于每次信号到来都会注册。而不可靠信号只注册一次,只有一个sigqueue结构。

只要信号在进程的未决信号集中,表明进程已经知道这些信号了,还没来得及处理,或者是这些信号被阻塞。

信号在进程中注销是指进程已经接收到信号了,会在链表中移除。在进程的执行过程中,每次从系统调用或中断返回用户空间的时候,都会检查是否有信号没有被处理。如果这些信号没有被阻塞,那么就调用相应的信号处理函数来处理这些信号。可靠信号和不可靠信号的处理有所不同:

不可靠信号:由于不可靠信号在未决信号链中只有一个sigqueue结构,因此将它删除的同时,也会将信号从未决信号集中删除。

可靠信号:由于可靠信号在未决信号链中可能有多个sigqueue结构,如果只有一个,也将信号从未决信号集中删除掉。如果有多个则不从未决信号集中删除信号,注销完毕。

原文标题:Linux信号及工作原理

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    88

    文章

    11628

    浏览量

    217980
  • 信号
    +关注

    关注

    11

    文章

    2902

    浏览量

    79672

原文标题:Linux信号及工作原理

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash?

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash,有一norflash被模拟成U盘,会在中断中操作spi。
    发表于 09-26 06:18

    LMK03328 具有两个独立 PLL 的超低抖动时钟发生器系列技术手册

    LMK03328器件是一款超低噪声时钟发生器,具有两个集成VCO的小数N频率合成器、灵活的时钟分配和扇出,以及存储在片内EEPROM中的引脚可选配置状态。该器件可为各种多千兆串行接口和数字器件生成
    的头像 发表于 09-14 09:37 817次阅读
    LMK03328 具有<b class='flag-5'>两个</b>独立 PLL 的超低抖动时钟<b class='flag-5'>发生</b>器系列技术手册

    基本半导体连获两个行业奖项

    近日,基本半导体凭借在碳化硅模块领域的突出表现,连获“国产SiC模块TOP企业奖”和“年度优秀功率器件产品奖”两个行业奖项。
    的头像 发表于 09-05 16:31 890次阅读

    看到STM8L152用两个IO用两个或非门检测两个通断,是什么原理呢?

    图中两个按键开关是两个干簧管,为什么不直接对GND设计来检测这个干簧管通断呢? 这样设计的原理是什么?
    发表于 06-12 06:25

    当CY7C65215在两个通道上配置为 SPI 和 I2C 时,能否在Linux系统中看到两个设备?

    我的客户想知道,当 CY7C65215 在两个通道上配置为 SPI 和 I2C 时,他能否在 Linux 系统中看到两个设备。
    发表于 05-26 06:27

    ADAU1787四ADC、两个DAC、带音频DSP的低功耗编解码器技术手册

    ADAU1787 是一款具有四输入和两个输出的编解码器,其中整合了两个数字信号处理器 (DSP)。从模拟输入到 DSP 内核再到模拟输出的路径已针对低延迟进行优化,适用于噪声消除耳机。通过加入少量无源组件,ADAU1787 提
    的头像 发表于 05-12 14:57 1152次阅读
    ADAU1787四<b class='flag-5'>个</b>ADC、<b class='flag-5'>两个</b>DAC、带音频DSP的低功耗编解码器技术手册

    信号发生器输出方波的占空比调整技巧

    、工业自动化等领域,都能精准测试设备性能,助力研发与生产,是电子工程等领域不可或缺的工具。 1.2方波信号的概念与特性 方波信号是一种周期性波形信号,电压在两个电平间交替,特点是上升和
    的头像 发表于 04-02 11:57 1415次阅读
    <b class='flag-5'>信号</b><b class='flag-5'>发生</b>器输出方波的占空比调整技巧

    信号发生器互调失真测量:原理、方法与工程应用

    的关键指标,反映了多频信号通过非线性元件时产生的额外频率分量,可能导致系统频谱污染和性能下降。本文将深入探讨互调失真的成因、测量方法及其工程应用,为高精度信号测试提供技术参考。 1. 互调失真的定义与成因 互调失真(IMD) 指当两个
    的头像 发表于 03-14 12:03 932次阅读
    <b class='flag-5'>信号</b><b class='flag-5'>发生</b>器互调失真测量:原理、方法与工程应用

    请问DSP可以同时控制两个不同的RGB屏吗?

    如题,这种情况两个LCD的时钟信号和复位信号是不是都要分开?H和V信号可以共用?
    发表于 03-06 06:50

    ADS1198有两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗?

    最近在做这块芯片,看到有两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗,就是说CLK和SLCK能不能使用同一时钟信号?另外,关于
    发表于 02-07 06:28

    两个不同频率晶振靠的近会怎样

    晶振的振荡本质上是一种机械振动(在压电晶体层面)。当两个晶振靠得很近时,它们的机械振动可能会相互影响。一晶振的振动可能会通过电路板或者外壳等介质传递给另一晶振,从而改变另一晶振的
    的头像 发表于 01-20 13:55 2018次阅读
    <b class='flag-5'>两个</b>不同频率晶振靠的近会怎样

    两个晶体管能如何实现高效正弦波振荡?

    在电子设计中,振荡器是一重要的组件,广泛应用于信号发生、无线通信和音频设备中。一般来说,设计一稳定的正弦波振荡器往往需要运算放大器或复杂的电路结构。然而,是否可以仅用
    的头像 发表于 01-07 12:00 950次阅读
    <b class='flag-5'>两个</b>晶体管能如何实现高效正弦波振荡?

    使用ADS1248采样路单端信号遇到的两个疑问求解答

    ,而ADS1248这边又还有3路差分信号输入没有利用,所以准备使用1248来采样这路单端信号。现在我有两个疑问,还请帮我解答一下。1、之前设计的是
    发表于 12-31 06:22

    ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串扰现象。如,我单独使用2通道,则转换后数值稳
    发表于 12-30 07:41

    DDS信号发生器支持单通道50正弦载波!#信号发生器 #AWG #DDS

    信号发生
    虹科卫星与无线电通信
    发布于 :2024年12月23日 18:03:30