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

【Linux】信号捕捉

目录

  • 信号捕捉
    • 1.用户态与内核态
      • 1.1关于内核空间与内核态:
      • 1.2关于用户态与内核态的表征:
    • 2.信号捕捉过程

信号捕捉

1.用户态与内核态

用户态:执行用户代码时,进程的状态
内核态:执行OS代码时,进程的状态

1.1关于内核空间与内核态:

进程地址空间分为用户空间(3G)和内核空间(1G),不同进程的内核空间是相同的,通过同一张内核级页表映射到物理内存,当调用系统调用接口或时间片到了需要执行进程切换逻辑时,CPU会访问内核空间,执行相应的OS的代码,本质上还是在进程的地址空间内跳转。

1.2关于用户态与内核态的表征:

在CPU中有一个叫CR3的寄存器,保存了当前进程所使用的虚拟地址空间的页目录地址以及其他标志位,用来表征执行级别,比如在执行OS提供的系统调用时,CR3中的执行级别会先被修改为内核态,执行完从系统调用返回时又会将其设置为用户态,据此CPU即可根据执行级别决定是否执行内核空间和用户空间的访问请求,确保了用户不能随意访问OS的代码和数据,只能借由OS提供的系统调用接口进行间接访问。

2.信号捕捉过程

由于时间片到了或者系统调用,进程下陷到内核 -->
进入内核先完成当前优先级更高的任务 -->
执行完任务后通过内核空间访问进程PCB -->
检测PCB中的信号保存的三张表(block, pending, handler),依次检测一个信号 -->
如果方法为默认或忽略,直接处理,若为自定义,则进入用户态执行捕捉方法 -->
执行完毕,通过特定系统调用 sigreturn 回到内核态 -->
通过 sys_sigreturn(),检查陷入内核时的上下文保护并恢复,跳转到进入内核的位置继续执行后续操作 -->

http://www.lryc.cn/news/112351.html

相关文章:

  • 超详情的开源知识库管理系统- mm-wiki的安装和使用
  • 安卓:UDP通信
  • clickhouse安装
  • Cpp学习——string(2)
  • python进阶编程
  • 算法练习--leetcode 链表
  • Android性能优化—Apk瘦身优化
  • 前端主题切换方案——CSS变量
  • Java8 list多属性去重
  • kafka-保证数据不重复-生产者开启幂等性和事务的作用?
  • [AI in security]-214 网络安全威胁情报的建设
  • Javaweb学习(2)
  • leetcode410. 分割数组的最大值 动态规划
  • C函数指针与类型定义
  • 最新2024届【海康威视】内推码【GTK3B6】
  • 边写代码边学习之LSTM
  • Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)
  • 《MySQL高级篇》十五、其他数据库日志
  • 【Linux】【预】配置虚拟机的桥接网卡+nfs
  • 【Android】Retrofit2和RxJava2新手快速上手
  • 1.4 Nacos注册中心
  • AOJ 2200 Mr. Rito Post Office 最短路径+动态规划+谨慎+思维
  • 红米电视 ADB 安装 app 报错 failed to authenticate xxx:5555
  • Linux 下设置开机自启动的方法
  • MySQL常见问题处理(三)
  • maven中常见问题
  • vue2中bus的使用
  • 实证研究在机器学习中的应用
  • IO进程线程day8(2023.8.6)
  • 【5G NR】逻辑信道、传输信道和物理信道的映射关系