14 - 信号优先级与安全性

news2024/11/15 4:37:47

---- 整理自狄泰软件唐佐林老师课程

查看所有文章链接:(更新中)Linux系统编程训练营 - 目录

文章目录

  • 1. 信号优先级
    • 1.1 问题
    • 1.2 信号优先级的概念
    • 1.3 信号优先级实验设计
      • 1.3.1 发送端
      • 1.3.2 接收端
      • 1.3.3 编程实验:信号优先级实验
  • 2. 信号安全性
    • 2.1 再论信号处理
    • 2.2 信号安全性概念
    • 2.3 编程实验:信号安全性问题
    • 2.4 深入信号安全性
    • 2.5 问题
    • 2.6 思考

1. 信号优先级

1.1 问题

  • 对于 同一个进程,如果存在 两个不同的未决 实时信号(可靠信号),那么先处理谁?

1.2 信号优先级的概念

  • 信号的本质是一种 软中断(中断有优先级,信号也有优先级)
  • 对于 未决实时信号
    • 对于同一个未决实时信号,按照发送先后顺序递送给进程
    • 对于不同的未决实时信号,信号值越小优先级越高(优先递达目标进程)
  • 不可靠信号与可靠信号同时未决
    • 严格意义上,没有明确规定优先级
    • 实际上,Linux优先递送不可靠信号
  • 多个不可靠信号同时未决,优先递送谁?
    • 优先递送 硬件相关信号:SIGSEGV、SIGBUS、SIGILL、SIGTRAP、SIGFPE、SIGSYS
    • 优先递送 信号值小的不可靠信号

1.3 信号优先级实验设计

  • 目标:验证信号的优先级
  • 场景:不可靠VS不可靠;不可靠VS可靠;可靠VS可靠
  • 方案:对目标进程发送N次“无”序信号,验证信号递达进程的先后顺序
  • 预备函数:
int sigaddset(sigset_t* set, int signum);
int sigfillset(sigset_t* set);
int sigemptyset(sigset_t* set);
int sigprocmask(int how, const sigset_t set, sigset_toldset);
  • 需要思考的问题:
  • 如何使得多个信号同时未决,且以优先级方式递达进程?
  • 如何记录和对比信号的递达次序及发送次序?
  • 对于实验中涉及的不可靠信号,是否特殊考虑?
  • ……

1.3.1 发送端

在这里插入图片描述

1.3.2 接收端

在这里插入图片描述
在这里插入图片描述

1.3.3 编程实验:信号优先级实验

【参看链接】:14 - 信号优先级与安全性 / 00可靠信号优先级实验

在这里插入图片描述
在这里插入图片描述

【参看链接】:14 - 信号优先级与安全性 / 01所有信号优先级实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 信号安全性

2.1 再论信号处理

在这里插入图片描述

2.2 信号安全性概念

  • 什么是安全性?
    程序能够正确且无意外的按照预期方式执行
  • 信号处理的不确定性
    什么时候信号递达是不确定的 ==> 主程序被中断的位置是不确定的
  • 当信号递达,转而执行信号处理函数时,不可重入的函数不能调用
    – 不可重入函数:函数不能由超过一个任务(线程 )所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)

2.3 编程实验:信号安全性问题

下面的程序输出什么?为什么?

在这里插入图片描述

【参看链接】:14 - 信号优先级与安全性 / 02信号安全性实验/sigex.c

在这里插入图片描述在这里插入图片描述

2.4 深入信号安全性

  • 不要在信号处理函数中调用不可重入函数(如:使用了全局变量的函数)
  • 不要调用函数中存在临界区的函数(可能产生竞争导致死锁)

在这里插入图片描述

  • 不要调用malloc()和free()函数
  • 不要调用标准I/O函数,如:printf()函数(此前的实验中使用printf是不安全的)
  • ……

2.5 问题

  • 如何知道哪些函数是安全的?
  • man 7 signal-safety

在这里插入图片描述

2.6 思考

  • 如何编写信号安全的应用程序?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普通索引VS唯一索引

查询性能 假设 我们有一列int 类型的value 对它进行查询 (VALUE无重复字段) SELECT value FROM table where value 8; 如过是普通索引 找到value 8 的记录后还会继续找,直到碰到第一个不满足 k5 条件的记录。 如过是唯一索引 找到value 8这条记录就不会往下找…

百望股份高级PMO专家赵雅婧受邀为第十二届中国PMO大会演讲嘉宾

百望股份有限公司项目管理部高级PMO专家赵雅婧女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:PMO的组织建设与持续运营。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 众所周知&#xff…

图像全景拼接

TODO: 实现图片的全景拼接 流程: (1)检测左右2图片的SIFT关键特征点,并计算特征描述 (2)使用KNN检测来自左右2图的SIFT特征,进行匹配 (3)计算视角变换矩阵H&#xff0c…

目标跟踪基础:距离度量

本文来自公众号“AI大道理” —————— 距离度量在CV 、NLP以及数据分析等领域都有众多的应用。 距离度量可以当做某种相似度,距离越近,越相似。 在目标跟踪领域中,需要判断目标之间的距离或相似度,从而判断前后帧的目标是否…

Redis实战案例13-集群下的并发安全问题

在解决一人一单的问题上面,采用了悲观锁的方案,但是这种方案只适合单机情况,在集群的模式下就不适用了; 覆盖yaml文件中的端口号 修改nginx中conf,这样就可以反向代理到两个节点上去,轮询的负载均衡规则&am…

git bash---打开当前路径所在文件夹

0 Preface/Foreword 在Windows操作系统中使用git bash时,可以通过命令直接打开当前路径下的文件夹,命令如下 explorer .

MS17-010漏洞复现

官方描述:Microsoft Security Bulletin MS17-010 - Critical | Microsoft Learn漏洞描述: Microsoft Windows SMB Server远程代码执行漏洞,Microsoft Server Message Block 1.0 (SMBv1)服务器处理某些请求时,在实现上存在远程代码…

Mockplus Cloud - June 2023crack

Mockplus Cloud - June 2023crack 添加便签以澄清情节提要上的任何设计概念。 新的流程图工具直接在情节提要上可视化任何设计流程和过程。 添加了在发布到Mockplus Cloud时删除RP页面的功能。 添加设计注释时包括图像和链接。 添加了一个新的提示,用于在断开互联网…

MySQL练习题(1)

1,创建如下学生表 mysql> create table student( -> id int, -> name varchar(20), -> gender varchar(20), -> chinese int, -> math int, -> english int -> ); 插入如图数据 1-- 查询表中所有学生的信息 select *from student;2-- 查询表中所有学…

mysql语句练习题,创建表,枚举中文字符集设置,修改(update)

作业: 1.创建表: 创建员工表employee,字段如下: id(员工编号),name(员工名字),gender(员工性别),salary(员工薪…

厄尔尼诺,“烤热”新能源汽车市场?

在高温极端天气中,买新能源汽车的人变多了还是变少了? 7月4日,世界气象组织宣布,热带太平洋七年来首次形成厄尔尼诺条件,这可能导致全球气温飙升、破坏性天气和气候模式的出现。 注:1月底至6月初&#xff…

【离散数学】实践二 Floyd– Warshall算法

文章目录 目标原理设计与实现(代码快照以及代码)运行界面和结果截图结语 目标 给定一个距离矩阵,利用 Floyd– Warshall 算法编程(C语言)求任意两点之间的最短距离。 原理 求取多源最短路径常用Floyd算法&#xff0c…

支持向量机SVM代码详解——多分类/降维可视化/参数优化【python】

篇1:SVM原理及多分类python代码实例讲解(鸢尾花数据) SVM原理 支持向量机(Support Vector Machine,SVM),主要用于小样本下的二分类、多分类以及回归分析,是一种有监督学习的算法。基本思想是寻…

腾讯云对象存储的创建和S3 Browser的使用

简述 想想第一次接触对象存储的时候还是很兴奋的,同时也是一脸懵逼;然后开始网上疯狂的找资料,但因为客户当时给的文档写的是关于Amazon S3之类的,所以自以为的就只有Amazon S3这一家,接着开始查资料,经过一…

Spark学习---2、SparkCore(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))

1、RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫弹性分布式数据集,是Spark中对于分布式数据集的抽象。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.2 RDD五大特性 1、一组分区&#xff0…

Pyecharts 绘制各种统计图的案例

Pyecharts 绘制各种统计图的案例 基础使用 from pyecharts import options as opts from pyecharts.charts import Bar, Line, Pie, Scatter from pyecharts.faker import Faker# 柱状图示例 def bar_chart():x_data Faker.choose()y_data Faker.values()bar (Bar().add_xa…

simulink实战 建模 简单车辆动力学模型

Gmg Discrete-TimeIntegrator 离散时间积分器

CentOS 7 搭建 Impala 4.1.2 + Kudu 1.15.0 测试环境

安装依赖 这部分不过于详细介绍,如果有现成环境也可以直接拿来使用。 Java 下载 java 安装包,需要登录 oracle,请自行下载。 cd /mnt tar zxvf jdk-8u202-linux-x64.tar.gz配置环境变量到 /etc/bashrc,并执行 source /etc/bas…

关于深度学习图像数据增广

数据增广方法在广义上可以按照产生新数据的方式分为数据变形和数据过采样。由于操作简单,同时数据量上的需求远比现在要低得多,早期对数据增广的应用多是数据变形类方法。对于图像数据,基本的图像变换操作都属于数据变形类增广方法&#xff0…

Jvm参数设置-JVM(八)

上篇文章说了逃逸分析和标量,代码实例解析了内存分配先从eden区域开始,当内存不足的时候,才会进入s0和s1,发生yangGC,之后大内存会放入old,因为我们昨天程序运行了一个45M的对象,于是小对象在ed…