13 - 信号可靠性剖析

news2024/11/17 20:32:46

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

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

文章目录

  • 1. 信号的可靠性
    • 1.1 问题
    • 1.2 信号查看(kill -l)
    • 1.3 信号的分类
      • 1.3.1 不可靠信号(传统信号)
      • 1.3.2 可靠信号(实时信号)
      • 1.3.3 信号小知识补充
    • 1.4 不可靠信号 vs 可靠信号
    • 1.5 一些注意事项
    • 1.6 信号可靠性实验设计
    • 1.7 编程实验:信号可靠性实验
  • 2. 基于信号的进程间通信实验
    • 2.1 状态设计
    • 2.2 数据发送进程关键实现
    • 2.3 数据接收进程关键实现
    • 2.4 编程实验:进程间通信实验

1. 信号的可靠性

1.1 问题

  • 基于信号发送的进程间通信方式可靠吗???

1.2 信号查看(kill -l)

在这里插入图片描述

1.3 信号的分类

1.3.1 不可靠信号(传统信号)

  • 信号值在 [1, 31] 之间的所有信号

1.3.2 可靠信号(实时信号)

  • 信号值在[SIGRTMIN, SIGRTMAX],即: [34, 64]
    SIGRTMIN ==> 34
    SIGRTMAX ==> 64

1.3.3 信号小知识补充

  • 信号32与信号33(SIGCANCEL & SIGSETXID)被 NPTL线程库 征用
    • (征用意指被明确赋予了含义)
  • NPTL ==> Native Posix Threading Library
    • 即:POSIX线程标准库,Linux可以使用这个库进行多线程编程
  • 对于Linux内核,信号32是最小的可靠信号
  • SIGRTMIN在signal.h中定义,不同平台的linux可能不同(arm linux)

1.4 不可靠信号 vs 可靠信号

  • 不可靠信号
    • 内核 不保证 信号可以递送到目标进程(内核对信号状态进行标记)
    • 如果信号处于未决状态(从信号产生到信号被进程接收之间的状态),并且相同信号被发送,内核丢弃后续相同信号
    • 进程只知道一个不可靠信号是否递达,没有办法知道这个不可靠信号递达了几次

在这里插入图片描述

  • 可靠信号
    • 内核维护信号队列,未决信号位于队列中,因此 信号不会被丢弃
    • 严格意义上,信号队列 有上限,因此不能无限制保存可靠信号

1.5 一些注意事项

  • 不可靠信号的默认处理行为可能不同(忽略,结束)
  • 可靠信号的默认处理行为都是结束进程
  • 信号的可靠性由信号数值决定,与发送方式无关
  • 信号队列的上限可通过命令设置
    • 查询信号队列上限:ulimit -i
    • 设置信号队列上限:ulimit -i 10000

1.6 信号可靠性实验设计

  • 目标:验证信号可靠性(不可靠信号 or 可靠信号)
  • 方案:对目标进程“疯狂”发送N次信号,验证信号处理函数调用次数是怎么样的
  • 预备函数:
int sigaddset(sigset_t* set, int signum);
int sigdelset(sigset_t* set, int signum);
int sigfillset(sigset_t* set);
int sigemptyset(sigset_t* set);
int sigprocmask(int how, const sigset_t* set, sigset_t* oldset);

在这里插入图片描述

1.7 编程实验:信号可靠性实验

【参看链接】:13 - 信号可靠性剖析 / 13 / 00信号可靠性实验

在这里插入图片描述

  1. 不可靠信号

在这里插入图片描述

  1. 可靠信号

在这里插入图片描述

  1. ulimit

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

2. 基于信号的进程间通信实验

  • 发送端:A 进程将 TLV 类型的数据 通过可靠信号传递给B进程
    • TLV:(type, length, value)
    • 由于可靠信号的限制,每次传输 4字节数据
  • 接收端:B进程首先接收4字节数据(type或type+length)
    • 根据接收到的length信息,多次接收后续的字节数据
    • 每次只能接收4字节数据,设计层面需要进行 状态处理

2.1 状态设计

在这里插入图片描述

2.2 数据发送进程关键实现

在这里插入图片描述

2.3 数据接收进程关键实现

在这里插入图片描述

2.4 编程实验:进程间通信实验

【参看链接】:13 - 信号可靠性剖析 / 13 / 01进程间通信

在这里插入图片描述

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

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

相关文章

模拟仿真 OSC振荡器

用五个反相器做一个环形振荡器 跑瞬态仿真 发现并未振荡 手动添加起振 成功振荡 将上面的图像send to calculate,调用频率函数freq 可以看到振荡频率为2.5GHZ左右 如果想要降低振荡频率,可以在每个反相器后加寄生电容或者增大反相器尺寸,这…

ProGuard详解 - Java代码混淆

(29条消息) ProGuard详解 - Java代码混淆_黎陌MLing的博客-CSDN博客

【算法题】动态规划基础阶段之 爬楼梯 和 杨辉三角

动态规划基础阶段之爬楼梯和杨辉三角 前言二、爬楼梯2.1、思路2.2、代码实现 三、杨辉三角3.1、思路3.2、代码实现 四、杨辉三角2(进阶)总结 前言 动态规划(Dynamic Programming,简称 DP)是一种解决多阶段决策过程最优…

脱机下载程序

一,脱机下载工具 Mini-Pro V2 版 二,配置stm32CubeIDE 生成hex文件 三,脱机下载步骤 1,连接设备,选择芯片 2, 添加固件。 3,选项字节。 4,生成镜像文件,这个文件包含了…

Mysql索引失效情况及避免方式【案例分析】

索引失效情况及避免方式 建表数据sql CREATE TABLE staffs( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(24)NOT NULL DEFAULT COMMENT姓名, age INT NOT NULL DEFAULT 0 COMMENT年龄, pos VARCHAR(20) NOT NULL DEFAULT COMMENT职位, add_time TIMESTAMP NOT NULL DEF…

json数据、日期数据的参数传递及响应

文章目录 1.json数据传参1.1 postman如何发送json数据1.2 发送json数据,控制器如何接收 2. 日期类型参数传递2.1 日期类型参数如何指定格式 3.响应数据3.1 ResponseBody注解的使用 1.json数据传参 首先在maven中添加json坐标 1.1 postman如何发送json数据 1.2 发…

00后测试用例写的实在是.......

实在是太强了,00后测试用例写的比我还好,简直是无地自容… 经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 如何编写测试用例? 作为一个测试新人…

以太网频谱

Speed频谱100BASE-TX1GBASE-T2.5GBASE-T5GBASE-T10GBASE-T

网络程序——定时器

网络程序还有一种需要处理的常用事件——定时事件。服务器程序通常管理着众多定时事件,因此如何有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将…

递归 到底应该怎么理解?怎么写递归的代码

今天和大家一起来讨论一下递归: 我们尽可能使按照解题的思路来讨论递归,对于这个在计算机内部具体是怎样实现的,我们不做深入讨论,这里仅仅是简单的讨论一下: 求1 ~ n序列的和:1 2 3 ... n&#xff1…

pwn学习day1——ELF文件结构

0x01 介绍 ELF(Executable and Linkable Format)是一种常见的可执行文件和共享库格式,其结构如下: ELF header:包含了 ELF 文件的基本属性信息。Program header table:描述了程序在内存中的加载情况&…

Gogs私服搭建

1. Gogs介绍 官网地址:https://gogs.io 文档地址:https://gogs.io/docs Gogs,全称为Go Git Service,是一个基于 Go 语言开发的Git服务。它提供了一个类似于GitHub的界面和功能,允许您在自己的服务器上搭建私有的Git仓库…

幂律智能联合智谱AI发布千亿参数级法律垂直大模型PowerLawGLM

前言 2023年是当之无愧的“大模型之年”,据瑞银集团的一份报告显示,ChatGPT推出仅仅两个月后,月活用户已经突破了1亿,成为史上用户增长速度最快的消费级应用程序。 在炙热的大模型赛道里,基于中文大模型的发布也是层…

二叉树OJ题:LeetCode--104.二叉树的最大深度

朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第104道二叉树OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 人…

SAP从入门到放弃系列之工艺路线-子工序-Part2

文章目录 概述使用场景子工序内容1、 维护工序控制码2、维护子工序的工资类型3、作业标准值4、用户定义字段5、通过维护子工序的作业类型数据后,点击汇总标准值,工序的作业类型值可以通过子工序进行累计6、可以设置子工序是否带入生产订单 注意事项&…

selenium通过xpath定位text换行的元素

DOM元素(该元素是换行的,不能通过普通xpath定位): 可使用下面xpath定位该div //div[./text()/following-sibling::text()"点" and ./text()"5"] 解释一下就是:定位“子节点的text是[5] 且 子节点…

自然语言处理(概念)

1、 RNN模型简介 1.2传统RNN模型 2、LSTM模型 3、GRU模型 5、注意力机制 6、人名分类器 7 、BERT 8、Transformer 的结构是什么样子的? 各个子模块有什么作用? 8.1 Encoder模块 8.2 Decoder模块 8.3 Transformer 结构中的Decoder端具体输入是什么&#…

C# wpf 附加属性实现任意控件拖动调整大小

摘自这里 https://blog.csdn.net/u013113678/article/details/121719278 调试效果如下 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Syst…

vue修改数据后页面不重新渲染

使用vue&#xff0c;遇到几次修改了对象的属性后&#xff0c;页面并不重新渲染 一、直接添加属性的问题 <template><div><p v-for"(value,key) in item" :key"key">{{ value }}</p><button click"addProperty">…