当前位置: 首页 > news >正文

linux信号done

linux信号done

  • 1 内核态深入理解
  • 2 重谈信号捕捉
  • 3 信号捕捉的操作
    • 3.1 sigaction
  • 4 可重入函数
  • 5 volatile
  • 6 SIGCHLD(选学了解)

1 内核态深入理解

(1)上一章我们已经了解了当我们开启电脑时,OS是首先被加载到内存中的软件,这里我们谈论的内存为4GB,其中1GB左右为内核区,3GB为用户区,用户区有用户级页表,内核区有内核级页表,对于内核区我们一般只关心系统调用。

(2)我们关心系统调用的地址吗?
---- 不关心,我们只关心系统调用号,我们调用任何函数(库,系统调用)都是在自己的进程地址空间中调用的,因为内核级页表有且只有一份,所以无论OS如何切换进程,都能找到一个OS

(3)虽然我们在用户区可以随意访问自己的代码和数据,但是当我们想要访问内核区时,必须由用户态切换为内核态(因为无论在哪个进程中OS的代码和数据在内核区(3–4GB区),如果我们直接使用汇编修改寄存器内的值那么不就可以直接访问OS吗?所以OS做了一定的预防)

(4)不管是通过哪一个进程的地址空间进入内核,都是通过软中断进入操作的!

(5)其实我们处理哪一个状态不是由处在内核页表、内核代码还是用户代码来决定的,本质上是由CPU来决定的,CPU中有一个寄存器(C-S段寄存器),其中由一个代码段地址,它有一个标识位(取值叫做CPL),0(内核),3(用户态),linux只用0,3这两个数字,其他OS不一定

用户如何进入内核态?
1、时钟/外设中断
2、异常
3、陷阱(int 0x80)

(7)结论

在这里插入图片描述

2 重谈信号捕捉

在这里插入图片描述

(1)信号捕捉方法执行的时候,为什么要做权限切换(内核和用户),直接内核做不就行了吗?
---- 这里的handler如果是默认和忽略还好,但是handler可以由用户自定义,万一用户在代码里有一些损害OS的行为,OS就会被破坏,有安全风险

(2)信号处理完只能从内核返回(一个函数要想运行完回到另一个函数,必须要有调用关系)

3 信号捕捉的操作

3.1 sigaction

在这里插入图片描述

demo:

在这里插入图片描述

1、在处理信号期间有没有可能陷入内核?如果在陷入期间再来一个该信号,是不是会导致该方法不断递归,这样就会栈溢出(OS不允许信号处理方法嵌套,当某一个信号正在被处理,OS会自动把对应信号的block位置1,信号处理完成自动解除)

2、sa_mask:自定义屏蔽信号

在这里插入图片描述

3、pending位图是在执行信号处理方法之前清0,还是在执行完之后清0?
---- 执行之前清0,因为如果执行完之后清0的话,我们分不清该信号是执行该处理方法之前的,还是该信号在处理中又发送的

4 可重入函数

在这里插入图片描述

1、一个函数,被两个以上的执行流同时进入(重入)

在这里插入图片描述

2、若是由于重入出问题那么该函数是不可重入函数,否则为可重入函数

如果⼀个函数符合以下条件之⼀则是不可重⼊的:
• 调⽤了malloc或free,因为malloc也是⽤全局链表来管理堆的。
• 调⽤了标准I/O库函数。标准I/O库的很多实现都以不可重⼊的⽅式使⽤全局数据结构。

5 volatile

在这里插入图片描述

6 SIGCHLD(选学了解)

在这里插入图片描述

http://www.dtcms.com/a/394565.html

相关文章:

  • BeanUtils.copyProperties 映射规则详解
  • 物联网 frid卡控制
  • LeetCode刷题记录----322.零钱兑换(Medium)
  • 2015/07 JLPT听力原文 问题四
  • Redis集群实验
  • 昇腾生态双支柱:MindSpore 与 CANN 的全栈技术解析
  • YOLO系列——实时屏幕检测
  • 牛客算法基础noob49 上三角矩阵判定
  • autosar 中OS模块理解
  • 通俗范畴论17.2 向量空间的对偶与双对偶
  • huggingface_hub 安装部署问题汇总
  • 在我的Java项目中为什么使用AllArgsConstructor注解注入的方式启动报错了:
  • π0:一个 VLA 流匹配模型用于通用机器人控制(又称 pi0)
  • Information theorem-Entropy
  • 编译原理实验报告——词法分析程序
  • 整体设计 完整的逻辑链条 之4 认知逻辑视角 —— 前序驱动的认知演进体系 之2
  • C/C++正则表达式PCRE2库
  • 基于python大数据的声乐信息分类评测系统
  • 永磁同步电机无速度算法--改进型超螺旋滑模观测器
  • Linux0.12的中断处理过程源码分析
  • 进程控制(Linux)
  • 【C++】——string类的使用(详细讲解)
  • 借助 Amazon ECS 全新的内置蓝绿部署功能,加速安全的软件发布进程
  • 【脑电分析系列】第24篇:运动想象BCI系统构建:CSP+LDA/SVM与深度学习方法的对比研究
  • 【论文速递】2025年第22周(May-25-31)(Robotics/Embodied AI/LLM)
  • MySQL 5.7 多实例部署完整指南(基于二进制包)
  • Git的使用——Git命令、密钥/私钥、文件推送/提交、分支增删改查、文件回滚、.gitignore文件忽略
  • [已更新]2025华为杯D题数学建模研赛D题研究生数学建模思路代码文章成品:低空湍流监测及最优航路规划
  • [C++类的默认成员函数——lesson5.构造函数析构函数]
  • 第二十七章 ESP32S3 INFRARED_TRANSMISSION 实验